1. 程式人生 > >非同步FIFO空滿設計延遲問題

非同步FIFO空滿設計延遲問題

由於設計的時候讀寫指標用了至少兩級暫存器同步,同步會消耗至少兩個時鐘週期,勢必會使得判斷空或滿有所延遲,這會不會導致設計出錯呢?

非同步FIFO通過比較讀寫指標進行滿空判斷,但是讀寫指標屬於不同的時鐘域,所以在比較之前需要先將讀寫指標進行同步處理。

將寫指標同步到讀時鐘域再和讀指標比較進行FIFO空狀態判斷,因為在同步寫指標時需要時間,而在這個同步的時間內有可能還會寫入新的資料,因此同步後的寫指標一定是小於或者等於當前實際的寫指標,所以此時判斷FIFO為空不一定是真空,這樣更加保守,一共不會出現空讀的情況,雖然會影響FIFO的效能,但是並不會出錯,同理將讀指標同步到寫時鐘域再和寫指標比較進行FIFO滿狀態判斷,同步後的讀指標一定是小於或者等於當前的讀指標,所以此時判斷FIFO為滿不一定是真滿,這樣更保守,這樣可以保證FIFO的特性:FIFO空之後不能繼續讀取,FIFO滿之後不能繼續寫入。總結來說非同步邏輯轉到同步邏輯不可避免需要額外的時鐘開銷,這會導致滿空趨於保守,但是保守並不等於錯誤,這麼寫會稍微有效能損失,但是不會出錯。

大多數情形下,非同步FIFO兩端的時鐘不是同頻的,或者讀快寫慢,或者讀慢寫快,慢的時鐘域同步到快的時鐘域不會出現漏掉指標的情況,但是將指標從快的時鐘域同步到慢的時鐘域時可能會有指標遺漏。以讀慢寫快為例,進行滿標誌判斷的時候需要將讀指標同步到寫時鐘域,因為讀慢寫快,所以不會有讀指標遺漏,同步消耗時鐘週期,所以同步後的讀指標滯後(小於等於)當前讀地址,所以可能滿標誌會提前產生,滿並非真滿。

進行空標誌判斷的時候需要將寫指標同步到讀指標 ,因為讀慢寫快,所以當讀時鐘同步寫指標的時候,必然會漏掉一部分寫指標,我們不用關心那到底會漏掉哪些寫指標,我們在乎的是漏掉的指標會對FIFO的空標誌產生影響嗎?

比如寫指標從0寫到10,期間讀時鐘域只同步捕捉到了3、5、8這三個寫指標而漏掉了其他指標。當同步到8這個寫指標時,真實的寫指標可能已經寫到10 ,相當於在讀時鐘域還沒來得及覺察的情況下,寫時鐘域可能偷偷寫了資料到FIFO去,這樣在判斷是空的時候會出現不是真正空的情況,漏掉的指標也沒有對FIFO的邏輯操作產生影響。

版權所有權歸卿萃科技 杭州FPGA事業部,轉載請註明出處

作者:杭州卿萃科技ALIFPGA

原文地址:杭州卿萃科技FPGA極客空間 微信公眾號

掃描二維碼關注杭州卿萃科技FPGA極客空間