文档库 最新最全的文档下载
当前位置:文档库 › 基于多时钟域的异步FIFO设计

基于多时钟域的异步FIFO设计

1、引言

随着计算机、多媒体和数据通信技术的高速发展,数字图像、语音等数据传输技术近年来得到了极大的重视和长足的发展,并得到了广泛的应用。如何保障这些语音、图像等数据传输的准确性、及时性?如何高效率、高速度地传输这些数据?这些都是当今信息领域的科研人员所必须解决的问题。而往往在这些数据传输系统中,又会遇到不同系统接口间数据传输的问题。通常在两个相连接的不同电路系统之间,因为每个系统的数据传输速度不同,在系统的接口部分就会出现数据输入速度和输出速度不同,也就是会发生数据传输速率不匹配的问题。这种情况往往会让传输的数据产生复写或者丢失,降低数据的传输速率,同时也因为数据复写、丢失和无效数据的读入,将会产生数据出错,因此需要在不同系统的接口处设计数据传输单元来实现数据的高速高效传输。在现代的系统设计中,为了提高系统的性能,设计者对数据的传输率、数据的传输量,对系统各部分之间的接口部分不同的数据输入和接收传输率的匹配有越来越高的要求,而FIFO存储器以其合理的价格、使用的方便灵活性以及上述的对速度匹配的应用而成为解决这类问题的理想途径,因此FIFO存储器在计算机、多媒体和数据通信领域都有着广

基于多时钟域的异步FIFO设计

华南理工大学物理科学与技术学院杨青山蔡敏

摘要:在大规模集成电路设计中,一个系统包含了很多不相关的时钟信号,当其目标域时钟与源域时钟不同时,如何在这些不同域之间传递数据成为了一个重要问题。为了解决这个问题,我们可以用一种异步FIFO(先进先出)存储器来实现。本文介绍了一种利用格雷码指针实现在多时钟域传递数据的FIFO设计。关键词:FIFO,多时钟域,异步,格雷码,亚稳态,同步装置

AsynchronousFIFOdesignbasedonmulti-clockdomain

YangQingshanCaiMin

(SchoolofPhysical,SouthChinaUniversityofTechnology,Guangzhou510640)

Abstract:InlargescaleICdesignsasystemcontainsmanyunrelatedclocksignals,passingdataamongthedifferentdomainsbecameanimportantproblemwhenthedestination-domain’sclockisdifferentfromsource-domain’sclock.inordertosolvetheproblem,aasynchronousFIFOmemorywasusedtorealizeit.Thispaper,anewFIFO(firstinfirstout)designisintroducedindetail,bywhichdataarepassedbetweendifferentclockdomainsbyusingGraycodepointers.

Keywords:FIFO,multi-clock,asynchronous,Graycode,metastability,synchronousdevice

图1异步FIFO操作的逻辑方框图

泛的应用,因此对FIFO的研究与设计应用具有理论上和实际应用上的双重意义。

2、FIFO的功能描述

FIFO是数据传输系统中极其重要的一环,特别

是在两个处在不同时钟域的系统接口部分,FIFO的合理设计,不但能使接口处数据传输的输入输出速率进行有效的匹配,不使数据发生复写、丢失和读入无效数据的情况,而且还会有效地提高系统中数据的传输效率,FIFO存储器主要分为基于移位寄存器型和基于RAM型,而RAM型又有单口RAM和双口RAM之分,目前来说,用的较为广泛的是基于双端口RAM的FIFO。从时钟角度来考虑,因为时钟的同步和异步之分,FIFO又可分为同步FIFO和异步FIFO。

更多情况下,FIFO的读写时钟为异步的。也就是我们更多的时候要将FIFO设计为异步,异步FI-

FO由存储器块和控制逻辑构成,控制逻辑包括读写

指针,读写指针分别位于不同的时钟域中。当FIFO中有数据而非空时,read信号用来控制读数据,所读数据来自读指针所指的存储单元,并且读指针加一,当读指针追上写指针时FIFO为空并产生一个

empty信号,empty同步于读时钟,当FIFO中有空间

而非满时,write信号用来控制写数据,所写数据写向写指针所指的存储单元,并写指针加一。当写指针追上读指针时FIFO为满并产生一个full信号,

full信号同步于写时钟。图1为异步FIFO操作的逻

辑方框图。

3、

用于异步信号去亚稳定性的同步装置

在信号传输中,每种触发器都有时序要求。对于使用上升沿触发的触发器来说,

建立时间(Setup

Time)是在时钟上升沿到来之前,触发器数据保持稳

定的最小时间;而保持时间(HoldTime)是在时钟上

升沿到来之后,触发器数据还应该保持的最小时间

[1]

,在时钟上升沿前后的这个窗口内数据应该保持不

变,否则会使触发器工作在一个不确定的状态,即亚稳态。

当触发器处于亚稳态,且处于亚稳态的时间超过了一个时钟周期时,这种不确定的状态将会影响到下一级的触发器,最终导致连锁反应,从而使整个系统功能失常如图2所示。当一个信号跨越某个时钟域时,对新时钟域的电路来说它就是一个异步信号。

由于异步信号之间的时序是毫无关系的,因此必然存在SetupTime/HoldTime冲突。

为了避免亚稳态问题,采用如图3所示的双锁存器法,即在一个信号进入另一个时钟域前,将该信号用两个锁存器连续锁存两次,最后得到的采样结果就可以消除亚稳态。使用多级是因为时钟周期由于技术进步正在日益减小,使得单个触发器的亚稳定性不可能在单个周期内解决[2]。

3.1异步FIFO设计的关键问题

图2异步时钟和亚稳态现象

图3消除亚稳态的异步输入信号同步装置异步FIFO设计的关键问题主要有两个,一是如何根据FIFO读写指针信号正确判断空满标志;二是如何同步异步信号,避免出现亚稳态现象。

3.1.1读写指针及空满信号的产生

正确产生空/满标志是整个FIFO设计的最关键部分,这部分的好坏直接影响着整个FIFO的性能,空/满标志产生的原则是:当整个FIFO被写满时而不会溢出,当整个FIFO被读空时而不会多读,在异步FIFO设计中,由于FIFO的读写时钟不同,所以不能像同步FIFO设计那样使用一个加减计数器来判断FIFO的空满状态,而必须通过比较读写指针信号来判断FIFO的空满状态。

每进行一次读写操作,相应的指针就增加一次,指向下一个位置。当指针移动到最后的位置时,它又重新回到初始位置。在FIFO非空或非满的状态下,这个过程将随着读写控制信号的变化一直变化下去。如果FIFO处于空状态,再进行一个读出动作会产生向下溢出(underflow),一个无效的数据被读出;同样地,对于一个写满的FIFO如果进行一个写入动作,会产生向上溢出(overflow),一个有用的数据会被新写入的数据覆盖。为了避免这种错误的产生,应该对FIFO设置满和空两个信号。对满信号置位表示FIFO已经处于满状态,不能再执行写入动作;对满信号复位表示FIFO非满,还可以执行写入动作;对空信号置位表示FIFO处于空状态,这时没有有效数据可以读出;对空信号复位说明FIFO非空,这时可以进行读操作。当读指针和写指针相等时,FIFO可能处于满状态或空状态。可以用不同的方法判断FI-FO究竟处于什么样的状态,也就是说究竟是写指针从后面追上了读指针还是读指针从后面追上了写指针,本文所应用的方法是分别将读/写地址寄存器扩展一位,将最高位设置为状态位,其余低位作为地址位,指针由地址位以及状态位组成。首先把读、写状态位全部复位,如果地址循环了奇数次,则状态位置1,偶数次则又重新复位,应用地址位和状态位的结合实现对空、满标志位的控制。当读写指针的地址位和状态位全部吻合的时候,读写指针经历了相同次数的循环移动,也就是说,FIFO处于空状态;如果读写指针的地址位相同而状态位相反,写指针比读指针多循环一次,标志FIFO处于满状态,可以使用下面的公式来判断空满状态:

empty=(w_ptr[n:0]==r_ptr[n:0])

full=(w_ptr[n-1:0]==r_ptr[n-1:0]&&w_ptr[n]!==r_ptr[n])

由上面可以知道,空满标志是通过读写指针比较产生的,但是当读指针异步于写指针的情况下,读写地址进行比较时,可能得出错误的结果。例如,在读地址变化过程中,由于读地址的各位变化并不同步,计算读写地址的差值,可能产生错误的差值,导致产生错误的满标志信号。若将未满标志置为满标志时,可能降低了应用的性能,降低写数据速率;而将满置标志置为未满时,执行一次写操作,则可能产生溢出错误,这对于实际应用来说是绝对应该避免的。空标志信号的产生也可能产生类似的错误。从以上分析中可以看出,异步FIFO之所以会发生错误是因为读写地址线一般有多位,如果在不同的时钟域内直接同步二进制码的地址指针,则有可能产生亚稳态,从而导致空/满信号判断错误。由实践可知,同步多个异步输入信号出现亚稳态的概率远远大于同步一个异步信号的概率,解决这一问题的有效方法是采用格雷码[3]。格雷码是一种在相邻计数数值之间只有一位发生变化的编码方式。读写指针采用格雷码的编码方式,就可以解决上述错误。

3.1.2空/满标志实现的RTLL级代码编写

自然码到格雷码的转换

modulenorm-to-gray(din,dout);input[n:0]din;output[n:0]dout;assigndout=(din>>1)^din;endmodule

写地址产生

always@(posedgew_clkornegedgerrst_n)if(!rrst_n)beginwbin<=0;w_ptr<=0;endelsebeginwbin<=wbnext;w_ptr<=wgnext;end

assignw_bnext=!full?wbin+1:wbin;norm-to-gray(wbnext,wgnext);

空满标志产生

always@(w_ptrorr_ptr)

if(w_ptr[n-1:0]==r_ptr[n-1:0]&&w_ptr[n]!==r_ptr[n])full<=1;elsefull<=0;

类似的可以写出读模块产生信号RTL代码,图

4为读/写指针地址产生模块图。

4、FIFO异步空/满信号的同步

读控制模块。读时钟rclk控制下的同步读时钟域,包括读指针和空逻辑的产生。由于empty信号的

声明是因为读指针的增加,而其失效是因为写指针

(写时钟域产生,异步于读时钟域)的增加,所以要把

异步信号empty同步到读时钟域产生rempty信号。

写控制模块。写时钟wclk控制下的同步写时钟域,包括写指针和满逻辑的产生。由于full信号的声明是因为写指针的增加,而其失效是因为读指针(读时钟域产生,异步于写时钟域)的增加,所以要把异步信号full同步到读时钟域产生wfull信号[4]

。如图5

异步空满信号被同步。

由图4可以知道当full/empty信号有效时,

wfull/rempty会立即变为有效,当full/empty信号由有

效变为无效时,可以看出wfull/rempty要进经过2个周期的延时才从有效变为无效,把这种空满标志称作保守空满标志,但是不会影响FIFO的性能。

5结论

为解决异步FIFO设计的关键问题和难点问题,本文提出了用一种格雷码对地址进行编码,并提出了一种新颖的空满标志产生方法,并用同步装置来解决异步操作带来的亚稳态问题,并提供了异步

FIFO的设计方案。采用VerilogHDL硬件语言进行

设计,该方案通过验证并能安全地实现数据跨时钟域的传递,并且性能比传统方案有了明显的改善。

参考文献

[1]DavidA.Hodges,HoraceG.Jackson,ResveA.Saleh.AnalysisandDesignofDigitalIntegratedCircuitsinDeepSubmicronTechnology(ThirdEdition)[M].北京:清

华大学出版社,2004.8

(下转第62页)

图4读/写指针产生模块图

图5异步空满信号被同步

时钟频率达到了250MHz

[6]

,可以测试时钟频率为125MHz的FPGA。解决了高速FPGA测试的问题。

4.结论

本文针对目前IP测试存在的缺陷,提出了通过

PCI接口将IP的物理验证的过程与PC机进行联机

测试的方法。由于PCI控制器是自主研发,因此在测试过程中激励波形的还原和测试结果的采集都可以很好地解决。随着目前对IP工作速度的要求越来越高,采用FIFO作为缓存可能成为数据采样时钟的瓶颈。因此,有待研究采用目前速度较快的DDR作

为数据缓存,从而提高数据采样的速度。

参考文献

[1]潘松,黄继业.EDA技术实用教程.科学出版社.2004,53~54

[2]李贵山,陈金鹏.PCI局部总线及其应用.西安电子

科技大学出版社.2003,9 ̄10,152 ̄154.

[3]Spart-3FPGAfamilycompleteDataSheet.www.xin-linx.com.2006,3 ̄5.

[4]IEEEComputerSocietyandtheIEEEMicroWaveTheoryandTechniquesSociety.AirInterfaceforFixedandMobileBroadbandWirelessAccessSystems.2005,2 ̄13

[5]白中英.计算机组成原理第三版.科学出版社.2002,115 ̄117.

[6]IDT72T2098-72T20128DataSheet.www.idt.com.2004,1 ̄2.

作者简介

方湘艳,博士。目前主要从事可信计算机、微电子设计以及网络安全的研究与开发工作。

韩威,研究员,硕士生导师,中国船舶重工集团公司第709研究所微电子中心主任。主要从事集成电路设计、

容错计算技术等专业的研究与开发工作,曾在国家‘七五’、‘八五’、‘九五’国防预研项目中分别获得国家科技进步二等奖、部级科技进步一等奖等。

图5激励波形与数据转换时序图

[2]张雅绮,李锵译.VerilogHDL高级数字设计[M].北

京:电子工业出版社,2005.1.

[3]CliffordE.Cummings,“SimulationandSynthesisTechniquesforAsynchronousFIFODesign,”SNUG2002(SynopsysUsersGroupConference,SanJose,CA,2002)UserPapers,March2002,SectionTB2,2ndpa-per:5-12.

[4]CliffordE.Cummings,“SynthesisandScriptingTechniquesforDesigningMulti-AsynchronousClock

Designs,”SNUG2001(SynopsysUsersGroupConfer-ence,SanJose,CA,2001)UserPapers,March2001,SectionMC1,3rdpaper:6-9.

作者简介

杨青山,华南理工大学微电子学与固体电子学专业硕士研究生,主要研究方向为大规模集成电路设计与系统集成。

上接第39页

CIC

相关文档
相关文档 最新文档