孫遠(yuǎn)航,李彧,倪曉波,孫增振
(網(wǎng)絡(luò)通信與安全紫金山實(shí)驗(yàn)室,江蘇南京,211100)
隨著芯片的集成度的提高,其接口種類越來越多功能也變得越來越強(qiáng)大。不同功能模塊可以工作在不同的時(shí)鐘域下,這就對(duì)傳統(tǒng)的同步設(shè)計(jì)以及驗(yàn)證方法提出了挑戰(zhàn)。特別是現(xiàn)在工藝制程越來越先進(jìn)、手機(jī)等SoC 芯片時(shí)鐘越來越快越來越復(fù)雜,這類問題愈顯突出。如果這些跨時(shí)鐘的地方處理得不當(dāng),那么對(duì)于整個(gè)芯片來說可能是災(zāi)難性的。而隨著近年來芯片研發(fā)的成本越來越大,其所造成的經(jīng)濟(jì)損失也是可觀的。所以這就使得在芯片設(shè)計(jì)時(shí)必須很謹(jǐn)慎地去分析與對(duì)待異步信號(hào)跨時(shí)鐘域的問題,在設(shè)計(jì)時(shí)就將問題考慮充分,避免這類問題影響芯片整體的功能及可靠性。
亞穩(wěn)態(tài)指的是觸發(fā)器無法在一個(gè)規(guī)定的時(shí)間達(dá)到一個(gè)確定的狀態(tài),當(dāng)觸發(fā)器進(jìn)入亞穩(wěn)態(tài),我們既無法預(yù)測(cè)其輸出的電平,也無法預(yù)測(cè)其何時(shí)才能穩(wěn)定地輸出正確的電平[1]。在亞穩(wěn)態(tài)期間,觸發(fā)器輸出一些中間級(jí)電平,并且這種電平可以延通路傳播,如圖1(a)所示,其產(chǎn)生的原因是由于信號(hào)在時(shí)鐘觸發(fā)沿的判決窗口沒有保持穩(wěn)定,導(dǎo)致觸發(fā)器中鎖存信號(hào)的電容充電不足,從而使得觸發(fā)器需要花很長的時(shí)間才能使輸出信號(hào)達(dá)到標(biāo)準(zhǔn)電平,使電路“反應(yīng)”變遲鈍。亞穩(wěn)態(tài)對(duì)我們的邏輯電路產(chǎn)生的危害包括:使輸入的數(shù)據(jù)采樣錯(cuò)誤導(dǎo)致功能錯(cuò)誤;擴(kuò)散可能會(huì)導(dǎo)致后續(xù)的邏輯功能出錯(cuò);擴(kuò)散的亞穩(wěn)態(tài)會(huì)導(dǎo)致所有扇出的器件進(jìn)入振蕩狀態(tài)從而導(dǎo)致器件功耗增加,嚴(yán)重的可能會(huì)損壞器件等。
圖1 亞穩(wěn)態(tài)及同步器示意圖
一個(gè)異步信號(hào)跨時(shí)鐘域時(shí),亞穩(wěn)態(tài)是不可能從根本上消除的。我們?cè)谠O(shè)計(jì)時(shí)所要做的是最大限度地減少亞穩(wěn)態(tài)對(duì)電路的影響。通常我們用故障間隔平均時(shí)間(MTBF,mean time between failures)來衡量亞穩(wěn)態(tài)對(duì)數(shù)字系統(tǒng)的影響,MTBF 越大則說明系統(tǒng)越安全[2,3]。其公式如下所示:
上式中c1 和c2 是常數(shù),由器件的工藝與實(shí)際應(yīng)用環(huán)境決定;fclk對(duì)異步信號(hào)進(jìn)行采樣的時(shí)鐘頻率;fdata是輸入異步信號(hào)的反轉(zhuǎn)頻率;tMET是保證亞穩(wěn)態(tài)不傳輸?shù)较乱患?jí)寄存器所允許的亞穩(wěn)態(tài)持續(xù)最大時(shí)間。通過分析這些變量可以得出提高 MTBF 可以從以下方面入手:a.減小fdata即減小輸入數(shù)據(jù)的翻轉(zhuǎn)率;b.減小fclk即減小采樣時(shí)鐘的頻率;c.增大tMET即增大從亞穩(wěn)態(tài)到確定電平之間的判決時(shí)間;d.改良工藝參數(shù)c1 和c2 對(duì)MTBF的不良影響。
以上4 項(xiàng)改善 MTBF 的手段中,前3 項(xiàng)是我們作為數(shù)字設(shè)計(jì)工程師可以通過合理的設(shè)計(jì)來實(shí)現(xiàn)的。其中fdata及fclk主要由設(shè)計(jì)需求決定,工程師干預(yù)程度偏低,我們可以重點(diǎn)從增大tMET入手。從下面的公式和圖2 可以看出,tMET主要與5 個(gè)因素有關(guān),分別是時(shí)鐘周期 T、時(shí)鐘到輸出延時(shí)tco(clock to output)、兩寄存器之間組合邏輯延時(shí)與走線延時(shí)之和tdata,寄存器建立時(shí)間tsu以及兩觸發(fā)器之間的時(shí)滯tskew(tskew=tclk2-tclk1)。這5 個(gè)參數(shù)中T 由系統(tǒng)性能設(shè)計(jì)指標(biāo)決定,tco和tsu由器件自身決定,tskew可以忽略不計(jì),所以只有tdata是我們?cè)谠O(shè)計(jì)是可以影響的。同步器是處理 CDC問題時(shí)所采用的主要器件,其通常由兩個(gè)級(jí)聯(lián)的觸發(fā)器組成,如圖1(b) 所示。當(dāng)我們使用同步器對(duì)異步信號(hào)進(jìn)行采樣時(shí),由于同步器兩級(jí)寄存器靠得很近,tdata就變得非常小從而提高了tMET參數(shù)。
圖2 各時(shí)鐘參數(shù)示意圖
下面介紹同步器具體改善MTBF 的例子。以一個(gè)0.25μm 工藝的 ASIC 庫中的觸發(fā)器為例,tMET=2.3ns,c2=0.31ns,c1=9.6as(las=10-18s),fclk=100MHz,fdata=1MHz,則根據(jù)之前的 MTBF 公式可以算出其故障間隔平均時(shí)間大約為20 天。如果將兩個(gè)這種觸發(fā)器串聯(lián)作為同步器使用,則這個(gè)同步器的 MTBF 可以由以下的公式算出,大約是9.57×1010 年,而宇宙年齡大約是1010 年。
從上面介紹可以看出,采用多級(jí)寄存器級(jí)聯(lián)結(jié)構(gòu)的同步器對(duì)提高系統(tǒng)的 MTBF 有很大的幫助,所以在項(xiàng)目中,凡是需要跨時(shí)鐘的地方一定要使用后端廠商提供的同步器來處理,如果后端廠商沒提供專門的同步器單元,那么需要前端設(shè)計(jì)師在代碼中對(duì)需要同步的信號(hào)做打拍處理(至少兩拍)并且要求后端工程師在后端設(shè)計(jì)中保證幾級(jí)同步器寄存器靠得足夠近。
本節(jié)主要介紹4 種常用的CDC 處理方法,分別是信號(hào)同步器、多周期路徑MCP(Multi-Cycle Path)同步法、握手協(xié)議以及異步FIFO。
信號(hào)同步器的結(jié)構(gòu)是四種方法中最簡單的,它是由同步器直接演化而來,根據(jù)功能的不同又可以分為電平信號(hào)同步器、邊緣檢測(cè)信號(hào)同步器以及脈沖信號(hào)同步器。
電平信號(hào)同步器如圖1(b)所示,它僅由一個(gè)同步器構(gòu)成。其輸入信號(hào)的電平寬度至少應(yīng)該是同步時(shí)鐘周期的兩倍,否則可能由于亞穩(wěn)態(tài)導(dǎo)致電平信號(hào)在跨時(shí)鐘域時(shí)丟失如圖3 所示[4]。
邊緣檢測(cè)同步器結(jié)構(gòu)如圖4 所示,它在電平信號(hào)同步器之后又加了一級(jí)寄存器和一個(gè)與門。這一電路會(huì)檢測(cè)同步器輸入的上升沿,產(chǎn)生一個(gè)與時(shí)鐘周期等寬、高電平有效的脈沖。如果將與門的兩個(gè)輸入端交換使用,就可以構(gòu)成一個(gè)檢測(cè)輸入信號(hào)下降沿的同步器。將與門改為與非門可以構(gòu)建一個(gè)產(chǎn)生低電平有效脈沖的電路。
圖4 邊緣檢測(cè)信號(hào)同步器
當(dāng)輸入脈沖信號(hào)的寬度大于同步時(shí)鐘周期與第一個(gè)同步觸發(fā)器所需保持時(shí)間之和時(shí),我們?nèi)匀豢梢允褂眠吘墮z測(cè)信號(hào)同步器來同步脈沖信號(hào),但是當(dāng)快時(shí)鐘域單時(shí)鐘脈沖進(jìn)入慢時(shí)鐘時(shí),邊緣檢測(cè)信號(hào)同步器就無法在正常工作了,需要采用脈沖信號(hào)同步器來實(shí)現(xiàn)相應(yīng)的功能,如圖5 所示,每當(dāng)翻轉(zhuǎn)電路接收到一個(gè)脈沖時(shí),它就會(huì)在高、低電平間進(jìn)行轉(zhuǎn)換,然后通過電平同步器到達(dá)異或門的一個(gè)輸入端,而另一個(gè)信號(hào)經(jīng)一個(gè)時(shí)鐘周期的延遲進(jìn)入異或門的另一端,翻轉(zhuǎn)電路每轉(zhuǎn)換一次狀態(tài),這個(gè)同步器的輸出端就產(chǎn)生一個(gè)單時(shí)鐘寬度的脈沖。
圖5 脈沖信號(hào)同步器
上面介紹的3 種信號(hào)同步器是同步單 bit 信號(hào)時(shí)所常采用的方法,當(dāng)需要同步的信號(hào)是 bus 型的數(shù)據(jù)時(shí)再采用上面的方法就不適合了,因?yàn)閎us 型的數(shù)據(jù)每一bit 經(jīng)過同步器之后可能由于亞穩(wěn)態(tài)的情況而出現(xiàn)bit 之間傳輸延時(shí)不一致的情況。多周期路徑同步法提供了一種簡潔的處理多 bit信號(hào)跨越時(shí)鐘域的解決方法,其電路如圖6 所示。
圖6 多周期路徑同步法
從圖中可以看出多周期路徑同步法其實(shí)是由脈沖信號(hào)同步器演化而來,其中控制通路就是一個(gè)脈沖同步器,當(dāng)輸入擁有數(shù)據(jù)常要跨時(shí)鐘時(shí),數(shù)據(jù)通路先將數(shù)據(jù)進(jìn)行鎖存,控制路徑將數(shù)據(jù)有效使能脈沖同步到接收側(cè),并用還原出的脈沖信號(hào)做選擇器的使能對(duì)數(shù)據(jù)總線上的數(shù)據(jù)進(jìn)行采樣。這種同步多 bit 數(shù)據(jù)的方法結(jié)構(gòu)簡單而且比較安全,由于控制通路使用脈沖同步器,在發(fā)送側(cè)就不需要根據(jù)不同時(shí)鐘頻率來推算數(shù)據(jù)有效使能需要保持多少時(shí)鐘周期,并且由于只對(duì)有效使能單bit 進(jìn)行跨時(shí)鐘處理,而數(shù)據(jù)路徑在采樣時(shí)至少已經(jīng)在數(shù)據(jù)路徑上保持了3 個(gè)時(shí)鐘周期,這就保證了(在后端時(shí)序約束時(shí)還是需要對(duì)數(shù)據(jù)路徑的到達(dá)時(shí)間進(jìn)行約束)數(shù)據(jù)不會(huì)在接收時(shí)鐘采樣沿處發(fā)生跳變,從而避免了數(shù)據(jù)路徑亞穩(wěn)態(tài)的發(fā)生。但由于這種同步機(jī)制是一種開環(huán)的同步機(jī)制,在收發(fā)兩側(cè)沒有交互機(jī)制,所以發(fā)送側(cè)何時(shí)可以安全的更新數(shù)據(jù)無法得到保障,這些問題由接下來的新機(jī)制加以解決。
上面提到的多周期路徑同步法是一種有效的數(shù)據(jù) CDC 方法,但是也提到由于是開環(huán)路徑無法做到收發(fā)兩側(cè)信息交互,握手協(xié)議可以很好的解決這一問題。握手協(xié)議是一種閉環(huán)的數(shù)據(jù)同步方法,其主要結(jié)構(gòu)如圖7 所示。它主要分為兩大路徑,分別是握手信號(hào)路徑和數(shù)據(jù)路徑。握手信號(hào)指示接收時(shí)鐘域的何時(shí)可以對(duì)總線數(shù)據(jù)進(jìn)行采樣,以及源電路何時(shí)可以更新當(dāng)前數(shù)據(jù)鎖存器中保存的內(nèi)容。數(shù)據(jù)路徑主要由發(fā)送時(shí)鐘域的數(shù)據(jù)鎖存模塊以及接收時(shí)鐘域的數(shù)據(jù)采樣模塊組成。當(dāng)有數(shù)據(jù)需要傳輸時(shí)發(fā)出請(qǐng)求信號(hào),并將數(shù)據(jù)鎖存在數(shù)據(jù)鎖存器中。當(dāng)請(qǐng)求信號(hào)在接收時(shí)鐘域被同步后,以此為依據(jù)將總線上的數(shù)據(jù)進(jìn)行采樣,并向發(fā)送時(shí)鐘域發(fā)送響應(yīng)信號(hào)[5,6]。
圖7 握手協(xié)議主要跨時(shí)鐘路徑
圖8 是一個(gè)典型的握手協(xié)議電路結(jié)構(gòu)圖。從圖中可以看出,它與圖6 最大的區(qū)別是增加了一條由接收側(cè)向發(fā)送側(cè)反饋的控制路徑。當(dāng)輸入數(shù)據(jù)有效時(shí),輸入數(shù)據(jù)被鎖存數(shù)據(jù)跨時(shí)鐘進(jìn)程開始,數(shù)據(jù)有效信號(hào)由綠色路徑向接收側(cè)傳輸,在接收側(cè)對(duì)其進(jìn)行同步之后并將恢復(fù)出的脈沖信號(hào)為使能對(duì)藍(lán)色數(shù)據(jù)總線上的數(shù)據(jù)進(jìn)行采樣。采樣結(jié)束后接收側(cè)將反饋信號(hào)沿紫色路徑反饋,發(fā)送側(cè)接收到這一反饋信號(hào)后表明當(dāng)前數(shù)據(jù)已經(jīng)被對(duì)端安全采樣,可以自行決定是否對(duì)數(shù)據(jù)通路進(jìn)行刷新傳輸新的數(shù)據(jù)。
圖8 握手協(xié)議基本電路結(jié)構(gòu)
在許多設(shè)計(jì)中,有些需要跨時(shí)鐘的數(shù)據(jù)是burst 發(fā)送的,或者兩個(gè)時(shí)鐘域之間的數(shù)據(jù)需要做速率匹配,這時(shí)握手協(xié)議就很難來實(shí)現(xiàn)了,這時(shí)就需要引入異步FIFO。圖9 所示的是異步FIFO 的基本內(nèi)部結(jié)構(gòu),藍(lán)色部分是寫時(shí)鐘域,紫色部分是讀時(shí)鐘域。其內(nèi)部主要由讀寫指針生成器、讀寫指針比較器、同步器以及雙端口RAM 組成。讀寫指針生成器主要根據(jù)讀寫便能對(duì)讀寫指針進(jìn)行累加,并將累加之后的指針進(jìn)行格雷碼變換,由于格雷碼相鄰碼元之間只有1bit 發(fā)生反轉(zhuǎn)的特點(diǎn),在讀寫指針進(jìn)行跨時(shí)鐘同步的過程中可以有效地控制亞穩(wěn)態(tài)導(dǎo)致的讀寫指針傳輸?shù)恼`差范圍;讀寫指針比較器是將同步之后的讀寫指針再進(jìn)行逆格雷碼轉(zhuǎn)換,與本地當(dāng)時(shí)刻產(chǎn)生的讀寫指針進(jìn)行對(duì)比,并根據(jù)對(duì)比的結(jié)果輸出空滿信號(hào),對(duì)上下級(jí)邏進(jìn)進(jìn)行反壓處理;跨時(shí)鐘的數(shù)據(jù)則通過雙端口RAM 做跨時(shí)鐘隔離[7]。
圖9 異步FIFO 的基本內(nèi)部結(jié)構(gòu)
以上介紹的4 種信號(hào)跨時(shí)鐘域的方法在我們的設(shè)計(jì)中都有使用,具體使用哪一種方法需要對(duì)應(yīng)具體情況進(jìn)行分析,在對(duì)于跨時(shí)鐘信號(hào)是單bit 信號(hào)的時(shí)候推薦使用信號(hào)同步器來實(shí)現(xiàn);在對(duì)應(yīng)跨時(shí)鐘信號(hào)是總線仲裁類或者緩變化bus型數(shù)據(jù)時(shí)推薦使用多周期路徑同步法或者握手協(xié)議來實(shí)現(xiàn);當(dāng)需要跨時(shí)鐘的是主數(shù)據(jù)路徑時(shí),例如一些接口協(xié)議需要做速率四配時(shí),推薦使用異步FIFO 來處理[8,9]。
本文主要介紹了 RTL 設(shè)計(jì)中的 CDC 問題,分析了亞穩(wěn)態(tài)產(chǎn)生的原因以及解決的方法。重點(diǎn)介紹了在設(shè)計(jì)中常用的4 種信號(hào)跨時(shí)鐘的處理方法,并分析了一些設(shè)計(jì)中處理異步信號(hào)時(shí)常見的錯(cuò)誤并給出了相應(yīng)的改進(jìn)意見。CDC 問題在設(shè)計(jì)中雖然不起眼,但是業(yè)界中很多失敗的案例都是由它引起的,特別是現(xiàn)在先進(jìn)設(shè)計(jì)中可能會(huì)用到先進(jìn)工藝、邏輯規(guī)模又異常大,從而導(dǎo)致成本非常高。同時(shí)也正是由于這些問題不起眼,在驗(yàn)證與時(shí)序分析階段有時(shí)很難定位和發(fā)現(xiàn)這類問題,所以對(duì)于RTL 開發(fā)來說,作為芯片設(shè)計(jì)的最前端應(yīng)該把這類問題消滅在源頭,這對(duì)于時(shí)間和成本來說都是最劃算的。