关于异步FIFO深度的计算
于是有公式: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
的回复!
