由于設(shè)計的時候讀寫指針用了至少兩級寄存器同步,同步會消耗至少兩個時鐘周期,勢必會使得判斷空或滿有所延遲,這會不會導(dǎo)致設(shè)計出錯呢?
異步FIFO通過比較讀寫指針進行滿空判斷,但是讀寫指針屬于不同的時鐘域,所以在比較之前需要先將讀寫指針進行同步處理。
將寫指針同步到讀時鐘域再和讀指針比較進行FIFO空狀態(tài)判斷,因為在同步寫指針時需要時間,而在這個同步的時間內(nèi)有可能還會寫入新的數(shù)據(jù),因此同步后的寫指針一定是小于或者等于當(dāng)前實際的寫指針,所以此時判斷FIFO為空不一定是真空,這樣更加保守,一共不會出現(xiàn)空讀的情況,雖然會影響FIFO的性能,但是并不會出錯,同理將讀指針同步到寫時鐘域再和寫指針比較進行FIFO滿狀態(tài)判斷,同步后的讀指針一定是小于或者等于當(dāng)前的讀指針,所以此時判斷FIFO為滿不一定是真滿,這樣更保守,這樣可以保證FIFO的特性:FIFO空之后不能繼續(xù)讀取,F(xiàn)IFO滿之后不能繼續(xù)寫入。總結(jié)來說異步邏輯轉(zhuǎn)到同步邏輯不可避免需要額外的時鐘開銷,這會導(dǎo)致滿空趨于保守,但是保守并不等于錯誤,這么寫會稍微有性能損失,但是不會出錯。
大多數(shù)情形下,異步FIFO兩端的時鐘不是同頻的,或者讀快寫慢,或者讀慢寫快,慢的時鐘域同步到快的時鐘域不會出現(xiàn)漏掉指針的情況,但是將指針從快的時鐘域同步到慢的時鐘域時可能會有指針遺漏。以讀慢寫快為例,進行滿標(biāo)志判斷的時候需要將讀指針同步到寫時鐘域,因為讀慢寫快,所以不會有讀指針遺漏,同步消耗時鐘周期,所以同步后的讀指針滯后(小于等于)當(dāng)前讀地址,所以可能滿標(biāo)志會提前產(chǎn)生,滿并非真滿。
進行空標(biāo)志判斷的時候需要將寫指針同步到讀指針 ,因為讀慢寫快,所以當(dāng)讀時鐘同步寫指針的時候,必然會漏掉一部分寫指針,我們不用關(guān)心那到底會漏掉哪些寫指針,我們在乎的是漏掉的指針會對FIFO的空標(biāo)志產(chǎn)生影響嗎?
比如寫指針從0寫到10,期間讀時鐘域只同步捕捉到了3、5、8這三個寫指針而漏掉了其他指針。當(dāng)同步到8這個寫指針時,真實的寫指針可能已經(jīng)寫到10 ,相當(dāng)于在讀時鐘域還沒來得及覺察的情況下,寫時鐘域可能偷偷寫了數(shù)據(jù)到FIFO去,這樣在判斷是空的時候會出現(xiàn)不是真正空的情況,漏掉的指針也沒有對FIFO的邏輯操作產(chǎn)生影響。
-
寄存器
+關(guān)注
關(guān)注
31文章
5322瀏覽量
120017 -
fifo
+關(guān)注
關(guān)注
3文章
387瀏覽量
43555 -
指針
+關(guān)注
關(guān)注
1文章
480瀏覽量
70511
發(fā)布評論請先 登錄
相關(guān)推薦
評論