首页 > 编程知识 正文

fifo最小深度计算公式,同步fifo和异步fifo的区别

时间:2023-05-05 15:22:03 阅读:60327 作者:1855

计算FIFO的深度是FIFO设计中经常出现的问题。 众所周知,如果读取速度慢于写入速度,则FIFO可以用作系统中的缓冲区或队列。 因此,FIFO的大小基本上意味着所需的缓存数据量,该容量取决于数据的读写速度。 统计表明,系统的数据速率取决于系统的承载能力。 因此,为了保证FIFO的大小,必须考虑FIFO传输的最坏情况。 最坏的情况是使写入速度最大,使读取速度最小。 通常考虑突发传输。

一、异步FIFO最小深度计算原理

在数据流连续的情况下,不管FIFO的深度是多少,只要读/写时钟不同的源频率相同,就失去数量;

FIFO用于缓冲块数据流,通常在写入速度慢时,遵循以下规则:

{FIFO深度/{写入速率-读取速率}={FIFO满的时间} {数据包传输时间}={写入数据量/写入速率}

即,在向FIFO写入数据时存在溢出,在从FIFO读出数据时不存在还原流.

例如: A/D采样率50MHz,dsp读取A/D的速度40MHz,要向dsp发送10万个采样数据而不丢失,A/D必须与dsp之间添加至少多少容量(深度)的FIFO

100,000/50m Hz=1/500 s=2毫秒

(50MHz - 40MHz ) * 1/500=20k为FIFO深度。

错误的算法(我也犯了同样的错误) :

100,000/40 MHz=1/400 s=2.50 ms

(50M - 400M ) *1/400=25K .因此输入的数据为0.0025-0.002 )=125,000位,而不是100K ),这会导致时间计算错误。

二、异步FIFO最小深度的一般计算公式(如果同时读写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-160x(80% )=160-128=32

如果wclk=200mhz,则变更为向100个wclk写入40个,rclk=100mhz,向10个rclk写入8个。 fifo的深度是48

如下计算FIFO_depth=80-80x(80% ) x ) X(100/200 )=80-32=48

注意: FIFO _ depth=burst _ length -变形burst _ length * (x/y ) (* (r_clk/w_clk ) ),使FIFO _ depth=burst 很明显,burst_length表示在这个时间写入的数据量,两者之差是fifo中剩下的数据,这也就是理论上fifo的最小深度。 在实际应用中,由于经常用空中半满信号指示fifo的空闲状态,因此在实际设计fifo时至少剩下一个数据空间的深度裕度。

三.读写FIFO不同时进行时,异步FIFO最小深度计算

如果读写FIFO不同时进行,则必须将FIFO的深度设置为写入数据的最大突发数。

四.异步FIFO最小深度算例(1) )。

设定fifo深度时,需要参考具体的应用情况。

1、SDRAM APP应用

例如,在SDRAM APP应用程序中,设置一个对应的fifo,一般设置深度是操作数据的两倍就足够了。 例如,SDRAM的所有页面的读写为256,对应的设定深度为512。 这是因为SDRAM的读写速度一定比FIFO的写入速度和之后的FIFO的读取速度快。 因此,只要SDRAM前后的动作速度一致即可。 没有任何问题。

2、双异步时钟数据接口

例如,对于两个异步时钟域数据接口,在同时读取和写入的情况下,写入时钟通常在设置FIFO时大于读出时钟。 此时,要设定FIFO的深度,需要对应两个时钟和写入最大的突发数据。 假设写入时钟频率为40MHz,读取时钟为25Mhz,写入侧的最大突发写入数据数为100数据。 对应深度计算: 100(1-25/40 )=37.5,对应深度设置至少为38。 〔用第2点所述的公式计算〕

如果读写不同时进行,则必须将写入数据的最大突发数设置为深度。 在上例中,如果深度为100个,对应于最大突发数,则深度设置为100。

五、异步FIFO最小深度算例(2) )。

1,8bit宽的AFIFO,输入时钟为100MHz,输出时钟为95MHz,一个包为4Kbit,两个包之间的发送间距足够大。 A求出国际先进先出的深度吗?

FIFO _ depth=burst _ length-burst _ length * (x/y ) ) (* (r_clk/w_clk ) )的公式

burst_length=4Kbit/8bit,有两个结果。 一种情况是,根据存储制造商的常规算法,4Kbit=4000bit,burst_length=500。 其二,是一般的二进制算法,4Kbit=4*1024=4096bit,burst_length=512。

因为没有给出x和y的值,所以默认值为1。

得到。 另一方面,fifo_depth=500 - 500*(95/100 )=25,因此fifo_depth的最小取值为25。

其二,由于fifo_depth=512 - 512*(95/100 )=25.6,因此fifo_depth的最小取值为26。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。