library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity tb_pwm is end tb_pwm; -------------------------------------------------------------------------------- architecture testbench of tb_pwm is constant period : time := 250 ns; constant offset : time := 0 us; constant PWM_W : integer := 2; constant CNT_MAX : integer := 2**PWM_W - 2; signal clk : std_logic; signal reset : std_logic; signal din : std_logic_vector (PWM_W-1 downto 0); signal we : std_logic; signal pwm_cnt : std_logic_vector (PWM_W-1 downto 0); signal pwm_cyc : std_logic; signal pwm_out : std_logic; -------------------------------------------------------------------------------- begin uut : entity work.pwm generic map ( PWM_WIDTH => PWM_W) port map ( clk => clk, reset => reset, din => din, we => we, pwm_cnt => pwm_cnt, pwm_cyc => pwm_cyc, pwm => pwm_out); counter_1 : entity work.counter generic map ( WIDTH => PWM_W, MAX => CNT_MAX) port map ( clk => clk, reset => reset, count => pwm_cnt, event_ow => pwm_cyc); CLK_PROC : process begin clk <= '0'; wait for offset; loop clk <= '1'; wait for period/2; clk <= '0'; wait for period/2; end loop; end process; RSET_PROC : process begin reset <= '0'; wait for 1.5 * period; reset <= '1'; wait for 1 * period; reset <= '0'; wait; end process; ADDR_PROC : process begin din <= (others => '0'); we <= '0'; wait for offset; wait for 3 * period; for i in 0 to 2*(2**PWM_W)-1 loop din <= conv_std_logic_vector(i, PWM_W); we <= '1'; wait for period; we <= '0'; wait for 12*period; end loop; wait; end process; end testbench;