来源:单片机及嵌入式系统应用 作者:吴自信 张嗣忠摘要:首先介绍异步 FIFO 的概念、应用及其结构,然后分析实现异步 FIFO 的难点问题及其解
决办法;在传统设计的基础上提出一种新颖的电路结构并对其进行综合仿真和 FPGA 实现。
关键词:异步电路 FIFO 亚稳态 格雷码
1 异步 FIFO 介绍在现代的集成电路芯片中,随着设计规模的不断扩大,一个系统中往往含有数个时钟。多时钟域带来的一个问题就是,如何设计异
步时钟之间的接口电路。异步 FIFO(First In First Out)是解决这个问题一种简便、快捷的解决方案。使用异步 FIFO 可以在两个不同时钟系统之间快速而方
便地传输实时数据。在网络接口、图像处理等方面,异步 FIFO 得到了广泛的应用。
异步 FIFO 是一种先进先出的电路,使用在需要产时数据接口的部分,用来存储、缓冲在两个异步时钟之间的数据传输。在异步电路中,由于时钟之
间周期和相位完全独立,因而数据的丢失概率不为零。如何设计一个高可靠性、高速的异步 FIFO 电路便成为一个难点。本文介绍解决这一问题的一种方法。
图 1 是异步 FIFO 的结构框图。
由图 1 可以看出:整个系统分为两个完全独立的时钟域——读时钟域和写时间域;FIFO 的存储介质为一块双端口 RAM,可以同时进行读写操作。在
写时钟域部分,由写地址产生逻辑产生写控制信号和写地址;读时钟部分由读地址产生逻辑产生读控制信号和读地址。在空/满标志产生部分,由读写地址相
互比较产生空/满标志。
2 异步 FIFO 的设计难点设计异步 FIFO 有两个难点:一是如何同步异步信号,使触发器不产生亚稳态;二是如何正确地设计空、满以及几乎满等信
号的控制电路。
下面阐述解决问题的具体方法。
2.1 亚稳态问题的解决
在数字集成电路中,触发器要满足 setup/hold 的时间要求。当一个信号被寄存器锁存时,如果信号和时钟之间不满足这个要求,Q 端的值是不确定
的,并且在未知的时刻会固定到高电平或低电平。这个过程称为亚稳态(Metastability)。图 2 所示为异步时钟和亚稳态,图中 clka 和 clkb 为异步时钟。
亚稳态必定会发生在异步 FIFO 中。图中在异步 FIFO 中,电路外部的输入和内部的时钟之间是毫无时间关系的,因此 setup/hold 冲突是必然的;同
在电路内部的两个没有关系的时钟域之间的信号传递,也必须会导致 setup/hold 冲突。
虽然亚稳态是不可避免的,但是,下面的设计改进可以将其发生的概率降低到一个可以接受的程度。
① 对写地址/读地址采用格雷码。由实践可知,同步多个异步输入信号出现亚稳态的概率远远大于同步一个异步信号的概率。对多个触发器的输出所
组成的写地址/读地址可以采用格雷码。由于格雷码每次只变化一位,采用格雷码可以有效地减少亚稳态的产生。
② 采用触发器来同步异步输入信号,如图 3 中的两极触发器可以将出现亚稳态的几率降低到一个很小的程度。但是,正如图 3 所示,这种方法同时带
来了对输入信号的一级延时,需要在设计时钟的时候加以注意。
2.2 空/满标志的产生
空/满标志的产生 FIFO 的核心部分。如何正确设计此部分的逻辑,直接影响到 FIFO 的性能。