在ASIC中采用VHDL语言实现异步FIFO的设计

描述

1 、引言

现代 IC(Integrated Circuit)设计的主导思想之一就是设计同步化,即对所有时钟控制器件(如触发器、RAM等)都采用同一个时钟来控制。但由于现代IC芯片的规模越来越大,包含极其丰富的触发器,不同电路的时钟驱动源存在频率和相位的差异,在实际的设计中实现完全同步化的设计非常困难,很多情况下不可避免地要完成数据在不同时钟域间的传递(如高速模块和低速模块之间的数据交换)。这时,亚稳态问题是异步数据传输过程面临的主要问题,如何避免亚稳态的产生,保持系统的稳定,顺利完成数据的传输就成为一个重要的问题,这也是异步电路设计中最为棘手的问题。异步FIFO(First In First Out)是解决这个问题一种简便、快捷的解决方案。

2、 异步FIFO介绍

异步FIFO广泛应用于计算机网络工业中进行异步数据传送,这里的异步是指发送用一种速率而接收用另一速率,因此异步FIFO有两个不同的时钟,一个为读同步时钟,一个为写同步时钟。

当数据从一个时钟驱动的模块进入另一个时钟驱动的模块时,问题就有可能出现了。例如当写时钟比读时钟快时,未读走的数据有可能被新数据覆盖,因而导至数据丢失。为此,必须增加一些控制信号和状态信号,控制信号如push、pop,状态信号如empty,almost-empty,full,almost-full等。

典型的异步FIFO由异步双端口RAM和控制逻辑构成,后者包含读指针和写指针,如图1。当FIFO中有数据而非空时,POP信号用于控制数据的读出,所读数据来自读指针所指的dualportRAM中的存储单元,并且读指针加1。当读指针赶上写指针时,FIFO为空并且用empty信号来指示这种情况。当FIFO中有空间而非满时,PUSH信号用于控制数据的写入,所写数据写入写指针所指的双端口RAM中的存储单元,并且写指针加1。当写指针赶上读指针时,FIFO为满并且用full信号来指示这种情况。

asic

3、 亚稳态问题

在数字集成电路中,触发器要满足setup/hold的时间要求。当一个信号被寄存器锁存时,如果信号和时钟之间不满足这个要求,Q端的值是不确定的,并且在未知的时刻会固定到高电平或低电平。这个过程称为亚稳态(Metastability)。

当数据信号通过两个时钟域的交界处时,将会分别由这两个时钟来控制信号的值。此时如果两时钟信号的敏感沿非常接近并超过了允许的额度,则将出现数据信号的不稳定,即电路陷入亚稳态,也称为同步失败。亚稳态是在两时钟敏感沿靠得很近、第二级时钟敏感沿到来时其输入数据不稳时发生,可将其视为仅仅是第二级触发器输入信号不稳定所导致的结果。只要使输入信号稳定,就能解决亚稳态问题。不同时钟域间数据传递的最重要问题就是亚稳态问题。下面从触发器的物理特性方面对亚稳态进行描述。

触发器进入亚稳态的时间可以用参数MTBF(mean time between failures)来描述,MTBF即触发器采样失败的时间间隔,其计算公式为:

asic

由上面的推导可知,一个信号(a_clk)在过渡到另一个时钟域(b_clk)时,如果仅仅用一个触发器将其锁存,那么用b_clk进行采样的结果将可能是亚稳态。这也是信号在跨时钟域时应该注意的问题。

4 、亚稳态问题的解决

虽然亚稳态是不可避免的,但是,下面的设计改进可以将其发生的概率降低到一个可以接受的程度。

a、对写地址/读地址采用格雷码。由实践可知,同步多个异步输入信号出现亚稳态的概率远远大于同步一个异步信号的概率。对多个触发器的输出所组成的写地址/读地址可以采用格雷码如表一,其中4位格雷码的最高位可以用来标示对那个ram进行操作,而实际的操作地址由4位格雷码的最高两位异或再加上后两位得到。由于格雷码每次只变化一位,采用格雷码可以有效地减少亚稳态的产生。

asic

b、采用触发器来同步异步输入信号,如图2中的两极触发器可以将出现亚稳态的几率降低到一个很小的程度。但是,正如图2所示,这种方法同时带来了对输入信号的一级延时,需要在设计时钟的时候加以注意。另外,虽然采用两级时钟同步可以在一定程度消除亚问题,但如果在信号从快时钟域向慢时钟域过渡的时候,如果信号变化太快,慢时钟将可能无法对信号进行采样。所以,在使用两级时钟同步的时候,应该使原始信号保持足够长的时间,以便另一个时钟域的锁存器可以正确的对其进行采样。

asic

5 、异步FIFO的VHDL实现

VHDL是硬件描述语言的一种,用于数字电子系统设计。设计者可用它进行各种级别的逻辑设计,可用它进行数字逻辑系统的仿真验证、时序分析、逻辑综合。它是目前应用最广泛的一种硬件描述语言。目前VHDL语言已经得到多种EDA工具的支持,并且已经成为IEEE标准,因此利用VHDL语言进行电路设计可以节约开发成本和周期。下面以视频转换系统中的异步FIFO为例,用VHDL实现如下(假设存储器的深度为128个像素,即256个字节):

读地址产生模块:

asic

 

asic

6 、结论

本文讨论了在ASIC设计中数据在不同时钟之间传递数据所产生的亚稳态问题,并提出了一种新的异步FIFO的设计方法,并用VHDL语言进行描述,利用Altera公司的Cyclone系列的EP1C6进行硬件实现,该电路软件仿真和硬件实现已经通过验证,并应用到各种电路中。实践证明它可以解决由于异步产生的错误,同时增加了应用的灵活性。


打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分