FIFO原理讲解

FIFO原理讲解

ID:44164962

大小:705.92 KB

页数:18页

时间:2019-10-19

FIFO原理讲解_第1页
FIFO原理讲解_第2页
FIFO原理讲解_第3页
FIFO原理讲解_第4页
FIFO原理讲解_第5页
资源描述:

《FIFO原理讲解》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、异步FIFO结构(第一部分)作者:VijayA.Nebhrajani翻译:AdamLuo2006年7月设计一个FIFO是ASIC设计者遇到的最普遍的问题之一。本文着重介绍怎样设计FIFO——这是一个看似简单却很复杂的任务。一开始,要注意,FIFO通常用于时钟域的过渡,是双时钟设计。换句话说,设计工程要处理(workoff)两个时钟,因此在大多数情况下,FIFO工作于独立的两个时钟之间。然而,我们不从这样的结构开始介绍—我们将从工作在单时钟的一个FIFO特例开始。虽然工作在同一时钟的FIFO在实际应用中很少用到,但它为更多的复杂设计搭建一个平台,这是非常有用的。然后再

2、从特例推广到更为普通的FIFO,该系列文章包括以下内容:1.单时钟结构2.双时钟结构——双钟结构13.双时钟结构——双钟结构24.双时钟结构——双钟结构35.脉冲模式FIFO单时钟FIFO特例FIFO有很多种结构,包括波浪型(ripple)FIFO,移位寄存器型以及其他一些我们并不关心的结构类型。我们将集中讨论包含RAM存储器的结构类型。其结构如图1所示。通过分析,我们看到图中有一个具有独立的读端口和独立的写端口的RAM存储器。这样选择是为了分析方便。如果是一个单端口的存储器,还应包含一个仲裁器保证同一时刻只能进行一项操作(读或写),我们选择双口RAM(无需真正的双

3、口RAM,因为我们只是希望有一个简单的相互独立的读写端口)是因为这些实例非常接近实际情况。读、写端口拥有又两个计数器产生的宽度为log2(array_size)的互相独立的读、写地址。数据宽度是一个非常重要的参数将在在稍后的结构选择时予以介绍,而现在我们不必过分的关心它。为了一致,我们称这些计数器为“读指针”(readpointer)和“写指针”(writepointer)。写指针指向下一个将要写入的位置,读指针指向下一个将要读取的位置。每次写操作使写指针加1,读操作使读指针加1。我们看到最下面的模块为“状态”(stauts)模块。这个模块的任务实给FIFO提供“空

4、”(empty)和“满”(full)信号。这些信号告诉外部电路FIFO已经达到了临界条件:如果出现“满”信号,那么FIFO为写操作的临界状态,如果出现“空”信号,则FIFO为读操作的临界状态。写操作的临界状态(“fullisactive”)表示FIFO已经没有空间来存储更多的数据,读操作的临界表示FIFO没有更多的数据可以读出。status模块还可告诉FIFO中“满”或“空”位置的数值。这是由指针的算术运算来完成了。实际的“满”或“空”位置计算并不是为FIFO自身提供的。它是作为一个报告机构给外部电路用的。但是,“满”和“空”信号在FIFO中却扮演着非常重要的角色,

5、它为了能实现读与写操作各自的独立运行而阻塞性的管理数据的存取。这种阻塞性管理的重要性不是将数据复写(或重读),而是指针位置可以控制整个FIFO,并且使读、写操作改变着指针数值。如果我们不阻止指针在临界状态下改变状态,FIFO还能都一边“吃”着数据一边“产生”数据,这简直是不可能的。进一步分析:DPRAM若能够寄存读出的信号,这意味着存储器的输出数据已被寄存。如果这样的话,读指针将不得不设计成“read并加1”,也就是说在FIFO输出数据有效之前,必须提供一个明确的读信号。另一方面,如果DPRAM没有寄存输出,一旦写入有效数据就可以读出;先读数据,然后使指针加1。这将

6、影响到从FIFO读出数据和实现空/满计算的逻辑。由于简化的缘故,我们仅论述DPRAM没有提供索锁存输出的情况。同理,将其推广到寄存输出的DPRAM并不是很复杂。从功能上看,FIFO工作原理如下所述:复位时,读、写指针均为0。这是FIFO的空状态,空标志为高电平,(我们用高电平表示空标志)此时满标志为低电平。当FIFO出现空标志时,不允许读操作,只能允许写操作。写操作写入到位置0,并使写指针加1。此时,空标志变为低电平。假设没有发生读操作而且随后的一段时间FIFO中只有写操作。一定时间后,写指针的值等于array_size-1。这就意味着在存储器中,要写入数据的最后一

7、个位置就是下一个位置。在这种情况下,写操作将写指针变为0,并将输出满标志。注意,在这种情况下,写指针和读指针是相等的,但是FIFO已满,而不是空。这意味着“满”或“空”的决定并不是仅仅基于指针的值,而是基于引起指针值相等的操作。如果指针值相等的原因是复位或者读操作,FIFO认为是空;如果原因是写操作,那么FIFO认为是满。现在,假设我们开始一系列的读操作,每次读操作都将增加读指针的值,直到读指针的位置等于array_size-1。在该点,从这个位置读出的FIFO输出总线上的数据是有效的。随后的逻辑读取这些数据并提供一个读信号(在一个时钟周期内有效)。这将导致读指

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。