在现代
集成电路设计中,随着集成度的不断提升,常常会遇到数据缓存与不同时钟域之间数据传递的问题,在不同系统间如不能设计出有效的
接口单元,将会产生数据传输过程中的复写、丢失和无效数据的读入等错误,同时亚稳态现象也会出现在不同时钟域之间的数据传递过程中。此时,如何实现数据高速有效的传输并克服跨时钟域间数据传递时的亚稳态成为一个关键点问题。由于异步FIFO(First In First Out)能够有效解决不同传输速度和不同时钟域之间数据传递的问题,异步FIFO在实际电路中得到广泛的运用。本文介绍一种基于AS
IC的高速异步FIFO的设计和实现方案。
1 异步FIFO的基本功能和结构
异步FIFO指在不同时钟域之间,由一个时钟域写入,待写入数据稳定之后,由另一个时钟域读出。图1为异步FIFO的基本结构框图,FIFO的存储单元采用双端口RAM的解决方式,同步模块SYNC完成异步读写时钟域之间指针信号的同步过程,将同步前后的指针送到wrfull、rdempty模块,产生wrfull、rdempty信号,从而构成一个完整的FIFO。
2 异步信号同步的关键问题
在不同时钟域之间传递的信号,由于两个时钟之间没有清楚的相位和频率关系,很容易出现亚稳态现象。亚稳态是指
触发器无法在某个规定的时间段内达到一个可以确认的状态。当一个触发器进入亚稳态时,触发器会输出一些中间电平,或者可能处于振荡状态。在
数字电路中,如果将亚稳态信号直接应用于后续的组合逻辑,将会产生难以预测的结果。图2所示为异步时钟的亚稳态现象,图中CLK_A和CLK_B为异步时钟。
亚稳态是不可避免的,但可以采用合适的方法将其降低到一个合适的低概率水平。
首先可以从读写地址指针的编码入手。若采用传统的二进制计数,地址指针的每次增加,则有可能出现从全1到全0的所有位的同时跳变,这种情况使得出现亚稳态的概率大大增加。本文将采用一种特殊的编码方式,使得地址指针的每次增加只会出现一位改变,从而减小亚稳态发生的概率。
其次可以采用两级锁存的办法。如图3所示,在一个信号进入另一个时钟域前,将该信号用两级触发器进行锁存,即使级触发器的输出出现亚稳态,经过一个时钟周期之后,进入第二级触发器的信号已经稳定到一个确定的电平,从而两级锁存的输出可以有效减小亚稳态发生的概率。