使用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;