工程中FIFO空,滿,將空,將滿標誌使用

2021-06-20 10:35:11 字數 557 閱讀 4068

最近跳槽到了一家公司做硬體防火牆,第一次真真正正的用verilog做工程,學到了很多東西,尤其對fifo的empty,full,aempty,afull感觸很深,使用好了,可以提高系統效能,使用不當,會造成效能下降,甚至會出現fifo寫、讀反轉,造成空、滿標誌同時拉起,系統掛死。

防火牆處理的物件是報文,下面的例子就直接取的專案中的實際情況。

一般設定afull為能再容納乙個完整的報文且fifo不會滿,如32*144的位元組fifo,乙個報文為6pat,afull最好設定為24或者更低,這樣當看到afull拉起時,並反壓上級模組時,可以在寫進去乙個完整的報文,且不會反轉,

empty標誌最好在狀態機或流水線的第一級就判斷,如不滿足,需等待fifo非空,不要等狀態機跳轉到了某一狀態後再判斷,此時如果為空,會造成邏輯錯誤。如在bm位址管理中,如果該報文需要申請bm位址,就必須判斷bm位址非空,否則就必須在idle狀態等待,如果跳轉到了這一狀態,發現為空,選擇不讀,此時rdata為上次讀取資料,會造成資料被覆蓋,出現錯誤。

此外,full,aempty在專案很少用,full是盡力避免的情況,aempty有可能會造成fifo中資料讀不完。

非同步FIFO格雷碼與空滿

在傳遞讀寫時鐘域的指標使用格雷碼來傳遞,如何把二進位制轉換為格雷碼,格雷碼是如何判斷讀空寫滿呢?二進位製碼轉換成二進位制格雷碼,其法則是保留二進位製碼的最高位作為格雷碼的最高位,而次高位格雷碼為二進位製碼的高位與次高位相異或,而格雷碼其餘各位與次高位的求法相類似。這樣就可以實現二進位製到格雷碼的轉換...

FIFO空滿判斷與位址轉換的思考

非同步fifo通過比較讀寫位址進行滿空判斷,但是讀寫位址屬於不同的時鐘域,所以在比較之前需要先將讀寫位址進行同步處理,將寫位址同步到讀時鐘域再和讀位址比較進行fifo空狀態判斷 同步後的寫位址一定是小於或者等於當前的寫位址,所以此時判斷fifo為空不一定是真空,這樣更保守 將讀位址同步到寫時鐘域再和...

同步FIFO設計 產生空滿訊號的兩種方法

同步fifo的設計較為簡單,關鍵在於如何產生空滿訊號 有兩種實現方法 1.利用計數器判斷,執行一次寫操作 1,讀操作 1 2.將fifo的位址位拓展一位,用最高位來判斷空滿。如下 1.利用計數器計算儲存資料個數 module sync fifo clk,rst n,fifo wr en,fifo r...