我无法理解 SR Latch 的工作原理。看起来,你从 R 插入一条输入线,从 S 插入另一条输入线,你应该在 Q 和 Q' 中得到结果。
但是,R 和 S 都需要对方输出的输入,而对方的输出需要对方输出的输入。先有鸡还是先有蛋??
当你第一次插入这个电路时,它是如何开始的?
我无法理解 SR Latch 的工作原理。看起来,你从 R 插入一条输入线,从 S 插入另一条输入线,你应该在 Q 和 Q' 中得到结果。
但是,R 和 S 都需要对方输出的输入,而对方的输出需要对方输出的输入。先有鸡还是先有蛋??
当你第一次插入这个电路时,它是如何开始的?
一个敏锐的问题。事实上,如果你在模拟程序中构建这个锁存器,它确实会告诉你它无法预测它会从什么状态开始:
但是,如果您将其中一个输入设置为高电平(这些是左侧的按钮),则信号将传播通过(请记住,1 OR [anything] 等于 1)并且电路将锁定该状态:
这些是或非门,因此当任一输入为高时,反相输出变为低。我使用的程序是 Logisim。它很小,我推荐它作为开始。逻辑编译器(FPGA 和其他一切)喜欢抱怨未初始化的状态。这是一个很好的第一个例子。
现在,我知道在现实生活中,电路会自行随机锁定到一种或另一种状态。许多其他人已经指出了这一点。但有时,重要的是它以一种或另一种状态可靠地启动,这就是所有警告的意义所在。
触发器实现为双稳态多谐振荡器;因此,对于除 S=1、R=1 之外的所有输入,Q 和 Q' 都保证互为倒数,这是不允许的。SR 触发器的激励表有助于理解将信号应用于输入时会发生什么。
S R Q(t) Q(t+1)
----------------
0 x 0 0
1 0 0 1
0 1 1 0
x 0 1 1
输出 Q 和 Q' 将快速改变状态并在信号施加到 S 和 R 后进入稳定状态。
Example 1: Q(t) = 0, Q'(t) = 1, S = 0, R = 0.
State 1: Q(t+1 state 1) = NOT(R OR Q'(t)) = NOT(0 OR 1) = 0
Q'(t+1 state 1) = NOT(S OR Q(t)) = NOT(0 OR 0) = 1
State 2: Q(t+1 state 1) = NOT(R OR Q'(t+1 state 1)) = NOT(0 OR 1) = 0
Q'(t+1 state 2) = NOT(S OR Q(t+1 state 1)) = NOT(0 OR 0) = 1
Since the outputs did not change, we have reached a steady state; therefore, Q(t+1) = 0, Q'(t+1) = 1.
Example 2: Q(t) = 0, Q'(t) = 1, S = 0, R = 1
State 1: Q(t+1 state 1) = NOT(R OR Q'(t)) = NOT(1 OR 1) = 0
Q'(t+1 state 1) = NOT(S OR Q(t)) = NOT(0 OR 0) = 1
State 2: Q(t+1 state 2) = NOT(R OR Q'(t+1 state 1)) = NOT(1 OR 1) = 0
Q'(t+1 state 2) = NOT(S OR Q(t+1 state 1)) = NOT(0 OR 0) = 1
We have reached a steady state; therefore, Q(t+1) = 0, Q'(t+1) = 1.
Example 3: Q(t) = 0, Q'(t) = 1, S = 1, R = 0
State 1: Q(t+1 state 1) = NOT(R OR Q'(t)) = NOT(0 OR 1) = 0
Q'(t+1 state 1) = NOT(S OR Q(t)) = NOT(1 OR 0) = 0
State 2: Q(t+1 state 2) = NOT(R OR Q'(t+1 state 1)) = NOT(0 OR 0) = 1
Q'(t+1 state 2) = NOT(S OR Q(t+1 state 1)) = NOT(1 OR 0) = 0
State 3: Q(t+1 state 3) = NOT(R OR Q'(t+1 state 2)) = NOT(0 OR 0) = 1
Q'(t+1 state 3) = NOT(S OR Q(t+1 state 2)) = NOT(1 OR 1) = 0
We have reached a steady state; therefore, Q(t+1) = 1, Q'(t+1) = 0.
Example 4: Q(t) = 1, Q'(t) = 0, S = 1, R = 0
State 1: Q(t+1 state 1) = NOT(R OR Q'(t)) = NOT(0 OR 0) = 1
Q'(t+1 state 1) = NOT(S OR Q(t)) = NOT(1 OR 1) = 0
State 2: Q(t+1 state 2) = NOT(R OR Q'(t+1 state 1)) = NOT(0 OR 0) = 1
Q'(t+1 state 2) = NOT(S OR Q(t+1 state 1)) = NOT(1 OR 1) = 0
We have reached a steady state; therefore, Q(t+1) = 1, Q'(t+1) = 0.
Example 5: Q(t) = 1, Q'(t) = 0, S = 0, R = 0
State 1: Q(t+1 state 1) = NOT(R OR Q'(t)) = NOT(0 OR 0) = 1
Q'(t+1 state 1) = NOT(S OR Q(t)) = NOT(0 OR 1) = 0
State 2: Q(t+1 state 2) = NOT(R OR Q'(t+1 state 1)) = NOT(0 OR 0) = 1
Q'(t+1 state 2) = NOT(S OR Q(t+1 state 1)) = NOT(0 OR 1) = 0
We have reached a steady; state therefore, Q(t+1) = 1, Q'(t+1) = 0.
With Q=0, Q'=0, S=0, and R=0, an SR flip-flop will oscillate until one of the inputs is set to 1.
Example 6: Q(t) = 0, Q'(t) = 0, S = 0, R = 0
State 1: Q(t+1 state 1) = NOT(R OR Q'(t)) = NOT(0 OR 0) = 1
Q'(t+1 state 1) = NOT(S OR Q(t)) = NOT(0 OR 0) = 1
State 2: Q(t+1 state 2) = NOT(R OR Q'(t+1 state 1)) = NOT(0 OR 1) = 0
Q'(t+1 state 2) = NOT(S OR Q(t+1 state 1)) = NOT(0 OR 1) = 0
State 3: Q(t+1 state 3) = NOT(R OR Q'(t+1 state 2)) = NOT(0 OR 0) = 1
Q'(t+1 state 3) = NOT(S OR Q(t+1 state 2)) = NOT(0 OR 0) = 1
State 4: Q(t+1 state 4) = NOT(R OR Q'(t+1 state 3)) = NOT(0 OR 1) = 0
Q'(t+1 state 4) = NOT(S OR Q(t+1 state 3)) = NOT(0 OR 1) = 0
...
As one can see, a steady state is not possible until one of the inputs is set to 1 (which is usually handled by power-on reset circuitry).
如果我们检查 SR 触发器的最简单实现(参见http://en.wikipedia.org/wiki/File:Transistor_Bistable_interactive_animated_EN.svg),我们会发现它由两个双极结型晶体管 (BJT) 和四个电阻器(用可以在接地电位和 V+ 之间切换设置和复位线的 SPDT 开关将 SPST 拨动开关替换为接地)。BJT 被配置为共射极反相器。每个晶体管的集电极(输出)反馈到对面晶体管的基极(输入)。输入 S 与 BJT 的输出进行线或,其集电极连接用作输出 Q(R1/R3 的结点)。输入 R 与输出 BJT 进行线或,BJT 的集电极连接用作输出 Q'(R2/R4 的连接点)。
当电路第一次上电时,两个晶体管都不会在几分之一秒内正向偏置到饱和区,这意味着 Q 和 Q' 都处于逻辑电平 1。每个集电极上的可用电压被馈送到基极相反的晶体管,这会导致它正向偏置到饱和区。首先变为正向偏置的晶体管将首先开始传导电流,这反过来将导致其集电极电阻上出现电压降,将其输出设置为逻辑电平 0。集电极电压的下降将阻止对面的晶体管变得前向偏见;因此,设置触发器的初始状态。这基本上是一种硬件竞争条件,会导致不可预测的结果。
就像你说的,它是不确定的。在实践中,存在应该将锁存器置于特定状态的瞬态或怪癖,但不能保证它将处于哪个状态。这是由定义给定初始状态的两个门不匹配引起的(基本上电路不它不像真正的数字 SR 锁存器,而是一个复杂的模拟电路,就像它在现实生活中一样)。初始输出或多或少是随机的,要么Q=1 and ~Q=0
要么Q=0 and ~Q=1
。
除非数据表明确提及,否则我不会依赖于选择一种状态而不是另一种状态,因为实际的初始状态可能会在批次中的不同部件、板上的放置、环境因素(温度/湿度等)和老化之间发生变化(绝不是完整的因素列表)。
定义状态的最佳方法是在启动后置位或复位以将 SR 锁存器置于已知状态。
附带说明一下,通常 SR 锁存器同时断言 S 和 R 也会导致未定义的行为,并且您依靠类似的巫术来设置输出(真正的实现可能会关闭两个输出,随机切换两者,打开两个输出等)。正如 supercat 评论的那样,如果一个引脚在另一个引脚之前未置位,则 SR 锁存器可以进入已知状态,因为只有一个引脚被置位。其他类型的锁存器/触发器可能定义不同的行为,例如 JK 触发器定义断言两个引脚以切换输出(Q = ~Qprev,~Q = Qprev)。
请记住,门是倒置的。这提供了一个正反馈循环。假设 S 和 R 都为零且一个输出为 1,则该输出将反馈到另一个门以强制另一个输出为零。这样,门处于两种稳定状态中的任何一种。
一旦您将 S 或 R 之一设置为 1,这将强制相应的门输出零,这反过来又会强制另一个门输出零。再次,稳定。
例如,初始状态:S = 0,R = 0,Q = 0,Q# = 1。您现在设置 S = 1。这会将下门输出 (Q#) 更改为 0。此 0 馈送到上门门,迫使输出(Q)为1。这个1反馈到下门。当您将 S 设置回 0 时,较低的门仍然从另一个门接收 1。这将使 Q# 输出保持为 0。
如果 Q 已经为 1 并且您将 S 设置为 1,则下门的两个输入均为 1,因此没有变化。