基于VHDL的異步FIFO設(shè)計(jì)
摘要:FIFO經(jīng)常應(yīng)用于從一個(gè)時(shí)鐘域傳輸數(shù)據(jù)到另一個(gè)異步時(shí)鐘域。為解決異步FIFO設(shè)計(jì)過程中空滿標(biāo)志判斷難以及FPGA亞穩(wěn)態(tài)的問題,提出一種新穎的設(shè)計(jì)方案,即利用格雷碼計(jì)數(shù)器(每次時(shí)鐘到來僅有1位發(fā)生改變)表示讀/寫指針,設(shè)計(jì)二級(jí)同步鏈為跨越不同時(shí)鐘域的讀/寫指針,以提供充足的穩(wěn)定時(shí)間,并通過對(duì)比格雷碼指針產(chǎn)生空滿標(biāo)志位。該設(shè)計(jì)采用VHDL語(yǔ)言進(jìn)行設(shè)計(jì),利用ALTERA公司的FPGA得以實(shí)現(xiàn)。經(jīng)驗(yàn)證進(jìn)一步表明,模塊化的設(shè)計(jì)不僅避免了亞穩(wěn)態(tài)的產(chǎn)生,增大平均無故障工作時(shí)間(MBTF),也使工作效率大為提升。
關(guān)鍵詞:FIFO;異步;亞穩(wěn)態(tài);格雷碼
先進(jìn)先出緩存電路讀/寫(FIFO)在大規(guī)模邏輯設(shè)計(jì)中被廣泛應(yīng)用,幾乎每個(gè)芯片都要涉及,同樣在空空導(dǎo)彈的數(shù)據(jù)傳輸體系中也得以大量應(yīng)用。FIFO類型可以分為兩種,第一種為同步FIFO,即讀/寫時(shí)鐘是同步的,這里的同步不僅僅是指讀/寫時(shí)鐘為同一個(gè)時(shí)鐘,即屬于同一個(gè)時(shí)終域。當(dāng)讀/寫時(shí)鐘頻率為倍數(shù)關(guān)系,即相位關(guān)系確定時(shí),也歸屬同步FIFO的范疇。另一種為異步FIFO,讀/寫時(shí)鐘頻率不成倍數(shù)關(guān)系或相位關(guān)系不確定,即跨時(shí)鐘域。異步FIFO可以在不同的時(shí)鐘域之間快速方便地傳輸實(shí)時(shí)數(shù)據(jù),因此在遙測(cè)數(shù)據(jù)傳輸中,異步FIFO實(shí)用性更好。然而如何正確地產(chǎn)生空滿標(biāo)志以及如果解決亞穩(wěn)態(tài)問題是異步FIFO設(shè)計(jì)的難點(diǎn)。
1 FIFO結(jié)構(gòu)
首先,典型的FIFO結(jié)構(gòu)框圖如圖1所示。FIFO的數(shù)據(jù)存儲(chǔ)在具有獨(dú)立寫端口和讀端口的RAM中。讀指針r0_pointer指向下一個(gè)將要讀取的位置,寫指針wrpointer指向下一個(gè)將要寫入的位置,每1次寫操作后寫指針加1,讀操作使讀指針加1。狀態(tài)產(chǎn)生模塊中,full和empty表示FIFO讀/寫的臨界狀態(tài)。FIFO設(shè)計(jì)的關(guān)鍵是產(chǎn)生讀/寫地址和空滿標(biāo)志??諠M標(biāo)志是基于引起指針相等的操作。如果是復(fù)位或者讀操作引起
讀/寫指針相等,F(xiàn)IFO認(rèn)為是空;如果原因是寫操作,那么FIFO認(rèn)為是滿。異步FIFO設(shè)計(jì)的難點(diǎn)是如何同步跨時(shí)鐘域的指針以及空滿標(biāo)志的產(chǎn)生。
2 亞穩(wěn)態(tài)
亞穩(wěn)態(tài)是當(dāng)信號(hào)在無關(guān)的電路中或異步時(shí)鐘域之間傳輸時(shí)導(dǎo)致FPGA系統(tǒng)失效的一種現(xiàn)象。包括FPGA在內(nèi)的所有數(shù)字器件的寄存器都定義了信號(hào)時(shí)序要求,以保證每一個(gè)寄存器都能夠從輸入端獲取數(shù)據(jù)和在輸出端產(chǎn)生數(shù)據(jù)。為了確保可靠的操作,輸入信號(hào)必須在時(shí)鐘沿之前穩(wěn)定一段時(shí)間(寄存器建立時(shí)間tsu),并且在時(shí)鐘沿之后穩(wěn)定一段時(shí)間(寄存器保持時(shí)間th),然后寄存器輸出經(jīng)過一個(gè)特定的時(shí)鐘到輸出延時(shí)后有效。滿足此要求寄存器才可以正確的在輸入端獲取數(shù)據(jù)在輸出端產(chǎn)生數(shù)據(jù),否則輸出有可能是亞穩(wěn)態(tài)。在亞穩(wěn)態(tài)時(shí),寄存器的輸出電壓在高低電平之間搖擺,即輸出將有可能是邏輯0(0 V)或者邏輯1(+5 V),或者是介于0~5 V中間的某個(gè)值。亞穩(wěn)態(tài)產(chǎn)生機(jī)制圖如圖2所示,當(dāng)建立時(shí)間或者保持時(shí)間不滿足時(shí)序要求時(shí)便會(huì)產(chǎn)生亞穩(wěn)態(tài)。
在同步系統(tǒng)中,輸入信號(hào)必須總是滿足寄存器時(shí)序要求,所以亞穩(wěn)態(tài)不會(huì)發(fā)生。亞穩(wěn)態(tài)問題通常發(fā)生在當(dāng)一個(gè)信號(hào)在無關(guān)的線路中或異步時(shí)鐘域中傳輸。一個(gè)寄存器進(jìn)入亞穩(wěn)態(tài)和從亞穩(wěn)態(tài)進(jìn)入穩(wěn)態(tài)的時(shí)間依賴于制造商的制造工藝和使用環(huán)境。大部分情況下,寄存器會(huì)很快的進(jìn)入一個(gè)定義的穩(wěn)態(tài)中。在異步FIFO設(shè)計(jì)中就要避免亞穩(wěn)態(tài)的產(chǎn)生。
評(píng)論