微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 关于异步FIFO深度的计算

关于异步FIFO深度的计算

时间:10-02 整理:3721RD 点击:
最近面试,考到了关于异步FIFO的计算。后来在网上看的多数关于异步FIFO的计算都是一个原型,即:A个时钟周期写入B个数据,X个时钟周期读出Y个数据。并且应该知道r_clk和w_clk。
于是有公式:fifo_depth = burst_length - burst_length * (X/Y) * (r_clk/w_clk)
但是VIA的笔试中给出的题目是这样的:
一个8bit宽的AFIFO,输入时钟为100MHz,输出时钟为95MHz,设一个package为4Kbit,且两个package之间的发送间距足够大。问AFIFO的深度。
对于这样的问题又该怎么样计算呢?
求大神讲解!

带到上面的公式就可以,A, B , X , Y 都是1
500-500X95/100 =25



   太感谢了,帮了我大忙了。

fifo深度是用来缓冲读写带宽不匹配的,不管用什么公式,算差值就对了。


burst_length为什么是500?不理解

4K/8=500....



   有木有进一步的解释,就拿这个说说看

为什么A, B , X , Y 都是1?不理解,



   有一类出题是这样的:w_clk在100个时钟周期内写入80个数据,r_clk在10个周期内读出8个数据。这样的关系一般不是每个时钟周期都读出或者写入数据。但是上面这个题中,没有强调这个问题,可以认为数据量为4K/8=500,所以就需要500个时钟周期,相应的写入读出数据都是500,那么写时钟和读时钟也都就需要500.我是这么认为的

   题目中一个包有4K/8=500拍

要防止溢出,当这个包发完的时候存了500个,但是又可以读走475 剩下的就是fifio深度了

异步fifo的深度只要是写快 读慢,還是得考虑具体的数据流,不然不管怎么都会溢出的,

不要纠结于公式如何计算。看具体使用场景



   明白了。



   嗯,谢谢!



   嗯,谢谢!

9楼的想法和我一样

4Kbit不应该是4096bits吗?  那应该是512Bytes啊?深度算出来应该是25.6,那么深度不应该是26吗?


嗯,准确的说应该是这样的吧,但是吧,现在好多都算的是1000的

应该是Y个时钟周期读X个数据……



   
   太感谢了,帮了我大忙了。

mark一下,笔试也遇到这样的题~

FIFO 深度计算 要取决于 突发传输的 数据量,
假定为A
数据写入的速率为a/b(b个时钟写入a个数据),写入时钟为c Mhz
数据读出的速率为x/y(y个时钟读出x个数据),读出时钟为z Mhz
那么深度应为:
A- A*(z*(x/y))/(c*(a/b))



   一般讲述存储器容量大小中,1K=2^10,其他地方时1000,我是这样理解的

The principle of ASY-FIFO is to maintain throughput balance between two side of FIFO

讲的很透彻,学习了

基本原理就是  确定下来这段时间内
发送方写了多少数据
接收方能够读多少数据
二者差值即为FIFO最小的深度

呵呵,老帖子还翻出来.
其实这些东西都是仁者见仁,考试,不是说你的能力如何,是考试
你的想法和考官是否接近. 这也就是常说的运气.
一个8bit宽的AFIFO,输入时钟为100MHz,输出时钟为95MHz,设一个package为4Kbit,且两个package之间的发送间距足够大。问AFIFO的深度。
请问,里面说写的时候,一定同时在读么?想当然了吧.

小编好像算错了吧

其实还是有问题的,姑且将4K按照4000算,应该是500-500*95/100 +1 = 26;
为什么会+1呢?这是因为,举个例子,如果读时钟为5,写时钟为4,一次传输5个数据,那么FIFO深度为多少呢?
答案应该是3!



   为什么是3, 读、写时钟5、4的单位是什么?



   不好意思,应该是2,我想表达的是,直接套那个公式计算是不够的,应该还要+1。


clude_sky
的回复!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top