标准FIFO概述
官网提供的IP核已经经过了全面的验证,能够以最佳性能进行调用,其中FIFO的最大时钟频率为500MHZ。
FIFO提供四种用户接口:标准 AXI4-Stream AXI4 AXI4-LITE
FIFO支持使用三种资源:block ram; distributed ram; built-in FIFO
其中在使用AXI总线的时候,FIFO不支持built-in FIFO 和 Shift Register FIFO配置
FIFO最大支持的存储深度为 4,194,304words, 也即67,108,864bit
在标准模型下:
FIFO数据宽度为 1 — 1024bits
对称或非对称纵横比(读写端口数据宽度范围为1:8或8:1)
支持同步或者异步复位操作
支持可选内部存储空间
支持两种数据写入写出方式(FIFO 和 FWFT)
可配置握手信号
FWFT First-Word Fall-Through
FWFT与标准FIFO是不一样的,FWFT FIFO模式下的FIFO,当里面有效的值大于1就会一直置1,所以想用它当做后端逻辑使能信号的情况下,需要特别注意,不能直接用valid信号来标志读数据有效。FWFT具有不访问读操作信号就能得知下一个状态数据是否有效,当数据可用的时候,FWFT会自动将数据放在输出总线上。这种模式比较适合低延时应用中,在使用时需要特别注意不能在使用读标志位,这样可能会造成错误。
在使用独立时钟控制时:
FIFO的存储模式只能选择为block RAM或者Distribute RAM。
使用独立时钟时,读时钟域与读操作时钟同步,写时钟域与写操作时钟同步
独立时钟域操作支持non-symmetric aspect ratios(different write and read port widths)。
能够使用握手信号进行控制
标准模式下FIFO接口信号
Full 标志信号共有四种可编程方式
1、Single Threshold
这种方式允许你设置一个单阈值,来产生 Full 信号或取消Full信号
这种方式下,当FIFO中的数据超过或等于阈值时,产生Full信号,不产生Full信号时分为两种情况。
(1)当FIFO类型为built-in FIFO时,当FIFO数据小于阈值时,不产生Full信号
(2)当FIFO类型为non built-IN FIFO时,当FIFO数据小于最小阈值时(我理解为固定的,人为不能设置的,最小阈值),取消Full信号
-
Single threshold constant
该设置下,用户指定一个阈值,在FIFO设置GUI界面,一旦Core生成后,该值不能改变,除非重置Core设置。 -
Single threshold with dedicated input port(non-built-in FIFOs only)
该设置下,用户可以通过输入端口来对阈值进行配置。配置后FIFO复位,就能改变FIFO的阈值设置,而不需要再重新配置Core。
**2、Assert and Negate Thresholds **
这种方式允许你设置两个分离的值来产生Full信号或者取消Full信号。
这种方式一般情况下设置一个最大值和最小值。当FIFO中的数据超过最大值时会产生Full信号,当FIFO中的信号小于最小值时会取消Full信号。
-
Assert and negate threshold constants
该设置下,用户指定两个个阈值,在FIFO设置GUI界面,一旦Core生成后,该值不能改变,除非重置Core设置。 -
Assert and negate thresholds with dedicated input ports
该设置下,用户可以通过输入端口来对阈值进行配置。配置后FIFO复位,就能改变FIFO的阈值设置,而不需要再重新配置Core。
Full 在配置阈值范围时需要考虑的一些限制
empty信号与Full信号特性类似,不在展开详述。
FIFO如何实现读和写同步
异步FIFO
同步FIFO
真实的FIFO深度
理解FIFO的有效深度或实际深度不是必须和GUI中选择的深度一致,因为FIFO真实深度取决于其实现和影响其实现的特性。
对于block RAM,distributed RAM,和shift RAM FIFO真实深度受以下改变其实现的特性的影响。
真实深度受FIFO如何配置所影响,如何计算如下图所示:
FIFO 满 空逻辑注意事项 异步FIFO情况下
由于异步FIFO读时钟和写时钟的差异导致跨时钟域问题,为此带来许多需要注意的事项。
异步时钟下,Full flag与写时钟域同步,empty flag与读时钟域同步。
-
Pessimistic Full and Empty
当采用异步时钟时,由于读时钟和写时钟的差异,会导致full flag和empty flag出现不准确情况(pessimistic falgs).
为什么会出现pessimistic flags参考我的文章《异步FIFO设计》 -
同时断言满标志和空标志
对于异步FIFO来讲,满空标志位产生和取消由于跨时钟域的出现导致延时,而这些延时则有可能导致FIFO同时出现满标志和空标志位。为了避免这种情况的出现,需要保证A和B等式成立
上述公式中提到的延时信息,总结入下表所示: