高级数字IC设计

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

姓名:杨慧晶单位:软件学院Email:yhj833@sohu.com高级数字IC设计亚稳态与异步FIFO设计亚稳态亚稳态:是指触发器无法在某个规定时间段内达到一个可确认的状态。当一个触发器进入亚稳态时,既无法预测该单元的输出电平,也无法预测何时输出才能稳定在某个正确的电平上。在这个稳定期间,触发器输出一些中间级电平,或者可能处于振荡状态,并且这种无用的输出电平可以沿信号通道上的各个触发器级联式传播下去。亚稳态发生的原因在同步系统中,如果触发器的setuptime/holdtime不满足,就可能产生亚稳态,此时触发器输出端Q在有效时钟沿之后比较长的一段时间处于不确定的状态,在这段时间里Q端毛刺、振荡、固定的某一电压值,而不是等于数据输入端D的值。这段之间成为决断时间(亚稳态到稳定稳态的时间)(resolutiontime)。经过resolutiontime之后Q端将稳定到0或1上,但是究竟是0还是1,这是随机的,与输入没有必然的关系。亚稳态亚稳态的危害由于输出在稳定下来之前可能是毛刺、振荡、固定的某一电压值,因此亚稳态除了导致逻辑误判之外,输出0~1之间的中间电压值还会使下一级产生亚稳态(即导致亚稳态的传播)。逻辑误判有可能通过电路的特殊设计减轻危害(如异步FIFO中Gray码计数器的作用),而亚稳态的传播则扩大了故障面,难以处理。亚稳态的解决办法只要系统中有异步元件,亚稳态就是无法避免的,因此设计的电路首先要减少亚稳态导致错误的发生,其次要使系统对产生的错误不敏感。前者要*同步来实现,而后者根据不同的设计应用有不同的处理办法。亚稳态用同步来减少亚稳态发生机会的典型电路如图1所示。左边为异步输入端,经过两级触发器同步,在右边的输出将是同步的,而且该输出基本不存在亚稳态。其原理是即使第一个触发器的输出端存在亚稳态,经过一个CLK周期后,第二个触发器D端的电平仍未稳定的概率非常小,因此第二个触发器Q端基本不会产生亚稳态。亚稳态注意,这里说的是“基本”,也就是无法“根除”,那么如果第二个触发器Q出现了亚稳态会有什么后果呢?后果的严重程度是有你的设计决定的,如果系统对产生的错误不敏感,那么系统可能正常工作,或者经过短暂的异常之后可以恢复正常工作,例如设计异步FIFO时使用格雷码计数器当读写地址的指针就是处于这方面的考虑。如果设计上没有考虑如何降低系统对亚稳态的敏感程度,那么一旦出现亚稳态,系统可能就崩溃了。亚稳态亚稳态与系统可行性使用同步电路以后,亚稳态仍然有发生的可能,与此相连的是MTBF平均无故障时间(MeanTimeBetweenFailure),亚稳态的发生概率与时钟频率无关,但是MTBF与时钟有密切关系。有文章提供了一个例子,某一系统在20MHz时钟下工作时,MTBF约为50年,但是时钟频率提高到40MHz时,MTBF只有1分钟!可见降低时钟频率可以大大减小亚稳态导致系统错误的出现,其原因在于,提供较长的resolutiontime可减小亚稳态传递到下一级的机会,提高系统的MTBF。FIFO通常用于时钟域的过渡,是双时钟设计。换句话说,设计工程要处理(workoff)两个时钟,因此在大多数情况下,FIFO工作于独立的两个时钟之间。FIFO设计难点FIFO设计的难点在于怎样判断FIFO的空/满状态。为了保证数据正确的写入或读出,而不发生益处或读空的状态出现,必须保证FIFO在满的情况下,不能进行写操作。在空的状态下不能进行读操作。怎样判断FIFO的满/空就成了FIFO设计的核心问题。在用到触发器的设计中,不可避免的会遇到亚稳态的问题(关于亚稳态这里不作介绍,可查看相关资料)。在涉及到触发器的电路中,亚稳态无法彻底消除,只能想办法将其发生的概率将到最低。时间分辨率(ResolutionTime)当一个事件取样一个稳定值时(或者一个能稳定一段时间的值),取样值就随这个稳定值而变化。假设在D触发器情况下,就是Q值随D值变化。这段能够稳定取样的时间用相关的取样事件来定义,称之为时间分辨率(ResolutionTime)。也就是我们所熟悉的“clock-toQtime”,或tcq。如果遇到触发器的setuptime和holdtime,这将是cell设计者保证输入能够正确变为输出的时间。亚稳态影响物理系统的时间分辨率,同样也影响输出值。在理论上,当取样操作接近被取样事件的时候,时间分辨率是无限的渐进曲线。MTBF(平均无故障时间)与可靠性如果一个设计中包含同步组件,无论是否愿意它都会出现亚稳态。亚稳态无法彻底消除,因此我们所做的就是计算错误概率以及在时间上来描述它。MTBF是一种故障概率的统计度量,并且需要更为复杂、经验化、实验化的数据来计算。对于触发器来说,这种关系依赖于电路自身的物理常数和时钟频率,记住亚稳态本身与时钟没有任何关系,但是它和MTBF相关。自然的,我们会说一个可靠性好的电路具有很高的MTBF值。同步“同步”:两个触发器简单的组合在一起如图所示。同步仅当Q1的出现非常接近时钟沿的时候,Q2才会进入亚稳态。如果在亚稳态情况下我们将20倍的tcq作为时间分辨率,那么时钟周期将为tclk=20tcq+tsetup。这说明经过20倍的clock-toQ时间,输出仍然随输入改变的概率大大减小。因此,在时钟沿到来时Q2没有被改变的概率接近P2,这里P是第一级输出没有在时钟沿到来时随输入而改变的概率。这称为两级同步。当使用这个时钟频率下概率来计算MTBF时,MTBF值会提高很多。如果愿意的话,可以通过三级同步进一步增加MTBF值。但这在实际中很少需要。同步可以在电路中增加冗余的同步来很好的抵御亚稳态。在三冗余和等同于两冗余的状态下,最终的输出大部分(三分之二)可以计算出来。在这个实例中,小尺寸的布局布线与器件的差异说明了如果一个同步器产生亚稳态错误,其他的两级也会产生亚稳态错误,所有的概率将随之改变。这种技术仅在要求非常苛刻时候的用到。FIFO结构使用双口的RAM做存储器件,读、写端口拥有两个计数器产生的宽度为log2(array_size)的互相独立的读、写地址。,我们称这些计数器为“读指针”(readpointer)和“写指针”(writepointer)。写指针指向下一个将要写入的位置,读指针指向下一个将要读取的位置。每次写操作使写指针加1,读操作使读指针加1。图中最下面的模块为“状态”(status)模块。这个模块的任务是给出FIFO提供“空”(empty)和“满”(full)信号。这些信号告诉外部电路FIFO已经能够达到临界条件;如果出现“满”信号,那么FIFO为写操作的临界状态,则FIFO为读操作的临界状态。写操作的临界状态(“fullisactive”)表示FIFO已经没有空间来存储更多的数据,读操作的临界表示FIFO没有更多的数据可以读出。Status模块还可告诉FIFO中“满”或“空”位置的数值。这是有指针的算术运算来完成的。实际的“满”或“空”位置计算并不是为FIFO自身提供的。它是作为一个报告机构给外部电路用的。但是,“满”和“空”信号在FIFO中却扮演着非常重要的角色,它为了能实现读与写操作各自的独立运行而阻塞性的管理数据的存取。这种阻塞性管理的重要性不是将数据复写(或重读),而是指针位置可以控制整个FIFO,并且使读、写操作改变着指针数值。DPRAM若能够寄存读出的信号,这意味着存储器的输出数据已被寄存。如果这样的话,读指针将不得不设计成“read并加1”,也就是说在FIFO输出数据有效之前,必须提供一个明确的读信号。另一方面,如果DPRAM没有寄存输出,一旦写入有效数据就可以读出;先读数据,然后使指针加1。这将影响到从FIFO读出数据和实现空/满计算的逻辑。从功能上看,FIFO工作原理如下所述:复位时,读、写指针均为0。这是FIFO的空状态,空标志为高电平,(我们用高电平表示空标志)此时满标志为低电平。当FIFO出现空标志时,不允许读操作,只能允许写操作。写操作写入到位置0,并使写指针加1。此时,空标志变为低电平。假设没有发生读操作而且随后的一段时间FIFO中只有写操作。一定时间后,写指针的值等于array_size-1。这就意味着在存储器中,要写入数据的最后一个位置就是下一个位置。在这种情况下,写操作将写指针变为0,并将输出满标志。同步可以在电路中增加冗余的同步来很好的抵御亚稳态。在三冗余和等同于两冗余的状态下,最终的输出大部分(三分之二)可以计算出来。在这个实例中,小尺寸的布局布线与器件的差异说明了如果一个同步器产生亚稳态错误,其他的两级也会产生亚稳态错误,所有的概率将随之改变。这种技术仅在要求非常苛刻时候的用到。

1 / 17
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功