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

VHDL中使用D触发器的T触发器测试台,vhdl,flip-flop,object-test-bench,Vhdl,Flip Flop,Object Test Bench,我有一个D触发器的VHDL代码,还有一个结构上使用它的T触发器:它由一个DFF组成,D输入与Q(时钟)异或。但是我的模拟给了我一个波形,它的输出只有一条红色的直线“U”。我认为这是因为从Q到D的反馈,并且在一开始是未初始化的。但我不知道如何写它,否则。代码如下: --这是DFF: library IEEE; use IEEE.STD_LOGIC_1164.all; entity d_flip_flop is port( clk : in STD_LOGIC;

我有一个D触发器的VHDL代码,还有一个结构上使用它的T触发器:它由一个DFF组成,D输入与Q(时钟)异或。但是我的模拟给了我一个波形,它的输出只有一条红色的直线“U”。我认为这是因为从Q到D的反馈,并且在一开始是未初始化的。但我不知道如何写它,否则。代码如下:

--这是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;
IEEE库;
使用IEEE.STD_LOGIC_1164.all;
实体d_触发器是
港口(
clk:标准逻辑中;
din:标准逻辑;
复位:在标准逻辑中;
dout:输出标准逻辑
);
结束d_触发器;
d_触发器的结构d_触发器的弧是
开始
dff:过程(din、clk、复位)为
开始
如果(reset='1'),则
杜特复位,
dout=>op);

dout您的“U”是由于组合表达式中使用的D触发器的输出未重置为已知状态而引起的

将埋在T触发器实体中的D触发器重置为已知触发器的最简单方法是沿以下线路向测试台添加第二个过程:

RESET_PROC:
    process
    begin
        wait for 5 ns;
        reset <= '1';
        wait for 5 ns;
        reset <= '0';
        wait;
    end process;
RESET\u程序:
过程
开始
等待5ns;

重置除了在测试台上选通
重置
信号(无论如何都应该这样做),您可以定义
d_触发器
输出的初始状态。这可以通过使用初始状态分配为寄存器的输出定义一个临时信号
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;
IEEE库;
使用IEEE.STD_LOGIC_1164.all;
实体d_触发器是
港口(
clk:标准逻辑中;
din:标准逻辑;
复位:在标准逻辑中;
dout:输出标准逻辑
);
结束d_触发器;
d_触发器的结构d_触发器的弧是
信号dout_i:STD_逻辑:='0';
开始
dff:进程(clk、reset)正在运行
开始
如果(reset='1'),则
你知道吗
RESET_PROC:
    process
    begin
        wait for 5 ns;
        reset <= '1';
        wait for 5 ns;
        reset <= '0';
        wait;
    end process;
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;