0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

同步复位和异步复位到底该用哪个

FPGA研究院 来源:FPGA研究院 2026-04-22 09:42 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

开篇:复位的困惑

FPGA/数字IC设计的,平时写得最多的可能就是复位逻辑了。但你有没有这种感觉:看别人代码,有的用同步复位,有的用异步复位,有的又搞什么"异步复位同步释放"——到底该用哪个?

说起来,这两个玩意儿看起来简单,但要真让你说清楚什么时候用哪个、为什么,可能还真有点含糊。今天咱就把这事儿彻底聊明白。

同步复位是怎么工作的

同步复位的意思很直接:复位信号必须等到时钟边沿来了才起作用。

举个例子,你在第10ns把复位信号拉低了,但下一个时钟沿在15ns,那寄存器要等到15ns才会被复位,中间这5ns寄存器还是保持原来的状态。

Verilog写起来是这样的:

always @(posedge clk) begin if (rst) q <= 1'b0; else q <= d; end

注意看敏感列表,只有posedge clk,没有复位信号什么事儿。复位信号本质上被当成普通的数据输入来处理。

异步复位是怎么工作的

异步复位就不一样了,它有点像开关——只要复位信号一变,寄存器立马就被复位,根本不鸟时钟在干嘛。

这种设计的好处是"快",坏处嘛,后面再说。

always @(posedge clk or negedge rst_n) begin if (!rst_n) q <= 1'b0; else q <= d; end

敏感列表里多了个negedge rst_n,这就是异步的意思——复位信号一变,逻辑立刻响应。

两种复位到底该怎么选

按我的经验,别急着下结论,先看看各自的脾气。

对比维度 同步复位 异步复位
响应速度 慢(等时钟沿) 快(即时生效)
资源消耗 可能更多(LUT实现) 更少(用专用端口
抗毛刺能力 强(时钟沿过滤) 弱(毛刺直接触发)
亚稳态风险 有(释放时刻)
时钟依赖 强依赖 不依赖
时序分析 简单 复杂

什么时候用同步复位

其实选同步复位的情况还挺多的:

1.高速设计:当你的时钟跑到100MHz往上,异步复位的亚稳态风险就变得很突出。这种时候老老实实用同步复位,时序收敛也更容易。

2.状态机:状态机的复位时机必须精准,否则可能出现"半复位"状态——有些寄存器复位的早,有些晚,状态机直接卡死。同步复位能保证所有寄存器在同一拍复位。

3.多时钟域系统:跨时钟域的复位信号必须各自同步,否则轻则亚稳态,重则整个系统乱套。

4.毛刺敏感的环境:如果你PCB上复位走线很长,或者环境电磁干扰严重,同步复位的"过滤"特性能帮你挡住不少麻烦。

什么时候用异步复位

异步复位也不是一无是处,这些场景它就是香:

1.上电复位:系统上电的时候时钟可能还没稳定呢,这时候需要强制把所有寄存器搞成已知状态。异步复位正好不挑食,有电就能干活。

2.看门狗/紧急复位:出过事儿需要立即清零的场景,等一个时钟周期可能就是灾难。异步复位立竿见影。

3.低速简单逻辑:如果你的设计跑个几十MHz,用异步复位问题不大,而且还能省点资源。

4.时钟可能停止的场景:比如低功耗模式下把时钟关了,同步复位这时候就歇菜了,但异步复位还能用。

实际设计中的最佳实践

光知道什么时候用还不够,实战中还有个黄金法则:异步复位,同步释放

啥意思呢?复位到来的时候,异步生效——保证快速响应;复位撤销的时候,必须跟时钟同步——避免亚稳态。

1406f3a4-3ddb-11f1-90a1-92fbcf53809c.jpg

坑在这里:很多人以为复位"生效"才重要,其实更危险的是"释放"时刻。如果复位释放的时候刚好在时钟沿附近,不同寄存器可能,有的已经退出复位,有的还在复位里,系统直接进入"半初始化"状态,后果不堪设想。

具体怎么实现?两级寄存器打拍同步:

always @(posedge clk or negedge rst_async_n) if (!rst_async_n) begin rst_sync1 <= 1'b0; rst_sync2 <= 1'b0; end else begin rst_sync1 <= 1'b1; rst_sync2 <= rst_sync1; end assign rst_sync_n = rst_sync2;

147f4c00-3ddb-11f1-90a1-92fbcf53809c.jpg

第一级D端接的是1,不是接的复位信号。这个小细节很关键——只有复位释放的那一刻,第一级才会被拉高,然后再过一拍同步出去。这样设计最省资源,也是业界标准做法。

真实案例分享

说个我之前踩过的坑吧。

有个项目,用的是异步复位,设计的时候图省事儿,所有模块都直接用外部复位信号。结果有个模块的复位信号释放在时钟沿附近,引发了亚稳态。

问题来了:功能仿真没问题,时序仿真也过了,但上板子就是不稳定,有时候能跑几个小时,有时候几分钟就挂。

最后怎么修的?老老实实加了两级同步器,给复位信号做了"异步复位同步释放"。之后再也没出过问题。

所以啊,别觉得自己设计简单就不做同步化。异步复位的亚稳态问题是概率性的,不是不报,时候未到。

总结一下

其实这个问题没有标准答案,关键看场景:

高速、时序敏感、多时钟域——用同步复位;

上电初始化、紧急复位、时钟可能停止——用异步复位,但要记得同步释放;

复杂系统——通常采用混合策略,各模块根据需求选择合适的复位方式。

记住,复位设计虽然基础,但它往往是系统稳定性的基石。别图一时省事儿,后面的debug会让你怀疑人生。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    31

    文章

    5627

    浏览量

    130938
  • 同步复位
    +关注

    关注

    0

    文章

    28

    浏览量

    11010
  • 异步复位
    +关注

    关注

    0

    文章

    48

    浏览量

    13727

原文标题:同步复位和异步复位,什么时候用哪个,说清楚才算懂

文章出处:【微信号:FPGA研究院,微信公众号:FPGA研究院】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Xilinx FPGA异步复位同步释放—同步后的复位该当作同步复位还是异步复位

    针对异步复位同步释放,一直没搞明白在使用同步化以后的复位信号时,到底是使用
    发表于 06-21 09:59 2476次阅读
    Xilinx FPGA<b class='flag-5'>异步</b><b class='flag-5'>复位</b><b class='flag-5'>同步</b>释放—<b class='flag-5'>同步</b>后的<b class='flag-5'>复位</b>该当作<b class='flag-5'>同步</b><b class='flag-5'>复位</b>还是<b class='flag-5'>异步</b><b class='flag-5'>复位</b>?

    异步复位同步撤离是什么意思?如何做到异步复位同步撤离呢?

    复位消抖之后的下一件事,[异步复位]()同步撤离。这句话什么意思呢?
    的头像 发表于 12-04 13:57 7045次阅读
    <b class='flag-5'>异步</b><b class='flag-5'>复位</b><b class='flag-5'>同步</b>撤离是什么意思?如何做到<b class='flag-5'>异步</b><b class='flag-5'>复位</b><b class='flag-5'>同步</b>撤离呢?

    同步复位异步复位到底孰优孰劣呢

    异步复位同步释放的理解目录目录同步复位异步复位
    发表于 01-17 07:01

    同步复位异步复位有什么联系与区别,优缺点!

     异步复位原理:异步复位只要有复位信号系统马上复位,因此异步
    发表于 11-30 08:45 10w次阅读
    <b class='flag-5'>同步</b><b class='flag-5'>复位</b>和<b class='flag-5'>异步</b><b class='flag-5'>复位</b>有什么联系与区别,优缺点!

    FPGA设计中的异步复位同步释放问题

    异步复位同步释放 首先要说一下同步复位异步复位的区
    发表于 06-07 02:46 2700次阅读

    如何区分同步复位异步复位

    问:如何区分同步复位异步复位?可以理解为同步复位是作用于状态,然后通过状态来驱动电路
    的头像 发表于 06-11 15:15 7613次阅读

    Xilinx FPGA的同步复位异步复位

    对于xilinx 7系列的FPGA而言,flip-flop支持高有效的异步复/置位和同步复位/置位。对普通逻辑设计,同步复位
    发表于 07-13 09:31 7799次阅读

    同步复位异步复位电路简介

    同步复位异步复位都是状态机的常用复位机制,图1中的复位电路结合了各自的优点。
    的头像 发表于 08-12 15:20 8755次阅读
    <b class='flag-5'>同步</b><b class='flag-5'>复位</b>和<b class='flag-5'>异步</b><b class='flag-5'>复位</b>电路简介

    同步复位异步复位的优缺点和对比说明

    同步复位:顾名思义,同步复位就是指复位信号只有在时钟上升沿到来时,才能有效。否则,无法完成对系统的复位
    发表于 09-14 08:00 0次下载
    <b class='flag-5'>同步</b><b class='flag-5'>复位</b>和<b class='flag-5'>异步</b><b class='flag-5'>复位</b>的优缺点和对比说明

    详细讲解同步后的复位同步复位还是异步复位

    针对异步复位同步释放,一直没搞明白在使用同步化以后的复位信号时,到底是使用
    的头像 发表于 04-27 18:12 6107次阅读
    详细讲解<b class='flag-5'>同步</b>后的<b class='flag-5'>复位</b>是<b class='flag-5'>同步</b><b class='flag-5'>复位</b>还是<b class='flag-5'>异步</b><b class='flag-5'>复位</b>?

    【FPGA】异步复位同步释放的理解

    异步复位同步释放的理解目录目录 同步复位异步复位
    发表于 01-17 12:53 4次下载
    【FPGA】<b class='flag-5'>异步</b><b class='flag-5'>复位</b>,<b class='flag-5'>同步</b>释放的理解

    同步复位异步复位的区别

    请简述同步复位异步复位的区别,说明两种复位方式的优缺点,并解释“异步
    的头像 发表于 08-14 11:49 9130次阅读

    浅析异步复位同步释放与同步复位打拍模块

    异步复位同步释放:rst_synchronizer.v
    的头像 发表于 08-21 09:27 2070次阅读
    浅析<b class='flag-5'>异步</b><b class='flag-5'>复位</b><b class='flag-5'>同步</b>释放与<b class='flag-5'>同步</b><b class='flag-5'>复位</b>打拍模块

    同步复位异步复位到底孰优孰劣呢?

    同步复位异步复位到底孰优孰劣呢? 同步复位
    的头像 发表于 01-16 16:25 3061次阅读

    FPGA同步复位异步复位

    FPGA(Field-Programmable Gate Array,现场可编程门阵列)中的复位操作是设计过程中不可或缺的一环,它负责将电路恢复到初始状态,以确保系统的正确启动和稳定运行。在FPGA设计中,复位方式主要分为同步
    的头像 发表于 07-17 11:12 3869次阅读