由于設(shè)計(jì)的時(shí)候讀寫(xiě)指針用了至少兩級(jí)寄存器同步,同步會(huì)消耗至少兩個(gè)時(shí)鐘周期,勢(shì)必會(huì)使得判斷空或滿有所延遲,這會(huì)不會(huì)導(dǎo)致設(shè)計(jì)出錯(cuò)呢?
異步FIFO通過(guò)比較讀寫(xiě)指針進(jìn)行滿空判斷,但是讀寫(xiě)指針屬于不同的時(shí)鐘域,所以在比較之前需要先將讀寫(xiě)指針進(jìn)行同步處理。
將寫(xiě)指針同步到讀時(shí)鐘域再和讀指針比較進(jìn)行FIFO空狀態(tài)判斷,因?yàn)樵谕綄?xiě)指針時(shí)需要時(shí)間,而在這個(gè)同步的時(shí)間內(nèi)有可能還會(huì)寫(xiě)入新的數(shù)據(jù),因此同步后的寫(xiě)指針一定是小于或者等于當(dāng)前實(shí)際的寫(xiě)指針,所以此時(shí)判斷FIFO為空不一定是真空,這樣更加保守,一共不會(huì)出現(xiàn)空讀的情況,雖然會(huì)影響FIFO的性能,但是并不會(huì)出錯(cuò),同理將讀指針同步到寫(xiě)時(shí)鐘域再和寫(xiě)指針比較進(jìn)行FIFO滿狀態(tài)判斷,同步后的讀指針一定是小于或者等于當(dāng)前的讀指針,所以此時(shí)判斷FIFO為滿不一定是真滿,這樣更保守,這樣可以保證FIFO的特性:FIFO空之后不能繼續(xù)讀取,F(xiàn)IFO滿之后不能繼續(xù)寫(xiě)入。總結(jié)來(lái)說(shuō)異步邏輯轉(zhuǎn)到同步邏輯不可避免需要額外的時(shí)鐘開(kāi)銷,這會(huì)導(dǎo)致滿空趨于保守,但是保守并不等于錯(cuò)誤,這么寫(xiě)會(huì)稍微有性能損失,但是不會(huì)出錯(cuò)。
大多數(shù)情形下,異步FIFO兩端的時(shí)鐘不是同頻的,或者讀快寫(xiě)慢,或者讀慢寫(xiě)快,慢的時(shí)鐘域同步到快的時(shí)鐘域不會(huì)出現(xiàn)漏掉指針的情況,但是將指針從快的時(shí)鐘域同步到慢的時(shí)鐘域時(shí)可能會(huì)有指針遺漏。以讀慢寫(xiě)快為例,進(jìn)行滿標(biāo)志判斷的時(shí)候需要將讀指針同步到寫(xiě)時(shí)鐘域,因?yàn)樽x慢寫(xiě)快,所以不會(huì)有讀指針遺漏,同步消耗時(shí)鐘周期,所以同步后的讀指針滯后(小于等于)當(dāng)前讀地址,所以可能滿標(biāo)志會(huì)提前產(chǎn)生,滿并非真滿。
進(jìn)行空標(biāo)志判斷的時(shí)候需要將寫(xiě)指針同步到讀指針 ,因?yàn)樽x慢寫(xiě)快,所以當(dāng)讀時(shí)鐘同步寫(xiě)指針的時(shí)候,必然會(huì)漏掉一部分寫(xiě)指針,我們不用關(guān)心那到底會(huì)漏掉哪些寫(xiě)指針,我們?cè)诤醯氖锹┑舻闹羔槙?huì)對(duì)FIFO的空標(biāo)志產(chǎn)生影響嗎?
比如寫(xiě)指針從0寫(xiě)到10,期間讀時(shí)鐘域只同步捕捉到了3、5、8這三個(gè)寫(xiě)指針而漏掉了其他指針。當(dāng)同步到8這個(gè)寫(xiě)指針時(shí),真實(shí)的寫(xiě)指針可能已經(jīng)寫(xiě)到10 ,相當(dāng)于在讀時(shí)鐘域還沒(méi)來(lái)得及覺(jué)察的情況下,寫(xiě)時(shí)鐘域可能偷偷寫(xiě)了數(shù)據(jù)到FIFO去,這樣在判斷是空的時(shí)候會(huì)出現(xiàn)不是真正空的情況,漏掉的指針也沒(méi)有對(duì)FIFO的邏輯操作產(chǎn)生影響。
-
寄存器
+關(guān)注
關(guān)注
31文章
5435瀏覽量
124610 -
fifo
+關(guān)注
關(guān)注
3文章
402瀏覽量
44832 -
指針
+關(guān)注
關(guān)注
1文章
484瀏覽量
71210
發(fā)布評(píng)論請(qǐng)先 登錄
求助 FPGA 異步FIFO IP核
異步FIFO指針同步產(chǎn)生的問(wèn)題
關(guān)于異步fifo里面讀寫(xiě)指針同步器的問(wèn)題,求教
【鋯石A4 FPGA試用體驗(yàn)】fifo實(shí)驗(yàn)(2)-異步fifo
關(guān)于異步fifo的安全問(wèn)題:
高速異步FIFO的設(shè)計(jì)與實(shí)現(xiàn)
如何解決異步FIFO跨時(shí)鐘域亞穩(wěn)態(tài)問(wèn)題?
異步FIFO用格雷碼的原因有哪些
異步FIFO之Verilog代碼實(shí)現(xiàn)案例
異步fifo詳解
FIFO設(shè)計(jì)—異步FIFO

FIFO相關(guān)信號(hào)及空滿狀態(tài)的原理說(shuō)明

同步FIFO和異步FIFO的區(qū)別 同步FIFO和異步FIFO各在什么情況下應(yīng)用
請(qǐng)問(wèn)異步FIFO的溢出操作時(shí)怎么樣判斷的?
FIFO漫談之異步FIFO空滿信號(hào)的產(chǎn)生位置

評(píng)論