摘 要: 在實(shí)際工作中常常遇到由異步時鐘產(chǎn)生" title="時鐘產(chǎn)生">時鐘產(chǎn)生亞穩(wěn)態(tài)的問題。針對這個問題闡述了幾種解決方案,其中異步FIFO應(yīng)用更廣泛。在FIFO中關(guān)鍵的問題是標(biāo)志位的產(chǎn)生, 提出了一種新的異步比較產(chǎn)生空滿標(biāo)志位,然后再利用鎖存器" title="鎖存器">鎖存器實(shí)現(xiàn)標(biāo)志位與時鐘的同步,同時在Cadence的EDA平臺上實(shí)現(xiàn)了邏輯仿真和時序仿真。
關(guān)鍵詞: 異步 FIFO 亞穩(wěn)態(tài) 格雷碼" title="格雷碼">格雷碼 繩解法
隨著信息技術(shù)的飛速發(fā)展,特別是在二十世紀(jì)90年代以后,美國在南斯拉夫戰(zhàn)爭和兩次海灣戰(zhàn)爭中成功地運(yùn)用了電子戰(zhàn)、信息戰(zhàn),以及近年來我國在航天航空事業(yè)方面的高速發(fā)展,使我國開始重視和發(fā)展信息技術(shù)。與此同時對高速、大容量、高可靠性的靜態(tài)存儲器的需求越來越多,對軍用的數(shù)據(jù)存儲器的設(shè)計(jì)也提出了更高的要求。目前軍用計(jì)算機(jī)傳輸數(shù)據(jù)的最快方式——DMA方式的傳輸速率最大也只是在5Mbps以下。對于幾十Mbps的超高速采樣速率,往往是上一次數(shù)據(jù)還沒有被計(jì)算機(jī)讀取,下一次的采集過程就結(jié)束了。因此采用傳統(tǒng)的計(jì)算機(jī)傳輸處理數(shù)據(jù)的方法,顯然會造成數(shù)據(jù)的丟失與混亂。所以對于快速采集,慢速處理的系統(tǒng)必然要用到緩存。本文就是針對數(shù)據(jù)存儲器FIFO解決亞穩(wěn)態(tài)問題的設(shè)計(jì),經(jīng)過對不同方法的比較, 設(shè)計(jì)了一種新型的邏輯標(biāo)志的同步電路。
1 亞穩(wěn)態(tài)問題的解決方案
1.1問題的產(chǎn)生
在數(shù)字集成電路中,觸發(fā)器要滿足setup/hold的時間要求。當(dāng)一個信號被寄存器鎖存時,如果信號和時鐘之間不滿足這個要求,Q端的值是不確定的,并且在未知的時刻會固定到高電平或低電平,這個過程稱為亞穩(wěn)態(tài),如圖1所示。圖中clka和clkb即為異步時鐘,亞穩(wěn)態(tài)必定會發(fā)生在異步時鐘電路中。在圖1的異步電路中,電路外部的輸入和內(nèi)部的時鐘之間是毫無時間關(guān)系的,因此setup/hold沖突是必然的;同在電路內(nèi)部的兩個沒有關(guān)系的時鐘域之間的信號傳遞,也必然會導(dǎo)致setup/hold沖突。亞穩(wěn)態(tài)雖然是不可避免的,但采用下面幾種設(shè)計(jì)方法可以將其發(fā)生的概率降低到一個可以接受的程度。
1.2 常見的解決方法
1.2.1格雷碼編碼法
寫地址/讀地址采用格雷碼。由實(shí)踐可知,同步多個異步輸入信號出現(xiàn)亞穩(wěn)態(tài)的概率遠(yuǎn)遠(yuǎn)大于同步一個異步信號的概率。對于多個觸發(fā)器的輸出所組成的寫地址/讀地址可以采用格雷碼。由于格雷碼每次只變化一位,因此采用格雷碼可以很好地節(jié)約功耗,有效地減少亞穩(wěn)態(tài)的產(chǎn)生,特別是在地址位比較多的情況下可以更好地解決亞穩(wěn)態(tài)的問題。
格雷碼是對二進(jìn)制地址輸出進(jìn)行轉(zhuǎn)換,下面是四位代碼之間轉(zhuǎn)換的邏輯表達(dá)式:
B碼轉(zhuǎn)G碼的邏輯表達(dá)式: G碼轉(zhuǎn)B碼的邏輯表達(dá)式:
B4=G4 G4=B4
B3=B4⊕G3 G3=B4⊕B3
B2=B3⊕G2 G2=B3⊕B2
B1=B2⊕G1 G1=B2⊕B1
但采用格雷碼編碼法需要在地址位的每一位增加一級的異或門,這樣在計(jì)數(shù)比較前增大了延時和版圖面積。同時在地址分配到其他邏輯單元前要把格雷碼轉(zhuǎn)換成二進(jìn)制代碼,這同樣也會增大版圖設(shè)計(jì)面積和延時。
1.2.2 雙觸發(fā)器法
采用觸發(fā)器來同步異步輸入信號,如圖2中的兩級觸發(fā)器可以將出現(xiàn)亞穩(wěn)態(tài)的概率降低到一個很小的程度。由于增加了一級觸發(fā)器,這樣在最后的輸出就延遲了一個時鐘,使前一個時鐘產(chǎn)生的數(shù)據(jù)被b_clk連續(xù)鎖存兩次。雖然第一次鎖存產(chǎn)生亞穩(wěn)態(tài),但經(jīng)過一段時間的延時可以有效地解決這個問題。這種方法同時帶來了對輸入信號的一級延時,需要在設(shè)計(jì)時鐘的時候加以注意。
雖然兩級觸發(fā)器能有效地抑制亞穩(wěn)態(tài),但增加了一級的D觸發(fā)器,這和格雷碼編碼法一樣會增加版圖面積。這種方法在clka與clkb的采樣周期相差不大的情況下比較適合。
1.2.3 結(jié)繩法
如圖3所示,如果aclk的頻率比bclk頻率高,將可能會出現(xiàn)因?yàn)閍dat變化太快而使bclk無法采到的問題,即在信號從快時鐘域向慢時鐘域過渡時,如果信號變化太快,慢時鐘將可能無法對該信號進(jìn)行正確采樣,即采樣失敗。所以在使用雙鎖存器法時,應(yīng)該使原始信號保持足夠長的時間,以便另一個時鐘域的鎖存器對其進(jìn)行正確的采樣。
對上述問題,一般采用“結(jié)繩法" title="結(jié)繩法">結(jié)繩法”的設(shè)計(jì)方法,將慢時鐘周期信號通過分頻的方式將其周期增長,經(jīng)過雙鎖存采樣以后再使其恢復(fù)原來的時鐘周期。即用“結(jié)繩”將信號延長,用“同步”實(shí)現(xiàn)雙latch采樣,用“解繩”還原為原來的時鐘,保證另一個時鐘域也可以正確采樣,而接收方用相反的流程送回響應(yīng)信號。
“結(jié)繩法”可以解決快時鐘域向慢時鐘域過渡的問題,適用的范圍也很廣。但是“結(jié)繩法”實(shí)現(xiàn)較為復(fù)雜,特別是其頻率不高,所以在對設(shè)計(jì)性能要求較高的場合應(yīng)該慎用。
2 基于異步比較FIFO邏輯標(biāo)志的產(chǎn)生
2.1 設(shè)計(jì)思想
異步FIFO可以很好地解決時鐘速度相差懸殊的時鐘間的數(shù)據(jù)傳輸問題。異步FIFO存儲器在結(jié)構(gòu)上可劃分為存儲陣列和外圍電路兩大部分,它由幾個主要模塊組成:存儲單元RAM、寫控制邏輯、讀控制邏輯、標(biāo)志邏輯、擴(kuò)展邏輯、復(fù)位邏輯以及并/串轉(zhuǎn)換邏輯。這里主要考慮產(chǎn)生空、滿標(biāo)志的同步。
標(biāo)志邏輯是用以產(chǎn)生反映器件內(nèi)部RAM陣列占用情況的狀態(tài)標(biāo)志信號,使系統(tǒng)可以及時采取措施以免數(shù)據(jù)溢出。在FIFO中標(biāo)志位的產(chǎn)生是關(guān)鍵的一步,如果能夠及時判斷出每一個時鐘下寫入和讀出的位置,就可以防止產(chǎn)生誤操作,做到寫滿不再寫、讀空則停止讀。在異步FIFO中的標(biāo)志位主要包括空標(biāo)志、滿標(biāo)志、半滿標(biāo)志和將近滿、將近空標(biāo)志。異步FIFO邏輯框圖如圖4所示。
2.2 標(biāo)志位的產(chǎn)生
2.2.1 空、滿標(biāo)志位的產(chǎn)生標(biāo)志邏輯
滿標(biāo)志是為了防止FIFO在滿狀態(tài)時被寫,空標(biāo)志是為了防止FIFO在空狀態(tài)時被讀。對于異步FIFO而言,數(shù)據(jù)是由某一個時鐘域的控制信號寫入FIFO,而由另一個時鐘域的控制信號將數(shù)據(jù)讀出FIFO。也就是說,讀寫指針的變化動作是由不同的時鐘產(chǎn)生的。因此,對FIFO空或滿的判斷是跨時鐘域的。如何根據(jù)異步的指針信號對FIFO的滿狀態(tài)或空狀態(tài)進(jìn)行正確的判斷是研究的重點(diǎn)之一。
當(dāng)讀指針和寫指針相等也就是指向同一個內(nèi)存位置時,F(xiàn)IFO可能處于滿或空兩種狀態(tài)??梢酝ㄟ^不同的方法判斷或區(qū)分FIFO究竟是處于滿狀態(tài)還是空狀態(tài),也就是說究竟是寫指針從后趕上了讀指針,還是讀指針從后趕上了寫指針。本文采用設(shè)置一個額外的狀態(tài)位的方法,即指針由它的地址位以及狀態(tài)位組成。地址位隨著相應(yīng)的操作遞增,指針由內(nèi)存的最后位置返回到初始位置時,狀態(tài)位取反。因此,當(dāng)讀寫指針的地址位和狀態(tài)位全部吻合的時候,讀寫指針經(jīng)歷了相同次數(shù)的循環(huán)移動,也就是說,F(xiàn)IFO處于空狀態(tài);如果讀寫指針的地址位相同而狀態(tài)位相反,寫指針比讀指針多循環(huán)一次,標(biāo)志FIFO處于滿狀態(tài)。
2.2.2 異步比較FIFO邏輯標(biāo)志與時鐘的同步
一般的異步FIFO是先將讀地址與寫地址同步以后(以上提到的方法)再進(jìn)行比較,這種方法一般效率不高,不能很好地節(jié)省制版面積。本文采用一種異步比較法,能夠有效地解決這一問題。目前IDT公司的系列產(chǎn)品一般都采用這種異步比較法。
在異步FIFO中,由FIFO讀時鐘產(chǎn)生讀地址rptr,寫時鐘產(chǎn)生寫地址wptr。當(dāng)rptr與wptr進(jìn)行異步比較時,由于rptr的變化(assert)產(chǎn)生aempty_n(FIFO空標(biāo)志),即aempty_n的下降沿是與rptr同屬于一個時鐘域的;同理,由于wptr的變化(assert)使aempty_n無效(de-assert),即aempty_n的上升沿" title="上升沿">上升沿是與wptr同屬于一個時鐘域的。異步比較的時鐘域如圖5所示。
?
因此可以利用上述的理論基礎(chǔ)來實(shí)現(xiàn)從aempty_n到empty的過渡。其中, empty是屬于rclk時鐘域的。由于aempty_n的下降沿是屬于rclk時鐘域的,所以可以用它來作為empty的復(fù)位信號;而aempty_n的上升沿是屬于wclk時鐘域的,因此可以用雙鎖存器法將其過渡到rclk時鐘域,最后得到的empty信號就屬于rclk時鐘域。同理可以得到full信號??刂菩盘柾饺鐖D6所示。
如圖6所示,異步比較法的關(guān)鍵是用異步比較的結(jié)果——信號的下降沿作為最終比較結(jié)果的復(fù)位信號,而其上升沿則用傳統(tǒng)的雙鎖存器法進(jìn)行同步,最終得到的信號的上升沿與下降沿都是屬于同一個時鐘域。同時增加的兩級鎖存器也增加了一個時鐘周期的延時輸出,這樣在滿有效狀態(tài)下,同時來自讀寫時鐘的讀寫指令存在潛在的亞穩(wěn)態(tài)問題就可以避免。在與傳統(tǒng)的先將地址信號同步然后進(jìn)行同步比較的方法相比,異步比較法簡單、高效、節(jié)省版圖面積,而且實(shí)現(xiàn)起來更簡單。
2.2.3 半滿、將近滿、將近空的產(chǎn)生
半滿、將近滿和將近空是對FIFO芯片容量的一種提前判斷。半滿標(biāo)志是一個雙用輸出端口,在單片模式下,當(dāng)擴(kuò)展輸入端接地時,這個端口就作為半滿標(biāo)志。在字?jǐn)U展模式下,該端口為擴(kuò)展輸出端。
以2K字容量的FIFO為例來說明異步FIFO的半滿與將近滿。如圖7所示:半滿是指當(dāng)寫指針的位置與讀指針的位置相比較,如果w_point和r_point距離超過總?cè)萘康囊话?,那么輸出半滿為有效輸出。當(dāng)2K字的FIFO半滿有效時,標(biāo)志w_point 地址減去 r_point地址的范圍在1K~2K字之間。在具體電路實(shí)現(xiàn)上, 2K字的FIFO計(jì)數(shù)器的輸出共有12個地址線,其中第12根是為了判斷滿和空標(biāo)志用的。所以判斷半滿主要是對第11根地址的讀和寫計(jì)數(shù)輸出相同情況和不同情況下進(jìn)行判斷。
將近空和將近滿一般是讀和寫總?cè)萘肯嗖钤?~1/8和7/8~1之間,也有的設(shè)計(jì)是相差在幾個比特范圍之內(nèi)。這個電路一般用的是比較器判斷。在2K字的FIFO中一般把后高4位放在一起,先判斷正在讀的高4位和寫的高4位的大小關(guān)系,再對應(yīng)判斷其他低位的大小關(guān)系,看是否符合設(shè)計(jì)要求。當(dāng)高4位寫地址減去讀地址小于1、其低位讀地址大于寫地址時,產(chǎn)生將近空。同樣,將近滿也是先判斷:若高4位寫地址減去讀地址大于15、低位讀地址大于寫地址時,將近滿輸出有效。圖7為設(shè)計(jì)2K字的 FIFO將近空和半滿標(biāo)志位在Candence軟件下的仿真結(jié)果圖。
對于標(biāo)志信號都是采用異步比較輸出下降沿作為最終比較結(jié)果的復(fù)位信號,而其上升沿則采用傳統(tǒng)的雙鎖存器法進(jìn)行同步的方法。此外,在FIFO的設(shè)計(jì)中還要考慮寫入和讀出的位寬是否相等,在不相等的情況下要設(shè)計(jì)輸入輸出的自動匹配,使輸出位寬等于輸入位寬。同時為FIFO的深度擴(kuò)展和寬度擴(kuò)展設(shè)計(jì)擴(kuò)展邏輯,以適應(yīng)多位寬和大容量的要求。
一般的異步FIFO通常所采用的是先將讀、寫地址同步后比較的方法,而本文提出的異步比較以后利用觸發(fā)器同步的方法相對前者可以減少延時,從而使系統(tǒng)有更充裕的時間去進(jìn)行讀、寫操作,有利于提高時鐘頻率,減少邏輯器件個數(shù),從根本上節(jié)約了版圖面積。因此在以面積決定成本的今天,對FIFO標(biāo)志位的產(chǎn)生采用異步比較法具有極其重要的現(xiàn)實(shí)意義。
參考文獻(xiàn)
1 Goor V D, Schanstra A J, Zorian I Y. Fault models and tests for ring address type FIFOs. proc. 12th IEEE VLSI Test Symposium, 1994:300~305
2 Feldman A R, Duzer T V. Hybrid josephson-CMOS FIFO.IEEE Transactions on Aplied Superconductivity,1995:2648~2651
3 Shibata N, Watanabe M. A currentsensed hight speed and low-power first in first out memory using a wordline/bitline-swapped dual-port sram cell.IEEE Journal of Solid State Circuits,2002;37(6):735~750
4 Uyemura J P,Introduction to VLSI circuits and systems.Biejing:Publishing House of Electronics Industy, 2004:360~372
5 Hodges D A,Jackson H G, Saleh R A. Anal-ysis and design of digital integrated circuits in deep submicron technology.Biejing:Publishing House of Electronics Industy,2005:280~286
6 Martin K. Digital Integrated Circuit Design. biejing:Publishing House of Electronics Industy,2002:437~447
7 Sharma A K. Advanced semiconductor memories: architec-tures, designs,and applications. Biejing: Publishing House of Electronics Industy, 2005:13~83
8 Rabaey J M. Anantha chandrakason borivoje nikolic. digital integrated circuits: a design perspective. Biejing: Publishing House of Electronics Industy,2004:461~467