]> rtime.felk.cvut.cz Git - fpga/uart.git/blob - tb/tb_fifo.vhd
First prototype of receiver shift register.
[fpga/uart.git] / tb / tb_fifo.vhd
1 library ieee;
2 use ieee.std_logic_1164.all;
3 use ieee.std_logic_arith.all;
4 use ieee.std_logic_unsigned.all;
5
6 entity tb_fifo is
7 end tb_fifo;
8
9
10 architecture testbench of tb_fifo is
11
12   component fifo is
13     generic (
14       width : integer := 2
15     );
16     port (
17       clk      : in  std_logic;
18       reset    : in  std_logic;
19       we       : in  std_logic;
20       re       : in  std_logic;
21       d_in     : in  std_logic_vector (7 downto 0);
22       d_out    : out std_logic_vector (7 downto 0);
23       overflow : out std_logic
24     );
25   end component;
26   
27   signal clk   : std_logic;
28   signal reset : std_logic;
29   signal we       : std_logic;
30   signal re       : std_logic;
31   signal d_in     : std_logic_vector (7 downto 0) := (others => '0');
32   signal d_out    : std_logic_vector (7 downto 0);
33   signal length   : std_logic_vector (2 downto 0);
34   signal overflow : std_logic;
35   
36   constant period : time := 1 us;
37   constant offset : time := 2 us;
38   
39 begin
40   UUT : fifo port map (
41     clk      => clk,
42     reset    => reset,
43     we       => we,
44     re       => re,
45     d_in     => d_in,
46     d_out    => d_out,
47     overflow => overflow
48   );
49
50   process
51   begin
52     clk <= '0';
53     wait for offset;
54     
55     loop
56       clk <= '1';
57       wait for period/2;
58       clk <= '0';
59       wait for period/2;
60     end loop;
61   end process;
62
63
64   process
65   begin
66     reset <= '0';
67     wait for period;
68     reset <= '1';
69     wait for period;
70     reset <= '0';
71     wait;
72   end process;
73
74
75   process
76   begin
77     we <= '0';
78     re <= '0';
79     d_in <= "00000000";
80     
81     wait for 0.1 * period;
82
83     wait for 2 * period;
84     d_in <= "01000001";
85     we <= '1';
86     
87     wait for period;
88     d_in <= "01000010";
89     
90     wait for period;
91     d_in <= "01000011";
92     
93     wait for period;
94     d_in <= "01000011";
95     
96     wait for period;
97     d_in <= "01000101";
98     
99     wait for period;
100     we <= '0';
101     
102     wait for 2 * period;
103     re <= '1';
104     
105     wait for period;
106     re <= '0';
107     
108     wait;
109   end process;
110   
111 end testbench;
112