2023-09-25 16:53:06 +02:00

152 lines
2.8 KiB
VHDL

LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_arith.all;
ENTITY stdlib_tb IS
GENERIC(
CLOCK_PERIOD : time := 10 ns
);
END stdlib_tb;
ARCHITECTURE arch of stdlib_tb IS
SIGNAL CLK : std_logic;
SIGNAL D_FF_D : std_logic;
SIGNAL D_FF_Rst : std_logic;
SIGNAL D_FF_Q : std_logic;
SIGNAL D_FFb_D : std_logic_vector(7 downto 0);
SIGNAL D_FFb_Rst : std_logic;
SIGNAL D_FFb_Q : std_logic_vector(7 downto 0);
SIGNAL SR_D : std_logic;
SIGNAL SR_Rst : std_logic;
SIGNAL SR_Q : std_logic_vector(7 downto 0);
COMPONENT D_FF
PORT(
H: IN std_logic;
D: IN std_logic;
nRst: IN std_logic;
Q: OUT std_logic
);
END COMPONENT;
COMPONENT D_FF_BANK
PORT(
H: IN std_logic;
D: IN std_logic_vector;
nRst: IN std_logic;
Q: OUT std_logic_vector
);
END COMPONENT;
COMPONENT shift_register
GENERIC(
WIDTH: integer
);
PORT(
H: IN std_logic;
H_EN: IN std_logic;
nRst : IN std_logic;
D: IN std_logic;
Q: OUT std_logic_vector
);
END COMPONENT;
BEGIN
CLK_gen : PROCESS
BEGIN
CLK <= '0';
WAIT FOR CLOCK_PERIOD/2;
CLK <= '1';
WAIT FOR CLOCK_PERIOD/2;
END PROCESS CLK_gen;
D_FF_test : PROCESS
BEGIN
D_FF_Rst <= '0';
WAIT UNTIL CLK = '1';
D_FF_Rst <= '1';
D_FF_D <= '1';
WAIT UNTIL CLK = '0';
assert D_FF_Q = '0' report "D_FF set before clk" severity error;
WAIT UNTIL CLK = '0';
assert D_FF_Q = '1' report "D_FF not set" severity error;
D_FF_Rst <= '0';
WAIT UNTIL CLK = '0';
assert D_FF_Q = '0' report "D_FF reset error" severity error;
END PROCESS D_FF_test;
D_FFb_test : PROCESS
BEGIN
D_FFb_Rst <= '0';
WAIT UNTIL CLK = '1';
D_FFb_Rst <= '1';
D_FFb_D <= "01010101";
WAIT UNTIL CLK = '0';
assert D_FFb_Q = "00000000" report "D_FF_bank set before clk" severity error;
WAIT UNTIL CLK = '0';
assert D_FFb_Q = "01010101" report "D_FF_bank not set" severity error;
D_FFb_Rst <= '0';
WAIT UNTIL CLK = '0';
assert D_FFb_Q = "00000000" report "D_FF_bank reset error" severity error;
END PROCESS D_FFb_test;
SR_test : PROCESS
BEGIN
SR_Rst <= '0';
SR_D <= '1';
WAIT UNTIL CLK = '1';
SR_Rst <= '1';
for i in SR_Q'RANGE loop
SR_D <= not SR_D;
WAIT UNTIL CLK = '1';
end loop;
WAIT UNTIL CLK = '1';
assert SR_Q = "01010101" report "shift register wrong output" severity error;
SR_Rst <= '0';
WAIT UNTIL CLK = '0';
assert SR_Q = "00000000" report "shft register reset error" severity error;
END PROCESS SR_test;
U0 : D_FF
PORT MAP (
H => CLK,
D => D_FF_D,
nRst => D_FF_Rst,
Q => D_FF_Q
);
U1 : D_FF_BANK
PORT MAP(
H => CLK,
D => D_FFb_D,
nRst => D_FFb_Rst,
Q => D_FFb_Q
);
U2 : shift_register
GENERIC MAP(
WIDTH => SR_Q'LENGTH
)
PORT MAP(
H => CLK,
H_EN => '1',
nRst => SR_Rst,
D => SR_D,
Q => SR_Q
);
END ARCHITECTURE arch;