152 lines
2.8 KiB
VHDL
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; |