计算机工程与科学COMPUTERENGINEERINGSCIENCE:1007-130X(2005)01-0058-03基于Gray码的异步FIFO接口技术及其应用.TheInterfaceTechnologyofAsynchronousFIFOsBasedonGrayCodeandItsApplication汪东,马剑武,陈书明CN43-1258/TPISSN1007-130XWANGDongjMA激anrwufCHIMNShu-ming(国防科技大学计算机学院■湖南长沙410073)(SchoolofComputerScience,NationalUniversityofDefenseTechnologyfChangsha410073fChina)摘要:本文介绍了利用异步FIFO在玲时钟域的逻辑设计中进行异步接口的技术,介绍了利用Gray码作异步FIFO指针的方法。这些技术和方法对于异步逆辑的设计具有广迂的参考意义。Abstract:Thispaperintroducesthe1technologyofusingasynchronousFIFOstoimplementtheasynchronousinterfaceinlogicdesignsacrossthemulti-clockregion>andthemethodofusingGraycodeasthepointersofasynchronousFIFOs.Thistechnologyandmethodcanbewidelyusedinthedesignofasynchronouslogic关键词:异步FIFO;多时钟域;异步逻辑;Gray码Keywords:asynchronousFIFO?multi-clockregion;asynchronouslogic;Graycode:TP333文献标识码:A1收稿日期:2003-09-08;修订日期:2003-1028作者简介:汪东(1979男,河南信阳人•博士生,研究方向为髙性能VLSI设计技术’马剑武,工程聊,研究方向为高性能微处理器设计,陈书明,教授,博士生导师•研究方向为髙性能体系结构和VLSI设计.通讯地址:410073湖南省长沙市国防科技夫学计算机学院;Tel:(0731)4573687,13975813099;E-mail:nudtjum@sina-comAddress:SchoolofComputerScience♦NationalUniversityofDefenseTechnology,ChangshatHunan410073.P.R.China1引言在数字系统的设计中,我们常常会遇到多时钟域下数据和信号进行异步握手的问题。如果不采取可靠的接口技术,数据和信号的接收方极易产生亚稳态信号,从而发生危险。为此,人们常常采用异步逻辑进行局部接口,以便有效解决全局定时问题⑴。本文将就其中的异步FIFO接口技术展开详细的讨论。2异步FIFO接口技术2.1异步FIFO异步FIFO由读/写控制电路和存储体三部分组成。读/写电路分别接收外部的读/写请求,从FIFO存储体中取/存数据二者按照一定的协议进行握手,以防止存储体发生上溢或下溢错误。我们不妨假设写电路工作在时钟CZ<a下,时钟频率为北;假设读电路工作在时钟Clk_b下,频率为fb.fa>fb.FIFO深度为口写电路维持一个写指针W_poinUr(Q^Wointer^n-1),并通过写使能信号W_enable通知FIFO保存数据。外部通过Wrt信号向写电路发出写操作请求,写电路用作为应答,并接收待写的数据DataW9读电路维持一个读指针R_pointer(Q^R_pointer^n—l')t并通过读使能信号R_ena-必通知FIFO读出数据。外部通过信号Rd向读电路发岀读操作请求,读电路用作为应答,并发送读出的数据Data_R°异步FIFO的一般结构如图1所示。FIFO体图1异步FIFO的一般结构为提高FIFO的利用率,我们不妨把FIFO组织成环形队列的形式,同时给读写指针的最高位增加一个冗余位,即指针宽度定义为[log2?J:0],而不是[log2"—1:0]。这样,当FIFO第一次被完全写满时,写指针的值为2“,而不是全零。当判断出W_pointer=Rainier时,即可认为FIFO为空。写电路向FIFO写入数据的条件是:(1)外部写请求附有效;(2)W_pointer=^R_pointer^且FIFO有大于1的剩余空间:或者W」)oinler=R_poiniero这时,如果外部有写请求,写电路就能够作出写应答然后接收数据DataJV.tW_enable有效。每写一个数^9W_pointer自动加1。读电路从FIFO中读出数据的条件是:(1)外部读请求Rd有效;(2)W_pointer^R_pointero这时,如果外部有读请求,读电路就能够作岀读应答Rd_Ack,置R_enable有效,每读出一个数据,R.pointer自动加1,并发送数据Data_R9当W_pointer=pointer时,数据被全部读出。FIFO体在读/写使能的控制下工作。当望说沧有效时,FIFO把数据Datajn存入W_pOinier指示的地址中;当心沁血有效时,FIFO以R•如作为地址读出相应的数据。但是,当读/写电路对W_poimer和R—Pointer进行相等或不等的判断时,如果用自然二进制码作指针直接进行比较就隐含着危险。下面给岀一个例子,如图2a所示。-如创e被置为...