异步复位同步复位跨复位域-RDC

复位树和时钟树一样应该引起重视,因为典型的数字电路中,reset的负载和clock的负载数量一般是相当的。不管是同步复位还是异步复位,对复位树都是有时序要求的

图1.0

同步复位树

对同步复位,一种技术是通过插入FF来实现复位树。这样的好处是,reset不需要在一个时钟周期内到达所有的FF。所以需要几个时钟才能把整个设计复位掉。一个典型的同步复位树如图1.1所示。采用这种技术,同步复位信号可以像其他数据信号一样处理,设计中每个模块的timing分析都很容易,复位树的每个阶段都有合理的扇出。

图1.2

对异步复位,是通过复位同步器来完成复位树的建立。即每个层级都加上一个异步复位同步器如图1.3所示。这种结构的问题就是,不同层级解复位的时间点可能是不一样的。如果设计要求整个芯片在同一个cycle来解复位,那么就需要对复位同步器做平衡设计,保证到达每个复位终点是同一个时钟。同步时钟树也存在这个问题。

图1.3

图1.4

这里至少有了两个reset domain,其中reset domain 1就是包含所有被reset1_n所复位的flop,而reset domain2是包含被reset2_n复位的flop。如果这两个reset domain的flop在functional mode的时候存在逻辑关系,而reset1_n可以单独assert,那么就可能在reset domain2产生metasable。

所以,可以得出结论,产生reset domain crossing issue的条件有:

(1)必须是asynchronous reset assertion。因为synchronous reset的话,无论assertion还是de-assertion其实都是被STA check的。

(2)存在不被这个asynchronous reset给控制的flop。如果reset2_n在reset1_n assert的时候也assert了,那么其实也不会有问题。

什么情况下reset1_n assert,但是reset2_n不assert呢?

例如,如果reset1_n的部分要被power gating了, 或者被soft reset了, 而reset2_n的domain依然工作,那么就会出现这种情况。产生RDC最根本的原因:是因为asynchronous reset assertion 的路径无法被STA给约束。

下面还有两个常见的例子:

例1 如图1.5所示,在这个例子中,reset1_n虽然经过了一个double flop的reset synchronizer,但是对于F1来说还是asynchronous reset,红色的path依然不会被STA给约束。

图1.5

例2 如图1.6所示,在这个例子中,F1没有asynchronous reset pin, 并不是被直接asynchronous reset,但是dst_reset_n 在assert的时候是作为D的逻辑,导致了F1本身可能就产生metastable,进而继续影响下游的F2和F3。 同样的,红线的path没有被STA给约束。

图1.6

RDC解决方法:

1、最常见的办法是加clamp。

如图1.7所示,在F1的Q端加一个与门,被一个rst_clamp控制住。这个rst_clamp信号必须要在reset1_n assert之前先active,这样可以先一步将与门的输出控制在0 (你也可以clamp在1,取决于后面的要求),这样的好处就是,当F1被asynchronous reset的时候,F1的Q的变化时不会影响到F2和F3的。当然,rst_clamp控制的与门是被STA给约束的,所以不会产生metastable。这是最常见的解决思路,难点就是要找出所有的F1,加上适当的clamp,而且还要设计恰当的rst_clamp信号。而且要加的clamp cell可能很多,漏了一个可能都会有问题。当然现在已经有了RDC检查的EDA工具,如果漏了能够帮设计者找出来。

图1.7

2、不加clamp cell,而是在asynchronous reset assertion之前将F2和F3的clock给停住,这样既然F2和F3都没有clock,那自然不会有setup/hold的问题。当然,这种办法的缺点就是可能F2和F3的clock 不能停,还是要工作在function mode。如果有这样的要求的话就不能这样修复了。

3、借鉴CDC中的办法,即给F1的输出加synchronizer,如图1.8所示。这样F3和F2的输入也都不会产生setup/hold violation,但是这样做的缺点也很明显:第一,和clamp cell一样,要找到每一个crossing的flop,然后加synchronizer,面积消耗比一个与门要大得多。第二,加了synchronizer可能会破坏F1和F3,F1和F2之间本来的逻辑关系,因为synchronizer会导致F1的值会被延迟两拍之后才给F2和F3。这种修复办法只有在确保加入synchronizer不会使得逻辑关系错误的情况下才能使用。

图1.8

1、能不用asynchronous reset,就不用。因为synchronous reset无论assertion还是de-assertion都会被STA给约束,所以不会产生setup/hold的问题。

2、在同一个时钟域内,不要混用asynchronous reset和synchronous reset。

3、用asynchronous reset的时候,问自己一个问题:后级的logic 也会被这个asynchronous reset给reset吗?

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值