FPGA中的亚稳态毛刺异步FIFO教学提纲_第1页
FPGA中的亚稳态毛刺异步FIFO教学提纲_第2页
FPGA中的亚稳态毛刺异步FIFO教学提纲_第3页
FPGA中的亚稳态毛刺异步FIFO教学提纲_第4页
FPGA中的亚稳态毛刺异步FIFO教学提纲_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Good is good, but better carries it.精益求精,善益求善。FPGA中的亚稳态毛刺异步FIFO-1亚稳态1.1亚稳态的定义亚稳态是指触发器无法在某个规定时间段内达到一个确定的状态。当一个触发器进入亚稳态时,该触发器的输出何时能稳定以及会稳定在哪个状态都不能确定。在达到稳定之前的时间,触发器输出一些中间电平或者处于震荡状态,并且这种无用的输出电平可以沿着信号通路上级联的触发器传播下去。1.2亚稳态的产生机制如果触发器的setuptime、holdtime不满足,就可能产生亚稳态,此时触发器的输出端Q在有效时钟沿之后比较长的一段时间处于不确定的状态,这段时间称为决断

2、时间(resolutiontime)。经过resolutiontime之后Q端将稳定到0或者1,但究竟是0还是1和输入没有关系。图1是一个处于亚稳态的寄存器的输出的例子。HYPERLINK/images/attachments/201101/9950017205_TIME_1295276725806.jpgHYPERLINK/images/attachments/201101/9950017205_TIME_1295276725806.jpgHYPERLINK/images/attachments/201101/9950017205_TIME_1295276725806.jpg1.3亚稳态的危

3、害与避免亚稳态会导致逻辑误判,如果发生亚稳态的部位对系统的稳定至关重要同时缺少防错机制,则可能导致系统崩溃(逻辑挂死)。逻辑误判可以通过特殊设计减轻危害,例如异步fifo的gray设计。比发生部位本身的逻辑误判更严重的是亚稳态传递。亚稳态传递会扩大故障面,让问题变得复杂。在完全同步的设计中,CAD工具可以方便的分析每一个触发器的建立保持时间。理论上一个时序完全收敛的纯同步设计不会有亚稳态问题。和有赖于时序分析的完备性,例如所使用的timingmode与实际芯片及其工作条件的吻合度,实际时钟抖动、偏斜与预期是否一致等。扩大时序裕量可以降低亚稳态发生的概率。当前一个数字芯片上往往有多个时钟域,时钟

4、域之间的异步设计是必不可少的。只要系统中存在异步设计,则亚稳态无法避免,但我们可以尽量限制亚稳态的影响范围并通过特殊的逻辑设计容忍可能的逻辑误判。1.3.1缩小亚稳态的影响范围a.“将异步输出寄存器的扇出限制为1”HYPERLINK/images/attachments/201101/9950017205_TIME_1295276803422.jpgHYPERLINK/images/attachments/201101/9950017205_TIME_1295276803422.jpgHYPERLINK/images/attachments/201101/9950017205_TIME_129

5、5276803422.jpg如图2所示,让异步输出寄存器的扇出为1相当于减少了异步路径的条数。若异步信号有多个输出,则可能因为路径延迟和时钟偏斜导致有的寄存器采到有效值,有的寄存器进入不确定的状态,如图2和图3所示。HYPERLINK/images/attachments/201101/9950017205_TIME_1295276990096.jpgHYPERLINK/images/attachments/201101/9950017205_TIME_1295276990096.jpgHYPERLINK/images/attachments/201101/9950017205_TIME_12

6、95276990096.jpgb.“异步信号参与逻辑运算前先同步两拍”如图2所示,异步信号直接参与逻辑运算可能会导致亚稳态传递,而先将其用2级寄存器同步则基本可以把亚稳态限制在这2级寄存器内。经过两级触发器同步,在右边的输出将是同步的,而且该输出基本不存在亚稳态。其原理是即使第一个触发器的输出端存在亚稳态,经过一个CLK周期后,第二个触发器D端的电平仍未稳定的概率非常小,因此第二个触发器Q端基本不会产生亚稳态。值得注意的是,这会大大降低亚稳态的发生概率但是并不是说一定不会出现,如果是关键信号,在接下来的设计中采用防错设计依然是必要的。1.3.2通过设计容忍逻辑误判通过设计容忍逻辑误判的典型例子

7、是异步fifo的gray设计。Fifo中ram的读写地址是0、1、2连续的,而相邻二进制数的格雷码只相差1bit。也就是,对读写地址来说,任何一个时钟沿只有一个bit跳变,而且这1bit出现暂时的逻辑误判无关紧要。图4是常用的将总线数据传递到异步时钟域的例子。HYPERLINK/images/attachments/201101/9950017205_TIME_1295277072753.jpgHYPERLINK/images/attachments/201101/9950017205_TIME_1295277072753.jpgHYPERLINK/images/attachments/201

8、101/9950017205_TIME_1295277072753.jpg2组合逻辑毛刺2.1概念毛刺是一种形象的说法,它的产生归因于组合逻辑的竞争与冒险。竞争:在组合逻辑中,信号经由不同的路径达到某一会合点的时间有先有后,这种现象称为竞争。冒险:由于竞争而引起电路输出发生瞬间错误现象称为冒险。表现为输出端出现了设计预期之外的窄脉冲,常称其为毛刺。2.2毛刺的产生机制组合逻辑的多个输入端到达某一汇合点的时间有先后,导致组合逻辑电路的输出出现瞬间错误。图5是一个动态冒险的例子,即使假设线延迟为0,毛刺依然存在。关于动态冒险和静态冒险本文不作详细解析。HYPERLINK/images/attach

9、ments/201101/9950017205_TIME_1295277317481.jpgHYPERLINK/images/attachments/201101/9950017205_TIME_1295277317481.jpgHYPERLINK/images/attachments/201101/9950017205_TIME_1295277317481.jpg2.3针对毛刺的设计与亚稳态不同,在我们的设计中,毛刺几乎是无法避免的。不过有一点相同的是,在一个纯同步的设计中,毛刺不会带来问题。因为针对寄存器的建立保持时间的时序分析是“全路径”的。也就是说,时序分析EDA工具会认为组合逻辑的输

10、出f在它稳定的时刻才是有效的,保证不会在组合逻辑输出f为毛刺时采样。当然,这并不是说我们可以高枕无忧了。在包含异步的设计中,毛刺依然可能带来严重的问题。让我们回到文章前面那个工程师遇到的问题吧。他需要用3个信号组合运算产生一个复位信号,对一个小模块复位。他的HDL代码可以表示为图6中的电路,正确的做法读者应该早已经知道了,这里就不给出答案了。HYPERLINK/images/attachments/201101/9950017205_TIME_1295277434953.jpgHYPERLINK/images/attachments/201101/9950017205_TIME_1295277

11、434953.jpgHYPERLINK/images/attachments/201101/9950017205_TIME_1295277434953.jpg两个基本概念竟然啰嗦了这么长,而且它还引出了另一个同样有意思的问题,复位。又是一个基础但却非常关键的问题。3异步FIFO异步FIFO是一种不同时钟域之间传递数据的常用方法,即用一种时钟写入数据,而用另外一种时钟读出数据。读写指针的变化动作由不同的时钟产生。因此,对FIFO空或满的判断是跨时钟域的。如何根据异步的指针信号产生正确的空/满标志,是异步FIFO设计成败的关键。在一个ASIC或FPGA库中,每种触发器都有时序要求。对于使用上升沿触

12、发的触发器来说,建立时间(SetupTime)是在时钟上升沿到来之前,触发器数据保持稳定的最小时间;而保持时间(HoldTime)是在时钟上升沿到来之后,触发器数据还应该保持的最小时间。如下图所示,在时钟上升沿前后的这个窗口内数据应该保持不变,否则会使触发器工作在一个不确定的状态,即亚稳态。当触发器处于亚稳态,且处于亚稳态的时间超过了一个时钟周期时,这种不确定的状态将会影响到下一级的触发器,最终导致连锁反应,从而使整个系统功能失常。当一个信号跨越某个时钟域时,对新时钟域的电路来说它就是一个异步信号。由于异步信号之间的时序是毫无关系的,因此必然存在SetupTime/HoldTime冲突。为了避

13、免亚稳态问题,采用前面所使用的双锁存器法,即在一个信号进入另一个时钟域前,将该信号用两个锁存器连续锁存两次,最后得到的采样结果就可以消除亚稳态。消除亚稳态只是保证了信号电平的稳定,要在不同时钟域中准确传输数据还需要一个接口电路。异步FIFO就是一种不同时钟域之间传递多位数据的常用方法。异步FIFO是一种先进先出电路,用在需要实时数据接口的部分,用来存储、缓冲在两个异步时钟之间的数据传输。主要由双口存储器、读地址产生逻辑、写地址产生逻辑、空/满标志产生逻辑四部分构成。读地址(rptr)和空标志(rempty)由读时钟(rclk)产生,而写地址(wptr)和满标志(wfull)由写时钟(wclk)

14、产生。把写地址与读地址相互比较以产生空、满标志。由于读写地址的变化由不同的时钟产生,所以对FIFO空或满的判断是跨时钟域的。如何避免异步传输带来的亚稳态以及正确地产生空/满标志是设计异步FIFO的难点。读写地址线一般有多位,如果在不同的时钟域内直接同步二进制码的地址指针,则有可能产生亚稳态。例如,读指针从011变化到100时,所有位都要变化,读指针的每一位在读时钟的作用下,跳变不一致,即产生毛刺。如果写时钟恰好在读指针的变化时刻采样,得到的采样信号可能是000111中的任何一个,从而导致空/满信号判断错误。由实践可知,同步多个异步输入信号出现亚稳态的概率远远大于同步一个异步信号的概率。解决这一

15、问题的有效方法是采用格雷码。格雷码的主要特点是相邻的两个编码之间只有一位变化。在读使能或写使能信号有效、并且空/满标志无效的情况下,读写指针开始累加,进行FIFO读或写操作。二进制码与格雷码的转换是一个“异或”运算:gnext=(bnext1)bnext。正确地产生空/满标志是设计任何类型FIFO的关键点。空/满标志产生的原则是:写满而不溢出,能读空而不多读。读写地址异步相比较产生低电平有效的空、满标志,其中异步满信号(afull)要同步到写时钟域(wclk),异步空信号(aempty)要同步到读时钟域(rclk),以消除亚稳态的影响,并向外界输出同步的空/满信号。下面以满信号(wfull)为例说明同步信号的产生过程:满信号afull是因为写地址追上了读地址并比读地址多循环一次所产生,此时不能再向FIFO中写入数据,否则会造成FIFO写溢出。由于写地址(wptr)的变化产生F

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论