23 / 63 · 概念
组合选择与寄存输出的延迟
分析将 MUX 结果存入寄存器后,接口与延迟发生的变化。
课时内容可免费阅读,选课后可保存学习进度。
为什么给输出加寄存器
MUX多路选择器 根据选择信号,把多个输入之一连接到输出的组合电路。必须规定选择位与输入编号的对应关系。了解更多的组合输出可能在选择信号或数据每次变化时改变。在其后放置寄存器寄存器 存储多位状态的电路。本课程中的同步寄存器在时钟边沿存储指定输入。了解更多,可使下一级使用在时钟边界确定的值,但观察时刻和延迟也随之改变。
将边沿 k 之前准备好的输入记为 ,该边沿后的存储值记为 ,则有:
谈论延迟时,必须同时规定何时给出输入、何时观察输出。对于输入和输出都定义为寄存器输出的接口,中间寄存器级数决定周期延迟。
先画一张简短时间表
| 边沿前 | a | b | sel | y | 边沿后 q |
|---|---|---|---|---|---|
| 1 | 0 | 1 | 0 | 0 | 0 |
| 2 | 0 | 1 | 1 | 1 | 1 |
| 3 | 1 | 0 | 1 | 0 | 0 |
若 sel 在边沿 1 与 2 之间改变,y 会先变化,q 则保持到边沿 2。若直接把 q 的变化与输入变化比较,正常行为也可能看起来像差一个周期的错误。
各列表示有顺序的观察时刻,并非等间隔时间轴。此处 a=0、b=1。观察 sel 改变后、下一边沿到来前 q 保持不变的区间。
查看波形数据
| 信号 | 波形 | 总线值 |
|---|---|---|
| event | 23452 | E1 after → sel → 1 → E2 after → sel → 0 → E3 after |
| sel | 01.0. | |
| y | 01.0. | |
| q | 0.1.0 |
寄存器没有解决的问题
输入在捕获边沿附近不稳定时,即使加了寄存器也不安全。若直接使用来自另一时钟域的选择信号,就需要另行设计同步机制。加寄存器也不代表组合输出 y 的毛刺完全消失;必须同时审查接口是否只使用 q,以及其他路径是否还使用 y。
自己试试
考虑同一时钟下的“输入寄存器 → MUX → 输出寄存器”。输入寄存器在边沿 k 更新的新值,通常会在哪个边沿反映到输出寄存器?
阅读解释
正常的单周期同步路径会在边沿 k+1 捕获新值。在边沿 k,输出寄存器看到的是输入寄存器的旧值;新值要经过 clock-to-Q 与组合延迟,才能准备好供下一边沿使用。不能认为新值在同一边沿立即穿过两个寄存器。
✓ 已学习