文章目录
前言
嗨,今天来继续学习FPGA相关知识点~
38.FIFO的深度计算问题
FIFO的最小深度问题,可以理解为两个模块之间的数据传输问题;只有在读取速度慢于写入速度的情况下,我们才需要一个FIFO,来暂时的寄存这些没有被读出去的数据;
一个最主要的逻辑思想是:
确定FIFO的大小,就是要找到在写入过程中没有被读取的数据的个数;即FIFO的深度等于未被读取的数据的数量。
现在考虑一种实例,A时钟域数据发往B时钟域,将会出现以下几种情况:
1️⃣情况1:fa>fb,且在读和写中都没有空闲周期;
例如:
写入频率fa = 80MHz,读取频率fb = 50MHz。
突发长度即要写入的数据数目为120个。
计算如下:
写入一个数据需要的时间 = 1 / 80MHz = 12.5ns;
写入突发事件中所有数据需要时间 = 120 * 12.5 = 1500ns;
读取一个数所需时间 = 1 / 50MHz = 20ns;
所有数据写入完成后使用1500ns,1500ns可以读出数据为 = 1500 / 20 = 75个。
所以,要在FIFO中存储的剩余数据量为 120 - 75 = 45;
故:设计的FIFO的最小深度为45!
2️⃣情况2:fa>fb,两个连续的读写之间有一个时钟周期延迟;
这种情况和情况1️⃣一样,仅仅是人为的制造了某种混乱;
3️⃣情况3:fa>fb,在读和写中都有空闲周期;
例如:
写入频率fa = 80MHz,读取频率fb = 50MHz。
突发长度即要写入的数据数目为120个。
两个连续的写之间空闲周期为1,两个连续的读之间空闲周期为3;
计算如下:
可以理解为每两个时钟周期写入一次数据,每四个时钟周期读出一个数据。
写入一个数据需要的时间 = 2 * (1 / 80MHz) = 2 * 12.5 = 25ns;
写入突发事件中所有数据需要时间 = 120 * 25 = 3000ns;
读取一个数所需时间 = 4 * (1 / 50MHz) = 4 * 20 = 80ns;
所有数据写入完成后使用3000ns,可以读出数据为 = 3000 / 80 = 37.5 ≈ 37个。
所以,要在FIFO中存储的剩余数据量为120 - 37 = 83;
故:设计的FIFO的最小深度为

最低0.47元/天 解锁文章
4万+

被折叠的 条评论
为什么被折叠?



