3.3 锁存器、触发器与寄存器
第 3.1、3.2 节的电路会立即“忘记”:输入改变,组合逻辑结果也随之改变。处理器还必须保存操作数、地址、指令和中间结果。能够记忆的电路具有状态(state),也就是由过去带到现在的信息。
反馈产生一位记忆
反馈(feedback)把电路的一部分输出送回输入。两个交叉连接的或非门可以组成 SR 锁存器(SR latch)。S 表示置位,R 表示复位,Q 是保存的比特。
| S | R | 下一状态 Q | 含义 |
|---|---|---|---|
| 0 | 0 | 原来的 Q | 保持 |
| 1 | 0 | 1 | 置位 |
| 0 | 1 | 0 | 复位 |
| 1 | 1 | 禁止 | 两个或非门输出都被压为低电平 |
保持行是它与组合逻辑最关键的差别。S=R=0 时,下一状态 Q 不能只由当前两个输入决定,还取决于以前保存的值。
对 NOR 型 SR 锁存器来说,S=R=1 是禁止输入,因为 Q 与它的反相信号 Q̅ 会同时变成 0。两个输入一起回到 0 时,极小的时序差异都可能决定最终状态,设计不能依赖这种释放过程。
实验 1——保存、保持、复位并破坏约定
按不同顺序施加 S、R 组合。历史表会直观显示:相同的 00 输入既可能保持 Q=0,也可能保持 Q=1。
检查理解
时钟规定存储何时改变
如果状态能在输入变化时随时改变,大型系统就很难协调。时钟(clock)是一种重复变化的定时信号。时钟边沿(clock edge)是信号从 0 变为 1 或从 1 变为 0 的瞬间。
D 触发器(D flip-flop)在有效时钟边沿采样数据输入 D,把该比特保存到 Q,直到后续有效边沿到来。
| 事件 | D | 下一状态 Q |
|---|---|---|
| 没有有效时钟边沿 | 任意 | 原来的 Q |
| 有效时钟边沿 | 0 | 0 |
| 有效时钟边沿 | 1 | 1 |
字母 D 可以理解为“数据(data)”。D 触发器不再需要把普通数据分别拆成置位和复位控制:采样边沿到来时,Q 直接取得 D 的值。
寄存器同时保存多位
寄存器(register)是一组共同接受控制的触发器。四个 D 触发器可以保存一个 4 位字:
| 触发器 | 保存的位置 |
|---|---|
| Q3 | 最高有效位 |
| Q2 | 下一位 |
| Q1 | 下一位 |
| Q0 | 最低有效位 |
寄存器可以支持多种模式:
- 保持: 保存全部比特;
- 并行装入: 在一个边沿内把 D3…D0 复制到 Q3…Q0;
- 左移: 每个已保存比特向左移动,并从右侧串入一位;
- 右移: 每个已保存比特向右移动,并从左侧串入一位。
例如,把 1010 左移并从右侧串入 1,下一边沿后会得到 0101。由于位宽仍是 4 位,原来的最左位会被丢弃。
实验 2——在时钟边沿控制寄存器
选择模式,设置并行或串行输入,再发出时钟脉冲。状态轨迹会区分“改变输入”和“真正写入寄存器”。
检查理解
锁存器、触发器和寄存器不是同义词
| 元件 | 容量 | 何时可能改变 |
|---|---|---|
| SR 锁存器 | 1 位 | 由控制电平和反馈决定 |
| D 触发器 | 1 位 | 在有效时钟边沿 |
| 寄存器 | 多位 | 通常在同一个有效边沿一起改变 |
后续章节会看到 8086 的 AX、BX、指令指针和标志寄存器。在使用这些具体寄存器之前,下一节先研究时钟、计数器,以及保证边沿采样可靠的时序约束。