今天,继续学习CDC跨时钟域问题。看下图:

这张图片展示的是数字电路设计中一个非常关键的概念:复位同步化(Reset Synchronization),特别是针对异步复位信号的同步释放(de-assertion),以避免亚稳态和确保系统可靠启动。
一、整体结构概览
图像分为左右两部分:
-
左侧 :电路图 ------ 展示了如何用两个触发器(F2, F3)对异步复位信号
rst_n进行同步化处理,输出同步后的复位信号o_rst_n。 -
右侧 :时序波形图 ------ 展示了输入异步复位
rst_n、时钟clk_B和输出同步复位o_rst_n的时间关系,特别标注了"Synchronous de-assert"(同步释放)。
二、左侧电路图详解
1. 元件说明:
-
rst_n:异步低电平有效复位信号(active-low asynchronous reset)。它可能来自外部或不同时钟域,因此是"异步"的。
-
clk_B:目标时钟域的主时钟。所有同步操作都基于这个时钟。
-
F2, F3:两个D触发器(Flip-Flop),构成经典的"双级同步器"结构。
-
o_rst_n:经过同步处理后的复位信号,用于驱动本时钟域内的其他逻辑。
2. 连接方式:
-
rst_n同时连接到 F2 和 F3 的异步复位端(通常标记为 CLR 或 RST,图中用小圆圈表示低电平有效)。 -
F2 的数据输入 D 接高电平(T = 1,即常数1),时钟接
clk_B。 -
F2 的输出 Q 连接到 F3 的数据输入 D。
-
F3 的时钟也接
clk_B,其输出 Q 即为o_rst_n。 -
注意:F2 和 F3 的异步复位端都被
rst_n控制 ------ 这意味着当rst_n=0时,两个触发器都会被强制清零(输出0);当rst_n=1时,它们开始在时钟边沿采样数据。
✅ 这是一个标准的"异步复位 + 同步释放"电路结构。
三、右侧时序波形图详解
1. 信号定义:
-
rst_n(紫色):原始异步复位信号。在某个时刻被拉低(assert),然后又被拉高(de-assert)。
-
clk_B(灰色):目标时钟域的时钟,周期性方波。
-
o_rst_n(紫色):同步后的复位输出信号。
2. 关键行为分析:
(1)复位断言(Assert)阶段:
-
当
rst_n被拉低时,F2 和 F3 立即被异步清零 →o_rst_n立刻变为低电平(即使不在时钟边沿)。 -
这保证了复位能立即生效,不受时钟限制 ------ 符合"异步复位"的特性。
(2)复位释放(De-assert)阶段:
-
当
rst_n被拉高(释放)时,F2 和 F3 不再被强制清零,但它们的输出不会立刻变化。 -
F2 在下一个
clk_B上升沿采样 D=1 → 输出变高。 -
F3 在再下一个
clk_B上升沿采样 F2 的输出(此时已是1)→ 输出变高。 -
因此,
o_rst_n是在第二个时钟上升沿之后才从低变高 ------ 实现了"同步释放"。
📌 图中标注 "Synchronous de-assert" 并指向
o_rst_n上升沿的位置,强调这是与时钟对齐的释放动作。
四、为什么需要这样做?------ 设计动机
问题背景:
如果直接使用异步复位信号去复位多个寄存器,而该复位信号在释放时没有与时钟对齐,可能导致:
亚稳态(Metastability):某些寄存器在复位释放瞬间处于不确定状态。
复位不一致(Reset Skew):不同寄存器在不同时间退出复位状态,导致逻辑错误。
功能异常:比如计数器未归零就开始计数,状态机进入非法状态等。
解决方案:
通过两级触发器同步器,将异步复位的释放过程同步到目标时钟域,确保:
✅ 所有受 o_rst_n 控制的寄存器在同一时钟周期内同时退出复位状态
✅ 避免亚稳态传播到后续逻辑
✅ 满足建立/保持时间要求,提高系统可靠性
五、为何只用两级?
-
第一级(F2)负责捕获异步信号的变化,可能会进入亚稳态。
-
第二级(F3)提供一个时钟周期的时间来让第一级稳定下来,从而大大降低亚稳态传递的概率。
-
在实际工程中,对于复位信号这种低频且重要的控制信号,两级同步器已足够安全(MTBF > 系统寿命)。
六、总结:核心思想
"异步复位,同步释放"
-
Assert(置位):异步发生,立即生效 → 快速响应复位需求。
-
De-assert(释放):同步于时钟边沿 → 保证系统安全、一致地恢复正常运行。
这是一种广泛应用于 FPGA/ASIC 设计中的最佳实践,尤其适用于跨时钟域复位管理或多模块协同启动场景。