文档库 最新最全的文档下载
当前位置:文档库 › FPGA先进先出存储器 FIFO

FPGA先进先出存储器 FIFO

FPGA先进先出存储器 FIFO
FPGA先进先出存储器 FIFO

1.什么是FIFO?

FIFO是英文First In First Out 的缩写,是一种先进先出的数据缓存器,他与普通存储器的区别是没有外部读写地址线,这样使用起来非常简单,但缺点就是只能顺序写入数据,顺序的读出数据,其数据地址由内部读写指针自动加1完成,不能像普通存储器那样可以由地址线决定读取或写入某个指定的地址。

2.什么情况下用FIFO?

FIFO一般用于不同时钟域之间的数据传输,比如FIFO的一端时AD数据采集,另一端时计算机的PCI总线,假设其AD采集的速率为16位 100K SPS,那么每秒的数据量为

100K×16bit=1.6Mbps,而PCI总线的速度为33MHz,总线宽度32bit,其最大传输速率为1056Mbps,在两个不同的时钟域间就可以采用FIFO来作为数据缓冲。另外对于不同宽度的数据接口也可以用FIFO,例如单片机位8位数据输出,而DSP可能是16位数据输入,在单片机与DSP连接时就可以使用FIFO来达到数据匹配的目的。

3.FIFO的一些重要参数

FIFO的宽度:也就是英文资料里常看到的THE WIDTH,它只的是FIFO一次读写操作的数据位,就像MCU有8位和16位,ARM 32位等等,FIFO的宽度在单片成品IC中是固定的,也有可选择的,如果用FPGA自己实现一个FIFO,其数据位,也就是宽度是可以自己定义的。 FIFO的深度:THE DEEPTH,它指的是FIFO可以存储多少个N位的数据(如果宽度为N)。如一个8位的FIFO,若深度为8,它可以存储8个8位的数据,深度为12 ,就可以存储12个8位的数据,FIFO的深度可大可小,个人认为FIFO深度的计算并无一个固定的公式。在FIFO实际工作中,其数据的满/空标志可以控制数据的继续写入或读出。在一个具体的应用中也不可能由一些参数算数精确的所需FIFO深度为多少,这在写速度大于读速度的理想状态下是可行的,但在实际中用到的FIFO深度往往要大于计算值。一般来说根据电路的具体情况,在兼顾系统性能和FIFO成本的情况下估算一个大概的宽度和深度就可以了。而对于写速度慢于读速度的应用,FIFO的深度要根据读出的数据结构和读出数据的由那些具体的要求来确定。

满标志:FIFO已满或将要满时由FIFO的状态电路送出的一个信号,以阻止FIFO的写操作继续向FIFO中写数据而造成溢出(overflow)。

空标志:FIFO已空或将要空时由FIFO的状态电路送出的一个信号,以阻止FIFO的读操作继续从FIFO中读出数据而造成无效数据的读出(underflow)。

读时钟:读操作所遵循的时钟,在每个时钟沿来临时读数据。

写时钟:写操作所遵循的时钟,在每个时钟沿来临时写数据。

读指针:指向下一个读出地址。读完后自动加1。

写指针:指向下一个要写入的地址的,写完自动加1。

读写指针其实就是读写的地址,只不过这个地址不能任意选择,而是连续的。

4.FIFO的分类

根均FIFO工作的时钟域,可以将FIFO分为同步FIFO和异步FIFO。同步FIFO是指读时钟和写时钟为同一个时钟。在时钟沿来临时同时发生读写操作。异步FIFO是指读写时钟不一致,读写时钟是互相独立的。

5.FIFO设计的难点

FIFO设计的难点在于怎样判断FIFO的空/满状态。为了保证数据正确的写入或读出,而不发生益处或读空的状态出现,必须保证FIFO在满的情况下,不能进行写操作。在空的

状态下不能进行读操作。怎样判断FIFO的满/空就成了FIFO设计的核心问题。由于同步FIFO 几乎很少用到,这里只描述异步FIFO的空/满标志产生问题。

在用到触发器的设计中,不可避免的会遇到亚稳态的问题(关于亚稳态这里不作介绍,可查看相关资料)。在涉及到触发器的电路中,亚稳态无法彻底消除,只能想办法将其发生的概率将到最低。其中的一个方法就是使用格雷码。格雷码在相邻的两个码元之间只由一位变换(二进制码在很多情况下是很多码元在同时变化)。这就会避免计数器与时钟同步的时候发生亚稳态现象。但是格雷码有个缺点就是只能定义2^n的深度,而不能像二进制码那样随意的定义FIFO的深度,因为格雷码必须循环一个2^n,否则就不能保证两个相邻码元之间相差一位的条件,因此也就不是真正的各雷码了。第二就是使用冗余的触发器,假设一个触发器发生亚稳态的概率为P,那么两个及联的触发器发生亚稳态的概率就为P的平方。但这回导致延时的增加。亚稳态的发生会使得FIFO出现错误,读/写时钟采样的地址指针会与真实的值之间不同,这就导致写入或读出的地址错误。由于考虑延时的作用,空/满标志的产生并不一定出现在FIFO真的空/满时才出现。可能FIFO还未空/满时就出现了空/满标志。这并没有什么不好,只要保证FIFO不出现overflow or underflow 就OK了。

很多关于FIFO的文章其实讨论的都是空/满标志的不同算法问题。

在Vijay A. Nebhrajani的《异步FIFO结构》一文中,作者提出了两个关于FIFO空/满标志的算法。

第一个算法:构造一个指针宽度为N+1,深度为2^N字节的FIFO(为便方比较将格雷码指针转换为二进制指针)。当指针的二进制码中最高位不一致而其它N位都相等时,FIFO 为满(在Clifford E. Cummings的文章中以格雷码表示是前两位均不相同,而后两位LSB 相同为满,这与换成二进制表示的MSB不同其他相同为满是一样的)。当指针完全相等时,FIFO为空。这也许不容易看出,举个例子说明一下:一个深度为8字节的FIFO怎样工作(使用已转换为二进制的指针)。FIFO_WIDTH=8,FIFO_DEPTH= 2^N = 8,N = 3,指针宽度为

N+1=4。起初rd_ptr_bin和wr_ptr_bin均为“0000”。此时FIFO中写入8个字节的数据。wr_ptr_bin =“1000”,rd_ptr_bin=“0000”。当然,这就是满条件。现在,假设执行了8次的读操作,使得rd_ptr_bin =“1000”,这就是空条件。另外的8次写操作将使

wr_ptr_bin 等于“0000”,但rd_ptr_bin 仍然等于“1000”,因此FIFO为满条件。

显然起始指针无需为“0000”。假设它为“0100”,并且FIFO为空,那么8个字节会使wr_ptr_bin =“1100”,, rd_ptr_bin 仍然为“0100”。这又说明FIFO为满。

在Vijay A. Nebhrajani的这篇《异步FIFO结构》文章中说明了怎样运用格雷码来设置空满的条件,但没有说清为什么深度为8的FIFO其读写指针要用3+1位的格雷码来实现,而3+1位的格雷码可以表示16位的深度,而真实的FIFO只有8位,这是怎么回事?而这个问题在Clifford E. Cummings的文章中得以解释。三位格雷码可表示8位的深度,若在加一位最为MSB,则这一位加其他三位组成的格雷码并不代表新的地址,也就是说格雷码的0100表示表示7,而1100仍然表示7,只不过格雷码在经过一个以0位MSB的循环后进入一个以1为MSB的循环,然后又进入一个以0位MSB的循环,其他的三位码仍然是格雷码,但这就带来一个问题,在0100的循环完成后,进入1000,他们之间有两位发生了变换,而不是1位,所以增加一位MSB的做法使得该码在两处:0100~1000,1100~0000有两位码元发生变化,故该码以不是真正的格雷码。增加的MSB是为了实现空满标志的计算。Vijay A. Nebhrajani的文章用格雷码转二进制,再转格雷码的情况下提出空满条件,仅过两次转换,而Clifford E. Cummings的文章中直接在格雷码条件下得出空满条件。其实二者是一样的,只是实现方式不同罢了。

第二种算法:Clifford E. Cummings的文章中提到的STYLE #2。它将FIFO地址分成了4部分,每部分分别用高两位的MSB 00 、01、 11、 10决定FIFO是否为going full 或

going empty (即将满或空)。如果写指针的高两位MSB小于读指针的高两位MSB则FIFO为“几乎满”,

若写指针的高两位MSB大于读指针的高两位MSB则FIFO为“几乎空”。

在Vijay A. Nebhrajani的《异步FIFO结构》第三部分的文章中也提到了一种方法,那就是方向标志与门限。设定了FIFO容量的75%作为上限,设定FIFO容量的25%为下限。当方向标志超过门限便输出满/空标志,这与Clifford E. Cummings的文章中提到的STYLE #2可谓是异曲同工。他们都属于保守的空满判断。其实这时输出空满标志FIFO并不一定真的空/满。

说到此,我们已经清楚地看到,FIFO设计最关键的就是产生空/满标志的算法的不同产生了不同的FIFO。但无论是精确的空满还是保守的空满都是为了保证FIFO工作的可靠。

6.关于FIFO的一点的思考

关于FIFO丢数据的问题,其实各位对同一个问题的理解有偏差,才造成了相互误解。如果在理想状况下(时钟同步不回出现错码),FIFO由读写指针控制是不会丢数的,(这不是废话吗,现实中哪来的理想状况!)且慢,我的意思是说丢数据并不是读写谁快谁慢造成的,在正确的设置空满标志算法的情况下,数据overflow 和underflow 是不会发生的。而往往现实中因为亚稳态的存在,才出现了丢数的情况,也就是说是只要读写时钟不同步,在采样的过程中采样出错,使得本该是0100的变成了1101等等,就会出现读写的错误,我们称其为丢数,其原因就是在时钟同步指针的时候出现亚稳态,由于二进制码加1的时候很多位同时变化,所以很容易出现亚稳态。因此才用格雷码将此问题发生的概率比降到最小,其次用多余的触发器使其概率进一步降低,也就是说错误难免,但我们可以将其发生的概率降到最低,并且在出现错误时也不会错的态离谱(详见Vijay A. Nebhrajani的《异步FIFO 结构》第二篇)。

二进制码指针并非不好用,在前面也提到了它有自身的优势,由于通过设置握手信号,指针可以有多位同时变化,二进制指针每次移动可以跳跃过任意的长度,这样给FIFO的某些功能的实现带来了方便(例如,硬件直接控制FIFO从缓存的数据流中丢弃一个出错的包);而格雷码指针一般只能做递增或递减的移动。设置握手信号虽然可以保证指针不出错,但这样你来我往的经过三四个回合才能开始传数据,所以对于高速的场合就不适用了。

一个异步FIFO的设计示例

一、异步FIFO 技术规 1. 总体描述 1.1. 功能定义 异步FIFO ( First In First Out)指的是在两个相互独立的时钟域下, 数据从一个时钟域写入FIFO 而另一个时钟域又从这个FIFO 中将数据读出。 本设计用8*256的RAM 实现异步FIFO 。 具体功能: 1. 写使能有效,且FIFO 不为满时,在写时钟的上升沿向FIFO 中写入数据。 2. 读使能有效,且FIFO 不为空时,在读时钟的上升沿从FIFO 中读出数据。 3. 当FIFO 写满时产生满信号,当FIFO 读空时产生空信号。 1.2. 应用围 异步FIFO 是用来作为缓冲的存储器, 它能对数据进行快速、顺序的存储和发送, 主要用来解决不同速率器件间的速率匹配问题。 2. 引脚描述 图1 2.1. 引脚功能描述

2.2.引脚时序描述 当写满时full由低变高,当读空时empty由低变高。只要不为满full就为低,不为空empty就为低。 3.顶层模块划分

图2 顶层模块说明: 1.ram_fifo :存储器模块,用于存放及输出数据; 2.w_addr_reg : 保存访问RAM的写地址; 3.r_addr_reg : 保存访问RAM的读地址; 4.w_addr_adder : 计算RAM下一个写地址; 5.r_addr_adder: 计算RAM下一个读地址; 6.cmp : 将读地址和写地址进行比较产生空满标志。 设计思想说明: FIFO满空的判定:当读地址的值加1之后等于写地址的值时,表明FIFO写满,当写地址的值加一之后等于读地址的值时,表明FIFO读空。在初始状态时FIFO的读地址在RAM 的中间位置,写地址在RAM的开始位置,所以初始状态FIFO不满也不空。空满信号的产生由组合电路产生。 4.功能模块描述

同步缓冲器(FIFO)的设计与实现..

同步缓冲器(FIFO)的设计与实现 姓名:崔琦 学号:100260305 班级:2010级电科3班 院系:电气与信息工程学院 专业:电子科学与技术 同组人姓名:梁承润 李建凯 (说明:我们三个人前面的报告部分是一样的,因为课设基本是三个人商议完成,所以就感觉报告部分没什么不同的就只写了一份报告)

目录 1原理与系统设计 (3) 2设计思想 (4) 3源码与注释 (5) 4仿真 (12) 5综合 (15) 6心得体会与建议 (19)

1 原理与系统设计 FIFO(First In First Out)——是一种可以实现数据先入先出的存储器件。FIFO就像一个单向管道,数据只能按固定的方向从管道一头进来,再按相同的顺序从管道另一头出去,最先进来的数据必定是最先出去。FIFO被普遍用作数据缓冲器。 FIFO的基本单元是寄存器,作为存储器件,FIFO的存储能力是由其内部定义的存储寄存器的数量决定的。本题中所设计的是同步FIFO(即输出输入端时钟频率一致),异步复位,其存储能力为(16x8),输出两个状态信号:full与empty,以供后继电路使用。 根据系统要求,画出的系统框图,如图1所示 clock reset 读控制信号写控制信号 input full empty output 图1同步FIFO框图 端口说明: 输入:in_data: 输入数据端口,位宽为8位; read_n: 读使能端,当read_n=0时,可以读出数据; write_n: 写使能端,当write_n=0时,可以写入数据; clock: 时钟信号,在时钟的正边沿进行采样; reset_n: 复位信号,当reset_n=0时,计数器及读写都被清零(即:读写地址指针都指向0) 输出:out_data: 输出数据端口,位宽为8位;; full:FIFO状态信号,当full=1时,表明该FIFO存储器已经写满; empty:FIFO状态信号,当empty=1时,表明该FIFO存储器已经读空;

(完整版)异步FIFO设计

异步FIFO设计文档 一、概述 在大规模ASIC或FPGA设计中,多时钟系统往往是不可避免的,这样就产生了不同时钟域数据传输的问题,其中一个比较好的解决方案就是使用异步FIFO来作不同时钟域数据传输的缓冲区,这们既可以使相异时钟域数据传输的时序要求变得宽松,也提高了它们之间的传输效率。此文内容就是阐述异步FIFO的设计。 二、设计原理 2.1结构框图 Fig. 2.1.1 如上图所示的同步模块synchronize to write clk,其作用是把读时钟域的读指针rd_ptr采集到写时钟(wr_clk)域,然后和写指针wr_ptr进行比较从而产生或撤消写满标志位wr_full;类似地,同步模块synchronize to read clk 的作用是把写时钟域的写指针wr_ptr采集到读时钟域,然后和读指针rd_ptr进行比较从而产生或撤消读空标志位rd_empty。 另外还有写指针wr_ptr和写满标志位wr_full产生模块,读指针rd_ptr和读模块。RAM产生模块,以及双端口存储rd_empty空标志位 2.2 二进制计数器存在的问题 异步FIFO读写指针需要在数学上的操作和比较才能产生准确的空满标志位,但由于读写指针属于不同的时钟域及读写时钟相位关系的不确定性,同步模块采集另一时钟域的指针时,此指针有可能正处在跳变的过程中,如图Fig.2.2.1所示,那么采集到的值很有可能是不期望的值,当然,不期望的错误结果也会随之发生。

Fig. 2.2.1 上图中,rd_ptr2sync 3和4以及4和5之间的中间态是由于到各寄存器的时钟 rd_clk存在偏差而引起的。二进制的递增操作,在大多数情况下都会有两位或者两以上的bit位在同一个递增操作内发生变化,但由于实际电路中会存在时钟偏差和不同的路径延时,二进制计数器在自增时会不可避免地产生错误的中间结果,如图Fig.2.2.2。 Fig.2.2.2 上升沿到达rd_clk的电路原型以及局部波形的放大。由于Fig.2.2.1上图是 三寄存器的时间各不相同,这就导致了rd_ptr2sync的值从3'b011跳变3'b100的过程中经历了3'b111和3'b101,直到最后一个时钟(rd_clk0)沿的到来rd_ptr2sync 才跳变到正确结果3'b100。中间结果的持续的时间虽然相对短暂,但是这些不正确的结果完全有可能被其它时钟域的同步模块采集到而产生错误的动作,见上图。由此可见,要避免中间结果的产生,其中一个可行的方案就是使被同步模块采集的数据递变时,每次只有一个bit位发生改变。格雷码计数器就是一个不错的选择。 2.3 格雷码计数器的实现 2.3.1 格雷码的表现形式 格雷码一个最大的特点就是在递增或递减的过程中,每次只变化一位,这是它最大的优点。同时它也有自己的局限性,那就是循环计数深度必须是2的n次幂,否则就失去了每次只变化一位的特性。深度为16的二进制及格雷码递变表如下:Binary Gray 0 0000 0000

同步FIFO之VHDL描述

同步F I F O之V H D L描述(1)同步FIFO之VHDL描述 同步FIFO的意思是说FIFO的读写时钟是同一个时钟,不同于异步FIFO,异步FIFO的读写时钟是完全异步的。同步FIFO的对外接口包括时钟,清零,读请求,写请求,数据输入总线,数据输出总线,空以及满信号。下面分别对同步FI FO的对外接口信号作一描述: 1.时钟,输入,用于同步FIFO的读和写,上升沿有效; 2.清零,输入,异步清零信号,低电平有效,该信号有效时,FIFO被清空; 3.写请求,输入,低电平有效,该信号有效时,表明外部电路请求向FIF O写入数据; 4.读请求,输入,低电平有效,该信号有效时,表明外部电路请求从FIF O中读取数据; 5.数据输入总线,输入,当写信号有效时,数据输入总线上的数据被写入到FIFO中; 6.数据输出总线,输出,当读信号有效时,数据从FIFO中被读出并放到数据输出总线上; 7.空,输出,高电平有效,当该信号有效时,表明FIFO中没有任何数据,全部为空; 8.满,输出,高电平有效,当该信号有效时,表明FIFO已经满了,没有空间可用来存贮数据。 使用VHDL描述的FIFO将以上面的接口为基础,并且可以参数化配置FIFO的宽度和深度。先把对外接口描述出来吧。

------------------------------------- -- Designer : skycanny -- Date : 2007-1-29 -- Description : Synchronous FIFO created by VHDL library ieee; use sfifo is generic(width : positive depth : positive ); port ( clk : in std_logic; rst : in std_logic; wq : in std_logic; rq : in std_logic; data : in std_logic_vector(width - 1 downto 0); q : in std_logic_vector(width - 1 downto 0); empty : out std_logic; full : out std_logic ); end entity sfifo;

异步fifo设计及时序约束设置

一、前言 跨时钟域的同步处理,使用异步FIFO是常用的方式之一,对于异步FIFO的设计,网上的大部分资料来源于《Simulation and Synthesis Techniques for Asynchronous FIFO Design》一文 其异步FIFO的结构如下图所示 本文不是介绍上图描述的设计。我从基本的数字电路时序开始,介绍异步FIFO的相关问题。最后介绍如何用时序约束保证设计的正确性 二、数字电路时序 对于数字电路来讲,我们的信号在时钟边沿发生变化,Dat1信号是一种理想情况,而Dat2是实际情况,其特点是 一、相对时钟边沿有延时 二、信号变化有一段时间(电平转换时间),在这段时间就是亚稳态 在亚稳态期间进行数据采样,不能获得稳定的值。数字电路中经过时序约束,在T1产生的信号,在T2一定稳定(否则就是不满足时序),所以对于只有一个时钟的数字电路来说,它在T1和T2都能获得稳定的信号(T1时刻的值为0、T2时刻的值为1)

三、跨时钟域时序问题 对于异步时钟而言(相位不同),对于CLK1产生的信号,CLK2有可能在任意时刻进行数据采样 在FIFO的设计中,将会产生2种信号,一种是数据本身(用Data表示),另外一种是指示数据是否有效(用valid表示),注意(valid不一定是一个比特的寄存器,可以是由FIFO中的读写指针产生而来,例如fifo的full或empty状态) 异步FIFO的问题在于,如果CLK2在时钟T2进行采样,那么有可能得到valid有效,而数据无效的情况。这样在CLK2采样取得的设计就是错误的数据。 四、处理异步FIFO的valid和data(理论基础) 我们假设valid为低电平表示没有数据,高电平为有数据,解决的办法就是,当CLK对valid进行采样时,即使valid处于亚稳态期间,数据信号也是稳定的 如上图所以,在T1时刻进行上升沿采样,虽然valid是一个亚稳态状态,但是此时Data 是一个稳定的值,如果在T1时刻采样的valid为1,那么可以得到稳定的Data信号,如果在T1时刻采样的valid为0,那么控制逻辑认为在T1无法获得数据,从而在下一个时钟获取 注意:T2时刻是在下降沿进行采样,而此时的Data信号也是稳定的

【CPLD Verilog】CPLD实现同步FIFO

CPLD实现同步FIFO 1 实现原理 CPLD实现8个字节的同步FIFO,实现8个字节数据的缓存。CPLD内部模块逻辑框图如下所示。 Data_a_we_pulse写数据到FIFO的使能信号。 Data_a_rd_pulse从FIFO读取数据的使能信号。 Data_a_in和Data_a_out分别表示写入FIFO和从FIFO读出的数据的值。 Data_a_we_full指示FIFO写满的状态。 Data_a_rd_nop指示FIFO读空的状态。 2 CPLD代码 module fifo_8B ( clk, reset_n, data_a_in, data_a_we_pulse,

data_a_we_full, data_a_out, data_a_rd_pulse, data_a_rd_nop ); input clk; input reset_n; input [7:0] data_a_in; input data_a_we_pulse; output data_a_we_full; output [7:0] data_a_out; input data_a_rd_pulse; output data_a_rd_nop; //////////////////////////FIFO 写入数据逻辑//////////////////////////// reg [7:0] fifo_mem [7:0]; //FIFO空间,8个8bit的空间 reg [2:0] fifo_we_addr; //FIFO写地址寄存器 reg fifo_we_addr_reverse_pulse; //FIFO写地址翻转状态寄存器,用于指示写//地址是否从最大地址翻转回到最小地址 always@(posedge clk or negedge reset_n) begin if(reset_n == 1'b0)

FPGA异步fifo设计完整报告

目录 一、技术规范 (3) 1、设计完成的功能: (3) 2、系统整体框图: (3) 3、I/O管脚的描述: (3) 4、验证和测试工具选择: (4) 5、说明关键模块: (4) 6、拟选用的FPGA类型: (4) 二、FIFO总体设计方案 (5) 系统功能描述: (5) 电路结构图: (5) 系统的总体输入输出设定 (6) 系统时序分析: (6) 关键模块设计分析: (7) 三、FIFO验证方案 (8) FIFO功能: (8) 1、概述: (8) 2、预确认: (8) 3、模块运行确认: (9) 4、系统运行确认: (9) 四、仿真激励代码 (10) 五、电路设计FIFO源代码 (11)

六、FPGA设计FIFO综合布局布线报告: (16) 综合引脚分配: (16) 电路布局布线: (16) 七、时序仿真报告 (17) 时序仿真波形: (17) 八、FIFO下载代码和引脚分布 (17) 系统输入输出引脚分布: (21) 九、心得体会 (21)

技术规范 1、设计完成的功能: 本实验完成的是8位异步FIFO的设计,其中写时钟100MHz,读时钟为5MHz,其中RAM的深度为256。当写时钟脉冲上升沿到来时,判断写信号是有效,则写一个八位数据到RAM中;当读时钟脉冲上升沿到来时,判断读信号是有效,则从RAM中把一个八位数据读出来。当RAM中数据写满时产生一个满标志,不能再往RAM再写数据;当RAM中数据读空时产生一个满标志,不能再从RAM读出数据。 2、系统整体框图:

3、I/O管脚的描述: 管脚名称方向H/L电平位宽功能描述 rst_n input 3.3V/01全局复位信号 rd_en input 3.3V/01读使能低有效 wr_en input 3.3V/01写使能低有效 rd_empty output 3.3V/01读空标志高有效wr_full output 3.3V/01写满标志高有效rd_data output 3.3V/08数据输出 wr_data input 3.3V/08数据写入 clk_100M input 3.3V/01写数据时钟 clk_5M input 3.3V/01读数据时钟 4、验证和测试工具选择: Modelsim SE6.1f进行前仿真和后仿。在软件QuartusII中进行综合。 5、说明关键模块: 对控制输入的读写地址要进行设计,以便在写满或是读空只产生一个标志,以此来实现对FIFO的缓冲的控制。也就是读地址加1与写地址相等则为读空,产生读空标志;写地址加1与读地址相等则为读空,产生写满标志 6、拟选用的FPGA类型:ep1cq240c8n

verilog同步和异步FIFO,可直接仿真和综合

EDA/SOPC课程设计报告 题目:同异步FIFO模块的设计与验证 姓名: xxx 学号: 120260320 同组人: xxx 指导教师: xxx 成绩:

目录 目录................................................................................................................................................... II 第1章课程设计的要求 . (1) 1.1 课程设计的目的 (1) 1.2 课程设计的条件 (1) 1.3 课程设计的要求 (1) 第2章课程设计的内容 (2) 2.1 设计思路 (2) 2.2 软件流程图 (3) 2.3 HDL代码阐述 (7) 2.4 ModelSim验证 (13) 第3章课程设计的心得 (21)

第1章课程设计的要求 1.1 课程设计的目的 ●掌握FIFO设计的基本原理与方法 ●培养Verilog语言模块化设计的思想意识 ●完成一个FIFO的设计与验证 ●掌握较大工程的基本开发技能 ●培养综合运用Modelsim工具进行硬件开发的能力 ●培养数字系统设计的基本能力 ●加强对课堂Verilog语言学习的理解与升华 1.2 课程设计的条件 ●设计条件ISE、Modelsim等开发软件的使用 1.3 课程设计的要求 ●设计要求1 设计同步FIFO并验证(包括仿真验证、FPGA验证) ●设计要求2 设计异步FIFO并验证(包括仿真验证、FPGA验证) ●设计要求3 采用Design Compiler完成其逻辑综合,评估其面积和时序 ●设计要求4 完成综合后的SDF反标仿真

双口ram实现同步fifo(源代码)

module fifo_ram(fifo_reset,clk,r,w,read_data,write_data, full,empty,Fcounter); parameter data_width=8; parameter addr_width=9; input fifo_reset,clk,r,w; input[data_width-1:0] write_data; output[data_width-1:0] read_data ; output full,empty; output[addr_width-1:0] Fcounter; reg full,empty; wire[data_width-1:0] read_data ; reg[addr_width-1:0] Fcounter; reg[addr_width-1:0] write_addr; reg[addr_width-1:0] read_addr; wire r_allow=(r&&!empty); wire w_allow=(w&&!full); r_w_ram u1(.w_clk(clk), .r_clk(clk), .w_addr(write_addr), .r_addr(read_addr), .w_allow(w_allow), .r_allow(r_allow), .w_data(write_data), .r_data(read_data));//wire always@(posedge clk,posedge fifo_reset) begin if(fifo_reset) empty<='b1; else empty<=(!w&&(Fcounter[8:1]==0)&&((Fcounter[0]==0)||r)); end always@(posedge clk,posedge fifo_reset) begin if(fifo_reset)

两种异步FIFO的设计及verilog源代码

异步FIFO及verilog原码_1 异步FIFO及verilog原码 这几天看了Clifford E. Cummings的两篇大作《Simulation and Synthesis Techniques for Asynchronous FIFO Design》and 《Simulation and Synthesis Techniques for Asynchronous FIFO Design with Asynchronous Pointer Comparisons》颇有感想,真可谓经典之作,不可错过。 1.什么是FIFO? FIFO是英文First In First Out 的缩写,是一种先进先出的数据缓存器,他与普通存储器的区别是没有外部读写地址线,这样使用起来非常简单,但缺点就是只能顺序写入数据,顺序的读出数据,其数据地址由内部读写指针自动加1完成,不能像普通存储器那样可以由地址线决定读取或写入某个指定的地址。 2.什么情况下用FIFO? FIFO一般用于不同时钟域之间的数据传输,比如FIFO的一端是AD数据采集,另一端是计算机的PCI总线,假设其AD采集的速率为16位100K SPS,那么每秒的数据量为 100K×16bit=1.6Mbps,而PCI总线的速度为33MHz,总线宽度32bit,其最大传输速率为 1056Mbps,在两个不同的时钟域间就可以采用FIFO来作为数据缓冲。 另外对于不同宽度的数据接口也可以用FIFO,例如单片机位8位数据输出,而DSP可能是16位数据输入,在单片机与DSP连接时就可以使用FIFO来达到数据匹配的目的。 3.FIFO的一些重要参数

VLSI课程设计——同步FIFO的设计与实现

VLSI课程设计 同步FIFO设计与实现 班级: 学号: 姓名: 指导教师:

VLSI课程设计报告——同步FIFO设计与实现 一、FIFO概述 FIFO是英文First In First Out的缩写,意为先入先出存储器,由于微电子技术的飞速发展,新一代FIFO芯片容量越来越大,体积越来越小,价格越来越便宜。作为一种新型大规模集成电路,FIFO芯片以其灵活、方便、高效的特性,逐渐在高速数据采集、高速数据处理、高速数据传输以及多机处理系统中得到越来越广泛的应用。 它与普通随机存储器的区别是没有外部读写地址线,这样使用起来非常方便但缺点就是只能顺序读写数据,其读写数据地址依靠内部的读指针和写指针完成。读操作与写操作可以异步进行,写入区上写入的数据按照写入的顺序从读取端的区中读出,类似于吸收写入端与读出端速度差的一种缓冲器。计算机的串口,一般也都具有FIFO缓冲器(不是单一的FIFO存储器,而是嵌入在设备内部)。 二、同步FIFO 同步FIFO(S ynchronous FIFO,下称SFIFO)的意思是说FIFO的读写时钟是同一个时钟,因此时钟频率是相同的,只是在相位上可能有差别,不同于异步FIFO,异步FIFO的读写时钟是完全异步的。SFIFO的对外接口包括时钟,清零,读请求,写请求,数据输入总线,数据输出总线,空以及满信号。查阅资料找到一款成型SFIFO产品的接口描述,如图1: 图1 一款同步FIFO的接口资料 为了更好的理解FIFO的工作方式,我们设定SFIFO的深度为8。SFIFO的难点主要是状态判断,如图2是对空状态和满状态来进行判断的方式。

图2 FIFO空满状态判断 可以看出,当读指针和写指针的值一样的时候,FIFO的状态为空。比较麻烦的是对FIFO是否已经满的状态的判断,因为存在两种情况,第一种情况时写指针比读指针大,比如写指针= 7而读指针= 0,还有一种情况时写指针比读指针小,比如写指针= 2而读指针= 3。由于读写电路在循环的读写RAM,所以在上面的两种情况下FIFO实际上都已经满了。 第一种情况下,写指针–读指针= 7,实际上就是FIFO深度减一; 第二种情况下,(写指针+ 8) –读指针= 7,也是FIFO深度减一。 如此,就可以比较容易的判断出FIFO的状态了。 三、存储器结构及行为级描述 知道了SFIFO的接口和状态控制逻辑,结构框图就很显而易见了。如图3,本设计SFIFO由主RAM阵列,写控制逻辑,写指针控制器,状态判断逻辑,读指针控制器,读控制逻辑,输入寄存器,输出寄存器,复位及时钟逻辑构成。 图3 FIFO结构框图

异步fifo跨时钟域处理

异步FIFO结构及FPGA设计---跨时钟域设计 2008/12/17 17:17[未分类 ] 异步FIFO 结构及FPGA 设计 吴自信,张嗣忠. 单片机及嵌入式系统应用,2000 摘要:首先介绍异步FIFO的概念、应用及其结构,然后分析实现异步FIFO的难点问题及其解决办法; 在传统设计的基础上提出一种新颖的电路结构并对其进行综合仿真和FPGA实现。 1、异步FIFO介绍 在现代的集成电路芯片中,随着设计规模的不断扩大,一个系统中往往含有数个时钟。多时钟域带来的一个问题就是,如何设计异步时钟之间的接口电路。异步FIFO(First In First Out)是解决这个问题一种简便、快捷的解决方案。使用异步FIFO可以在两个不同时钟系统之间快速而方便地传输实时数据。在网络接口、图像处理等方面, 异步FIFO得到了广泛的应用。 异步FIFO是一种先进先出的电路,使用在需要产时数据接口的部分,用来存储、缓冲在两个异步时钟之间的数据传输。在异步电路中,由于时钟之间周期和相位完全独立,因而数据的丢失概率不为零。如何设计一个高可靠性、高速的异步FIFO电路便成为一个难点。本文介绍解决这一问题的一种方法。 由图1可以看出:整个系统分为两个完全独立的时钟域--读时钟域和写时间域; FIFO的存储介质为一块双端口RAM,可以同时进行读写操作。在写时钟域部分,由写地址产生逻辑产生写控制信号和写地址; 读时钟部分由读地址产生逻辑产生读控制信号和读地址。在空/满标志产生部分,由读写地址相互比较产生空/满标志。 2、异步FIFO的设计难点 设计异步FIFO有两个难点:一是如何同步异步信号,使触发器不产生亚稳态; 二是如何正确地设计空、满以及几乎满等信号的控制电路。 下面阐述解决问题的具体方法。 2.1 亚稳态问题的解决

同步fifo设计实验报告

课程设计报告 题目:同步FIFO的设计 姓名: 贾安乐 学号:20105000 学院:电子科学与应用物理学院专业:电子科学与技术10-3 组员: 徐健勋、兰伯章 指导老师:杨小平、杞宁 日期:2014.12.15

一.课程设计要求 1.课程设计的目的 通过运用Verilog语言编写程序,体会程序的逻辑性,掌握基本的程序开发的注意事项。在实践中,学习掌握简单、周全的编程方法。 掌握较大工程的基本开发技能。 培养综合运用Modelsim,Quartus II工具进行硬件开发的能力。 培养数字系统设计的基本能力。 理解FIFO的定义与功能,掌握FIFO的Verilog编写方法。 2.课程设计的条件 FIFO的定义与功能 Quartus II仿真工具 3.课程设计的要求 FIFO是英文First In First Out 的缩写,是一种先进先出的数据缓存器,他与普通存储器的区别是没有外部读写地址线,这样使 用起来非常简单,但缺点就是只能顺序写入数据,顺序的读出数 据,其数据地址由内部读写指针自动加1完成,不能像普通存储 器那样可以由地址线决定读取或写入某个指定的地址。 使用Verilog语言和Quartus II仿真器完成同步FIFO的设计和验证。 使用Quartus II和SOPC实验箱验证设计的正确性。 Verilog代码要符合微电子中心编码标准。 4.Verilog语言 Verilog HDL是一种硬件描述语言(HDL:Hardware Description Language),是一种以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能。 Verilogs是由Gateway设计自动化公司的工程师于1983年末创立的。当时Gateway设计自动化公司还叫做自动集成设计系统(Automated Integrated Design Systems),1985年公司将名字改成了前者。该公司的菲尔·莫比(Phil Moorby)完成了Verilog的主要设计工作。 1990年代初,开放Verilog国际(Open Verilog International, OVI)组织(即现在的Accellera)成立,Verilog面向公有领域开放。1992年,该组织寻求将Verilog纳入电气电子工程师学会标准。最终,Verilog成为了电气电子工程师学会1364-1995标准,即通常所说的Verilog-95。 设计人员在使用这个版本的Verilog的过程中发现了一些可改进之处。为了解决用户在使用此版本Verilog过程中反映的问题,Verilog进行了修正和扩展,这部分内容后来再次被提交给电气电子工程师学会。这个扩展后的版本后来成为了电气电子工程师学会1364-2001标准,即通常所说的Verilog-2001。 Verilog-2001是对Verilog-95的一个重大改进版本,它具备一些新的实用功能,

异步FIFO的Verilog设计

异步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日 作者简介:卜宪宪,女,助教,硕士,研究方向:计算机系统结构、专用集成电路设计。

异步fifo读写同步的设计

课程论文(设计)题目异步缓冲fifo的设计 院系电子与信息工程学院 专业电子与通信工程 学生姓名卢兴森 学号20132281370 指导教师刘建成 二O一四年元月三日

一异步FIFO的介绍 (1) 1.1 指针以及满空信号的产生 (1) 1.2 二进制指针和格雷码指针的同步 (2) 1.3 保守的满空判断 (3) 1.4 二进制指针和格雷码指针的比较 (4) 二程序及其介绍 (4) 三仿真结果图 (13) 四总结 (14)

一异步FIFO的介绍 使用FIFO同步源自不同时钟域的数据是在数字IC设计中经常使用的方法,设计功能正确的FIFO会遇到很多问题,探讨了两种不同的异步FIFO的设计思路。两种思路都能够实现功能正确的FIFO。 本文所研究的FIFO,从硬件的观点来看,就是一块数据内存。它有两个端口,一个用来写数据,就是将数据存入FIFO;另一个用来读数据,也就是将数据从FIFO当中取出。与FIFO操作相关的有两个指针,写指针指向要写的内存部分,读指针指向要读的内存部分。FIFO控制器通过外部的读写信号控制这两个指针移动,并由此产生FIFO空信号或满信号。 对于异步FIFO而言,数据是由某一个时钟域的控制信号写入FIFO,而由另一个时钟域的控制信号将数据读出FIFO。也就是说,读写指针的变化动作是由不同的时钟产生的。因此,对FIFO空或满的判断是跨时钟域的。如何根据异步的指针信号对FIFO的满状态或空状态进行正确的判断是本文研究的重点。此外,设计过程中的一些细节问题也将在文中涉及到。 1.1 指针以及满空信号的产生 为了更好地说明问题,先探讨一下同步FIFO指针移动以及满空信号的产生过程。对于同步FIFO,读写指针都指向一个内存的初始位置,每进行一次读写操作,相应的指针就递增一次,指向下一个内存位置。当指针移动到了内存的最后一个位置时,它又重新跳回初始位置。在FIFO非满或非空的情况下,这个过程将随着读写控制信号的变化一直进行下去。如果FIFO处于空的状态,下一个读动作将会导致向下溢出(underflow),一个无效的数据被读人;同样,对于一个满了的FIFO,进行写动作将会导致向上溢出(overflow),一个有用的数据被新写

基于FPGA的异步FIFO设计方法详解

基于FPGA的异步FIFO设计方法详解 在现代电路设计中,一个系统往往包含了多个时钟,如何在异步时钟间传递数据成为一个很重要的问题,而使用异步FIFO可以有效地解决这个问题。异步FIFO是一种在电子系统中得到广泛应用的器件,文中介绍了一种基于FPGA的异步FIFO设计方法。使用这种方法可以设计出高速、高可靠的异步FIFO。 在现场可编程逻辑芯片的设计过程中不同模块之间的数据接口尤其是不同时钟系统的各个模块之间的数据接口是系统设计的一个关键用异步FIFO模块来实现接口,接口双方都在自己时钟的同步下进行工作它们之间不需要互相握手只需要跟接口FIFO模块进行交互即可即向接口FIFO模块中写入数据或从FIFO模块中读出数据。用这样一个缓冲FIFO模块实现FPGA内部不同时钟系统之间的数据接口使设计变得非常简单和容易所用的FIFO 接口是XILINX公司提供的IP核。经过充分测试和优化,系统运行稳定占用的FPGA内部资源也非常少。 1 FIFO 类型FIFO先进先出队列是一种在电子系统得到广泛应用的器件通常用于数据的缓存和用于容纳异步信号的频率或相位的差异FIFO的实现通常是利用双口RAM 和读写地址产生模块来实现的图1显示出了FIFO 的内部结构。 根据读写操作的同步/异步标志方案的同步/异步第一个写操作以及复位功能的不同FIFO 存储器可分为4 大类: (1)异步FIFO。通常只有两个控制信号读使能(RE )与写使能(WE)信号标志信号有全空标志(EF)全满标志(FF)可选半满标志(HF)几乎全满标志(AF)几乎全空标志(AE)这些标志并不与任何时钟或事件同步但是反映读写指针的即时对照。(2)选通式FIFO。与异步FIFO存储器相似选通FIFO通常使用读写选通UNCK和LDCK 信号以及输出使能OE信号这类FIFO 通常提供半满标志(HF)可选几乎满标志(AF)几乎空标志(AE)全空标志(EF)和全满标志(FF)这些标志虽然反映读写指针但不与任何时钟或事件同步。

异步FIFO的VHDL设计

异步FIFO的VHDL设计 摘要:给出了一个利用格雷码对地址编码的羿步FIFO的实现方法,并给出了VHDL程序,以解决异步读写时钟引起的问题。 关键词:FIFO 双口RAM 格雷码VHDL FIFO (先进先出队列)是一种在电子系统得到广泛应用的器件,通常用于数据的缓存和用于容纳异步信号的频率或相位的差异。FIFO的实现通常是利用双口RAM和读写地址产生模块来实现的。FIFO的接口信号包括异步的写时钟(wr_clk)和读时钟(rd_clk)、与写时钟同步的写有效(wren)和写数据(wr_data)、与读时钟同步的读有效(rden)和读数据(rd_data)。为了实现正确的读写和避免FIFO的上溢或下溢,通常还应该给出与读时钟和写时钟同步的FIFO的空标志(empty)和满标志(full)以禁止读写操作。 1 异步FIFO功能描述 图1给出了FIFO的接口信号和内部模块图。 由图1可以看出,写地址产生模块根据写时钟和写有效信号产生递增的写地睛,读地址产生模块根据读时钟和读有效信号产生递增的读地址。FI FO的操作如下:在写时钟wr_clk的升沿,当wren有效时,将wr_data写入双口RAM中写地址对应的位置中;始终将读地址对应的双口RAM 中的数据输出到读数据总线上。这样就实现了先进先出的功能。 写地址产生模块还根据读地址和写地址关系产生FIFO的满标志。当wren有效时,若写地址+2=读地址时,full为1;当wren无效时,若写地址+ 1=读地址时,full为1。读地址产生模块还根据读地址和写地址的差产生FIFO的空标志。当rden有效时,若写地址-1=读地址时,empty为1;当rden无效时,若写地址=读地址时,empty为1。按照以上方式产生标志信号是为了提前一个时钟周期产生对应的标志信号。 由于空标志和满标志控制了FIFO的操作,因此标志错误会引起操作的错误。如上所述,标志的产生是通过对读写地址的比较产生的,当读写时钟完全异步时,对读写地址进行比较时,可能得出错误的结果。例如,在读地址变化过程中,由于读地址的各位变化并不同步,计算读写地址的差值,可能产生错误的差值,导致产生错误的满标志信号。若将未满标志置为满标志时,可能降低了应用的性能,降低写数据速率;而将满置标志置为未满时,执行一次写操作,则可能产生溢出错误,这对于实际应用来说是绝对应该避免的。空标志信号的产生也可能产生类似的错误。 2 异步FIFO的改进设计 从以上分析中可以看出,异步FIFO之所以会发生错误是国为在地址变化时,由于多位地址各位变化时间不同,异步时钟对其进行采样时数值可能为不同于地址变化丧后数值的其他值,异步产生错误的空标志和满标志,以致于产生FIFO的操作错误。

异步FIFO的设计分析

第37卷第3期2014年6月 电子器件 Chinese Journal of Electron Devices Vol.37 No.3Jun.2014 收稿日期:2013-07-08 修改日期:2013-08-90 Design and Analysis of Asynchronous FIFO WANG Kai 1,SUN Feng 1,2* (1.Internet of Things Engineering ,Jiangnan University ,Wuxi Jiangsu 214122,China ; 2.China Electronic Technology Group Corporation ,No.58Research Institute ,Wuxi Jiangsu 214035,China ) Abstract :Based on the principle of FIFO,in turn,the asynchronous FIFO’s read /write control logic and empty /full judgment logic are discussed.Through breaking the traditional methods,an additional potential method is structed respectively by addeding the addotional bit to the read /write pointer to make a judge of the asynchronous FIFO’s empty /full state faster and more accurately and a FIFO with forwarding function is designed.The test results show that the forwarding function of this FIFO is normal,and the speed of reading and writing can arrive at 165MHz.Key words :asynchronous FIFO;empty /full state;additional bit EEACC :1265B doi :10.3969/j.issn.1005-9490.2014.03.012 异步FIFO 的设计分析 王 凯1,孙 锋1,2* (1.江南大学物联网工程学院,江苏无锡214122;2.中国电子科技集团公司58所,江苏无锡214035) 摘 要:基于FIFO 的工作原理依次论述了异步FIFO 的读写控制逻辑和空满状态判断逻辑,突破了传统的方法,采用分别为 读二写指针增添一位附加位的方法来更快二更准确地判断异步FIFO 的空二满状态,设计了一款具有转发功能的FIFO三测试结果表明:此款FIFO 的转发功能正常,读写速率可达到165MHz三 关键词:异步FIFO;空满状态;附加位 中图分类号:TN432 文献标识码:A 文章编号:1005-9490(2014)03-0431-04 随着电子器件的飞速发展,在现代的集成电路芯片中,一个系统常常包含着几个时钟,由于时钟域的不同,使得数据间的传递受到了阻碍[1]三异步FIFO(First In First Out)成为解决这类难题的有效元件三异步FIFO 作为一个缓冲存储器,将数据在两 个不同的时钟间进行交换,能够顺序存储连续的数据,之后按照先进先出的原则输出这些数据,因此在雷达,数据通信,图像处理及多媒体技术等方面有着很广泛的应用[2]三 本文以存储容量1M 的异步FIFO 为例,对FIFO 的读二写过程进行了分析,并证明了其转发功能三 1 异步FIFO 的结构设计 异步FIFO 主要由双端口RAM 存储器二写读地址产生模块以及空满标志模块这几个部分构成三图1是异步FIFO 的结构框图 [3] 三 图1 异步FIFO 结构框图 异步FIFO 的原理:整个系统分为读时钟域和写时钟域,可以同时对RAM 存储器执行读写操作,读地址产生模块在读时钟的控制下产生读命令和读地址指针,写地址产生模块在写时钟控制下产生写命令和写地址指针[4]三读二写命令用以控制RAM 的读二写操作三空二满标志模块的作用是将读地址指针和写地址 指针进行比较并检测,产生空二满标志三当空状态有效时,将不能对RAM 进行读操作,当满状态有效时,

相关文档