异步复位设计中的亚稳态问题及其解决方案

1 引言

复位的问题是ASIC设计中一个基本而又重要的问题。设计者可以选择采用同步复位或是异步复位。同步复位将综合出轻音乐上的触发器,对设计门数有所节约,对基本周期的仿真器来说,在同步复位下工作要容易得多[3];同步复位中,时钟起到了过滤复位信号小毛刺的作用。然而,同步复位需要一个脉宽沿展器来保证复位信号有一定脉冲宽度,以确保时钟的有效沿能采样到[6];设计者必须既使用悲观的仿真器对比乐观的仿真器,在仿真的过程中,复位信号有可能会被X态掩盖;如果ASIC或FPGA含有内部三态总线,为防止内部三态总线在芯片加电时的竞争,同步复位的芯片必须有一个上电异步复位[2]。而这些又是异步复位的优势,异步复位最大的优点是,数据通路就可以不依赖于时钟而确保清洁可控。

然而,异步复位也有其固有的缺陷。异步复位设计的DFT(可测性设计)与STA(静态时序分析)的复杂性要高于同步复位设计;但异步复位中最严重的问题是,如果异步复位信号在触发器时钟有效沿附近“释放”(复位信号从有效变为无效)的话,可能会导致触发器输出的亚稳态[1]。本文分析了这个问题产生的原因和后果,给出了一种可能的解决方案。

2 异步复位的问题

许多设计者使用异步复位是因为喜欢这样的想法,通过复位将他们的电路完全置于一种可控的状态。然而很多设计者仅仅只是使用异步复位,忽略了可能产生的问题。他们在可控的仿真环境下进行复位测试,一切工作正常,然而真实的系统却会间歇性的出错。设计者常常低估了真实系统中(不可控环境)的复位信号“释放”问题。而这个问题可能导致芯片进入未知的亚稳态,从而让所有的复位都失效。

2.1 亚稳态产生与影响

如图1所示,trecovery(recovery time)指的是原本有效的异步复位信号释放(对低电平有效的复位来说就是上跳沿)与紧跟其后的第一个时钟有效沿之间所必须的最小时间。tremoval(removal time)指的是时钟有效沿与紧跟其后的原本有效的异步复位信号变得无效之间所必须的最小时间。如果异步复位信号的上跳沿(以低电平有效为例)落在trecovery与tremoval的窗口之内,触发器的输出端的值将是不确定的,可能是高电平,可能是低电平,可能处于高低电平之间,也可能处于震荡状态),并且在未知的时刻会固定到高电平或低电平。这种状态就称为亚稳态。反映到仿真模型中,输出端的值是不定态X。图中tclk-q是触发器时钟端到Q端的延时,tMET是保证亚稳态不传播到下一级所允许的亚稳态持续的最大时间。

在同步复位的电路中,不存在上述问题。而在异步电路中,因为外部的复位信号和内部的时钟之间是毫无时间关系的,因此recovery/removal冲突是必然的,亚稳态必定会发生。当一个信号被寄存器锁存时,如果数据信号和时钟之间不满足setup/hold时间,输出端也会出现亚稳态,这不在本文的讨论范围之内[4]。

亚稳态对电路的逻辑功能的影响是明显的。亚稳态对电路还有物理上的影响。在CMOS的工艺中,晶体管只有在输出翻转时才会处于导通状态,有较大的导通电流,在输入稳定在高电平或低电平时,晶体管是不导通的,此时只有很小的漏电流。因为亚稳态的电平可能处于高低电平之间,因此会使得后一级的晶体管处于导通状态,消耗大量能量。

2.2 亚稳态的评估

出现亚稳态的平均时间常用平均无故障时间MTBF(Mean Time Between Failures)来表示[5]:

对单个触发器的MTBF由以下公式给出:

式中,tMET是保证亚稳态不传播到下一级所允许的亚稳态持续的最大时间;C1和C2是与触发器性质有关的常数;fCLOCK是时钟频率;fRESET是异步复位信号的变换频率;由式(1)可见MTBF对tMET的变化非常敏感,在典型的情况下MTBF是以年为单位的[4]。

式(1)估计得出的结果只是对单个触发器而言。如果采用如图2所示的异步复位设计,没有任何防止亚稳态的措施,情况将会怎样呢? 

假设整个ASIC中有N个异步复位的触发器,每个触发器的复位信号都是与时钟信号异步,那么每个触发器的MTBF都由式(1)得出,则整个芯片的平均无故障时间MTBFC将是:kVaUNb|-J 4eN=+ ^&=\Hvog84nQ/W\ @hfPnQ2,;"UH

以现在芯片的集成度,一个设计中可能包括上百万个触发器,即N-106,MTBF。将以秒为单位。可见采用如图2所示的异步复位,而不采取任何措施的话,亚稳态的影响将非常大。

3 问题的解决

如前所述,同步电路中的亚稳态完全可以避免。异步电路中的亚稳态无法回避,只能力求将影响降到可容忍的范围内。解决这个问题的方法是采用如图3所示的复位同步电路。在如图3所示,第一级主复位触发器数据端输入绑定在高电平,随着异步复位信号的撤销,输入端的时钟采样被允许,输出端再输出到第二级主复位触发器,再经过一级时钟同步,得到一个主复位信号MASTERRST_N。主复位信号再通过复位分配缓冲树到达设计中的各个目的寄存器与触发器。

为什么图3所示的同步器电路能解决异步复位的问题呢?这归结于以下两点:①复位同步器的使用将异步复位信号变成与时钟同步的复位信号,同时使用两级触发器组成复位同步器又使得同步器本身发生亚稳态的可能大大减少;②复位分配缓冲树的使用纠正了主复位信号传播到各目的触发器的传播延时差异,保证复位信号传播的一致;

3.1 复位同步器

复位同步器的作用是产生一个稳定的与时钟同步的复位信号。要得到与时钟同步的信号不难,关键在于如何保证信号的稳定,即确保亚稳态的影响降到可容忍的地步。这就是采用两级触发器组成同步器的原因,下面将两级触发器的亚稳态进行评估。

一级触发器的平均无故障时间,记为MTBF(1),已经由式(1)得出,对于两级触发器,具体的方法就是采用如图3所示的两级触发器设计。两级触发器的平均无故障时间MTBF(2)为:

所以,第二级寄存器的平均无故障时间为:

显然MTBF(2)远大于MTBF(1),如前所述,MTBF(1)以年为单位,若MTBF(1)为100A,则MTBF(2)大约为10 000A。实际上如果一个产品要量产的话MTBF必须足够的大[4]。而采用两级触发器组成的复位同步器基本上将亚稳态问题降到了可以容忍的地步。

3.2 复位分配缓冲树

如图3所示,经由复位同步器产生出来的信号(主复位信号MASTERRST_N)已经是于时钟同步的信号了。但如何确保它到达芯片中的各个目的触发器时仍能保持与时钟的同步而不至产生亚稳态呢?这就需要复位分配缓冲树来保证。

复位分配缓冲树(或称复位树)与时钟树类似,除了增加驱动能力之外,主要目的在于平衡各个触发器复位端节点间的路径延。但与时钟信号相比,复位信号之间的延时差(SKEW)不是很严格,只要主复位信号的延迟足够短,使得复位信号在一个时钟周期之内传播到所有的负载端,就满足各个目标寄存器和触发器的恢复时间。

通过复位树保证设计内部除了主触发器之外的所有触发器的正确复位,因而整个芯片的平均无故障时间,

对比式(2),可以看出芯片的平均无故障时间大大减少了,故障的发生率降到了可以容忍的地步。

3.3 实例

在我们最近设计的一块嵌入式微处理器芯片中就采用了如上所述的异步复位策略,如图4所示。值得注意的是主触发器的时钟并没有直接引入时钟树根部的时钟,而是采用了稍后的时钟。这样做的目的是为了让主复位信号能够尽快的到达设计中的各个节点,易于保证其在一个时钟周期内完成[1]。

4 结论

尽管异步复位是一种理想复位电路的方法,但如果处理不当的话,异步复位设计中亚稳态问题将会非常严重。一种有效的使用异步复位设计的方法是,在设计中加入复位同步器与复位缓冲树。这种方法综合了同步复位设计与异步复位设计的优点,既实现了异步复位又将亚稳态的影响减小到了可容忍的地步,从而确保了正常的设计功能。 

时间: 2024-11-05 22:48:33

异步复位设计中的亚稳态问题及其解决方案的相关文章

FPGA异步时钟设计中的同步策略

1 引言    基于FPGA的数字系统设计中大都推荐采用同步时序的设计,也就是单时钟系统.但是实际的工程中,纯粹单时钟系统设计的情况很少,特别是设计模块与外围芯片的通信中,跨时钟域的情况经常不可避免.如果对跨时钟域带来的亚稳态.采样丢失.潜在逻辑错误等等一系列问题处理不当,将导致系统无法运行.本文总结出了几种同步策略来解决跨时钟域问题. 2 异步设计中的亚稳态    触发器是FPGA设计中最常用的基本器件.触发器工作过程中存在数据的建立(setup)和保持(hold)时间.对于使用上升沿触发的触

关于ASP.NET MVC开发设计中出现的问题与解决方案汇总 【持续更新】

最近一直用ASP.NET MVC 4.0 +LINQ TO SQL来开发设计公司内部多个业务系统网站,在这其中发现了一些问题,也花了不少时间来查找相关资料或请教高人,最终都还算解决了,现在我将这些问题及对应的解决方案都整理汇总出来,供大家参供,有不对之处或有更好的解决办法,欢迎在本文评论,谢谢! 问题一:执行类似语句:dbDataContext.TableName.Join(modelList as List<实体对象类型>,t1=>t1.id,t2=>t2.id,(t1,t2)=

数字系统中的亚稳态及其解决办法

本文转自http://www.cnblogs.com/linjie-swust/archive/2012/01/07/YWT.html 1. 应用背景 1.1         亚稳态发生原因 在FPGA系统中,如果数据传输中不满足触发器的Tsu和Th不满足,或者复位过程中复位信号的释放相对于有效时钟沿的恢复时间(recovery time)不满足,就可能产生亚稳态,此时触发器输出端Q在有效时钟沿之后比较长的一段时间处于不确定的状态,在这段时间里Q端在0和1之间处于振荡状态,而不是等于数据输入端D

基础项目(9)异步复位同步触发程序设计讲解

写在前面的话 在FPGA设计中,很多同学会纠结到底是应该使用同步复位还是应该使用异步复位.实际上,无论是同步复位还是异步复位都有各自的优缺点.在这里梦翼师兄和大家一起学习另外一种复位信号的处理方式-异步复位同步释放.  基本概念 FPGA设计中常见的复位方式有同步复位和异步复位,同步复位就是指复位信号只有在时钟上升沿到来时,才能有效:异步复位是指无论时钟沿是否到来,只要复位信号有效,就对系统进行复位:这两种复位方式在实际应用中都有其弊端存在,所以,一般都推荐使用异步复位同步释放的方式,是提高系统

异步复位、同步释放

一.对于同步复位和异步复位而言,各自有自己的优缺点: (1)同步复位: 优点:与时钟同步,大大降低亚稳态的出现概率: 缺点:消耗片内逻辑资源: always@(posedge clk) if(!rst_n) a <= 1'b0; else a <= b; 同步复位 (2)异步复位: 优点:利用FPGA内部寄存器的清零端,不会增加多余逻辑消耗: 缺点:容易出现亚稳态,存在于异步复位和时钟之间的亚稳态: always@(posedge clk or negedge rst_n) if(!rst_n

FPGA中的同步复位与异步复位

1.异步复位 always @ ( posedge sclk or negedge s_rst_n ) if ( !s_rst_n ) d_out <= 1'b0; else d_out <= a; 综合出来的RTL视图如下所示: 从图中可以看到寄存器d_out有一个低电平有效的复位信号s_rst_n端口,即使设计是高电平复位,实际综合后也会把异步复位信号反向后接到这个CLRN端: 2.同步复位 always @ ( posedge sclk ) if ( !s_rst_n ) d_out &

异步复位中的recovery time和removal time

什么是recovery time和removal time? 在同步电路中,输入数据需要与时钟满足setup time和hold time才能进行数据的正常传输,防止亚稳态.同样的道理,对于一个异步复位寄存器来说,同样异步复位信号同样需要和时钟满足recovery time和removal time 才能有效进行复位操作和复位释放操作,防止输出亚稳态. 1.recovery time:恢复时间 撤销复位时,恢复到非复位状态的电平必须在时钟有效沿来临之前的一段时间到来,才能保证时钟能有效恢复到非复

数字设计中的时钟与约束

最近做完了synopsys的DC workshop,涉及到时钟的建模/约束,这里就来聊聊数字中的时钟(与建模)吧.主要内容如下所示: ·同步电路与异步电路: ·时钟/时钟树的属性:偏移(skew)与时钟的抖动(jitter).延时(latency).转换(transition)时间: ·内部时钟: ·多路复用时钟: ·门控时钟: ·行波时钟: ·双沿时钟: ·Design Compiler中的时钟约束. 1.同步电路与异步电路 首先来谈谈同步电路与异步电路.那么首先就要知道什么是同步电路.什么是

FPGA数字逻辑设计中一些重要的基本概念

一.关于建立时间与保持时间 建立时间(Tsu:Setup time)是指在触发器的时钟信号上升沿到来以前,数据稳定不变的时间,建立时间不够,数据将不能在这个上升沿被打入触发器:保持时间(Th:Hold time)是指在触发器的时钟信号上升沿到来以后,数据稳定不变的时间,如果保持时间不够,数据同样不能被打入触发器.首先:建立时间和保持时间都是器件要求的特性,其中建立时间是器件输入端在时钟信号有效沿到来前,要求输入信号稳定不变的时间,保持时间是器件输入端要求输入信号在时钟信号有效沿到来后保持稳定不变