-
Notifications
You must be signed in to change notification settings - Fork 0
/
SPI_tb.vhd
142 lines (116 loc) · 3.03 KB
/
SPI_tb.vhd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.numeric_std.ALL;
ENTITY SPI_tb IS
END SPI_tb;
architecture behv of SPI_tb is
component spi is
port ( clk : in std_logic;
buss : inout std_logic_vector(3 downto 0);
flags : inout std_logic_vector(6 downto 0);
miso : in std_logic;
sclk : out std_logic;
mosi : out std_logic;
ss : out std_logic
);
end component;
-- component GMEM is
-- port ( clk, rst : in STD_LOGIC;
-- --tile type
-- dbus_in : in STD_LOGIC_VECTOR ( 15 downto 0 );
-- --borde aldrig vara något annat än Z. ta bort?
-- dbus_out: out STD_LOGIC_VECTOR (15 downto 0);
-- -- fr mikrokontroller
-- should_read_dbus, should_write_dbus : in STD_LOGIC;
-- --fr Gadr
-- write_adr: in STD_LOGIC_VECTOR (9 downto 0);
-- -- fr SPI
-- read_adr: in STD_LOGIC_VECTOR (9 downto 0);
-- -- till SPI
-- tile_type_out: out STD_LOGIC_VECTOR (3 downto 0));
-- end component;
SIGNAL clk : std_logic := '0';
SIGNAL rst : std_logic := '0';
signal dbus : STD_LOGIC_VECTOR(15 downto 0);
signal tb_running : boolean := true;
-- signal seg : std_logic_vector(7 downto 0);
-- signal an : std_logic_vector(3 downto 0);
signal dflags : std_logic_vector(6 downto 0) := "0000000";
signal frombus : std_logic_vector(3 downto 0);
signal miso : std_logic := '0';
signal sclk : std_logic := '0';
signal mosi : std_logic := '0';
signal ss : std_logic := '0';
signal joystick_data : STD_LOGIC_VECTOR(0 to 79) := B"10101010_11001100_11100011_11110000_11111000_00011111_11101110_01000100_11111111_10000001";
begin
--tile_type <= "0000";
uut: SPI port map (clk => clk,
buss => dbus(3 downto 0),
flags => dflags,
miso => miso,
sclk => sclk,
mosi => mosi);
--gmem_adr => tile_adr);
-- testmem: GMEM port map ( clk, rst,
-- B"0000_0000_0000_0000",
-- dbus,
-- '0',
-- '0',
-- B"00000_00000",
-- tile_adr,
-- tile_type);
-- 100 MHz system clock
clk_gen : process
begin
while tb_running loop
clk <= '0';
wait for 5 ns;
clk <= '1';
wait for 5 ns;
end loop;
wait;
end process;
miso_generator : process(sclk)
variable i : integer := 0;
begin
if rising_edge(sclk) then
miso <= joystick_data(i);
if i = 79 then
i := 0;
else
i := i + 1;
end if;
end if;
end process;
-- miso_generator : process
-- variable i : integer;
-- variable j : integer;
-- begin
-- i := 0;
-- j := 0;
-- while tb_running loop
-- wait for 1280 * 24 ns;
-- for i in (0 to 4) loop
-- miso <= joystick_data(i);
-- if i = 39 then
-- i := 0;
-- else
-- i := i + 1;
-- end if;
-- wait for 1280 ns;
-- end loop;
-- end loop;
-- end process;
stimuli_generator : process
variable i : integer;
begin
-- Aktivera reset ett litet tag.
rst <= '1';
wait for 500 ns;
wait until rising_edge(clk); -- se till att reset släpps synkront
-- med klockan
rst <= '0';
report "Reset released" severity note;
wait;
end process;
end;