2 use ieee.std_logic_1164.all;
3 use ieee.std_logic_arith.all;
4 use ieee.std_logic_unsigned.all;
10 architecture testbench of tb_uart is
14 output_fifo_width : integer := 2;
15 input_fifo_width : integer := 2
19 per_addr : in std_logic_vector (7 downto 0);
20 per_din : in std_logic_vector (15 downto 0);
21 per_en : in std_logic;
22 per_wen : in std_logic_vector (1 downto 0);
24 per_irq_acc : in std_logic;
25 per_irq : out std_logic;
26 per_dout : out std_logic_vector (15 downto 0);
33 signal clk : std_logic;
34 signal reset : std_logic;
36 constant period : time := 200 ns;
37 constant offset : time := 2 * period;
40 signal per_addr : std_logic_vector (7 downto 0);
41 signal per_din : std_logic_vector (15 downto 0);
42 signal per_en : std_logic;
43 signal per_wen : std_logic_vector (1 downto 0);
44 signal per_dout : std_logic_vector (15 downto 0);
45 signal per_irq : std_logic;
47 signal rxd : std_logic;
48 signal txd : std_logic;
51 type per_test_record is record
54 data : std_logic_vector (15 downto 0);
55 addr : std_logic_vector (15 downto 0);
58 type per_test_array is array (positive range <>) of per_test_record;
59 type rxd_test_array is array (positive range <>) of std_logic_vector (7 downto 0);
61 constant addr_offset : std_logic_vector (15 downto 0) := X"0100";
63 constant per_test_vectors : per_test_array := (
64 ('1','1',X"0002",X"0000"),
65 ('1','0',X"0065",X"0002")
68 constant rxd_test_vectors : rxd_test_array := (
73 --------------------------------------------------------------------------------
119 -- Bus communication with UART peripherial (per_test_vector)
121 variable vector : per_test_record;
128 wait for 3.1 * period;
131 for i in per_test_vectors'range loop
132 vector := per_test_vectors(i);
133 vector.addr := vector.addr + addr_offset;
135 per_addr <= vector.addr (8 downto 1);
138 if (vector.word = '1') then
140 per_din <= vector.data (15 downto 0);
143 if (vector.addr(0) = '1') then
145 per_din <= vector.data (7 downto 0) & "00000000";
148 per_din <= "00000000" & vector.data (7 downto 0);
164 -- UART RXD signal generation (rxd_test_vector)
166 constant baud_period : time := 6 * period;
167 constant extra_wait : time := 2 * baud_period; -- waiting between frames
168 variable vector : std_logic_vector (7 downto 0);
172 wait for 4.1 * period;
174 for i in rxd_test_vectors'range loop
175 vector := rxd_test_vectors (i);
178 wait for baud_period;
180 for j in 7 downto 0 loop
182 wait for baud_period;
186 wait for baud_period;