亚稳态:是指触发器无法在某个规定时间段内达到一个可确认的状态。当一个触发器进入亚稳态[1]时,既无法预测该单元的输出电平,也无法预测何时输出才能稳定在某个正确的电平上。在这个稳定期间,触发器输出一些中间级电平,或者可能处于振荡状态,并且这种无用的输出电平可以沿信号通道上的各个触发器级联式传播下去。
解决方法: 1 降低系统时钟 2 用反应更快的FF 3 引入同步机制,防止亚稳态传播 4 改善时钟质量,用边沿变化快速的时钟信号 关键是器件使用比较好的工艺和时钟周期的裕量要大。 1.亚稳态发生的原因 在同步系统中,如果触发器的setup time / hold time不满足,就可能产生亚稳态,此时触发器输出端Q在有效时钟沿之后比较长的一段时间处于不确定的状态,在这段时间里Q端毛刺、振荡、固定的某一电压值,而不是等于数据输入端D的值。这段之间成为决断时间(resolution time)。经过resolution time之后Q端将稳定到0或1上,但是究竟是0还是1,这是随机的,与输入没有必然的关系。 2.亚稳态的危害 由于输出在稳定下来之前可能是毛刺、振荡、固定的某一电压值,因此亚稳态除了导致逻辑误判之外,输出0~1之间的中间电压值还会使下一级产生亚稳态(即导致亚稳态的传播)。 逻辑误判有可能通过电路的特殊设计减轻危害(如异步FIFO中Gray码计数器的作用),而亚稳态的传播则扩大了故障面,难以处理。 只要系统中有异步元件,亚稳态就是无法避免的,因此设计的电路首先要减少亚稳态导致错误的发生,其次要使系统对产生的错误不敏感。前者要*同步来实现,而后者根据不同的设计应用有不同的处理办法。用同步来减少亚稳态发生机会的典型电路如图1所示。 左边为异步输入端,经过两级触发器同步,在右边的输出将是同步的,而且该输出基本不存在亚稳态。其原理是即使第一个触发器的输出端存在亚稳态,经过一个CLK周期后,第二个触发器D端的电平仍未稳定的概率非常小,因此第二个触发器Q端基本不会产生亚稳态。注意,这里说的是“基本”,也就是无法“根除”,那么如果第二个触发器Q出现了亚稳态会有什么后果呢?后果的严重程度是有你的设计决定的,如果系统对产生的错误不敏感,那么系统可能正常工作,或者经过短暂的异常之后可以恢复正常工作,例如设计异步FIFO时使用格雷码计数器当读写地址的指针就是处于这方面的考虑。如果设计上没有考虑如何降低系统对亚稳态的敏感程度,那么一旦出现亚稳态,系统可能就崩溃了。 3.亚稳态与系统可行性 使用同步电路以后,亚稳态仍然有发生的可能,与此相连的是MTBF(Mean Time Between Failure),亚稳态的发生概率与时钟频率无关,但是MTBF与时钟有密切关系。 有文章提供了一个例子,某一系统在20MHz时钟下工作时,MTBF约为50年,但是时钟频率提高到40MHz时,MTBF只有1分钟!可见降低时钟频率可以大大减小亚稳态导致系统错误的出现,其原因在于,提供较长的resolution time可减小亚稳态传递到下一级的机会,提高系统的MTBF,如图2所示。 亚稳态在异步电路中是不可避免的,不管用什么同步电路去同步异步信号,都会出现亚稳态。那同步电路的作用是什么呢?其实是为了不让亚稳态传播。
两级同步电路的思想其实是为了给亚稳态留出足够的时间,好让亚稳态变成稳定态。一般情况下亚稳态持续的时间很短,所以两级DFF同步之后的信号基本上不会出现亚稳态,可以给后级使用。这里用两级DFF的目的就是给亚稳态留出一个DFF的工作时钟周期,如果第一级DFF的输出出现亚稳态,那么在一个时钟周期内,让亚稳态变成稳定态。这样第二级DFF采样第一级DFF的输出时,第一级DFF的输出早就稳定了,因此不会出现亚稳态的传播。所以在用两级同步电路对异步信号做了处理后,降低同步电路的工作时钟,就可以给亚稳态留更多的时间让它变成稳定态,因此可以起到使电路更稳定安全的效果。
|
文章评论(0条评论)
登录后参与讨论