最近遇到关于fifo深度计算的知识点,于是想以一个例题来学习学习。
题目描述:在一个fifo中,有一个100MHz的写时钟,每100个周期写入80个数据,另外有一个80MHz的读时钟,每个周期读出1个数据,那么fifo的深度应该设置为多大?
从题中可以看出,这个fifo为异步的,要计算其最大的深度,首先需要考虑,我们计算的深度应该是fifo读写最繁忙的时间段,即写入数据最容易溢出的点,于是就涉及到back to back的概念.
设想fifo在100个周期中,前20个周期不写入数据,随后80个周期写入,然后又紧接着在下80个周期马上写入数据,此时对于fifo的存储压力最大。
back to back示意图
据此,我们可以开始计算fifo的最大深度。首先,我们应该注意写和读的时钟不同步
- 先算出写时钟160个周期所花的时间:
Tw = 160*(1/100MHz)
- 算出这段时间对于读时钟会走过多少个周期
读时钟的周期为 1/80MHz,那么读时钟走过的周期数为Cr = Tw / (1/80MHz)
- 计算读出数据量
对于读时钟,一个时钟周期写一个数据,那么这段时间读出的数据就为Cr*1 = 128
- 计算fifo深度
那么深度应该设置为 160 - 128 = 32