之前我们讨论了FIFO的基本概念,分析了FIFO最小深度的计算,并在此基础上对同步FIFO进行了描述;这一部分工作详见:
Verilog实现FIFO专题(1-FIFO基础:简介/应用/分类/参数等)
此处不再赘述。我们现在将目光放到FIFO阈值以及阈值与FIFO深度的关系上;设计同步FIFO时,我们只关心FIFO深度取多小就不会导致溢出、只关心FIFO写满以后full标志有效,不再存储新来的数据;但是未考虑FIFO满时写入数据的丢失,以及FIFO读取数据的效率问题;而实际中这些问题都是不可忽视的,有必要对FIFO阈值进行了解,以指导我们的设计;
目录
一、FIFO阈值概念
如上所述,我们不仅要关注FIFO何时满/空,满/空了以后不再进行写/读操作。也要关心FIFO满时写数据是否丢失,FIFO空时读数据是否有效;仅仅根据FIFO的full和empty来判断模块是否停止写入或读取数据是不行的,因为实际电路中,模块AB与FIFO进行交互,均具有一定的时间延迟(时序电路被时钟驱动,寄存器可以暂存数据,因此数据逐级传递)。
如果根据FIFO满信号控制A停止写数据,full信号传输到A需要M个时钟周期,A接收到full信号停止传输数据时,仍旧有N组数据“在路上”;这就会造成M+N个数据的丢失,导致严重问题;与之类似,如果直接使用empty信号控