介紹:
對(duì)于fifo來說,H的設(shè)置至關(guān)重要,。既要保證功能性,,不溢出丟數(shù),也要保證性能流水,。深度設(shè)置過小會(huì)影響功能,,過大又浪費(fèi)資源。因此,,總結(jié)下fifo設(shè)計(jì)中深度H的計(jì)算,。
一、同步sync fifo
1.1 流控反壓后不溢出
假設(shè)數(shù)據(jù)一直發(fā),,下游一直讀,,讀頻率小于寫頻率時(shí),fc(flow control)流控后,,最壞的情況下,,下游不讀了。此時(shí)fifo反壓信號(hào)拉高,,上游寫ready拉低,,此時(shí)路上的數(shù)據(jù)需要能存入fifo,稱之為過沖,。過沖需要保證路上的數(shù)據(jù)被fifo完全吸收不溢出,,因此fifo的深度H=過沖+上水位線TA。
1.2 不斷流
對(duì)于同頻同步fifo來說,,只要深度大于1,,只要保證上游每cycle都有wvalid,fifo讀一定不會(huì)斷流,,可以實(shí)現(xiàn)流水,。
當(dāng)引入fc后,極端場景下,,當(dāng)達(dá)到反壓水位線后,,馬上停止寫入,有一拍的讀出后,,反壓撤銷,。在讀空fifo之前,必須有fifo的寫入操作,,以保證fifo不被讀空,,從而產(chǎn)生斷流氣泡。
假設(shè)每cycle都讀,,則在讀完反壓水位線深度數(shù)據(jù)時(shí),,第一筆寫fifo命令產(chǎn)生。此時(shí),,
1)data產(chǎn)生到寫入fifo路上時(shí)延N cycle,;
2)fc發(fā)生后下一拍產(chǎn)生流控信號(hào),data_gen停止產(chǎn)生data,;
3)fc取消后,,data_gen下兩拍開始產(chǎn)生data;
4)此過程中每cycle都在讀數(shù)據(jù),。
上述場景下,,當(dāng)發(fā)生流控時(shí),過沖的數(shù)據(jù)個(gè)數(shù)是N+1,,當(dāng)取消流控時(shí),,產(chǎn)生數(shù)據(jù)的時(shí)延是N+2,因此fifo的深度H=N+1+N+2=2N+3,。fifo深度只有大于這個(gè)數(shù)據(jù)才不會(huì)產(chǎn)生氣泡斷流,。
二、異步async fifo
對(duì)于fc場景,,異步fifo最大的問題是寫讀指針跨時(shí)鐘域cdc同步中的時(shí)延,。如果寫指針同步到rclk為M個(gè)時(shí)延,,讀指針同步到wclk也為M個(gè)時(shí)延,則fifo深度H=2N+3+M+M=2N+2M+3,。此處只是簡單場景,,真正計(jì)算深度時(shí),還需考慮其它打拍,,信號(hào)組合邏輯等產(chǎn)生的時(shí)延,。
更多信息可以來這里獲取==>>電子技術(shù)應(yīng)用-AET<<