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
18 per_addr : in std_logic_vector (7 downto 0);
19 per_din : in std_logic_vector (15 downto 0);
20 per_en : in std_logic;
21 per_wen : in std_logic_vector (1 downto 0);
23 --per_irq_acc : in std_logic;
24 --per_irq : out std_logic;
25 per_dout : out std_logic_vector (15 downto 0);
31 signal clk : std_logic;
32 signal reset : std_logic;
34 constant period : time := 1 us;
35 constant offset : time := 2 us;
38 signal per_addr : std_logic_vector (7 downto 0);
39 signal per_din : std_logic_vector (15 downto 0);
40 signal per_en : std_logic;
41 signal per_wen : std_logic_vector (1 downto 0);
42 signal per_dout : std_logic_vector (15 downto 0);
44 signal txd : std_logic;
47 type test_record is record
50 data : std_logic_vector (15 downto 0);
51 addr : std_logic_vector (15 downto 0);
54 type test_array is array (positive range <>) of test_record;
56 constant test_vectors : test_array := (
57 ('1','1',X"0002",X"0100"),
58 ('1','0',X"0065",X"0102")
61 --------------------------------------------------------------------------------
103 variable vector : test_record;
110 wait for 3.1 * period;
113 for i in test_vectors'range loop
114 vector := test_vectors(i);
116 per_addr <= vector.addr (8 downto 1);
119 if (vector.word = '1') then
121 per_din <= vector.data (15 downto 0);
124 if (vector.addr(0) = '1') then
126 per_din <= vector.data (7 downto 0) & "00000000";
129 per_din <= "00000000" & vector.data (7 downto 0);