电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

同步FIFO之VHDL描述VIP免费

同步FIFO之VHDL描述_第1页
同步FIFO之VHDL描述_第2页
同步FIFO之VHDL描述_第3页
同步FIFO之VHDL描述(1)作者:skycanny时间:2007-09-2816:09:38来自:skycanny的笔记浏览次数:1601文字大小:【大】【中】【小】同步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:SynchronousFIFOcreatedbyVHDLlibraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;useieee.std_logic_arith.all;entitysfifoisgeneric(width:positivedepth:positive);port(clk:instd_logic;rst:instd_logic;wq:instd_logic;rq:instd_logic;data:instd_logic_vector(width-1downto0);q:instd_logic_vector(width-1downto0);empty:outstd_logic;full:outstd_logic);endentitysfifo;-----------------------------------------------------------------------------------------------------------同步FIFO内部通过控制电路和RAM实现,控制电路主要包括写指针管理电路,读指针管理电路,以及FIFO状态判断电路,对于同步FIFO来讲,读和写的指针管理电路实际上就是二进制计数器。现在的FPGA都具有BlockRAM,通过VHDL描述可以对其进行调用,为了能够实现任意深度和宽度的FIFO,那么在用VHDL描述RAM的时候需要使用generic使得RAM的调用能够参书化。同样,对于读写指针计数器,也需要参数化的描述方法。下面主要对FIFO的状态判断如何判断进行一些说明。假设宽度任意而深度为8的FIFO,当读指针read_pointer和写指针write_pointer的值一样的时候,很显然,这时FIFO的状态为空。比较麻烦的是对FIFO是否已经满的状态的判断,因为存在两种情况,第一种情况时写指针write_pointer比读指针read_pointer大,比如writer_pointer=7而read_pointer=0,还有一种情况时写指针writer_pointer比读指针read_pointer小,比如writer_pointer=2而read_pointer=3。由于读写电路在循环的读写RAM,所以在上面的两种情况下FIFO实际上都已经满了。那么如何对读写指针的判断比较容易的得出FIFO已经满了,同时这样的判断电路还要容易参数化?第一种情况下,write_pointer–read_pointer=7,实际上就是FIFO深度减一,第二种情况下,(write_pointer+8)–read_pointer=7,也是FIFO深度减一。从上面的讨论就可以很容易进行判断FIFO状态了,假设FIFO的深度用depth表示,则FIFO状态判断用伪码表示如下:1.Empty状态判断:Ifwriter_pointer=read_pointerFIFOisempty;ElseFIFOisnotempty;Endif;2.Full状态判断:Ifwriter_pointer>read_pointerIfwrite_pointer–read_pointer=depthFIFOisfull;ElseFIFOisnotfull;Endif;ElseIfwrite_pointer–read_pointer=1FIFOisfull;ElseFIFOisnotfull;Endif;Endif;下面的框图主要描述同步FIFO的内部结构,画出框图有助于对电路结构的理解,同样也有助于RTL代码的编写今天就先写到这里吧,大家有什么问题和意见可以提出来,以便我及早的发现问题,不要等到要写代码的的时候才发...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部