異步FIFO通過比較讀寫地址進(jìn)行滿空判斷,但是讀寫地址屬于不同的時鐘域,所以在比較之前需要先將讀寫地址進(jìn)行同步處理,將寫地址同步到讀時鐘域再和讀地址比較進(jìn)行FIFO空狀態(tài)判斷(同步后的寫地址一定是小于或者等于當(dāng)前的寫地址,所以此時判斷FIFO為空不一定是真空,這樣更保守)。
將讀地址同步到寫時鐘域再和寫地址比較進(jìn)行FIFO滿狀態(tài)判斷(同步后的讀地址一定是小于或者等于當(dāng)前的讀地址,所以此時判斷FIFO為滿不一定是真空,這樣更保守),這樣可以保證FIFO的特性:FIFO空之后不能繼續(xù)讀取,F(xiàn)IFO滿之后不能繼續(xù)寫入。
大多數(shù)情形下,異步FIFO兩端的時鐘不是同頻的,或者讀快寫慢,或者讀慢寫快,這時候進(jìn)行地址同步的時候,可能會有地址遺漏,以讀慢寫快為例,進(jìn)行滿標(biāo)志判斷的時候需要將讀地址同步到寫時鐘域,因為讀慢寫快,所以不會有讀地址遺漏,同步后的讀地址滯后當(dāng)前讀地址,所以可能滿標(biāo)志會提前產(chǎn)生。
進(jìn)行空標(biāo)志判斷的時候需要將寫地址同步到讀地址,因為讀慢寫快,所以當(dāng)讀時鐘同步寫地址的時候,必然會漏掉一部分寫地址(寫時鐘快,寫地址隨寫時鐘翻轉(zhuǎn),直到滿標(biāo)志出現(xiàn)為止),那到底讀時鐘會同步到哪個寫地址?
不必在意是哪一個,我們關(guān)注的是漏掉的地址會不會對FIFO的空標(biāo)志產(chǎn)生影響。比如寫地址從0寫到10,期間讀時鐘域只同步到了2,5,7這三個寫地址,漏掉了其他地址。同步到7地址時,真實的寫地址可能已經(jīng)寫到10地址,相當(dāng)于“在讀時鐘域還沒來得及覺察的情況下,寫時鐘域可能偷偷寫了數(shù)據(jù)到FIFO去”,這樣在比較讀寫地址的時候不會產(chǎn)生FIFO“空”讀操作。漏掉的地址也沒有對FIFO的邏輯操作產(chǎn)生影響。
我們可以對異步FIFO的地址采用binary編碼,這樣并不影響異步FIFO的功能,前提是讀寫地址同步時能夠保持正確。這種情況在功能仿真時完全正確,問題只有到時序仿真時才會遇到。毛刺可以說是異步電路的殺手,一個毛刺被觸發(fā)器采樣后會被放大,然后傳播,導(dǎo)致電路功能出錯。
binary編碼的地址總線在跳變時極易產(chǎn)生毛刺,因為binary編碼是多位跳變,在實現(xiàn)電路時不可能做到所有的地址總線等長,address bus skew必然存在,而且寫地址和讀地址分屬不同時鐘域,讀寫時鐘完全異步,這樣地址總線在進(jìn)行同步過程中出錯不可避免,比如寫地址在從0111到1000轉(zhuǎn)換時4條地址線同時跳變,這樣讀時鐘在進(jìn)行寫地址同步后得到的寫地址可能是0000-1111的某個值,這個完全不能確定,所以用這個同步后的寫地址進(jìn)行FIFO空判斷的時候難免出錯。
這個時候gray碼體現(xiàn)了價值,一次只有一位數(shù)據(jù)發(fā)生變化,這樣在進(jìn)行地址同步的時候,只有兩種情況:1.地址同步正確;2.地址同步出錯,但是只有1位出錯;
第一種正確的情況不需要分析,我們關(guān)注第二種,假設(shè)寫地址從000-》001,讀時鐘域同步出錯,寫地址為000-》000,也就是地址沒有跳變,但是用這個錯誤的寫地址去做空判斷不會出錯,最多是讓空標(biāo)志在FIFO不是真正空的時候產(chǎn)生,而不會出現(xiàn)空讀的情形。
所以gray碼保證的是同步后的讀寫地址即使在出錯的情形下依然能夠保證FIFO功能的正確性,當(dāng)然同步后的讀寫地址出錯總是存在的(因為時鐘異步,采樣點不確定)。
這里需要注意gray碼只是在相鄰兩次跳變之間才會出現(xiàn)只有1位數(shù)據(jù)不一致的情形,超過兩個周期則不一定,所有地址總線bus skew一定不能超過一個周期,否則可能出現(xiàn)gray碼多位數(shù)據(jù)跳變的情況,這個時候gray碼就失去了作用,因為這時候同步后的地址已經(jīng)不能保證只有1位跳變了。
另外需要將地址總線打兩拍,這是為了避免亞穩(wěn)態(tài)傳播,理論上將打兩拍不能消除亞穩(wěn)態(tài)現(xiàn)象,因為時鐘異步,亞穩(wěn)態(tài)不可避免,但是可以極大降低亞穩(wěn)態(tài)傳播的概率,低頻情況下甚至STA不需要分析這里的異步時序,因為寄存器都可以在一拍內(nèi)將亞穩(wěn)態(tài)消除,恢復(fù)到正常0/1態(tài)。而在高頻情況下則不一定,尤其在28nm工藝以下,需要檢查兩級觸發(fā)器的延遲,保證延遲低,這樣可以提高Tr,提高系統(tǒng)MTBF。
編輯:jq
-
異步FIFO
+關(guān)注
關(guān)注
0文章
20瀏覽量
8391
原文標(biāo)題:異步FIFO為什么用格雷碼
文章出處:【微信號:gh_9d70b445f494,微信公眾號:FPGA設(shè)計論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論