4.1. SR Latch:如何存储 1 Bit
最后更新于
最后更新于
到此为止,我们知道了如何使用逻辑门构建计算单元,但不管是基础的逻辑门、加法器,还是复杂的 ALU, 其任意时刻的输出都仅仅与当前的输入相关,而与之前的输入或输出无关,这种电路叫着组合逻辑电路(Combinational Logic Circuit)。
组合逻辑电路的名字反应了其内在本质:即任意时刻的输出仅仅是当前输入的组合结果。组合逻辑电路是一个无状态的功能模块,这种电路具备计算能力但没有存储能力,因为只要输入改变,作为计算结果的输出就会发生改变,电路无法将结果“锁”在电路内部以供“将来”使用。
想要打破这种限制,我们可以尝试着将电路的输出作为反馈,再次作为输入信号接入到电路中,以期望让电路形成一种稳定状态。最简单的稳定态电路可以使用两个非门(Not Gate)组成:
通过将该电路输出引脚 Q 又接入到输入引脚,这样该电路将一直保持稳定状态,根据信号的初始设置不同,Q 将一直处于状态 1 或者处于状态 0。但由于该电路没有输入引脚,因此并没有什么实用价值,下面我们使用两个或非门(NOR Gate)构建一个具有输入引脚的等价电路:
或非门(NOR Gate)的真值表为:
当 S = 0, R = 0 时,该电路与上面由两个非门组成的电路完全等价。我们将该电路稍稍“旋转”一下,得到如下电路:
该电路暴露了两个输入引脚:S 与 R, 此处我们要求输出引脚 Q 与 ^Q 的信号互反。电路的真值表如下:
该电路的稳定状态只有以上 5 种,我们依次来分析分析当设置 S 与 R 时,输出信号 Q 与 ^Q 的情况:
Set S = 1, R = 1: Invalid 虽然此时电路可以处于稳定状态,但我们认为其是非法的。因为一来 Q 与 ^Q 都是 0, 违反了我们的约定;二来在将 S, R 同时设置为 0 时会存在一个竞态条件:此时 Q 及 ^Q 理论上都会变为 1, 如果 Q 的值率先传递给 S, 则 ^Q 会变为 0; 而如果是 ^Q 的值率先传递给 R, 则 Q 会变为 0. 即我们无法知道电路的状态变化是 #5 -> #1 还是 #5 -> #2.
竞态条件存在的根本原因是因为电子信号的传递是需要时间的,关于电路设计中时间的概念会在后续讨论时钟时详细讨论。
Set S = 0, R = 0 此时不管是 Q = 0, ^Q =1, 还是 Q = 1, ^Q = 0 都可以是电路处于稳定状态,而电路最终会处于何种状态取决于 Q 与 ^Q 的上一个状态。实际上,稍加分析一下就会发现,不管是 #4 -> #2 还是 #3 -> #1, Q 与 ^Q 都会保持各自之前的状态不变。
Set S = 1, R = 0 S 为 1 必然导致 ^Q 为 0, 而 R 也为 0, 所以 Q 为 1. 注意此时 Q 与 ^Q 的状态与其之前的状态无关,当 S = 1 时,Q 的值必然被设置为 1.
Set S = 0, R = 1 与 S = 1, R = 0 时的状态相反,此时 S = 0 必然导致 Q 被设置为 0.
如果我们将 0 作为任何电路的初始状态的话,可以发现当 S = 1, R = 0 时,Q 总会被设置为 1, 而 S = 0, R = 1 时,Q 总会被重置为 0, 而当 S = 0, R = 0 时,Q 将保持之前的状态不变,将其“锁(Latch)”在电路内部,也就是说,此时该电路具备了存储能力,并且我们可以通过 S, R 的信号对内部值进行修改!
此处 S 表示 Set, R 表示 Reset, 所以该电路叫着 SR Latch。
能够维持两种稳定状态的电路被称为双稳态锁存器(Bistable Latch),由于该电路可以稳定地表示两种状态,因此它具备存储 1 Bit 信息的能力。只要能够存储 1 Bit, 就可以存储任意 Bit, 因为我们制造出了搭建存储芯片的基础积木!
这种将输出又反馈进输入的电路叫着时序电路(Sequential Circuits),时序电路是构造存储电子芯片的基础。时序电路与组合电路的区别在于反馈模式,反馈是将过去的状态与当前的输入组合在一起,用以确定当前的输出,这里本质上是在电路设计中引入了时间的概念,即电路当前的输出不仅与当前的输入有关,还与“之前”的电路状态有关。
A
B
A NOR B
0
0
1
0
1
0
1
0
0
1
1
0
#No
S
R
Q
^Q
#1
0
0
1
0
#2
0
0
0
1
#3
1
0
1
0
#4
0
1
0
1
#5
1
1
0
0