前言
fifo ip核也是vivado最常用的ip核之一,这篇博客记录了fifo核的使用方法,各个模式之间的区别。
介绍了如何计算datacount 使得fifo达到最小延迟。
埋个坑,后续应用到fifo的时候在放波形给大家看。
一、使用步骤
对于新手来说,接口类型先跳过,我们暂时默认都选native。
先说说 Fifo implementation 这个选项。
common是使用静态ram, distributed是使用LUT资源(当ram不够时才用);Independent是异步fifo(读写时钟分开)。
read mode : standard模式下读使能和读出数据是在一拍完成的,first模式读出数据要比读使能延迟一拍。
data port paramers : 写宽度深度,读宽度深度。如果读写的宽度和深度一致,则可以勾选data_count,如果不一致,那么只能勾选 读写计数。(下图可见)
initialization: 可以勾选复位,勾选复位后可以选择同步复位或者异步复位,作用是清除data_count内的数据,随后写进来一个就可以读一个出去。
这里显示的more accurate data counts 不能勾选是因为选择的是standard模式,选择first模式时可以勾选,勾选此模式可以提高data_count的计数精度,读者可以自行尝试查看效果。
二、Data_count的计算
data_count 信号是用来给读数据使能的信号,什么时候读,能得到最低延迟(即信号写完最短时间内读出来,理想状态是读完刚好写完)
(1)同步fifo,8转64,datacount计算
//800/100=8,256/8=32,fifo 中写32字节时,可以读出256个字节,256-32=224,224/8=28
(2)异步fifo 仅跨时钟域 写100M,读200M。
//200/100=2,256/2=128, fifo写128个字节,可以读出256个字节,256-128=128,这里有延迟
不位宽转换的话不需要/8.
(3)异步fifo,跨时钟域位宽转换 8转64 写时钟100M,读时钟50M
//400/100=4,256/4=64, fifo写64个字节,可以读出256个字节,256-64=192,192/8=24.这里有延迟
可以给1个裕量,设置data_count 为25即可。