微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > verilog 中FIFO 问题

verilog 中FIFO 问题

时间:10-02 整理:3721RD 点击:
小弟Verilog比较菜,问一个关于FIFO很基本的问题,就是从快时钟域到慢时钟域数据传输时,一般要用到FIFO做缓冲,我的疑惑就是,如果快时钟域的数据一直不停的输出,而FIFO的缓冲又不够大,当FIFO缓存写满时,那么快时钟域的一些数据是不是不能暂存在FIFO里而不能被慢时钟域的时钟采样到?或者快时钟域新产生的数据会把FIFO缓存里的数据覆盖掉?

应该是会被覆盖掉

我认为是前者,要是能覆盖掉,就不能理解为先进先出了吧。

這時候要用FULL / EMPTY的訊號來作流量控制
快要FULL的時候就通知快時域的訊號停止在放資料近來

楼上说的没错,不能让快速端一直发,否则会造成丢包。

xu xi yi xia


可是快时钟域的数据一直在产生呢? 是不是快时钟域要由FIFO产生一个反馈信号,类似FULL这种,一旦FIFO写满,快时钟域的电路就暂停运算,直到FIFO又能重新写入?
5# gaurson

一般都会有反馈机制的,从应用角度考虑,溢出出错后,要重新再次通信的。

对,是需要fifo反馈一个空满的标志,来控制流量。

5楼的正解,确实需要空,满标志来控制流量的输入,输出。不过这两个标志的产生还是比较复杂。

学习了,请问有FIFO的具体Verilog源码什么的资料吗? 想深入学习一下

使用fifo基本原则:满了不能继续写,空了不能继续读!

FIFO通常是作为快慢时终域之间突发数据量不匹配的缓冲来使用的,如果两边数据带宽长时间不匹配,一定会导致FIFO空或者满的

FIFO设计的难点在于怎样判断FIFO的空/满状态。为了保证数据正确的写入或读出,而不发生溢出或读空的状态出现,必须保证FIFO在满的情况下,不能进行写操作。在空的状态下不能进行读操作。

学习了

通常,fifo会有5个状态标志信号:empty, full, overflow, almost_empty, almost_full.
当empty置起后,继续读;以及full置起后,继续写;会有什样的结果,和fifo控制部分的设计方式
有关,有的fifo,当empty后继续读的话,会置起overflow标志,同时读出的会是最后1个地址的数据。
当full置起后继续写的话,overflow也置起,同时会将最后1个地址的数据覆盖掉。
而almost_empty,almost_full则是几乎空、几乎满标志,由fifo设定的快空、快满的阈值是否达到决定,
当这2个几乎空、几乎满置起时,就应该控制读、写了。

这要看你设计的需求,如果你不要求无漏采样,当然可以,如果你不想丢失数据可以采用乒乓处理的方式

FIFO module has "FULL" and "EMPTY" indicators.
If "FULL" is on means the buffer is full.
If "EMPTY" is on means there is no data available.

如果读写的clock频率无法改变了,就把读的位宽加大吧。

fifo    一般会有水线的,快满的时候就会反压前面不进行发送

有流量控制host就不会始终发

这个要看你的FIFO内部是怎么实现的,一般的fifo在满的情况下不能继续写入数据...

FIFO主要用在跨时钟的数据缓存,正常情况下,快慢时钟的平均数据率要匹配.
即达到在一个处理阶段发送器发了多少数据,接收部分就能接收处理多少数据......

是的,FIFO不能解决无限制的发送数据情况

1# lincolnlee

FIFO有空满标志,满了之后要反压,当然不会被覆盖。

谢谢小编,顶了

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top