李紅科,王慶春,余順園
(安康學(xué)院電子與信息工程學(xué)院,陜西安康 725000)
隨著集成電路的飛速發(fā)展,超大規(guī)模集成電路芯片中一個(gè)完整系統(tǒng)包含多個(gè)時(shí)鐘,不同時(shí)鐘域控制下,數(shù)據(jù)在傳輸或存儲(chǔ)之間會(huì)出現(xiàn)亞穩(wěn)態(tài)現(xiàn)象。異步FIFO(Frist Input Frist Output)是解決跨時(shí)鐘域數(shù)據(jù)傳輸和存儲(chǔ)所引發(fā)亞穩(wěn)態(tài)的有效方法之一。異步FIFO 在雷達(dá)、信號(hào)處理及多媒體技術(shù)等領(lǐng)域有著廣泛的應(yīng)用[1-3]。
FIFO是一種先進(jìn)先出的雙端口數(shù)據(jù)緩存器,和普通緩沖器區(qū)別在于FIFO沒(méi)有外部地址線,優(yōu)點(diǎn)是減少輸入信號(hào)控制線,缺點(diǎn)是數(shù)據(jù)只能順序?qū)懭搿㈨樞蜃x出[4-5]。圖1給出了異步FIFO內(nèi)部結(jié)構(gòu)圖,包括雙端口RAM存儲(chǔ)器、寫(xiě)控制器、讀控制器、寫(xiě)地址指針同步到讀時(shí)鐘域(W2R 同步器)、讀地址指針同步到寫(xiě)時(shí)鐘域(R2W同步器)、讀狀態(tài)標(biāo)志位和寫(xiě)狀態(tài)標(biāo)志位等部分[6-8]。
圖1 異步FIFO內(nèi)部結(jié)構(gòu)圖
寫(xiě)控制器模塊:在寫(xiě)時(shí)鐘和寫(xiě)使能信號(hào)作用下,產(chǎn)生寫(xiě)地址指針。
讀控制器模塊:在讀時(shí)鐘和讀使能信號(hào)作用下,產(chǎn)生讀地址指針。
R2W 同步器模塊:讀計(jì)數(shù)器同步到寫(xiě)時(shí)鐘域,同步后計(jì)數(shù)器和寫(xiě)二進(jìn)制計(jì)數(shù)器比較用于產(chǎn)生滿標(biāo)志位(full)信號(hào)條件。
W2R 同步器模塊:寫(xiě)計(jì)數(shù)器同步到讀時(shí)鐘域,同步后計(jì)數(shù)器和讀二進(jìn)制計(jì)數(shù)器比較用于產(chǎn)生空標(biāo)志位(empty)信號(hào)條件。
寫(xiě)狀態(tài)標(biāo)志位模塊:寫(xiě)時(shí)鐘控制下產(chǎn)生滿(full)信號(hào)。
讀狀態(tài)標(biāo)志位模塊:讀時(shí)鐘控制下產(chǎn)生空(empty)信號(hào)。
異步FIFO 外部引腳如表1 所示。
表1 異步FIFO外部引腳
異步FIFO 設(shè)計(jì)過(guò)程中存在兩個(gè)關(guān)鍵技術(shù)問(wèn)題:1)亞穩(wěn)態(tài);2)空/滿狀態(tài)標(biāo)志位判斷及產(chǎn)生。在處理空/滿標(biāo)志位問(wèn)題上,目前最常用的方案是增加一位讀寫(xiě)指針附加位,當(dāng)讀寫(xiě)指針最高位相同其余位也相同時(shí),認(rèn)為讀空,當(dāng)讀寫(xiě)指針最高位不相同其余位相同時(shí),認(rèn)為寫(xiě)滿。
文中以寬度為8 位、深度為16 位的異步FIF0 為例,介紹亞穩(wěn)態(tài)產(chǎn)生的原因以及降低亞穩(wěn)態(tài)出現(xiàn)概率的方法,分析利用格雷碼和同步轉(zhuǎn)換來(lái)產(chǎn)生空/滿標(biāo)志位的方法。
在所有數(shù)字器件中,寄存器都定義了一個(gè)信號(hào)時(shí)序要求,滿足時(shí)序要求的寄存器才能正確地在輸入端獲取數(shù)據(jù)、在輸出端產(chǎn)生數(shù)據(jù)[9]。為確保操作可靠,輸入數(shù)據(jù)在時(shí)鐘沿之前必須穩(wěn)定一段時(shí)間(建立時(shí)間),并且在時(shí)鐘沿之后保持一段時(shí)間(保持時(shí)間),觸發(fā)器經(jīng)過(guò)一個(gè)特定時(shí)鐘至輸出延時(shí)后有效。如果一個(gè)數(shù)據(jù)信號(hào)在變化之前不滿足觸發(fā)器建立和保持時(shí)間要求,觸發(fā)器輸出可能會(huì)進(jìn)入亞穩(wěn)態(tài)。亞穩(wěn)態(tài)觸發(fā)器輸出值會(huì)在高低電平之間徘徊不定,如圖2 所示。
圖2 亞穩(wěn)態(tài)的產(chǎn)生示意圖
雖然亞穩(wěn)態(tài)在異步電路中無(wú)法避免,但是兩級(jí)同步器和格雷碼計(jì)數(shù)器可以降低亞穩(wěn)態(tài)概率到可以接受的程度。
1)兩級(jí)同步器
圖3 中,clk1 和clk2 是異步時(shí)鐘,F(xiàn)F1和FF2組成兩級(jí)同步器[10-11],對(duì)不同時(shí)鐘域的輸入數(shù)據(jù)鎖存兩拍。一般情況下,兩級(jí)鎖存同步器是一級(jí)同步器出現(xiàn)亞穩(wěn)態(tài)概率的平方,在大部分同步設(shè)計(jì)中,兩級(jí)同步器可以大大降低亞穩(wěn)態(tài)出現(xiàn)概率[12]。
圖3 異步電路同步化處理
圖4 中,當(dāng)clk1 和clk2 上升沿很近時(shí),data0 在變化時(shí),此時(shí)clk2 上升沿采集到一個(gè)正在變化的數(shù)值,data1 是個(gè)不確定值,F(xiàn)F1觸發(fā)器輸出處于亞穩(wěn)態(tài),經(jīng)過(guò)1 個(gè)時(shí)鐘延時(shí),data1 值趨于穩(wěn)定,F(xiàn)F2在clk2 上升沿對(duì)data1 穩(wěn)定值采樣,輸出data2 為確定值。雖然data1 在被clk2 上升沿采樣時(shí)也有處于亞穩(wěn)態(tài)的可能,但是這種概率很小,經(jīng)過(guò)兩級(jí)同步器能大大降低亞穩(wěn)態(tài)概率[13-15]。兩級(jí)同步器設(shè)計(jì)程序如下:
圖4 兩級(jí)同步器消除亞穩(wěn)態(tài)
2)格雷碼計(jì)數(shù)器
格雷碼是一種誤差最小化的可靠性編碼,可以極大地減少由一個(gè)狀態(tài)變化到下一個(gè)狀態(tài)時(shí)電路產(chǎn)生的誤差[11]。這種編碼方式是兩個(gè)相鄰碼之間只有一位變化,缺點(diǎn)是格雷碼是無(wú)權(quán)碼,不能直接用于計(jì)算、比較,需要轉(zhuǎn)換為二進(jìn)制代碼計(jì)算。
亞穩(wěn)態(tài)出現(xiàn)的原因是數(shù)據(jù)變化時(shí)建立和保持時(shí)間不夠,數(shù)據(jù)地址經(jīng)過(guò)二級(jí)同步器后,地址指針采用格雷碼編碼,地址指針一次只能變化一位,通過(guò)這種可以有效減少亞穩(wěn)態(tài)出現(xiàn)概率。
但是格雷碼指針不能直接比較產(chǎn)生空/滿標(biāo)志位,要產(chǎn)生空/滿標(biāo)志位,需要將格雷碼讀指針和寫(xiě)指針轉(zhuǎn)換為相應(yīng)二進(jìn)制讀指針和寫(xiě)指針進(jìn)行比較。
格雷碼轉(zhuǎn)二進(jìn)制碼方法是格雷碼最高位碼等于二進(jìn)制最高位碼Bn-1=Gn-1,二進(jìn)制次高位=二進(jìn)制最高位與格雷碼次高位異或,依次將n位格雷碼轉(zhuǎn)換為二進(jìn)制碼[11]。
為防止FIFO 誤操作,設(shè)置空/滿狀態(tài)標(biāo)志位,當(dāng)空狀態(tài)標(biāo)志位empty=1時(shí),F(xiàn)IFO 不能再讀出數(shù)據(jù)。當(dāng)滿狀態(tài)標(biāo)志位full=1 時(shí)FIFO 不能再寫(xiě)入數(shù)據(jù)。因?yàn)镕IF0位寬為8位,至少需要3位二進(jìn)制數(shù)表示地址位。
讀空條件:寫(xiě)指針(wr_pointer)=讀指針(rd_pointer),如圖5(a)所示。因?yàn)樽x指針和寫(xiě)指針變化是在不同時(shí)鐘下完成,不能直接比較,必須轉(zhuǎn)換到相同時(shí)鐘下進(jìn)行二進(jìn)制比較,將讀指針轉(zhuǎn)換為寫(xiě)時(shí)鐘域,當(dāng)讀指針等于寫(xiě)指針(w2r_bincnt==rd_bincnt)時(shí),empty=1,F(xiàn)IFO 讀空。
寫(xiě)滿條件:對(duì)寫(xiě)滿操作分兩種情況討論:1)一次性寫(xiě)滿,當(dāng)寫(xiě)時(shí)鐘域下寫(xiě)二進(jìn)制指針指向最后一個(gè)存儲(chǔ)單元時(shí),讀時(shí)鐘域下的二進(jìn)制讀指針指向第一存儲(chǔ)單元時(shí),(wr_pointer=15)&&(rd_pointer=0),full=1寫(xiě)滿,如圖5(b)所示;2)經(jīng)過(guò)多次寫(xiě)滿,一次只向FIFO寫(xiě)一部分?jǐn)?shù)據(jù),多次FIFO寫(xiě)滿。例如第一次寫(xiě)入12個(gè)數(shù)據(jù),第一次讀出10 個(gè)數(shù)據(jù),第二次再寫(xiě)入14 個(gè)數(shù)據(jù)時(shí)寫(xiě)滿。當(dāng)寫(xiě)時(shí)鐘域下寫(xiě)指針指向第n個(gè)存儲(chǔ)單元,寫(xiě)指針同步到讀時(shí)鐘域下的二進(jìn)制寫(xiě)指針指向存在單元第n+1 個(gè)存儲(chǔ)單元(wr_pointer=n)&&(rd_pointer=n+1)時(shí),full=1,F(xiàn)IFO寫(xiě)滿,如圖5(c)所示。
圖5 異步FIFO空/滿狀態(tài)產(chǎn)生邏輯圖
整體設(shè)計(jì)包括:FIFO 存儲(chǔ)器設(shè)計(jì)模塊、寫(xiě)計(jì)數(shù)器同步讀時(shí)鐘域模塊、讀計(jì)數(shù)器同步寫(xiě)時(shí)鐘域模塊、空標(biāo)志產(chǎn)生模塊、滿標(biāo)志產(chǎn)生模塊和格雷碼計(jì)數(shù)器模塊[16-19]。
FIFO 雙端口RAM 模塊設(shè)計(jì)代碼如下:
寫(xiě)計(jì)數(shù)器同步讀時(shí)鐘域模塊:用于產(chǎn)生空標(biāo)志信號(hào)條件。其中rc1k、rst_n 和w2r_bincnt 分別是寫(xiě)時(shí)鐘復(fù)位和寫(xiě)計(jì)數(shù)器轉(zhuǎn)換到讀時(shí)鐘二進(jìn)制計(jì)數(shù)器,設(shè)計(jì)代碼如下:
讀計(jì)數(shù)器同步寫(xiě)時(shí)鐘域模塊:用于產(chǎn)生滿標(biāo)志信號(hào)條件。其中wc1k 和rzw-bincnt 分別是寫(xiě)時(shí)鐘和讀計(jì)數(shù)器轉(zhuǎn)換到寫(xiě)時(shí)鐘二進(jìn)制計(jì)數(shù)器,設(shè)計(jì)代碼如下:
空標(biāo)志產(chǎn)生模塊:在讀使能有效的情況下,讀二進(jìn)制計(jì)數(shù)器=寫(xiě)格雷碼計(jì)數(shù)器同步并轉(zhuǎn)換到讀時(shí)鐘域的寫(xiě)二進(jìn)制計(jì)數(shù)器,empty=1,empty 信號(hào)產(chǎn)生具體代碼如下:
滿標(biāo)志產(chǎn)生模塊:讀使能有效情況下,寫(xiě)二進(jìn)制值計(jì)數(shù)器計(jì)數(shù)到最大值且同步到寫(xiě)時(shí)鐘域讀計(jì)數(shù)器計(jì)數(shù)最小值,或經(jīng)同步后讀計(jì)數(shù)=寫(xiě)計(jì)數(shù)器+1 時(shí),full=1,full信號(hào)產(chǎn)生具體代碼如下:
針對(duì)異步FIFO 出現(xiàn)滿狀態(tài)的兩種情況進(jìn)行兩次仿真:1)第一種情況,F(xiàn)IFO 一次寫(xiě)滿,在讀時(shí)鐘和讀使能控制下依次向FIFO 寫(xiě)入十進(jìn)制5~20,16 個(gè)無(wú)符號(hào)數(shù),最后一個(gè)寫(xiě)操作結(jié)束,full=1,F(xiàn)IFO 寫(xiě)滿。在寫(xiě)時(shí)鐘和寫(xiě)使能控制下依次從FIFO 讀出5~20,16個(gè)無(wú)符號(hào)數(shù),最后一個(gè)讀操作結(jié)束,empty=1,F(xiàn)IFO 讀空,如圖6 所示;2)第二種情況,F(xiàn)IFO 多次寫(xiě)滿,在讀時(shí)鐘和讀使能控制下依次向FIFO 寫(xiě)入十進(jìn)制1~16,16個(gè)無(wú)符號(hào)數(shù),最后一個(gè)寫(xiě)操作結(jié)束,full=1,F(xiàn)IFO 寫(xiě)滿。在寫(xiě)時(shí)鐘和寫(xiě)使能控制下依次從FIFO 讀出1~10,10 個(gè)無(wú)符號(hào)數(shù),再次向FIFO 寫(xiě)入0~9,10 個(gè)無(wú)符號(hào)數(shù),full=1,F(xiàn)IFO 寫(xiě)滿,最后把FIFO11~16,0~9,16個(gè)數(shù)據(jù)依次讀出,empty=1,F(xiàn)IFO 讀空,如圖7 所示。
圖6 第一種寫(xiě)滿情況
圖7 第二種寫(xiě)滿情況
該文分析異步FIFO 內(nèi)部結(jié)構(gòu),在此基礎(chǔ)之上深入分析異步電路亞穩(wěn)態(tài)產(chǎn)生的原因,針對(duì)亞穩(wěn)態(tài)原因提出采用同步器和格雷碼計(jì)數(shù)器的方法,可以有效降低亞穩(wěn)態(tài)出現(xiàn)概率。針對(duì)傳統(tǒng)的空/滿標(biāo)志位產(chǎn)生方法,提出一種新的空/滿標(biāo)志位產(chǎn)生方法。使讀寫(xiě)滿邏輯分兩種情況討論,分別對(duì)兩種情況進(jìn)行Modelsim 仿真驗(yàn)證,從仿真圖上看,該設(shè)計(jì)正確,實(shí)現(xiàn)了預(yù)期目標(biāo)。