<?xml version="1.0" encoding="gbk"?> <rss version="2.0"><channel> <title>定阅帖子更新</title> <link>http://www.broadkey.com.cn/XML.ASP</link><description>TEAM Board - 意得法电子</description> <copyright>TEAM 2.0.5 Release</copyright><generator>TEAM Board by TEAM5.Cn Studio</generator> <ttl>30</ttl><item><link>http://www.broadkey.com.cn/Thread.asp?tid=14 </link><title>FIFO设计中的深度计算</title><author>aaron</author><pubDate>2009-11-24 10:42:19</pubDate><description><![CDATA[写时钟频率 w_clk,<br />
读时钟频率 r_clk,<br />
写时钟周期里，每B个时钟周期会有A个数据写入FIFO<br />
读时钟周期里，每Y个时钟周期会有X个数据读出FIFO<br />
则，FIFO的最小深度是？<br />
<br />
计算公式如下：<br />
<br />
fifo_depth = burst_length - burst_length * X/Y * r_clk/w_clk<br />
<br />
例举说明：<br />
如果100个写时钟周期可以写入80个数据，10个读时钟可以读出8个数据。令wclk＝rclk ，考虑背靠背（20个clk不发数据＋80clk发数据＋80clk发数据＋20个clk不发数据的200个clk）代入公式可计算FIFO的深度<br />
fifo_depth = 160-160X（80%）=160-128=32<br />
<br />
如果令wclk＝200mhz，改为100个wclk里写入40个，rclk＝100mhz，10个rclk里读出8个。那么fifo深度为48<br />
计算如下fifo_depth =80-80X（80%）X(100/200)=80-32=48<br />
<br />
注：将 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的时候会至少留下一个数据空间的深度裕量。<br />]]></description></item></channel></rss>