129 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			VHDL
		
	
	
	
	
	
			
		
		
	
	
			129 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			VHDL
		
	
	
	
	
	
| library ieee;
 | |
| use ieee.std_logic_1164.all;
 | |
| use ieee.numeric_std.all;
 | |
| use std.textio.all;
 | |
| 
 | |
| entity pdmout_test is
 | |
| end pdmout_test;
 | |
| 
 | |
| architecture rtl of pdmout_test is
 | |
| 
 | |
|   component pdmout is
 | |
|     port
 | |
|     (
 | |
|       clk     : in std_logic;
 | |
|       rst     : in std_logic;
 | |
| 
 | |
|     -- hardware
 | |
|       out_pin  : out std_logic;
 | |
| 
 | |
|     -- bus interface
 | |
|       we      : in std_logic;
 | |
|       addr    : in std_logic_vector(15 downto 0);
 | |
|       din     : in std_logic_vector(15 downto 0)
 | |
|     );
 | |
|   end component;
 | |
| 
 | |
|   signal finished: std_logic := '0';
 | |
|   signal clk: std_logic := '0';
 | |
|   signal rst, bus_we, pdm_out: std_logic;
 | |
|   signal bus_miso, bus_mosi, bus_addr: std_logic_vector(15 downto 0);
 | |
| 
 | |
| begin
 | |
|   dut: pdmout port map(clk => clk, rst => rst, out_pin => pdm_out,
 | |
|                        we => bus_we, addr => bus_addr,
 | |
|                        din => bus_mosi);
 | |
| 
 | |
|   process
 | |
|   begin
 | |
|     if finished = '0' then
 | |
|       clk <= not clk;
 | |
|       wait for 5 ns;
 | |
|     else
 | |
|       clk <= '0';
 | |
|       wait;
 | |
|     end if;
 | |
|   end process;
 | |
| 
 | |
|   process
 | |
|   begin
 | |
|     rst <= '1';
 | |
| 
 | |
|     wait for 1 ns;
 | |
|     assert(pdm_out='0') report "Fail rst" severity error;
 | |
| 
 | |
|     rst <= '0';
 | |
| 
 | |
|     wait for 10 ns;
 | |
| 
 | |
|     bus_addr <= x"0000";
 | |
|     bus_mosi <= x"8000";
 | |
|     bus_we <= '1';
 | |
| 
 | |
|     wait for 10 ns;
 | |
|     assert(pdm_out='0') report "enabled didn't work?" severity error;
 | |
| 
 | |
|     bus_addr <= x"0002";
 | |
|     bus_mosi <= x"0001";
 | |
|     bus_we <= '1';
 | |
| 
 | |
|     wait for 10 ns;
 | |
| 
 | |
|     bus_addr <= x"0000";
 | |
|     bus_we <= '0';
 | |
| 
 | |
|     wait for 20 ns;
 | |
|     assert(pdm_out='1') report "output is wrong" severity error;
 | |
|     wait for 10 ns;
 | |
|     assert(pdm_out='0') report "output is wrong" severity error;
 | |
|     wait for 10 ns;
 | |
|     assert(pdm_out='1') report "output is wrong" severity error;
 | |
|     wait for 10 ns;
 | |
|     assert(pdm_out='0') report "output is wrong" severity error;
 | |
|     wait for 10 ns;
 | |
|     assert(pdm_out='1') report "output is wrong" severity error;
 | |
|     wait for 10 ns;
 | |
|     assert(pdm_out='0') report "output is wrong" severity error;
 | |
| 
 | |
|     bus_addr <= x"0000";
 | |
|     bus_mosi <= x"0000";
 | |
|     bus_we <= '1';
 | |
| 
 | |
|     wait for 10 ns;
 | |
| 
 | |
|     wait for 10 ns;
 | |
|     assert(pdm_out='0') report "output is wrong" severity error;
 | |
|     wait for 10 ns;
 | |
|     assert(pdm_out='0') report "output is wrong" severity error;
 | |
| 
 | |
|     bus_addr <= x"0000";
 | |
|     bus_mosi <= x"4000";
 | |
|     bus_we <= '1';
 | |
|     wait for 10 ns;
 | |
| 
 | |
|     wait for 10 ns;
 | |
|     assert(pdm_out='0') report "output is wrong" severity error;
 | |
|     wait for 10 ns;
 | |
|     assert(pdm_out='0') report "output is wrong" severity error;
 | |
|     wait for 10 ns;
 | |
|     assert(pdm_out='1') report "output is wrong" severity error;
 | |
|     wait for 10 ns;
 | |
|     assert(pdm_out='0') report "output is wrong" severity error;
 | |
|     wait for 10 ns;
 | |
|     assert(pdm_out='0') report "output is wrong" severity error;
 | |
|     wait for 10 ns;
 | |
|     assert(pdm_out='0') report "output is wrong" severity error;
 | |
|     wait for 10 ns;
 | |
|     assert(pdm_out='1') report "output is wrong" severity error;
 | |
|     wait for 10 ns;
 | |
|     assert(pdm_out='0') report "output is wrong" severity error;
 | |
| 
 | |
| 
 | |
|     assert false report "Test done." severity note;
 | |
| 
 | |
|     finished <= '1';
 | |
|     wait;
 | |
| 
 | |
|   end process;
 | |
| end rtl;
 |