使用VHDL中的D触发器的T触发器的测试台

问题描述:

我有一个D触发器的VHDL代码和一个结构上使用它的T触发器:它包括一个D输入,D输入被T存储为Q,a时钟。但是我的模拟给了我一个只有红色直线“U”的输出的波形。我认为这是因为从Q到D的反馈,并且在开始时未初始化。但我不知道如何写它。这是代码:使用VHDL中的D触发器的T触发器的测试台

- 这是DFF:

library IEEE; 
use IEEE.STD_LOGIC_1164.all; 

entity d_flip_flop is 
    port(
     clk : in STD_LOGIC; 
     din : in STD_LOGIC; 
     reset : in STD_LOGIC; 
     dout : out STD_LOGIC 
     ); 
end d_flip_flop; 

architecture d_flip_flop_arc of d_flip_flop is  
begin 

    dff : process (din,clk,reset) is 
    begin 
     if (reset='1') then 
      dout <= '0'; 
     elsif (rising_edge (clk)) then 
      dout <= din; 
     end if; 
    end process dff; 


end d_flip_flop_arc; 

--TFF:

library IEEE; 
use IEEE.STD_LOGIC_1164.all; 

entity tff_using_dff is 
    port(
     clk : in STD_LOGIC; 
     t : in STD_LOGIC; 
     reset : in STD_LOGIC; 
     dout : out STD_LOGIC 
     ); 
end tff_using_dff; 

architecture tff_using_dff_arc of tff_using_dff is  

component d_flip_flop is 
    port(
     clk : in STD_LOGIC; 
     din : in STD_LOGIC; 
     reset : in STD_LOGIC; 
     dout : out STD_LOGIC 
     ); 
end component d_flip_flop; 

signal ip : std_logic; 
signal op : std_logic;  

begin 

    ip <= op xor t ; 
    u0 : d_flip_flop port map (clk => clk, 
          din => ip, 
          reset => reset, 
          dout => op); 

    dout <= op; 


end tff_using_dff_arc; 

--and电流测试平台:

library IEEE; 
use IEEE.STD_LOGIC_1164.all; 

entity T_FF_tb is 
end T_FF_tb; 

architecture T_FF_tb of T_FF_tb is 
component tff_using_dff is 
    port(
     clk : in STD_LOGIC; 
     t : in STD_LOGIC; 
     reset : in STD_LOGIC; 
     dout : out STD_LOGIC 
     ); 
end component; 

signal clk,t,reset: std_logic:='0'; 
signal dout: std_logic:='0'; 
begin 
U0: tff_using_dff port map(clk,t,reset,dout); 
clk<=not clk after 5 ns; 
t<= not t after 30 ns; 

end T_FF_tb; 

到选通的另一种测试平台中的reset信号(无论如何应该这样做),您可以定义d_flip_flop输出的初始状态。这可以通过为初始状态分配的寄存器输出定义临时信号dout_i来完成。例如。

library IEEE; 
use IEEE.STD_LOGIC_1164.all; 

entity d_flip_flop is 
    port(
    clk : in STD_LOGIC; 
    din : in STD_LOGIC; 
    reset : in STD_LOGIC; 
    dout : out STD_LOGIC 
    ); 
end d_flip_flop; 

architecture d_flip_flop_arc of d_flip_flop is  
    signal dout_i : STD_LOGIC := '0'; 
begin 

dff : process (clk,reset) is 
begin 
    if (reset='1') then 
     dout_i <= '0'; 
    elsif (rising_edge (clk)) then 
     dout_i <= din; 
    end if; 
end process dff; 

dout <= dout_i; 

end d_flip_flop_arc; 

这应该达到相同的预期效果。它还有额外的好处,使d_flip_flop更强大一点。

你的“U '是由D触发器的输出在组合表达式中使用而未被重置为已知状态而引起的。

获得埋在T触发器实体重置为已知的d触发器将第二工艺添加到测试台沿着切断预定线的最简单方法:

RESET_PROC: 
    process 
    begin 
     wait for 5 ns; 
     reset <= '1'; 
     wait for 5 ns; 
     reset <= '0'; 
     wait; 
    end process;