码电路的小王
楼上讲得很全了,我补充一个容易忽略的点:读写使能(valid)信号的非连续性问题。实际题目里,经常不是简单的“连续突发写入N个数据”,而是“在M个写时钟周期内,随机/间歇地写入N个数据”。这时候你计算深度,时间窗口就不能直接用突发长度除以写频率了,得用使能有效的总周期数。
比如写时钟快,读时钟慢,但写端每写1个就停1个,读端虽然慢但是连续读。这时候即使频率差很大,因为写端效率只有50%,FIFO深度可能不需要很大。公式要修正为:深度 = (写数据量 - 在写数据期间读走的数据量)。其中“写数据期间”指的是所有写有效时钟周期跨度的总时间,而不是突发长度除以写频率。
还有,注意背压(ready信号)和使能(valid)的交互。当valid和ready都有效时才完成一次传输。计算时,如果读端背压,读ready会拉低,这时候即使读时钟在跑,也没读走数据。所以分析读速率时,要基于实际成功的读传输,而不是读时钟频率。
建议你找一些真题,重点标出valid/ready的条件,然后画时间图。先确定最坏情况的时间段,再数那个时间段里写入了多少、读走了多少,两者之差就是所需深度。多练几个这种题,比死记公式管用。
