同步FIFO与异步FIFO.doc_第1页
同步FIFO与异步FIFO.doc_第2页
同步FIFO与异步FIFO.doc_第3页
同步FIFO与异步FIFO.doc_第4页
同步FIFO与异步FIFO.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

l 同步FIFO之VHDL描述同步FIFO的意思是说FIFO的读写时钟是同一个时钟,不同于异步FIFO,异步FIFO的读写时钟是完全异步的。同步FIFO的对外接口包括时钟,清零,读请求,写请求,数据输入总线,数据输出总线,空以及满信号。下面分别对同步FIFO的对外接口信号作一描述:1 时钟,输入,用于同步FIFO的读和写,上升沿有效;2 清零,输入,异步清零信号,低电平有效,该信号有效时,FIFO被清空;3 写请求,输入,低电平有效,该信号有效时,表明外部电路请求向FIFO写入数据;4 读请求,输入,低电平有效,该信号有效时,表明外部电路请求从FIFO中读取数据;5 数据输入总线,输入,当写信号有效时,数据输入总线上的数据被写入到FIFO中;6 数据输出总线,输出,当读信号有效时,数据从FIFO中被读出并放到数据输出总线上;7 空,输出,高电平有效,当该信号有效时,表明FIFO中没有任何数据,全部为空;8 满,输出,高电平有效,当该信号有效时,表明FIFO已经满了,没有空间可用来存贮数据。使用VHDL描述的FIFO将以上面的接口为基础,并且可以参数化配置FIFO的宽度和深度。先把对外接口描述出来吧。- Designer:skycanny- Date:2007-1-29- Description:Synchronous FIFO created by VHDLlibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity sfifo is generic(width:positivedepth:positive);port(clk:instd_logic;rst:instd_logic;wq:instd_logic;rq:instd_logic;data :instd_logic_vector(width - 1 downto 0);q:instd_logic_vector(width - 1 downto 0);empty:outstd_logic;full:outstd_logic);end entity sfifo; 下面的框图主要描述同步FIFO的内部结构,画出框图有助于对电路结构的理解,同样也有助于RTL代码的编写 :l 异步FIFO FIFO (先进先出队列)是一种在电子系统得到广泛应用的器件,通常用于数据的缓存和用于容纳异步信号的频率或相位的差异。FIFO的实现通常是利用双口RAM和读写地址产生模块来实现的。FIFO的接口信号包括异步的写时钟(wr_clk)和读时钟(rd_clk)、与写时钟同步的写有效(wren)和写数据(wr_data)、与读时钟同步的读有效(rden)和读数据(rd_data)。为了实现正确的读写和避免FIFO的上溢或下溢,通常还应该给出与读时钟和写时钟同步的FIFO的空标志(empty)和满标志(full)以禁止读写操作。1 异步FIFO功能描述图1给出了FIFO的接口信号和内部模块图。由图1可以看出,写地址产生模块根据写时钟和写有效信号产生递增的写地睛,读地址产生模块根据读时钟和读有效信号产生递增的读地址。FIFO的操作如下:在写时钟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的操作错误。格雷码是一种在相邻计数值之间只有一位发生变化的编码方式。可以看出,若读写地址采用格雷码编码方式,就可以解决上面的问题。为了应用的灵活,还增加了两个标志信号,将满(almosf_full)标志和空(almost_empty)标志分别定义如下:当写地址与读地址的距离小于某个预先定义数值时,almost_full为1;当读地址与写地址的距离小于这个预先定义的数值时,almost_empty为1。3 异步FIFO的VHDL实现硬件描述语言VHDL(Very-high speed IC Hardware Description Language)是一种应用于电路设计的高层次描述语言,具有行为级、寄存器传输级和门级等多层次描述,并且具有简单、易读、易修改和与工艺无关等优点。目前VHDL语言已经得到多种EDA工具的支持,综合工具得到迅速发展,VHDL语言的行为级综合也已经得到支持和实现,因此利用VHDL语言进行电路设计可以节约开发成本和周期。首先给出格雷码和普通自然码之间的转换模块的VHDL程序。程序1:自然码码到格雷码的转换程序entity norm_to_gery isgeneric(width:integer:=8);port(din:in std_logic_vector(width-1 downto 0);dout:out std_logic_vector(width-1 downto 0);end norm_to_grey;architecture norm_to_grey of norm_to_grey is begindout=din xor(0 & din(width-1 downto 1);end norm_to_grey;程序2:格雷码到自然码的转换程序process(din)variable tempd:std_logic;beginfor i in width-1 downto 0 loop tempd:=0;for j in width-1 downto i loop tempd:=tempd xor din(j);end loop;dout(i)=tempd;end loop;end process;在给出异步FIFO的VHDL程序之前,先给出一些内部信号的解释:wadd 自然码写地址wadd_grey 格雷码写地址wr_radd_grey 写时钟采样的格雷码读地址wr_radd 写时钟采样的自然码读地址almost_length 产生将满和将空标志的予定义读写地址差值程序3:写地址产生模块,此程序同时产生写地址的自然码和格雷码waddp=wadd+1;u1:norm_to_greyport map(waddp,wadd_grey_temp);wadd_process:process(clr,wr_clk)beginif clr=0thenwadd0);wadd_grey0);elsif wr_clkevent and wr_clk=1thenif wren=1thenwadd=waddp;wadd_grey=wadd_grey_temp;end if;end if;end process;程序4:满标志和满标志产生模块,以8位地址为例。u2:grey_to_normport map(wr_radd_grey,wr_radd_temp);process(clr,wr_clkbeginif clr=0thenwr_radd_grey0);wr_radd0)elsif wr_clkevent and wr_clk=1thenwr_radd_grey=radd_grey;wr_radd=wr_radd_temp;end if;end process;wr_compare=wadd-wr_radd;full_process:process(clr,wr_clk)beginif clr=0thenfull=0;elsif wr_clkevent and wr_clk=1thenif(wren=1)thenif wr_compare=11111110then full=1;else full=0;end if;elseif wr_compare=11111111then full=1;else full=0;end if;end if;end if;end process;almost_full_process:process(clr,wr_clk)begini

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论