FIFO深度计算公式:
对于读写同时进行的FIFO,有一个简便计算公式:
FIFO_Depth = Burst_length - Burst_length* (rd_clk/ wr_clk)*(rd_rate)
- Burst_length:最大突发写长度
- rd_rate :一个时钟周期内读取数据个数
1.笔试题1
设计同步FIFO,每100个cycle可以写入80个数据,每10个cycle可以读出8个数据,FIFO的深度至少为()
A. 16
B. 32
C. 64
D. 128
- 写入最频繁的情况下,是连续的200个时钟内,有连续的160个时钟在写,即最大突发写长度Burst_length = 160;
- 读时钟等于写时钟,rd_clk = wr_clk;
- 读取速率rd_rate,每10个时钟周期读取8个数据,所以rd_rate = 8/10=0.8;
FIFO_Depth = Burst_length -Burst_length* (rd_clk/ wr_clk)*(rd_rate)
= 160 – 160*1*0.8
= 32
2.笔试题2
(字节)设计一个同步fifo,读写时钟相同,其中在写入时每100个时钟周期会写10个,具体哪个时刻写入不确定,在读出侧每10个cycle会读1个,计算最小深度?
- 最大突发写长度 Burst_length = 20;
- 读时钟等于写时钟,rd_clk = wr_clk;
- 读取速率rd_rate,每10个时钟周期读取1个数据,所以rd_rate = 1/10=0.1;
FIFO_Depth = Burst_length -Burst_length* (rd_clk/ wr_clk)*(rd_rate)
= 20 – 20*1*0.1
= 18
3.笔试题3
ModuleA/ModuleB用的是同个Clock, Clock频率80MHz。ModuleA和ModuleB同时启动,ModuleA产生如下周期性的burst数据给ModuleB,一共产生8次burst。 burst rate : 1280Mbit/s,burst持续时间1us。burst内部速率均匀,burst周期5us,余下的4us内没有数据。ModuleB收到启动信号后,需要花10us做初始化,所以先把module A的数据缓存在ModuleB内部的同步FIFO中,同步FIFO位宽32bits,初始化结束后,ModuleB以640 Mbit/s的均匀速度从FIFO中读取数据。在满足功能需求的前提下,为了节省电路面积,要求FIFO size越小越好,以下四个选项的FIFO深度,选项()的FIFO深度符合要求:
A. 128
B. 64
C. 96
D. 160
- 考虑最大数据情况,在ModuleB启动的10us内,ModuleA一直在传输数据,一共2us有效数据,需要存储1280Mbit/s * 2us = 2560bit. 在第11us,ModuleA传输数据 1280Mbit/s * 1us =
1280bit,ModuleB读取 640 Mbit/s * 1us = 640 bit. - 共需存储 2560 + 1280 - 640 = 3200 bit,FIFO位宽32bits, FIFO深度:3200 bit / 32bit = 100, 故128符合要求。