Keyboard shortcuts

Press or to navigate between chapters

Press ? to show this help

Press Esc to hide this help

让电路记住一个比特

复习

  • 运算器能根据当前输入立刻给出结果
  • 输入一变,组合逻辑的旧结果就消失
  • 我们需要保存中间结果,才能完成连续运算

TL;DR

  • 把输出反馈到输入,过去就能影响现在
  • 交叉连接的逻辑门可以维持 0 或 1
  • 增加控制输入后,就得到能写入和保持的锁存器

正文

  组合逻辑像一面镜子:面前是什么,它就照出什么;输入一撤,刚才的结果也不复存在。

  想让电路记住过去,一个自然的念头是:把输出绕回来,重新接到输入。 外部信号离开以后,电路仍能用自己的旧输出支撑下一刻。

先试一个会打架的接法

  如果把非门的输出直接接回自己的输入,就会得到:

Q = NOT Q

  Q 是 0,非门就要求它变成 1;Q 是 1,非门又要求它变回 0。电路找不到安稳的位置,只会受到传播延迟影响不断变化。它能产生振荡,却不能可靠地记住一个确定值。

两个门互相照看

  换成两个或非门,让每个门的输出接到另一个门的输入。忽略外部控制时,它有两个稳定状态:

Q = 1,Q̅ = 0
Q = 0,Q̅ = 1

  外部信号可以把电路推到其中一个状态;信号撤走后,交叉反馈仍会把它维持下去。两个稳定状态正好代表一个比特的 0 和 1。

  记忆并不是某个逻辑门突然学会的新本领,而是来自连接方式:旧输出绕回来,成了新输入的一部分。

给记忆装上两个按钮

  我们再加入 S(Set,置位)与 R(Reset,复位),告诉电路要写 1、写 0,还是保持原值。它现在有了一个名字:SR 锁存器

SRQ 的下一状态含义
00保持原值不写入
101写入 1
010写入 0
11不使用两边同时发号施令

  关键是第一行:S、R 都回到 0 后,Q 仍然留在刚才写入的状态。一个比特真的被记住了。

把危险组合藏起来

  S、R 同时为 1 会破坏两个输出应当互为相反数的关系。既然写 0 与写 1 不该同时发生,我们干脆只提供一根数据线 D,再用使能线 E 决定是否写入:

  • E = 0:保持原值
  • E = 1:Q 跟随 D

  电路内部把 D 原样送往一路,再取反送往另一路,因此不会同时要求写 0 和写 1。这就是 D 锁存器

  不过,E 为 1 的整段时间里,锁存器的门一直开着,D 一变,Q 就跟着变。许多部件若同时敞开大门,数据会一路向前乱跑。下一章,我们给全机安排同一个交接节拍。

思考题

  为什么完全切断反馈后,外部写入信号一撤,电路就无法继续保存旧状态?

小结

知识点

  • 反馈让旧输出参与决定新输出
  • 两个稳定状态可以表示一个比特
  • SR 锁存器能够置位、复位与保持
  • D 锁存器用一根数据线避开冲突输入

思考题答案(仅供参考)

  没有反馈时,输出只取决于当前外部输入。写入信号一撤,旧输出也就没有任何信号继续支撑;有反馈时,旧输出会回到输入端,参与维持自身。

协议

  本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

封面图

设计师 | 南国微雪