如何理解SR锁存器


14

我无法确定SR闩锁的工作原理。看来,您从R插入一条输入线,从S插入另一条输入线,应该在Q和Q'中得到结果。

但是,R和S都需要对方的输入,对方的输出也需要对方的输入。鸡肉或鸡蛋是第一位的?

首次插入该电路时,如何开始使用?

SR锁存器


1
我终于在《如何知道》一书中找到了一个非常好的答案。您可以在第24页的链接上看到它
。– CodyBugstein

为了更好地全面了解SR锁存器以及它对于00、01、10和11等不同输入的行为,请观看此视频。www.youtube.com/watch?v=VtVIDgilwlA

Answers:


5

一个感性的问题。实际上,如果您在模拟程序中构建此锁存器,则确实会向您表明它无法预测它将以什么状态开始:

具有“或非”门的RS锁存器,大多数信号显示为红色,表示“未知”

但是,如果您将输入之一设置为高(那些是左侧的按钮),则信号将通过传播(请记住,1或[任何]等于1),并且电路将锁存该状态:

相同的闩锁; 一个输入为高; 线条全部变成浅绿色或深绿色

这些是“或非”门,因此当任一输入为高电平时,反相输出变为低电平。我使用的程序是Logisim。它很小,我建议您从头开始。逻辑编译器(FPGA和其他所有工具)喜欢抱怨未初始化的状态。这是一个很好的第一个例子。

现在,我知道在现实生活中,电路会自己随机地进入一种或另一种状态。许多其他人指出了这一点。但是有时候,重要的一点是,它必须可靠地从一种状态或另一种状态开始,这就是所有警告的含义。


感谢您的出色解释。如果我正确,插入电源后,电路会以某种随机状态启动吗?
CodyBugstein

@Imray我不会使用短语“随机状态”,而是“未定义状态”。它可以随机选择,每次都可能是同一件事,重要的是您不知道也不在乎。您需要做的就是意识到您必须在开始依赖输出之前初始化锁存器(通过短暂地将R或S脉冲变高)。
Scott Chamberlain

我只是重新阅读了您的答案,并了解了我以前错过的事情。很好的解释!
CodyBugstein

5

触发器被实现为双稳态多谐振荡器;因此,对于除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   

在将信号施加到S和R之后,输出Q和Q'将迅速改变状态并保持稳定状态。

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)和四个电阻(用SPDT开关将SPST拨动开关替换为接地,可以在接地电势和V +之间切换置位和复位线)。BJT被配置为通用发射极逆变器。每个晶体管的集电极(输出)被反馈到相对晶体管的基极(输入)。输入S与BJT的输出进行线或运算,其集电极连接用作输出Q(R1 / R3的结点)。输入R与输出BJT进行线或,其集电极连接用作输出Q'(R2 / R4的结)。

电路第一次加电时,两个晶体管都不会在很小的几分之一秒内就被正向偏置到饱和区,这意味着Q和Q'都处于逻辑电平1。每个集电极上的可用电压都馈入基极反向晶体管的极性,使其正向偏置到饱和区。首先变为正向偏置的晶体管将首先开始导通电流,这反过来将导致其集电极电阻两端发生电压降,从而将其输出设置为逻辑电平0。集电极电压的下降将阻止相反的晶体管变得偏见 因此,设置触发器的初始状态。从根本上说,这是导致无法预测的结果的硬件竞争条件。


您能否以所提供的链接,但更简单地说,是电路动画?我正在上初学者本科课程
CodyBugstein 2013年

3

如您所说,它是不确定的。实际上,存在瞬态或怪异现象,应将锁存器置于特定状态,但不能保证它将处于哪种状态。这是由两个门的失配引起的,这两个门将定义给定的初始状态(基本上电路不会不能像真正的数字SR锁存器一样工作,而是像现实生活中那样复杂的模拟电路。初始输出将或多或少随机的,任一Q=1 and ~Q=0Q=0 and ~Q=1

除非有数据表明确提及,否则我不会依赖选择一种状态,因为实际的初始状态会在批次中的不同部分,板上放置,环境因素(温度/湿度/等)和老化之间发生变化。 (决不是完整的因素清单)。

定义状态的最佳方法是在启动后声明置位或复位以使SR锁存器进入已知状态。

附带说明一下,一般情况下,同时声明S和R的SR锁存器也会导致未定义的行为,并且您依赖类似的伏都教来设置输出(实际实现可能会关闭两个输出,随机切换两个,将两个输出都打开,等等。正如超级猫所说,如果一个引脚在另一引脚之前未被置为有效,则SR锁存器可以进入已知状态,因为只有一个引脚被置为有效。其他类型的锁存器/触发器可以定义不同的行为,例如JK触发器定义同时声明两个引脚以切换输出(Q =〜Qprev,〜Q = Qprev)。


但是我的问题是,如果两个输入都依赖于尚不存在的输入,那么如何将其设置为任何值?这就像“您将我举到空中,然后我将您举起,我们都将漂浮在空中”的情况一样
CodyBugstein 2013年

2
@Imray-刚供电时,触发器的一侧总是比另一侧更胜一筹。由于轻微的时序不匹配,它通常总是以相同的方式加电,但是这种类型的设备无法保证。
安迪(aka Andy)

1
究竟。这取决于不匹配的现象。您不必将双方视为完全相同。他们不是。其中一个速度较慢,另一个速度较快,这将导致其中一个首先启动。
古斯塔沃·利托夫斯基2013年

是的,我将依靠这种不匹配行为来确保初始状态为“有效”(我们不会得到Q =〜Q),但是我不会依靠这种行为来确保Q始终在启动时处于特定状态,因为批次之间的零件可能会有所不同,甚至同一零件在整个温度/时间内也会发生变化。当然,数据表可能另有说明,但总的来说,我不会依赖它。
helloworld922

当两个输入均处于“活动”状态时,定义锁存器的行为是很常见的。低了NAND锁存器],提供其输入端的一个前明显的其他变为无效。
2013年

2

请记住,门是反向的。这提供了正反馈回路。假设S和R均为零,且一个输出为一,则该输出将反馈到另一门,以迫使另一输出为零。这样,门处于两个稳定状态之一。

一旦将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,因此没有变化。


我不知道如果没有实际执行的输入,Q'怎么可能是一个。
CodyBugstein 2013年

同样,仅当Q OF和Q#之一为1时,才处于稳定状态。如果不是(例如,在加电时),则门将迅速呈现两个稳定状态之一,具体取决于两个门的实际速度等。一旦门是稳定的,您就可以使用两个输入在稳定状态之间切换。
DoxyLover

1

我认为您要询问的重要部分与以下事实有关:锁存器在未知状态下加电,因此我们如何将其变为已知状态。您需要记住,如果“或非”门的任何一个输入为1,那么无论另一个输入的状态如何,输出都必须为0。因此,应用SET或RESET输入组合将始终迫使锁存器进入置位或复位状态,而与锁存器的先前状态无关。


是的,您了解我的问题!但是,我仍然不满意您所写的内容。假设从未插入过闩锁,并且突然间第一次插入了x和y。如果它们不可能越过初始门,它们将如何对Q产生影响?
CodyBugstein

我假设您的意思是R和S输入得到一些值X和Y。如果X或Y为1,则该NOR门的输出必须为0 ...这就是NOR门的工作方式。因此0反馈到另一个NOR门,该门的输入可能为0(如果X为1,则Y为0,反之亦然)。因此,现在第二个“或非”门有两个输入均为0,并且其输出必须为1。唯一无法确定Q和Q'会发生什么情况的情况是,如果X和Y(都意味着S和R)都为接通电源后立即设置为0。正如其他人指出的那样,这是一个不稳定的状态。
乔·哈斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.