同步FIFO设计详解及代码分享.docx
《同步FIFO设计详解及代码分享.docx》由会员分享,可在线阅读,更多相关《同步FIFO设计详解及代码分享.docx(7页珍藏版)》请在第一文库网上搜索。
1、同步FIFO设计详解及代码分享1.FIFO简介FIFO(先入先出,FirstInFirstOut)存储器,在FPGA和数字IC设计中非常常用。根据接入的时钟信号,可以分为同步FIFO和异步FIFOo*FIFO底层基于双口幽J*,同步FIFO的读写时钟一致,异步FIFO读时钟和写时钟不同。同步时钟主要应用于速率匹配(数据缓冲),类似于乒乓存储提高性能的思想,可以让后级不必等待前级过多时间;异步FIFO主要用于多bit信号的跨时钟域处理。本文讨论同步FIFO的结构及控制逻辑设计,并给出代码。2 .同步FIFO接口对于同步FIFO,包含必要的接口如下图所示:(1) e1k:时钟信号,读写共用;(2)
2、 rst_n:复位信号,视具体设计和皿采用同步复位还是异步复位,此处默认使用异步低电平复位;(3) Wdata:写数据信号,信号后带“”表示是多bit信号;(4) rdata:读数据信号,信号后带“”表示是多bit信号;(5) Wfu11:满信号,指示FIR)写满了,不能再写了,如果再写会覆盖掉还没读出的写入数据,造成数据丢失;(6) rempty:空信号,指示FIFO读空了,不能在读了,如果再读相当于有的数据重复读了第二遍,造成数据错误;(7) wine:写使能信号,写使能有效时表示希望能写入数据;(8) rinc:读使能信号,读使能有效时表示希望能读出数据;3 .双口RAM接口在实现FIF
3、O时,无论是同步FIFO还是异步FIFO,通常会通过双口RAM(Dua1PortRAM)并添加一些必要的逻辑来实现。双口RAM的接口如下图所示。*左侧全部是写时钟域的,包括写时钟、写数据、写地址和写使能信号;*右侧全部是读时钟域的,包括读时钟、读数据、读地址和读使能信号;4,基于双口RAM的同步FIFO结构根据同步FIFO的接口和双口RAM的接口,在借助双口RAM实现同步FIFO时,如下图所示结构,只需要加入读、写控制逻辑即可。在写逻辑中,用于产生写地址和写满信号;在读逻辑中,用于产生读地址和读空信号。读写控制逻辑还需要受到读写使能信号的控制。5 .读写地址产生逻辑读写地址什么时候能够递增?显
4、然,对于写地址必须满足:(1)写使能有效(要写入);(2)没写满(能写入);即:a1ways(posedgee1kornegedgerst_n)beginif(rstn)beginwaddr=,b;ende1sebeginif(wine&vfu11)beginwaddr=waddr+1,b1;ende1sebeginwaddr=waddr;endendend对于读地址必须满足:(1)读使能有效(要读出);(2)没读空(能读出);即:a1ways(posedgee1kornegedgerst_n)beginif(rst_n)beginraddr=,b;ende1sebeginif(rinc&re
5、mpty)beginraddr=raddr+b1;ende1sebeginraddr=raddr;endendend6 .空满信号产生逻辑搞定了读写地址的控制逻辑,还差最后一步也是最关键的信号:空满信号如何产生。空:读空,读地址追上写地址;满:写满,写地址追上读地址。问题来了:怎么判地址断追上了呢?如果地址相等那应该是追上了,即raadr=WaCIC1r或者WcIdr=raddr。如果按照这种判断,显然这两个地址追上对方的判断是等效的,无法区分出来到底是写追上读还是读追上写。可以考虑:使用1个标志位f1ag来额外指示写追上读还是读追上写。参考前人的文献,判断空满的方式有多种,非常常用的一种是C
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 同步 FIFO 设计 详解 代码 分享
