FIFO设计中的注意问题与技巧

FIFO存储器

  • FIFO( First In First Out)简单说就是指先进先出。由于微电子技术的飞速发展,新一代FIFO芯片容量越来越大,体积越来越小,价格越来越便宜。作为一种新型大规模集成电路,FIFO芯片以其灵活、方便、高效的特性,逐渐在高速数据采集、高速数据处理、高速数据传输以及多机处理系统中得到越来越广泛的应用
  • 在系统设计中,以增加数据传输率、处理大量数据流、匹配具有不同传输率的系统为目的而广泛使用FIFO存储器,从而提高了系统性能。FIFO存储器是一个先入先出的双口缓冲器,即第一个进入其内的数据第一个被移出,其中一个存储器的输入口,另一个口是存储器的输出口。对于单片FIFO来说,主要有两种结构:触发导向结构和零导向传输结构。触发导向传输结构的FIFO是由寄存器阵列构成的,零导向传输结构的FIFO是由具有读和写地址指针的双口RAM构成。
  • FIFO端信号功能分析及应用
  • data信号: 数据输入端口
  • q:数据输出
  • wrreq : 写使能信号
  • rdreq:读使能信号
  • wrclk:写时钟
  • rdclk:读时钟
  • wrfull:写满溢出指示
  • rdfull:读完无数据指示
  • wrempty:写数据为空指示
  • rdempty:读数据为空,为0时读使能有效
  • wrusedw:当下存储了多少个数据
  • rdusedw:与wrusedw值总是相同的,并不是两者相互独立。

异步FIFO相较于同步FIFO来说,功能更为强大,可以实现跨时钟域的数据同步,但是其占有资源较大,若不是非必要情况下,选择同步FIFO。
FIFO中的读写使能使用组合逻辑产生而尽量不要使用时序逻辑,会造成数据的读写混乱,例
时序可能会出现的问题
问题如上图所示,当第7个时钟上升沿时,empty信号已经拉高,但是rdreq信号由于是时序逻辑,其在第七个时钟采到的empty依然为1,接着产生了读使能,这显然是错误的。
正确的应为下图所示:
组合逻辑电路
读写隔离原则:
读侧信号与写侧信号不能混用。
例:写侧的din_data写入FIFO时,其中包文包括了200个字节,使用din_vld作为读写使能,有可能出现读写不同步,因为你存入时就是你读出时;也有可能来了个短包文,存储完立马来了长包文,那么此时到底是写还是读?
长包文未读完,来了短包文,此时FIFO就不知道如何处理。
读写两侧应使用独立信号而不是互连信号。
保持数据的同步
如果某个读写信号与数据不同步,那么先处理同步,使其输入什么就输出什么,不然数据会发生错误。
例一
读信号比输出Q超前一个甚至多个时钟周期,此时的处理方式应为:给rdreq加D触发器,打相应的拍数,使得与数据信号同步。
例二
其他信号由于种种原因,比输出数据慢一个甚至多个周期,此时赢将输出数据送入D触发器,等待相应周期后同步即可。
为什么不使用后退超前信号的方法?
有些信号可以退,但是有些信号在一定条件下已经退无可退,而用触发器就可以使信号同步,并且没有加无可加这个说法,数据始终可以保持同步和稳定。
FIFO的仿真
生成IP核之后,将altera_mf.v 、test_fifo、my_fifo1.v 、fifo1.v这几个文件添加到仿真中方可进行仿真,其中altera_mf.v 是库文件,里面包含了生成FIFO所用的模块函数等;test_fifo是测试文件,my_fifo是编写好的FIFO逻辑模块,而fifo1.v则是IP核生成的文件。
FIFO设计要考虑的问题如下
在这里插入图片描述
分区
解释

猜你喜欢

转载自blog.csdn.net/emperor_strange/article/details/87917123