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