library IEEE; use IEEE.std_logic_1164.all; use IEEE.numeric_std.all; library work; entity ENDAT_TB is end ENDAT_TB; architecture BEHAVIORAL of ENDAT_TB is -- Component declaration component master port ( -- local clock clk: in std_logic; rst: in std_logic; -- generated clock for slave -- fdiv divides CLK_FREQ ma_fdiv: in unsigned; ma_clk: out std_logic; -- master out, slave in mosi: out std_logic; miso: in std_logic; -- gate to drive output (1 to drive it) gate: out std_logic; -- data from slave, and data length data: out std_logic_vector; len: in unsigned; -- encoder type enc_type: in integer; -- ssi specific control registers ssi_flags: in std_logic_vector; ssi_delay_fdiv: in unsigned ); end component; -- Configuration for u_master: master use entity work.master(absenc_master_rtl); -- Clock period constant period: time := 10 ns; -- Signals signal clk, rst, ma_clk, mosi, miso, gate, down, up: std_logic; signal cnt_out: std_logic_vector (3 downto 0); signal ma_fdiv, ssi_delay_fdiv, len: unsigned(31 downto 0); signal enc_type: integer; signal data, ssi_flags: std_logic_vector(31 downto 0); begin -- Instantiate counter... u_master : master port map ( clk => clk, rst => rst, ma_fdiv => ma_fdiv, ma_clk => ma_clk, mosi => mosi, miso => miso, gate => gate, data => data, len => len, enc_type => enc_type, ssi_flags => ssi_flags, ssi_delay_fdiv => ssi_delay_fdiv ); -- Process for applying patterns process -- Helper to perform one clock cycle... procedure run_cycle is begin clk <= '0'; wait for period / 2; clk <= '1'; wait for period / 2; end procedure; begin -- Reset counter... --down <= '1'; up <= '1'; --run_cycle; --assert cnt_out = "0000" report "Reset does not work"; -- Count up and keep state... -- for n in 1 to 20 loop -- down <= '0'; up <= '1'; -- run_cycle; -- assert cnt_out = std_logic_vector (to_unsigned (n mod 16, 4)) report "Counting up does not work"; -- down <= '0'; up <= '0'; -- run_cycle; -- assert cnt_out = std_logic_vector (to_unsigned (n mod 16, 4)) report "Keeping the state does not work"; -- end loop; -- Count down and keep state... -- down <= '1'; up <= '1'; -- run_cycle; -- for n in 15 downto integer(-5) loop -- down <= '1'; up <= '0'; -- run_cycle; -- assert cnt_out = std_logic_vector (to_unsigned (n mod 16, 4)) report "Counting down does not work"; -- down <= '0'; up <= '0'; -- run_cycle; -- assert cnt_out = std_logic_vector (to_unsigned (n mod 16, 4)) report "Keeping the state does not work"; -- end loop; -- Print a note & finish simulation... -- assert false report "Simulation finished" severity note; -- wait; end process; end BEHAVIORAL;