]> rtime.felk.cvut.cz Git - fpga/pwm.git/blob - tb/tb_pwm.vhd
e77fd47f1434d7d53f8952ed8dfb01756b093e9c
[fpga/pwm.git] / tb / tb_pwm.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_pwm is
7 end tb_pwm;
8
9 --------------------------------------------------------------------------------
10
11 architecture testbench of tb_pwm is
12
13   constant period : time := 250 ns;
14   constant offset : time := 0 us;
15
16
17   constant PWM_W   : integer := 2;
18   constant CNT_MAX : integer := 2**PWM_W - 2;
19
20   
21   signal clk      : std_logic;
22   signal reset    : std_logic;
23   signal din      : std_logic_vector (PWM_W-1 downto 0);
24   signal we       : std_logic;
25   signal pwm_cnt  : std_logic_vector (PWM_W-1 downto 0);
26   signal pwm_cyc  : std_logic;
27   signal pwm_out  : std_logic;
28
29 --------------------------------------------------------------------------------
30   
31 begin
32
33   uut : entity work.pwm
34     generic map (
35       PWM_WIDTH => PWM_W)
36     port map (
37       clk     => clk,
38       reset   => reset,
39       din     => din,
40       we      => we,
41       pwm_cnt => pwm_cnt,
42       pwm_cyc => pwm_cyc,
43       pwm     => pwm_out);
44   
45   counter_1 : entity work.counter
46     generic map (
47       WIDTH => PWM_W,
48       MAX   => CNT_MAX)
49     port map (
50       clk      => clk,
51       clk_en   => '1',
52       reset    => reset,
53       count    => pwm_cnt,
54       event_ow => pwm_cyc);
55
56   
57   CLK_PROC : process
58   begin
59     clk <= '0';
60     wait for offset;
61     
62     loop
63       clk <= '1';
64       wait for period/2;
65       clk <= '0';
66       wait for period/2;
67     end loop;
68   end process;
69
70
71   RSET_PROC : process
72   begin
73     reset <= '0';
74     wait for 1.5 * period;
75     reset <= '1';
76     wait for 1 * period;
77     reset <= '0';
78     wait;
79   end process;
80
81
82   ADDR_PROC : process
83   begin
84     din <= (others => '0');
85     we  <= '0';
86     
87     wait for offset;
88     wait for 3 * period;
89     
90     for i in 0 to 2*(2**PWM_W)-1 loop
91       din <= conv_std_logic_vector(i, PWM_W);
92       we <= '1';
93       wait for period;
94       we <= '0';
95       wait for 12*period;
96     end loop;
97     
98     wait;
99   end process;
100   
101 end testbench;
102