89 lines
1.5 KiB
VHDL
89 lines
1.5 KiB
VHDL
|
library IEEE;
|
||
|
use IEEE.STD_LOGIC_1164.ALL;
|
||
|
use IEEE.NUMERIC_STD.ALL;
|
||
|
use IEEE.STD_LOGIC_UNSIGNED.ALL;
|
||
|
|
||
|
entity dm74161_tb is
|
||
|
end dm74161_tb;
|
||
|
|
||
|
architecture behavior OF dm74161_tb is
|
||
|
|
||
|
type test_state is (init, counting, load, cet_inhibit, cep_inhibit, finished);
|
||
|
|
||
|
signal clk, clr_l, load_l, cet, cep: std_logic;
|
||
|
signal d:std_logic_vector(3 downto 0);
|
||
|
signal q:std_logic_vector(3 downto 0);
|
||
|
signal carry: std_logic;
|
||
|
signal state: test_state;
|
||
|
|
||
|
begin
|
||
|
|
||
|
dut: entity work.dm74161
|
||
|
port map(
|
||
|
clk => clk, clr_l => clr_l, load_l => load_l, cet => cet, cep => cep,
|
||
|
d3=>d(3), d2=>d(2), d1=>d(1), d0=>d(0),
|
||
|
q3=>q(3), q2=>q(2), q1=>q(1), q0=>q(0),
|
||
|
carry => carry
|
||
|
);
|
||
|
|
||
|
process
|
||
|
begin
|
||
|
-- init
|
||
|
state <= init;
|
||
|
clk <= '0';
|
||
|
clr_l <= '1';
|
||
|
load_l <= '1';
|
||
|
cet <= '1';
|
||
|
cep <= '1';
|
||
|
d <= "0000";
|
||
|
wait for 1ns;
|
||
|
|
||
|
-- count to 16
|
||
|
state <= counting;
|
||
|
for ii in 1 to 3 loop
|
||
|
clk <= '1';
|
||
|
wait for 1ns;
|
||
|
clk <= '0';
|
||
|
wait for 1ns;
|
||
|
end loop;
|
||
|
|
||
|
-- load
|
||
|
state <= load;
|
||
|
d <= "1110";
|
||
|
load_l <= '0';
|
||
|
clk <= '1';
|
||
|
wait for 1ns;
|
||
|
load_l <= '1';
|
||
|
clk <= '0';
|
||
|
wait for 1ns;
|
||
|
|
||
|
-- cet inhibit
|
||
|
state <= cet_inhibit;
|
||
|
cet <= '0';
|
||
|
for ii in 1 to 3 loop
|
||
|
clk <= '1';
|
||
|
wait for 1ns;
|
||
|
clk <= '1';
|
||
|
wait for 1ns;
|
||
|
end loop;
|
||
|
cet <= '1';
|
||
|
|
||
|
-- cep inhibit
|
||
|
state <= cep_inhibit;
|
||
|
cep <= '0';
|
||
|
for ii in 1 to 3 loop
|
||
|
clk <= '1';
|
||
|
wait for 1ns;
|
||
|
clk <= '0';
|
||
|
wait for 1ns;
|
||
|
end loop;
|
||
|
cep <= '1';
|
||
|
|
||
|
-- all done
|
||
|
state <= finished;
|
||
|
wait;
|
||
|
|
||
|
end process;
|
||
|
|
||
|
end architecture;
|