我已经了解到,当 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)......
(点击放大)
最佳答案
有人在教你错误的知识!
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 描述也是错误的。 Q
和 NOTQ
是 out
模式,而不是 inout
。使用支持 VHDL-2008(允许读回输出端口)的适当模拟器或使用中间信号。
关于vhdl - VHDL 中的简单 SR 锁存仿真(使用 Xilinx)不振荡,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46745951/