异步FIFO的Verilog设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
异步F I F O的Veril og设计3
卜宪宪
(莱阳农学院 青岛 266109)
摘 要 介绍异步F I F O的基本结构和工作原理,分析异步F I F O的设计难点及其解决办法,在传统设计的基础上提出一种新颖的电路结构,用veril og描述并对其进行综合仿真并在FPG A上实现,得到较好的性能。
关键词 F I F O 双口RAM 格雷码 Veril og
中图分类号 T N45
1 引言
在现代的集成电路芯片中,随着设计规模的不断扩大,一个系统中往往含有数个时钟,因而出现了跨不同时钟区域进行异步数据传输的要求。异步F I F O(First I n First Out)是解决这个问题一种简便、快捷的解决方案。使用异步F I F O可以在两个不同时钟系统之间快速而方便地传输实时数据。在网络接口、图像处理等方面,异步F I F O得到了广泛的应用。
异步F I F O是一种先进先出的电路,使用在需要产时数据接口的部分,用来存储、缓冲在两个异步时钟之间的数据传输。在异步电路中,由于时钟之间周期和相位完全独立,因而数据的丢失概率不为零。如何设计一个高可靠性、高速的异步F I F O 电路便成为一个难点。本文介绍解决这一问题的一种方法。
2 异步F I F O功能描述
图1给出了F I F O的接口信号和内部模块图。
图1 异步F I F O内部模块图和接口信号
由图1可以看出,写地址和满信号产生模块产生写有效信号和下一次要写数据的地址,以及指示缓冲区满信号。读地址和空信号产生模块产生下一次要读数据的地址,以及指示缓冲区空信号。
F I F O的操作如下:F I F O复位时写指针和读指针都为0,满信号无效,空信号有效。当有写信号有效时,把数据写入写指针指向的单元,并把写指针加1,使它指向下一个要写数据单元,写时钟每一拍写入一个数据,直到满信号有效或写信号无效时停止。当读信号有效时,读指针指向的数据被读出,读时钟每一拍可以读出一个数据,直到读信号无效或空信号有效时停止读出数据。
3 异步F I F O的难点及解决方法设计异步F I F O有两个难点:一是不同时钟域域间数据传递的问题;二是如何正确的生成的空\满标志。下面阐述解决这两个问题的方法。
3.1 不同时钟域间数据传递的问题及解决方法
亚稳态是不同时钟域间传递数据的最重要的问题。当数据信号通过两个时钟域的交界处时,将会分别由两个时钟来控制信号的值。此时如果两个时钟信号敏感沿非常接近并超过允许的额度,则将出现数据信号不稳定,即电路陷入亚稳态。
图2(a)中是一种最简单的异步电路,clka和clkb为异步时钟。触发器B采样触发器A的输出数据。当clka和clkb的上升延离得太近时,如果触发器A的值在这个时候发生改变,clkb将采样到一个正在变化的数据,触发器的B的输出将是一个不确定的值,如图2(b)所示。
考虑到亚稳态是由于两个时钟沿过分接近造
191
第38卷(2007)第6期 计算机与数字工程
3收到本文时间:2006年10月
24日
作者简介:卜宪宪,女,助教,硕士,研究方向:计算机系统结构、专用集成电路设计。
成的,如果对不同时钟域的输入信号用两个锁存器
串连续锁存两拍,第一个触发器锁存到一个不稳定信号,经过一个时钟周期的等待以后很可能趋于稳定,变为确定值0或者1,第二个触发器在下一拍锁存的时候就能得到一个确定的值
。
图2 亚稳态示意图
3.2 空/满标志的生成
空满标志的产生是异步fif o 设计的核心部分。
如何正确设计此部分的逻辑,直接影响到fif o 的性能。空满标志产生的原则是:写满不溢出,读空不多读。即无论在什么时刻,都不应出现读写地址同时对一个存储器地址操作的情况。空满标志都是由于读写地址相等所产生的,因此需要找到一种方法来区分开地址相等的时候应该是空还是满。
传统的空/满标志产生方法有两种,第一种方法是:
空标志=(|写地址-读地址|<=预定值)并且(写地址超前读地址)
满标志=(|写地址-读地址|<=预定值)并且(读地址超前写地址
)
图3 格雷码指针产生电路
最直接的做法是,采用读、写地址相比较来产
生空满标志。如图3(a )所示,当读、写地址的差值等于一个预设值的时候,空/满信号被置位。这种实现方法逻辑简单,但是减法器是会引入比较大的组合逻辑延时,因而限制了F I F O 的速度。所以,
在对F I F O 的速度要求比较严格的场合,一般只采用相等不相等的比较逻辑,避免使用减法器。
图3(b )是另外一种常见的设计,比较器只对读、写地址比较是否相等。但在读、写地址相等的时候F I F O 既可能为空又可能满。因此,增加一个并行的区间判断逻辑来指示是空还是满。这个区间判断逻辑将整个地址空间分为几个部分,以指示读、写地址的相对位置。这种做法提高了整个电路的速度,但是也有其缺点。主要是直接采用读、写地址等于不等于的比较逻辑来进行空/满标志的判断,可能带来误判。
4 改进的F I FO
4.1 格雷码的应用及产生逻辑
异步设计情况下读写时钟属于不同的时钟域,这给空满标志产生逻辑部分及双端口存储器的读写逻辑设计部分带来很大的难度。在空满信号产生逻辑部分,由于读写地址信号是由不同时钟域的时钟所产生,通过比较读写地址产生空满信号就面临着处理多时钟域信号之间数据交换可能导致亚稳态的问题。Gray 码技术是解决这一问题的有效格雷码,是一种在相邻计数值之间只有一位发生变化的编码方式,使用格雷码指针使在不同时钟域传递地址指针过程中不会出现因为指针中多位数值变化带来的错误。格雷码生成可以采用A ,B 两种电路改进的异步fif o 采用B 方案,通过增加一个寄存器保存二进制的值,减少一级复杂的组合逻辑电路,使整个电路可以工作在更高的频率上。4.2 新颖的空/满标志产生逻辑
F I F O 中的读写指针是一个循环指针,读写指
针初始化值都为0,满标志初始化为0,空标志初始化为1。读写操作开始候,每做一次写操作写指针加1,每做一次读操作读指针也加1。当读指针在加1过程中与写指针相等的时候,表示缓冲区为空应该置空标志。反之,写指针加1过程中等于读指针时,缓冲区满应该置满标志。
分析看出空满标志产生的必要条件是读地址
等于写地址。现在难点就集中在当读地址等于写地址时如何区分缓冲区空或者满,也就是如果判断是读指针追上写指针,还是写指针追上读指针。
分析满标志发生时候格雷码地址指针变化情况发现,可以把读写指针四等分并增加标志位g o 2ingfull 代表存储区的将要满状态,如图5,当写指针
291 卜宪宪:异步F I F O 的Veril og 设计 第38卷