我已经了解到,当 S 和 R 在以下电路 VHDL 代码中仅为“1”后均为“0”时,SR-Latch 确实会发生振荡。

这是 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;

我完全不知道为什么模拟没有反射(reflect)......

vhdl - VHDL 中的简单 SR 锁存仿真(使用 Xilinx)不振荡-LMLPHP
(点击放大)

最佳答案

有人在教你错误的知识!

SR 和 RS 基本触发器(也称为锁存器)不振荡。 S = R = 1 (forbidden) 的问题是你不知道离开 S = R = 1 后的状态,因为你永远不能同时进入 S = R = 0 (save)。您将通过 S = R = 1 (set) 或 S = R = 0 (reset) 将 S = 1; R = 0 转换为 S = 0; R = 1。这将在您进入状态保存之前触发设置或重置操作。

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

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

关于vhdl - VHDL 中的简单 SR 锁存仿真(使用 Xilinx)不振荡,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46745951/

10-16 07:57