重读《异步fifo结构》

重读《异步fifo结构》

ID:14283468

大小:1.52 MB

页数:17页

时间:2018-07-27

重读《异步fifo结构》_第1页
重读《异步fifo结构》_第2页
重读《异步fifo结构》_第3页
重读《异步fifo结构》_第4页
重读《异步fifo结构》_第5页
资源描述:

《重读《异步fifo结构》》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、重读《异步FIFO结构》[CPLD/FPGA]发布时间:2009-06-1815:09:18项目中多处需要用到FIFO,傻瓜式的调用Altera的库即可完成设计。为了深入了解FIFO的结构,上网找了些资料。异步FIFO只能自己写。一、关于同步FIFO1、在前面的日志里贴出了一个从网上找的同步FIFO的原代码,本人进行了稍微修改,原始的文章为:http://space.ednchina.com/Upload/2009/6/18/30d4e845-8448-42fc-bd8d-ce6543759ac5.rar,文章名字叫“同步FIFO原理

2、剖析”。根据其介绍的同步FIFO原理修改的代码以及测试激励:http://space.ednchina.com/Upload/2009/6/18/575687b3-0cbf-4e1b-b3be-12766daa84f7.rar。2、今天有时间重新拜读了异步FIFO结构(翻译),文章中讲述异步FIFO之前先讲述了同步(单时钟)FIFO。原理虽然和上述的同步FIFO一致,但是有些论述特别是对于"空"和"满"的判断个人觉得讲的非常精辟。特摘录一些重点:1)、写指针指向下一个将要写入的位置;读指针指向下一个将要读取的位置。2)、"空"和"满"

3、写指针和读指针是相等的。但是"满"或者"空"的决定并不仅仅基于指针的值,而是基于引起指针值相等的操作。如果指针相等的原因是复位或者读操作,FIFO认为是空;如果原因是写操作,那么FIFO认为是满。3)、一般情况下(指非临界状况下)读操作和写操作同时都在使其指针增加,但是不改变空标志和满标志的状态。在空或满的临界状态同时读操作和写操作都是不允许的。由以上几点得出"空"和"满"标志状态变化的条件(未包含复位条件):写操作无条件的清除空标志;write_pointer=(read_pointer+1),读操作置"空";读操作无条件的清除满标

4、志;read_pointer=(write_pointer+1),写操作置"满"(包括read_pointer=0,而write_pointer=depth-1的情况,这里与"同步FIFO原理剖析"中稍有不同)。将以上空满判断条件稍加改动:a、临界状态下如果同时有读和写操作,如果FIFO空,那么只允许写,如果满则只允许读;b、对于空和满置位操作,文章中论述的基础是FIFO的深度-depth为2的幂,将深度改为可参数化的任意整数的时候,需要对读和写到depth-1的位置进行判决。根据以上改动将文章中提供的FIFO原代码修改如下(文章中提

5、供的原代码本身就有问题):http://space.ednchina.com/Upload/2009/6/19/266ec7ec-7779-4780-a9ba-8db4b4e46450.rar;FIFO的测试激励:http://space.ednchina.com/Upload/2009/6/19/17819c8c-72d0-4130-a0db-ca01fe42e8b0.rar。以下是ModelSim的仿真波形,包含了“写满”,以及“读空”:另外,FIFO的almost_empty,almost_full以及usedw(有效字)信号可

6、以参考我修改的《同步fifo原理剖析》源码。最后在板子上跑的结果如下:附上QII工程:http://space.ednchina.com/Upload/2009/6/19/3cd341ed-f5c8-4e41-998d-e064122a7544.rar。二、关于异步FIFO异步FIFO的接口信号包括异步的写时钟(wr_clk)和读时钟(rd_clk)、与写时钟同步的写有效(wren)和写数据(wr_data)、与读时钟同步的读有效(rden)和读数据(rd_data)。为了实现正确的读写和避免FIFO的上溢或下溢,通常还应该给出与读时

7、钟和写时钟同步的FIFO的空标志(empty)和满标志(full)以禁止读写操作。下面给出异步FIFO的功能模块图:由上图可以看出,写地址产生模块根据写时钟和写有效信号产生递增的写地址,读地址产生模块根据读时钟和读有效信号产生递增的读地址。FIFO的操作如下:在写时钟wr_clk的上升沿,当wren有效时,将wr_data写入双口RAM中写地址对应的位置中;始终将读地址对应的双口RAM中的数据输出到读数据总线上。这样就实现了先进先出的功能。写地址产生模块还根据读地址和写地址关系产生FIFO的满标志。当wren有效时,若写地址+2=读地

8、址时,full为1;当wren无效时,若写地址+1=读地址时,full为1。读地址产生模块还根据读地址和写地址的差产生FIFO的空标志。当rden有效时,若写地址-1=读地址时,empty为1;当rden无效时,若写地址

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

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

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