【发布时间】:2017-10-14 15:03:17
【问题描述】:
我了解到,当 S 和 R 都为“0”时,SR-Latch 确实会振荡,而在下面的电路 VHDL 代码中它们只是“1”。
这里是 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;
我完全不知道为什么模拟不能反映......
【问题讨论】:
-
您没有提供Minimal, Complete and Verifiable example 演示振荡,您提供的刺激也没有这样做。解决方法是平衡延迟,从而赢得胜利。这相当于提供了一个共识术语。在时钟触发器中,这是建立和保持时间的来源,也是使用主从触发器的动力。我们正在处理丢失的数字设计艺术和零门延迟的抽象。
-
如果您要为 Q 和 NOTQ 的分配添加统一延迟:
Q <= R NOR NOTQ after 1 ns; NOTQ <= S NOR Q after 1 ns;并在相同的增量周期中在 S 和 R 上提供“0”到“1”的转换(没有干预WAIT)您可以演示oscillation,而无需显示增量周期或导致超出最大增量周期数的波形显示。