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

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

3天内不再提示

什么是复位同步电路 reset synchronizer?

要长高 来源:eetop 作者:eetop 2024-02-19 09:21 次阅读

什么是复位同步电路reset synchronizer?

下图是一个最简单的复位同步电路。这个电路的输出rstn_sync用作后续电路中D flip flop的复位信号

1610588852447210.png

这个电路的工作原理是:

-PorZ低电平,复位同步电路里的两个D flip flop都被复位。电路的输出rstn_sync为0,后续电路被复位。

-PorZ由低变高。clk上升沿到来时,第一个D flip flop先变1。过一个周期,第二个D flip flop变1,rstn_sync变1,后续电路离开复位状态,开始正常工作。

-如果PorZ由低变高和clk上升沿离得很近,第一个D flip flop可能进入亚稳态(metastability)。不过没关系,第二个D flip flop的输出rstn_sync还是稳定的。复位同步电路的主要功能就是保障rstn_sync是稳定的0或1,在芯片的有生之年不发生亚稳态(或亚稳态的机率小到忽略不计)。同时,保障rstn_sync相对于clk有一个固定的时序关系。下面详细讨论。

为什么需要复位同步电路reset synchronizer?

这和D flip flop一个比较隐蔽的timing指标有关– removal/recovery time。D flip flop对时钟沿active edge和复位的release edge是有时序要求的。通常,D flip flop复位端的release edge必须要滞后时钟active edge一段时间(removal time),而且还要超前下一个时钟active edge一段时间(recovery time)。如果有违例,那这个D flip flop就会进入亚稳态,在后仿中显示为X。

复位同步电路reset synchronizer的输出rstn_sync相对于时钟clk有一个固定的时序关系。在PnR (place & route)中,工具构造buffer tree去buffer rstn_sync,并算出buffer后rstn_sync到后续每个D flip flop复位端的时间,通过插入或调整buffer,保障后续电路中每一个D flip flop的复位端都满足removal/recovery要求。反之,如果rstn_sync相对于时钟clk没有有一个固定的关系,那工具就无从下手了,也就无法保障removal/recovery要求了。

顺便说一下,综合工具是不查removal/recovery time的。如果复位电路上有错,通常会在设计流程很后面才发现,改起来代价也会高一些。所以一定要在一开始就重视复位电路。

为什么复位同步电路reset synchronizer自己不会进入亚稳态?

前面讲了,第一级的D flip flop是有可能进入亚稳态。关键在于第二级。第二级的D输入端在第一个clk到来的时刻仍是稳定的低电平(第一级的输出此时尚未变成亚稳态X),第二级的的状态不需要改变,仍旧保持原来复位后的0状态。等到第二个clk到来的时候,如果第一级已经不在亚稳态了,第二级的D输入就是一个稳定的1,那第二级的输出rstn_sync自然就变成稳定的1了。即使第一级在第二个clk到来的时候没有完全走出亚稳态,只要第一级的输出不在中间值附近,第二级仍会把第一级的输出当成0或1,第二级的输出rstn_sync也就因此为稳定的0或1。这也就是为什么有时候复位同步电路reset synchronizer的latency是在1-3个时钟之间。

有条件的同学,不妨跑一下Spectre sim,观察一下D flip flop内部的信号,加深removal/recovery time的理解。眼见为实。

如果两个D flip flop还不够MTBF指标(发生亚稳态的概率仍不够小),可以再加第三级。

有些标准元库中有专门的同步电路,synchronizer cell。应该尽量使用这种synchronizer cell,比自己用两个D flip flop搭更可靠。专门的synchronizer第二级是高增益的,大大降低第二级进入亚稳态的可能性。

复位同步电路reset synchronizer能加到扫描链里吗?

1610813938274129.png

这里加了两个MUX,这样可以让工具把同步复位电路的两个D flip flop连到scan chain里,增加test coverage。

使用复位同步电路reset synchronizer需要注意的地方

一个复位同步电路reset synchronizer只能用到一个时钟域。如果有几个不同步的时钟域,就要考虑使用多个复位同步电路。同步的时钟域可以考虑复用一个复位同步电路reset synchronizer,但要做得仔细一些。

复位同步电路reset synchronizer有什么弊病吗

复位同步电路reset synchronizer其实只在复位信号release的时候派上用场。复位结束后,这个电路其实就没用了。但这个电路的时钟还在switch,这个电路还在耗电。如果是高速时钟,这个耗电就可观了。低功耗设计,就要考虑是否可以关掉时钟。这个根据不同场景,就非常复杂了,需要非常小心。

复位同步电路reset synchronizer是必须的吗?

很多人通常不加思索一上来就加上同步复位电路reset synchronizer。这种条件反射本身是好习惯。

如果精益求精,那就要多思考一下了。有些场景是不需要复位同步电路reset synchronizer的。

复位的目的是让电路有个明确的起始状态。如果不需要明确的初始状态,而且电路跑一段时间后能清除所有不确定状态,进入正常状态,那就可以考虑不用复位同步电路。例如FIR。如果使用场景中可以容忍初始输出为垃圾,异步复位是可以的。

还有一个被99%的设计者忽略的场景。如果复位信号release的时候,时钟还没有启动,那就根本不需要复位同步电路reset synchronizer。很多时候,芯片是内部oscillator, PLL提供时钟的。而oscillator, PLL启动都需要时间的。如果复位在这段时间内release,那就不需要同步复位电路reset synchronizer了。在低功耗设计中,尤其是多个内部时钟域的场景,省下的功耗就可观了。当然,设计要做得非常仔细。

还有一个场景就是内部产生的复位信号。做得精妙的设计,可以保证在内部复位release的时候没有时钟,也就不需要什么复位同步电路reset synchronizer了。内部产生复位信号是一个很有效的设计技巧。这个技巧复用现成的reset network同时将很多D flip flop清零,省去了在D flip flop的D输入逻辑(D input logic cone)加上清零条件,可以节省很多门。

复位同步电路reset synchronizer在RTL里的实现

通常做成一个单独的module,在主设计中例化这个module。

好了,希望复位同步讲全面了。

审核编辑:黄飞

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

    关注

    6

    文章

    740

    浏览量

    134572
  • 复位电路
    +关注

    关注

    13

    文章

    308

    浏览量

    44276
  • 低电平
    +关注

    关注

    1

    文章

    76

    浏览量

    13089
  • 复位信号
    +关注

    关注

    0

    文章

    50

    浏览量

    6169
收藏 人收藏

    评论

    相关推荐

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

    针对异步复位同步释放,一直没搞明白在使用同步化以后的复位信号时,到底是使用同步复位还是异步
    发表于 06-21 09:59 809次阅读
    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>?

    为什么需要复位电路?漫谈复位reset

    在IC设计中,把复位和时钟电路称为最重要的两个电路一点也不为过。前者复位电路把IC设计的电路引导
    的头像 发表于 01-19 16:41 739次阅读
    为什么需要<b class='flag-5'>复位</b><b class='flag-5'>电路</b>?漫谈<b class='flag-5'>复位</b><b class='flag-5'>reset</b>

    同步复位sync和异步复位async

    )。其实做起来也并不难,我推荐一种我经常使用的方式吧:那就是在异步复位键后加上一个所谓的“reset synchronizer”,这样就可以使异步复位信号
    发表于 11-14 16:03

    同步复位和异步复位的比较(转载)

    。具体方式是:在异步复位后加上一个所谓的“reset synchronizer”,这样就可以使异步复位信号同步化,然后,再用经过处理的
    发表于 05-05 23:11

    请问一下Reset信号如何实现同步

    首先来复习一个更加基础的概念:同步reset和异步reset同步reset(synchronous r
    发表于 11-09 15:04

    HT66Fx0系列MCU的Reset复位电路应用介绍

    HT66Fx0系列MCU的Reset复位电路应用介绍HT66Fx0 系列MCU 的Reset 复位电路
    发表于 03-27 08:38 35次下载

    复位稳定放大器:The Reset Stabilized A

    复位稳定放大器:The Reset Stabilized Amplifier The reset stabilized amplifier is a form of chopper-stabilized amplifier a
    发表于 05-16 16:12 1146次阅读
    <b class='flag-5'>复位</b>稳定放大器:The <b class='flag-5'>Reset</b> Stabilized A

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

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

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

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

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

    针对异步复位同步释放,一直没搞明白在使用同步化以后的复位信号时,到底是使用同步复位还是异步
    的头像 发表于 04-27 18:12 4244次阅读
    详细讲解<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>?

    STM32下载后无法自动复位,需手动复位 下载程序时,勾选reset and run后仍不可自动复位

    项目场景:STM32下载后无法自动复位,需手动复位下载程序时,勾选reset and run后仍不可自动复位问题描述:STM32下载后无法自动复位
    发表于 01-17 12:36 11次下载
    STM32下载后无法自动<b class='flag-5'>复位</b>,需手动<b class='flag-5'>复位</b> 下载程序时,勾选<b class='flag-5'>reset</b> and run后仍不可自动<b class='flag-5'>复位</b>

    Reset复位电路的PCB布局布线要求

    Reset复位电路的PCB布局布线要求 —来源:瑞芯微RK3588 PCB设计白皮书 Reset复位电路
    的头像 发表于 08-03 07:45 639次阅读
    <b class='flag-5'>Reset</b><b class='flag-5'>复位</b><b class='flag-5'>电路</b>的PCB布局布线要求

    同步复位与异步复位的区别

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

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

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

    Linux的reset复位API说明

    入的reset资源进行解复位操作 参数 : rstc:指向申请reset资源的设备句柄 返回 : 成功:返回0 失败:返回错误码 reset_control_assert int re
    的头像 发表于 09-27 14:14 452次阅读