FIFO设计中的深度计算:
写时钟频率 w_clk,
读时钟频率 r_clk,
写时钟周期里,每B个时钟周期会有A个数据写入FIFO;
读时钟周期里,每Y个时钟周期会有X个数据读出FIFO;
则,FIFO的最小深度是?
计算公式以下:
fifo_depth = burst_length - burst_length * X/Y * r_clk/w_clk
举例说明:
若是100个写时钟周期能够写入80个数据,10个读时钟能够读出8个数据。令wclk=rclk ,考虑背靠背(20个clk不发数据+80clk发数据+80clk发数据+20个clk不发数据的200个clk)代入公式可计算FIFO的深度
fifo_depth = 160-160*(80%)=160-128=32;
若是令wclk=200mhz,改成100个wclk里写入40个,rclk=100mhz,10个rclk里读出8个。那么fifo深度为48
计算以下fifo_depth =80-80*(80%)*(100/200)=80-32=48;
注:将 fifo_depth = burst_length - burst_length * (X/Y) * (r_clk/w_clk) 做个变形,获得 fifo_depth = burst_length - (burst_length /w_clk)*[r_clk*(x/y)] 。 其中(burst_length /w_clk) 表示这个burst的持续时间,r_clk*(x/y)表示读的实际速度。二者的乘积天然就是这段时间读出的数据量。显然burst_length表示这 段时间写入的数据量,二者的差为fifo中残留的数据,这个也就是理论上的fifo的最小深度。实际应用中每每是以半空半满信号来指示fifo的空满状态 的,因此实际设计fifo的时候会至少留下一个数据空间的深度裕量。设计