异步复位信号在跨时钟域CDC中的处理原则

今天,继续学习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 设计中的最佳实践,尤其适用于跨时钟域复位管理或多模块协同启动场景。

相关推荐
SomeBottle15 天前
【小记】图片托管从又拍云迁移到腾讯云 EO + COS(兼容图片处理参数)
python·计算机网络·学习笔记·对象存储·cdn·折腾
2601_9623878215 天前
学习笔记DAY1:Python编程从0开始学起,从自学入门到精通
人工智能·网络爬虫·学习笔记·网页开发·python编程
软件开发技术深度爱好者17 天前
动态数学软件GeoGebra的使用
学习笔记·数学广角·科普向未来
擎天柱工坊20 天前
干货 | RK3588硬件全开源设计笔记1-芯片PCB叠层阻抗设计
学习笔记·rk3588·pcb设计·芯片特性·叠层设计·阻抗设计
常驻客栈23 天前
B-深入理解计算机系统第3版之第11章:网络编程
开发语言·笔记·学习笔记·常驻客栈·深入理解计算机系统
常驻客栈23 天前
B-深入理解计算机系统第3版之第10章:系统级 I/O
开发语言·笔记·学习笔记·常驻客栈·深入理解计算机系统
SomeBottle1 个月前
【小记】上手 Pi,记录一下我的 AI 编码实践
学习笔记·ai agent
hsjiasb1 个月前
FreeRTOS学习(三十九)——最终总结
学习·学习笔记·freertos
常驻客栈1 个月前
B-深入理解计算机系统第3版之第2章:信息的表示和处理
笔记·学习笔记·常驻客栈·深入理解计算机系统·经典书籍