Altifigence Academy

23 / 63 · 概念

组合选择与寄存输出的延迟

分析将 MUX 结果存入寄存器后,接口与延迟发生的变化。

为什么给输出加寄存器

MUX多路选择器 根据选择信号,把多个输入之一连接到输出的组合电路。必须规定选择位与输入编号的对应关系。了解更多的组合输出可能在选择信号或数据每次变化时改变。在其后放置寄存器寄存器 存储多位状态的电路。本课程中的同步寄存器在时钟边沿存储指定输入。了解更多,可使下一级使用在时钟边界确定的值,但观察时刻和延迟也随之改变。

将边沿 k 之前准备好的输入记为 ak,bk,ska_k,b_k,s_k,该边沿后的存储值记为 qk+1q_{k+1},则有:

yk=sk‾ak+skbk,qk+1=yky_k=\overline{s_k}a_k+s_kb_k,\qquad q_{k+1}=y_k

谈论延迟时,必须同时规定何时给出输入、何时观察输出。对于输入和输出都定义为寄存器输出的接口,中间寄存器级数决定周期延迟。

先画一张简短时间表

边沿前absely边沿后 q
101000
201111
310100

若 sel 在边沿 1 与 2 之间改变,y 会先变化,q 则保持到边沿 2。若直接把 q 的变化与输入变化比较,正常行为也可能看起来像差一个周期的错误。

各列表示有顺序的观察时刻,并非等间隔时间轴。此处 a=0、b=1。观察 sel 改变后、下一边沿到来前 q 保持不变的区间。

y 先变化,q 随后跟进的顺序
查看波形数据
波形数据:每个字符表示一个区间,点表示保持前一状态,p 表示一个时钟周期。
信号波形总线值
event23452E1 after → sel → 1 → E2 after → sel → 0 → E3 after
sel01.0.
y01.0.
q0.1.0

寄存器没有解决的问题

输入在捕获边沿附近不稳定时,即使加了寄存器也不安全。若直接使用来自另一时钟域的选择信号,就需要另行设计同步机制。加寄存器也不代表组合输出 y 的毛刺完全消失;必须同时审查接口是否只使用 q,以及其他路径是否还使用 y。

自己试试

考虑同一时钟下的“输入寄存器 → MUX → 输出寄存器”。输入寄存器在边沿 k 更新的新值,通常会在哪个边沿反映到输出寄存器?

阅读解释

正常的单周期同步路径会在边沿 k+1 捕获新值。在边沿 k,输出寄存器看到的是输入寄存器的旧值;新值要经过 clock-to-Q 与组合延迟,才能准备好供下一边沿使用。不能认为新值在同一边沿立即穿过两个寄存器。

你的选择适用于此浏览器,可随时在页脚更改。