# 4.1. SR Latch：如何存储 1 Bit

到此为止，我们知道了如何使用逻辑门构建计算单元，但不管是基础的逻辑门、加法器，还是复杂的 ALU, 其任意时刻的输出都仅仅与当前的输入相关，而与之前的输入或输出无关，这种电路叫着组合逻辑电路（Combinational Logic Circuit）。

组合逻辑电路的名字反应了其内在本质：即任意时刻的输出仅仅是当前输入的组合结果。组合逻辑电路是一个无状态的功能模块，这种电路具备计算能力但没有存储能力，因为只要输入改变，作为计算结果的输出就会发生改变，电路无法将结果“锁”在电路内部以供“将来”使用。

想要打破这种限制，我们可以尝试着将电路的输出作为反馈，再次作为输入信号接入到电路中，以期望让电路形成一种稳定状态。最简单的稳定态电路可以使用两个非门（Not Gate）组成：

![Two NOT Gates](/files/-MdWKJcOKAFsO14CxdvT)

通过将该电路输出引脚 Q 又接入到输入引脚，这样该电路将一直保持稳定状态，根据信号的初始设置不同，Q 将一直处于状态 1 或者处于状态 0。但由于该电路没有输入引脚，因此并没有什么实用价值，下面我们使用两个或非门（NOR Gate）构建一个具有输入引脚的等价电路：

![Two NOR Gates](/files/-MdWKYX9RVF3TbUnleUP)

> &#x20;或非门（NOR Gate）的真值表为：

| A | B | A NOR B |
| - | - | ------- |
| 0 | 0 | 1       |
| 0 | 1 | 0       |
| 1 | 0 | 0       |
| 1 | 1 | 0       |

当 S = 0, R = 0 时，该电路与上面由两个非门组成的电路完全等价。我们将该电路稍稍“旋转”一下，得到如下电路：

![SR Latch](/files/-MdWKq24N9GT4XsRdVQ2)

该电路暴露了两个输入引脚：S 与 R, 此处我们要求输出引脚 Q 与 ^Q 的信号互反。电路的真值表如下：

| #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  |

该电路的稳定状态只有以上 5 种，我们依次来分析分析当设置 S 与 R 时，输出信号 Q 与 ^Q 的情况：

1. &#x20;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.

   &#x20;竞态条件存在的根本原因是因为电子信号的传递是需要时间的，关于电路设计中时间的概念会在后续讨论时钟时详细讨论。
2. Set S = 0, R = 0 \
   此时不管是 Q = 0, ^Q =1, 还是 Q = 1, ^Q = 0 都可以是电路处于稳定状态，而电路最终会处于何种状态取决于 Q 与 ^Q 的上一个状态。实际上，稍加分析一下就会发现，不管是 #4 -> #2 还是 #3 -> #1, Q 与 ^Q 都会保持各自之前的状态不变。
3. Set S = 1, R = 0 \
   S 为 1 必然导致 ^Q 为 0, 而 R 也为 0, 所以 Q 为 1. 注意此时 Q 与 ^Q 的状态与其之前的状态无关，当 S = 1 时，Q 的值必然被设置为 1.
4. 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），时序电路是构造存储电子芯片的基础。时序电路与组合电路的区别在于反馈模式，反馈是将过去的状态与当前的输入组合在一起，用以确定当前的输出，这里本质上是在电路设计中引入了时间的概念，即电路当前的输出不仅与当前的输入有关，还与“之前”的电路状态有关。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://s2.shizhz.me/s2e4/1.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
