Keyboard shortcuts

Press or to navigate between chapters

Press ? to show this help

Press Esc to hide this help

给电路一个共同节拍

复习

  • D 锁存器可以写入并保存一个比特
  • 使能端打开期间,输出会一直跟随输入
  • 多个部件若随时变化,步骤便无法排出先后

TL;DR

  • 时钟是一根周期性地在 0 和 1 之间变化的信号线
  • 全机用共同边沿约定何时交接数据
  • 时序图把多根信号的变化画在同一条时间轴上

正文

  想象几十个人一起搬箱子。有人还没把箱子放稳,下一个人已经伸手来拿,结果只会乱成一团。

  电路也一样。运算需要传播时间,存储需要明确的写入时刻。于是我们给整台机器放一个节拍器:滴答,准备;滴答,交接。

  这个节拍器就是时钟

一根反复跳变的线

      ┌───┐   ┌───┐   ┌───┐
CLK ──┘   └───┘   └───┘   └──
      ↑       ↑       ↑
    上升沿  上升沿  上升沿

  从 0 跳到 1 的瞬间叫上升沿,从 1 跳到 0 叫下降沿。以后可以约定:“所有存储部件都只在上升沿收下新数据。”这样,全机便有了共同的交接时刻。

  一高一低走完一轮,叫一个时钟周期。每秒完成多少个周期,叫作频率,单位是赫兹。频率不能无限提高,因为组合逻辑需要时间让结果传播并稳定;下一次边沿来得太早,存储部件可能收下尚未算完的值。

把先后画出来

  电路图擅长说明“线接到哪里”,却不擅长说明“谁先变、谁后变”。因此我们让横轴表示时间,每一行画一根信号:

CLK  ──┐   ┌───┐   ┌───┐
       └───┘   └───┘   └──

D    ──────┐       ┌────────
           └───────┘

Q    ──────────────┐
                   └────────

  这种图叫作时序图。高线表示 1,低线表示 0,竖直变化表示信号发生跳变。多行波形共用一条时间轴,所以能直接比较变化顺序。

读图先找边沿

  假设存储部件只在上升沿读取 D。读图时,只需依次检查每个上升沿:

  1. 找到上升沿
  2. 看边沿到来前 D 是多少
  3. Q 稍后更新为这个值,并保持到下一次采样

  D 在两个边沿之间即使变化多次,也不会立刻改写 Q。现实里,D 还要在边沿前后稳定一小段时间,分别满足建立时间和保持时间。这里不计算具体数值,只记一句:铃响时,数据必须已经站稳。

  时钟和读图方法都有了。下一章,我们把“一段时间内开门”的锁存器改成“只在边沿拍照”的触发器。

思考题

  如果一段组合逻辑要 8 ns 才能稳定,时钟周期却只有 5 ns,会有什么风险?

小结

知识点

  • 时钟周期、上升沿与下降沿
  • 时钟让全机按共同节拍交接数据
  • 时序图用共同时间轴展示多根信号
  • 数据必须在采样边沿附近保持稳定

思考题答案(仅供参考)

  下一次采样发生时,结果可能仍在传播和变化,存储部件会收下错误或不确定的值。因此时钟周期必须给最慢的数据通路留出足够时间。

协议

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

封面图

设计师 | 南国微雪