VHDL(使用 Xilinx)中的简单 SR 锁存器模拟不振荡

Simple SR Latch Simulation in VHDL(with Xilinx) doesn't oscillate

我了解到 SR-Latch 在以下电路 VHDL 代码中仅在 S 和 R 为“1”之后都为“0”时确实会振荡。

这里是SRLATCH的VHDL

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity SRLATCH_VHDL is
port(
        S : in STD_LOGIC;
        R : in STD_LOGIC;
        Q : inout STD_LOGIC;
        NOTQ: inout STD_LOGIC);
end SRLATCH_VHDL;

architecture Behavioral of SRLATCH_VHDL is
begin

process(S,R,Q,NOTQ)
    begin
        Q <= R NOR NOTQ;
        NOTQ<= S NOR Q;
end process;

end Behavioral;

以下是Testbench代码中的过程及其仿真结果

   -- Stimulus process
   stim_proc: process
   begin        
    S <= '1'; R <= '0'; WAIT FOR 100NS;
    S <= '0'; R <= '0'; WAIT FOR 100NS;
    S <= '0'; R <= '1'; WAIT FOR 100NS;
    S <= '0'; R <= '0'; WAIT FOR 100NS;
    S <= '1'; R <= '1'; WAIT FOR 500NS;
   end process;

而且我完全不知道为什么模拟没有反映...


(点击放大)

有人在教你错误的知识!

SR 和 RS 基本触发器(也称为锁存器)不振荡。 S = R = 1 (forbidden) 上的问题是你不知道离开 S = R = 1 后的状态,因为你永远不可能同时去 S = R = 0 (save)。您将通过 S = 1; R = 0(设置)或 S = 0; R = 1(重置)从 S = R = 1 过渡到 S = R = 0。这将在您到达状态 save.[=21= 之前触发 setreset 操作]

请注意,VHDL 使用离散时间进行仿真,并且在每个 运行 上重现相同的仿真结果。您不能(轻松地)模拟导致每次模拟不同信号延迟的物理效应 运行.

顺便说一句。你的VHDL描述也是错误的。 QNOTQ 的模式是 out,而不是 inout。使用支持 VHDL-2008(允许回读输出端口)的适当模拟器或使用中间信号。

问得好,你的老师是对的——如果 S 和 R 在 "same" 时间都被释放,这个电路就会振荡。你的问题是你的 TB 没有这样做,但这个是:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity TOP is
end entity TOP;

architecture A of TOP is
  signal S,R,Q,NOTQ: std_logic;

  component SRLATCH_VHDL is
    port(
      S    : in    std_logic;
      R    : in    std_logic;
      Q    : inout std_logic;
      NOTQ : inout std_logic);
  end component SRLATCH_VHDL;

begin
  U1 : SRLATCH_VHDL port map(S, R, Q, NOTQ);

  process is
  begin
    S <= '1';
    R <= '1';
    wait for 10 ns;
    S <= '0';
    R <= '0';
    wait;
  end process;
end architecture A;

这将产生无限增量延迟振荡:

这不是演示异步行为的好方法,因为您有效地简化了电路的物理性质,并使用 VHDL 调度程序显示存在问题(使用 'delta delays' ).一个更好的方法是通过添加信号延迟来模拟真实的电路行为(这正是您的工具在为时序模拟进行反向注释时正在做的事情)。使用 after 查找信号分配,以及传输延迟和惯性延迟之间的差异。如果你画一个电路图,你会发现如果 SR 在 'small' 时间 window 不允许信号释放,就会出现问题在第二个控制信号发生变化之前完成电路周围的传播。您现在需要编写一个测试平台,在 window.

内更改 SR

几乎所有你设计的东西都是异步的,就像你的 SR 电路一样。我们只通过确保输入信号不会同时改变来制作电路 'synchronous'。时序工具的作用是告诉我们 'same' 的实际含义:当您获得一份报告或数据表值,为您提供设置或保持时间时,该数字只是 [=32= 的数字版本].