2014-12-07 1 views
2

У меня есть коды VHDL, которые имеют D Flip Flop, и T Flip Flop, который использует его структурно: он состоит из DFF с D-входом, который имеет T Xored с Q, a Часы. Но моя симуляция дает мне сигнал, который имеет выход только красной прямой «U». Я думаю, что это из-за обратной связи от Q до D и не инициализируется в начале. Но я не знаю, как написать это иначе. Это код:Testbench для T Flip Flop с использованием D Flip Flop в VHDL

--This является 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; 

--и тока испытательный стенд:

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; 

ответ

1

альтернатива стробирования сигнал 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 немного более надежным.

2

Ваш «U 'вызвано выходом триггера D, используемого в комбинаторном выражении, без сброса в известное состояние.

Самый простой способ, чтобы получить D флип-флоп похоронен в сбросе флоп объекта Т флип к известному бы добавить второй процесс на испытательном стенде вдоль линий:

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

 Смежные вопросы

  • Нет связанных вопросов^_^