跨复位域小结

跨复位域小结

跨时钟域我们比较熟悉,但跨复位域可能就比较陌生了。在平头哥实习的一面中,面试官问了我较多跨复位域的问题,主要还是自己在简历里挖了个坑(就不该写设计复位网络的TAT),所以这篇文章就来简要介绍一下跨复位域中存在的一些问题及解决方法。

异步复位导致的亚稳态

异步复位的释放

复位如果在时钟采样沿的前后的一个时间窗口内释放的话会导致输出的Q端存在亚稳态问题,本质上也是触发器建立时间和保持时间的要求,对复位而言就是Recovery Time和Removal Time的要求。

图1.png

为解决异步复位释放的亚稳态问题,我们可以使用异步复位,同步释放的方式来解决。

图2.png

异步复位的置位

复位的置位也可能导致亚稳态问题,主要场景是电路中有多复位域,我们分析一下下图所示场景。

图3.png

dff1和dff2分别使用不同的时钟和复位信号,dff1先复位,之后dff2再复位。可能存在的问题是arst1置位时,dff1的Q端数据从data向Reset-value跳变时可能不满足dff2的建立/保持时间要求,从而使dff2的Q端出现亚稳态。

以下关于时钟复位的5种情形都可能导致亚稳态

1、clk1和clk2是一样的/同步的;

图4.png

2、clk1和clk2是异步的;

图5.png

3/4、对arst1和arst2均做异步复位,同步释放操作;

图6.png

5、rst2做同步复位;

图7.png

如何安全地处理跨复位域

1、对复位的顺序提出要求

图8.png

arst2在arst1之前置位的话,就不存在dff2的亚稳态问题,这种先复位后级模块的策略可以有效避免亚稳态。

2、增加数据隔离单元

图9.png

在dff1的arst1置位前隔离dff1的输出,将输出钳位到0,避免arst1置位时导致dff2出现亚稳态;

3、通过时钟门控进行数据隔离

图10.png

与数据隔离单元的思想类似,只不过通过门控dff2的方式来完成数据隔离。(门控时钟也可以有效解决异步复位的recovery和removal time的问题,异步复位后再开时钟就不用考虑上述time的检查。

4、通过打拍降低亚稳态概率

图11.png

通过增加一个dff3来减少亚稳态发生的概率。

小结

安全处理跨复位域的做法:

  • 依序对模块进行复位,后级模块先复位
  • 通过数据隔离单元或门控时钟进行数据隔离,避免出现亚稳态;
  • 后级模块通过两级同步寄存器降低亚稳态发生的概率;

平头哥一面中,面试官提问我,ASIC中复位网络的扇出很大,很难保证所有寄存器都满足recovery和removal time的要求,异步复位/同步释放的方式也解决不了该问题,因为有Skew存在,问此时如何保证正常的异步复位功能,且不用考虑recovery和removal time?

当时面试过程中没答出来,于是问了面试官,面试官说异步复位前先把clock关了,复位后再开clock,这样就可以避免考虑recovery和removal time,这个答案震惊到我了,作下记录,感谢平头哥的面试官!

Reference

Reset Domain Crossing

  • 7
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

日拱一卒_未来可期

若复习顺利望有闲钱的同学支持下

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值