2.1:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity DFF_POS is
Port ( D : in STD_LOGIC;
CLK : in STD_LOGIC;
Q : out STD_LOGIC);
end DFF_POS;
architecture Behavioral of DFF_POS is
begin
process(CLK)
begin
if rising_edge(CLK) then
Q <= D;
end if;
end process;
end Behavioral;Testbench:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity DFF_POS_tb is
end DFF_POS_tb;
architecture behavior of DFF_POS_tb is
component DFF_POS
Port ( D : in STD_LOGIC;
CLK : in STD_LOGIC;
Q : out STD_LOGIC);
end component;
signal D_tb : STD_LOGIC := '0';
signal CLK_tb : STD_LOGIC := '0';
signal Q_tb : STD_LOGIC;
constant CLK_PERIOD : time := 20 ns;
begin
-- Device under test
UUT: DFF_POS port map (D => D_tb, CLK => CLK_tb, Q => Q_tb);
-- Free-running clock
clk_process : process
begin
CLK_tb <= '0';
wait for CLK_PERIOD/2;
CLK_tb <= '1';
wait for CLK_PERIOD/2;
end process;
-- Stimulus, deliberately not synced to the clock edges
stim_process: process
begin
D_tb <= '0';
wait for 30 ns;
D_tb <= '1';
wait for 20 ns;
D_tb <= '0';
wait for 20 ns;
D_tb <= '1';
wait for 15 ns;
D_tb <= '0';
wait for 25 ns;
D_tb <= '1';
wait for 40 ns;
wait; -- halt simulation
end process;
end behavior;2.2:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity DFF_NEG is
Port ( D : in STD_LOGIC;
CLK : in STD_LOGIC;
Q : out STD_LOGIC);
end DFF_NEG;
architecture Behavioral of DFF_NEG is
begin
process(CLK)
begin
if falling_edge(CLK) then
Q <= D;
end if;
end process;
end Behavioral;Testbench:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity DFF_NEG_tb is
end DFF_NEG_tb;
architecture behavior of DFF_NEG_tb is
component DFF_NEG
Port ( D : in STD_LOGIC;
CLK : in STD_LOGIC;
Q : out STD_LOGIC);
end component;
signal D_tb : STD_LOGIC := '0';
signal CLK_tb : STD_LOGIC := '0';
signal Q_tb : STD_LOGIC;
constant CLPERIOD : time := 20 ns;
begin
-- Device under test
UUT: DFF_NEG port map (D => D_tb, CLK => CLK_tb, Q => Q_tb);
-- Free-running clock
clk_process : process
begin
CLK_tb <= '0';
wait for CLK_PERIOD/2;
CLK_tb <= '1';
wait for CLK_PERIOD/2;
end process;
-- Same stimulus as DFF_POS_tb
stim_process: process
begin
D_tb <= '0';
wait for 30 ns;
D_tb <= '1';
wait for 20 ns;
D_tb <= '0';
wait for 20 ns;
D_tb <= '1';
wait for 15 ns;
D_tb <= '0';
wait for 25 ns;
D_tb <= '1';
wait for 40 ns;
wait; -- halt simulation
end process;
end behavior;