非同步FIFO格雷碼與空滿

2022-05-02 12:24:11 字數 545 閱讀 4467

在傳遞讀寫時鐘域的指標使用格雷碼來傳遞,如何把二進位制轉換為格雷碼,格雷碼是如何判斷讀空寫滿呢?

二進位製碼轉換成二進位制格雷碼,其法則是保留二進位製碼的最高位作為格雷碼的最高位,而次高位格雷碼為二進位製碼的高位與次高位相異或,而格雷碼其餘各位與次高位的求法相類似。

這樣就可以實現二進位製到格雷碼的轉換了,總結就是移位並且異或,verilog**實現就一句:assign wgraynext = (wbinnext>>1) ^ wbinnext。

因為格雷碼與二進位制計數的有區別,我們可以得出以下的結論:

當高2bit的相反,後幾位的bit相同時,寫滿;

當寫指標等於讀指標時,讀空。

關於非同步fifo為什麼用格雷碼

那麼典型的判斷方法是怎樣進行的呢?以滿狀態判斷為例,先要對讀指標 屬於讀時鐘域 在寫時鐘域進行抽樣,然後才能與寫指標進行比較,如果寫指標趕上了讀指標,說明已經寫滿,寫操作必須暫停。接下來說說為什麼2進製指標不適合做空滿判斷。事實上2進製讀指標在增減時,經常發生多位突變,比如6位位址111111會在下...

非同步FIFO中讀寫指標為什麼要用格雷碼

首先要了解的是非同步fifo 使用格雷碼的唯一目的就是 即使在亞穩態進行讀寫指標抽樣也能進行正確的空滿狀態判斷 那麼典型的判斷方法是怎樣進行的呢?以滿狀態判斷為例,先要對讀指標 屬於讀時鐘域 在寫時鐘域進行抽樣,然後才能與寫指標進行比較,如果寫指標趕上了讀指標,說明已經寫滿,寫操作必須暫停。接下來說...

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

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