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