汪 健,張 磊,王 鎮(zhèn),趙忠惠,陳亞寧
(中國兵器工業(yè)第214研究所蘇州研發(fā)中心,江蘇 蘇州 215163)
?
系統(tǒng)級芯片跨時鐘域同步技術(shù)研究
汪 健,張 磊,王 鎮(zhèn),趙忠惠,陳亞寧
(中國兵器工業(yè)第214研究所蘇州研發(fā)中心,江蘇 蘇州 215163)
摘 要:隨著芯片系統(tǒng)復(fù)雜性的提高, 系統(tǒng)級芯片中集成了越來越多的模塊,這些模塊通常工作在不同的時鐘頻率下,這樣芯片上的數(shù)據(jù)必然頻繁地在不同區(qū)域之間進行傳輸。在時鐘和數(shù)據(jù)信號從一個時鐘域跨越到另一個時鐘域時會發(fā)生許多類型的同步問題。采用握手信號進行異步時鐘域之間的信號傳輸,和采用異步FIFO進行總線信號跨時鐘域設(shè)計可以很好地應(yīng)用在系統(tǒng)級芯片設(shè)計中,保證這些跨越了多個域的時鐘和數(shù)據(jù)信號保持同步。
關(guān)鍵詞:系統(tǒng)級芯片;跨時鐘域;同步;平均無故障時間
隨著集成電路技術(shù)的迅速發(fā)展,系統(tǒng)級芯片(system on-chip,SoC)變得越來越復(fù)雜,芯片上實現(xiàn)了更多的功能,系統(tǒng)頻率也越來越高,隨之而來芯片上的數(shù)據(jù)更加頻繁地在不同區(qū)域之間進行傳輸。當(dāng)數(shù)據(jù)由一個時鐘驅(qū)動傳輸?shù)接善渌臅r鐘驅(qū)動區(qū)域時,跨時鐘域(Clock Domain Cross,CDC)問題就產(chǎn)生了。盡管這并不屬于技術(shù)發(fā)展提出的新要求,但隨著芯片設(shè)計規(guī)模的不斷擴大,多異步時鐘域的現(xiàn)象越來越常見和復(fù)雜化。
在傳統(tǒng)的設(shè)計方法中,設(shè)計仿真和靜態(tài)時序分析已經(jīng)不足以充分驗證跨時鐘域的可靠性和連續(xù)性,為了確保擁有多個異步時鐘域的芯片能夠可靠運行,設(shè)計人員必須有意識地采用一些結(jié)構(gòu)使這些跨越了多個域的時鐘和數(shù)據(jù)信號保持同步。這樣跨時鐘域同步問題逐步成為SoC設(shè)計和驗證中面臨的一個主要挑戰(zhàn)[1]。
系統(tǒng)級芯片由于規(guī)模大,基本以同步設(shè)計為主。在全同步設(shè)計中,如果信號來自同一時鐘域,各模塊的輸入可以不需要寄存,只要滿足建立時間和保持時間的約束,就可以保證在時鐘上升沿到來時,輸入信號已經(jīng)穩(wěn)定,便可以采樣得到正確的值。反之由不同的、沒有固定相位關(guān)系的時鐘驅(qū)動電路之間的路徑就產(chǎn)生了跨時鐘域的問題[2]。
在復(fù)雜的SoC設(shè)計中,通常會出現(xiàn)兩個或多個不同時鐘域之間的數(shù)據(jù)對接,由于在接口處是異步,會導(dǎo)致出現(xiàn)一系列的問題,如亞穩(wěn)態(tài)傳播、數(shù)據(jù)丟失、數(shù)據(jù)不連續(xù)等,處理起來比同步邏輯更棘手,需要采用特殊處理來進行接口界面的設(shè)計[2]。
2.1亞穩(wěn)態(tài)傳播問題
在設(shè)計中任何一個觸發(fā)器都有特定的建立和保持時間,在時鐘有效沿前后的這段時間窗口內(nèi)輸入數(shù)據(jù)信號都必須保持穩(wěn)定。如果信號在這段時期發(fā)生了變化,那么輸出將是未知的,這種有害的狀態(tài)稱為“亞穩(wěn)態(tài)”,亞穩(wěn)態(tài)是由于違背了觸發(fā)器的建立時間和保持時間而產(chǎn)生的。在亞穩(wěn)態(tài)傳播中,觸發(fā)器的輸出可能產(chǎn)生毛刺,或者為不確定狀態(tài),而且需要較長的時間才能回到穩(wěn)定狀態(tài),在電路設(shè)計中是需要避免的。
圖1所示為多時鐘域的一個例子。圖2所示為多時鐘域產(chǎn)生的錯誤。
圖1 多時鐘域關(guān)系圖
圖2 多時鐘域的數(shù)據(jù)傳輸問題
圖1的情況如果出現(xiàn)在SoC中,由于芯片規(guī)模比較大,通常當(dāng)輸入信號D的變化距離CLKB的有效沿非常近的時候,就會違反觸發(fā)器的建立和保持時間,導(dǎo)致輸出DB產(chǎn)生振蕩,并持續(xù)一段時間,所以當(dāng)CLKB的第二個有效沿來到的時候,DA有可能已經(jīng)穩(wěn)定,也有可能繼續(xù)震蕩,因此就會給系統(tǒng)帶來以下的問題:亞穩(wěn)態(tài)導(dǎo)致電流增大,系統(tǒng)進入了一個未知的狀態(tài),導(dǎo)致時序問題等。
由于違反了觸發(fā)器的建立和保持時間而導(dǎo)致的亞穩(wěn)態(tài)傳播問題,是所有跨時鐘域問題的核心所在。
2.2數(shù)據(jù)丟失
當(dāng)一個新的數(shù)據(jù)產(chǎn)生的時候,如果不能夠保持足夠的時間,目的時鐘域最早的時鐘就有可能捕獲不到。當(dāng)時鐘A和B的有效沿離得比較近,或者是同相不同頻率,如果時鐘B的沿距離輸入數(shù)據(jù)DA的變化很近,那么時鐘B的第一個沿將難以正確地捕獲數(shù)據(jù),第二個沿最終可以正確捕獲到數(shù)據(jù)。如圖3所示。
圖3 傳輸數(shù)據(jù)丟失
這樣的結(jié)果就是沒有逐個周期地正確捕獲從源時鐘域到目的時鐘域的傳輸數(shù)據(jù),導(dǎo)致設(shè)計錯誤。
2.3傳輸數(shù)據(jù)不連續(xù)
當(dāng)源時鐘域產(chǎn)生一個新的數(shù)據(jù)需要傳輸?shù)侥康臅r鐘域時,在目的時鐘域有可能出現(xiàn)亞穩(wěn)態(tài),根據(jù)目的時鐘域時鐘有效沿到來的時間來決定需要等待一個或者多個時鐘周期,才能使其成為有效數(shù)據(jù)。
當(dāng)一個多bits信號跨時鐘域傳遞時,如果每一位都單獨采用簡單同步方法,那么就有可能有一些位,經(jīng)過一個周期就穩(wěn)定了,而有一些位需要兩個或者更多的周期才能穩(wěn)定,這樣就造成了數(shù)據(jù)的不連貫,即在一定的時間內(nèi),某些位是穩(wěn)定的,而某些位不是。然而,在大部分?jǐn)?shù)字設(shè)計中這樣的多bit數(shù)據(jù)都要求是同時有效的。當(dāng)上述情況發(fā)生時,必然會引起系統(tǒng)的錯誤。如圖4所示,產(chǎn)生了一個中間值“01”,這是不希望發(fā)生的。
跨時鐘域問題很大一部分依賴于源時鐘域時鐘和目的時鐘域時鐘之間的關(guān)系。當(dāng)由于不能滿足所要求的建立時間和保持時間時,便出現(xiàn)了亞穩(wěn)態(tài)。當(dāng)亞穩(wěn)態(tài)事件持續(xù)時間長至足以影響到下一個邏輯階段時,同步器就發(fā)生了故障,發(fā)生故障間的平均時間稱為平均無故障時間(Mean /Average Time Between Failures,MTBF)。當(dāng)系統(tǒng)的故障率恒定時,MTBF是故障率的倒數(shù)。亞穩(wěn)態(tài)平均故障間隔時間MTBF大致估算了亞穩(wěn)態(tài)導(dǎo)致出現(xiàn)兩次設(shè)計失敗之間的平均時間。
圖4 多bits數(shù)據(jù)傳輸錯誤
對于一個具有給定時鐘頻率的單級同步器來說,亞穩(wěn)態(tài)事件的發(fā)生率可以通過建立時間、保持時間和時鐘周期的比值與信號頻率來計算,如式(1):
式中,tres為允許超出器件正常傳輸延遲時間的解析時間,即解決亞穩(wěn)態(tài)允許占用的時間;τ為觸發(fā)器的亞穩(wěn)態(tài)時間常數(shù);W為亞穩(wěn)態(tài)窗口;fclk為時鐘頻率;fdata為異步信號邊沿頻率。
式中W和T跟觸發(fā)器的性能參數(shù)相關(guān),不同工藝有所不同,同一工藝基本不變。
由于在綜合時通常會嘗試在時序能夠滿足的條件下縮減門電路數(shù)以節(jié)省占用面積,所以設(shè)計人員無法控制至下一階段間的時間預(yù)算。為了保持穩(wěn)定一致的解析時間,設(shè)計人員可以采用一種兩個觸發(fā)器組成的序列。但是,這種傳統(tǒng)解決方案肯定會增加時延。在采用兩個觸發(fā)器的解決方案時,時鐘樹就以減去觸發(fā)器DFF1的時鐘至Q延時后的時鐘周期tcko1以及DFF2的建立時間tsetup2要求為基礎(chǔ):
兩級同步器的MTBF可以由式(3)計算:
從(3)式可以看出,兩級同步器的MTBF實際是第一級同步器的MTBF與第二級同步器亞穩(wěn)態(tài)的解析概率的乘積。
雖然亞穩(wěn)態(tài)不能根除,但是可以減小亞穩(wěn)態(tài)發(fā)生的概率。
SoC中一般存在一個到多個處理器、各種類型的IP以及多種多樣的接口,各部分處理能力不同,承擔(dān)的任務(wù)性質(zhì)不同,有的進行運算,有的負(fù)責(zé)控制,工作的頻率差別較大是不可避免的。如某多核SoC中處理器核的主頻可以運行到600 MHz~800 MHz,協(xié)處理器可以工作到400 MHz~600 MHz,并行接口的數(shù)據(jù)傳輸率只有200 MHz~300 MHz,有些串行接口如CAN、UART等的波特率更低。在系統(tǒng)結(jié)構(gòu)設(shè)計時,會將各部分劃分在不同的時鐘域工作,但是總線類型數(shù)據(jù)在各時鐘域之間是相互傳輸?shù)???鐣r鐘域的單bit數(shù)據(jù)處理相對簡單,可以采用同步的方式,如電平同步、邊沿同步和脈沖同步等,采用一級或兩級同步,便可以解決單bit數(shù)據(jù)跨時鐘域的困難[3]。而在大部分SoC實際應(yīng)用中,跨時鐘域傳送的不只是簡單的信號,數(shù)據(jù)總線、地址總線和控制總線都會同時跨域傳輸。如果我們簡單地用同步單bit信號的方法分別同步多bit信號的每一位,就一定會出現(xiàn)多bit數(shù)據(jù)的不一致。因為在新時鐘域的異步輸入要成為有效信號,需要經(jīng)過新時鐘域時鐘的一個或者兩個周期,這是出現(xiàn)多bit信號不一致的根本原因,如上文中所述。這個問題在實際應(yīng)用中是要避免的,必須采用與單bit信號不同的方法來完成多bit信號的同步。
某SoC系統(tǒng)時鐘域分布如圖5所示。
圖5 SoC時鐘域分布示意圖
4.1握手協(xié)議
使用握手信號進行異步時鐘域之間的信號傳輸是比較傳統(tǒng)而有效的一種方法。如圖5所示,在SoC電路中,不同的時鐘域無法預(yù)知或判斷其他時鐘域信號的有效時間,通過握手的方法能讓異步時鐘域之間實現(xiàn)有效的通信。SoC中由于多個IP要與處理器連接,內(nèi)部會采用總線結(jié)構(gòu)。帶有仲裁能力的總線結(jié)構(gòu)可以讓一個以上的時鐘域請求使用總線,用仲裁方法來決定哪個時鐘域可以獲得總線的訪問,進行數(shù)據(jù)傳輸。
圖6 不同時鐘域之間采用握手信號示意圖
圖6是兩個不同時鐘域數(shù)據(jù)傳輸?shù)囊粋€典型結(jié)構(gòu),時鐘域A的時鐘為CLKA,時鐘域B的時鐘為CLKB,數(shù)據(jù)需要從A傳輸?shù)紹。握手信號由時鐘域A發(fā)出,為Areq,響應(yīng)信號由時鐘域B發(fā)送到A,為Basw。
使用握手信號數(shù)據(jù)傳輸?shù)倪^程為:發(fā)送時鐘域A數(shù)據(jù)準(zhǔn)備好后放到總線上并發(fā)出請求信號Areq,說明時鐘域B可以準(zhǔn)備接收數(shù)據(jù)了。Areq進入時鐘域B后由CLKB進行同步,時鐘域B識別同步后的Areq信號,用CLKB鎖存數(shù)據(jù)。然后向時鐘域A發(fā)出應(yīng)答信號Basw,表示已經(jīng)接收到了數(shù)據(jù)信號。Basw信號由CLKA同步后會被時鐘域A識別,這樣便完成了一次數(shù)據(jù)傳輸過程。時鐘域A可以開始下一個數(shù)據(jù)的傳輸。具體時序圖如圖7所示。
圖7 握手機制時序圖
從上面的過程中可以看出,數(shù)據(jù)需要在發(fā)送時鐘域內(nèi)至少保持兩個時鐘周期以上,請求信號也需要保持兩個時鐘周期以上,才能保證數(shù)據(jù)有效接收。采用握手方式可靠地將數(shù)據(jù)從一個時鐘域傳輸?shù)搅硪粋€時鐘域至少需要5個時鐘周期,這樣的傳輸方式相對簡單,但是在大數(shù)據(jù)量傳輸?shù)男噬蠠o疑是難以接受的。
4.2異步FIFO實現(xiàn)數(shù)據(jù)傳輸
在SoC系統(tǒng)中,由于傳輸?shù)臄?shù)據(jù)量比較大,數(shù)據(jù)位寬也比較寬,尤其是各模塊與總線網(wǎng)絡(luò)進行通信時,采用握手機制進行數(shù)據(jù)信號的傳輸顯然不是最合適的,異步FIFO無疑是個很好的選擇,而且當(dāng)前SoC設(shè)計中,大部分都是采用FIFO進行跨時鐘域設(shè)計的,下面以SoC中的設(shè)計實例進行說明,如圖8所示,A表示總線網(wǎng)絡(luò),B是IP模塊。
圖8 采用異步FIFO進行數(shù)據(jù)傳輸
異步FIFO傳輸方式用于對傳輸性能要求較高、數(shù)據(jù)位寬比較寬的設(shè)計中,尤其在傳輸速率高、允許的延遲時間短的環(huán)境里。這里FIFO的讀寫分別采用不同的時鐘,對于FIFO的狀態(tài)需要由空(empty)和滿(full)指針來指示。
4.2.1采用格雷碼避免指針出現(xiàn)亞穩(wěn)態(tài)
FIFO的地址是采用自動遞增或遞減的方式設(shè)計的,在寫請求有效時,寫指針遞增,讀請求有效時,讀指針遞增。將讀指針和寫指針進行比較,從而產(chǎn)生空和滿信號。這里需要特別注意的是讀寫指針分別屬于不同的時鐘域,而且這兩個指針分別與各自的時鐘同步過,彼此之間是異步的。如果使用通常的二進制計數(shù)器實現(xiàn)指針時,就會導(dǎo)致用于比較的指針值取樣錯誤,隨即FIFO的空滿標(biāo)記也將出現(xiàn)錯誤,從而導(dǎo)致數(shù)據(jù)丟失或者讀出錯誤的數(shù)據(jù)。鑒于這種情況,必須避免使用二進制計數(shù)器實現(xiàn)讀寫指針,一種有效的方式是采用格雷碼計數(shù)器。格雷碼相對于二進制碼的最大優(yōu)勢是從一個數(shù)變到另外一個數(shù)時只有一位出現(xiàn)變化,是單位間距碼,每次的下一個值與前一個值的區(qū)別只有一位距離,所以轉(zhuǎn)換中最多只會出現(xiàn)一位錯誤,而且很少會導(dǎo)致出現(xiàn)計數(shù)器的亞穩(wěn)態(tài),取樣邏輯讀到的值要么是原來的值,要么就是新值,不會出現(xiàn)其他值。
4.2.2格雷碼實現(xiàn)FIFO指針的方法
在SoC設(shè)計中用到的異步FIFO解決跨時鐘域的數(shù)據(jù)傳輸問題,一般采用格雷碼產(chǎn)生地址指針,而在系統(tǒng)中大部分地方數(shù)據(jù)傳輸還是二進制的,這樣就需要用到二進制碼與格雷碼之間的相互轉(zhuǎn)換。表1是格雷碼與二進制碼比較。
表1 格雷碼與二進制碼比較
從表1可以分析出,格雷碼轉(zhuǎn)換成二進制碼的過程是:
Bin[0]=gray[3]⊕gray[2]⊕gray[1]⊕gray[0]
Bin[1]=gray[3]⊕gray[2]⊕gray[1
Bin[2]=gray[3]⊕gray[2]
Bin[3]=gray[3]
采用system Verilog 實現(xiàn)4 bit格雷碼到二進制碼轉(zhuǎn)換代碼如下:
module gray2bin#(parameter SIZE = 4)
(output logic [SIZE-1:0] bin,
input logic [SIZE-1:0] gray);
always_comb
for (int i=0; i bin[i] = ^(gray>>i); endmodule 反之,二進制碼轉(zhuǎn)換成格雷碼的過程是: Gray[0]=bin[1]⊕bin[0] Gray[1]=bin[2]⊕bin[1] Gray[2]=bin[3]⊕bin[2] Gray[3]=bin[3] 采用system Verilog 實現(xiàn)4 bit二進制碼到格雷碼轉(zhuǎn)換代碼如下: module bin2gray#(parameter SIZE = 4) (output logic [SIZE-1:0] gray, input logic [SIZE-1:0] bin); assign gray = (bin>>1) ^ bin; endmodule 4.2.3格雷碼計數(shù)器的設(shè)計 在SoC中采用異步FIFO進行跨時鐘域數(shù)據(jù)處理時,需要設(shè)計包括上述二進制與格雷碼轉(zhuǎn)換在內(nèi)的格雷碼計數(shù)器用于產(chǎn)生遞增或遞減的FIFO指針。除此之外,計數(shù)器還要有加法器和保存格雷碼的寄存器,結(jié)構(gòu)如圖9所示。 采用system verilog設(shè)計的格雷碼計數(shù)器如下: module graycntr#(parameter SIZE = 5) (output logic [SIZE-1:0] gray, input logic clk, inc, rst_n); logic [SIZE-1:0] gnext, bnext, bin; always_ff @(posedge clk or negedge rst_n) if (!rst_n) gray <= '0; else gray <= gnext; always_comb begin for (int i=0; i bin[i] = ^(gray>>i); bnext = bin + inc; gnext = (bnext>>1) ^ bnext; end endmodule 4.2.4仿真結(jié)果 圖10所示為采用上述設(shè)計方法設(shè)計的跨時鐘域的仿真波形。 在圖10中,wclk 為寫時鐘域的時鐘,rclk為讀時鐘域的時鐘,we是寫信號,re是讀信號,din 和dout是讀出和寫入的數(shù)據(jù)。圖10(a)是寫時鐘比讀時鐘快的情況,圖10(b)是寫時鐘比讀時鐘慢的情況。在這兩種情況下,讀出的數(shù)據(jù)與寫入的數(shù)據(jù)一致,并與讀時鐘同步,說明上述的設(shè)計方法是非常有效的。 圖10 跨時鐘域的仿真波形 SoC設(shè)計中越來越多地涉及到跨時鐘域的問題,這也逐漸成為SoC設(shè)計中一個不容忽視的地方。雖然多bits數(shù)據(jù)信號的跨時鐘域是SoC中的一個難點,但是真正理解了握手信號和異步FIFO的設(shè)計方法,采用上面介紹的設(shè)計原理方法,就可以穩(wěn)定地實現(xiàn)高速大批量數(shù)據(jù)在不同時鐘域之間的傳輸,避免了亞穩(wěn)態(tài)帶來的不可靠問題。 參考文獻: [1] Clifford E. Clock Domain Crossing (CDC) Design & Verification Techniques Using SystemVerilog[P]. Sunburst Design, Inc.2008. [2] Real Intent Inc. Clock Domain Crossing Demystified: The Second Generation Solution for CDC Verification[P]. Sunburst Design,Inc.2007. [3] Christian Piguet. 低功耗處理器及片上系統(tǒng)設(shè)計[M]. 北京:科學(xué)出版社,2012. [4] 李曉維,等. 數(shù)字集成電路設(shè)計驗證[M]. 北京:科學(xué)出版社,2010. [5] Stephen Brown,Zvonko Vranesic. 數(shù)字邏輯與VHDL設(shè)計[M]. 北京:清華大學(xué)出版社,2007. [6] 郭兵,等. SoC技術(shù)原理與應(yīng)用[M]. 北京:清華大學(xué)出版社,2006. 汪 ?。?969—),女,安徽蚌埠人,本科,研究員級高級工程師,主要研究方向為SoC及大規(guī)模數(shù)字集成電路的研發(fā),承擔(dān)過大量專用和通用集成電路的開發(fā)工作。 Research of Synchronization for Signals Cross Clock Domains in SoC Design WANG Jian, ZHANG Lei, WANG Zhen, ZHAO Zhonghui, CHEN Yaning Abstract:With the increase of the complexity of the chip system, the system on chip is integrated with more and more modules. These modules work at different clock frequency, so the data of the chip must be transmitted frequently among different domain. When the clock and data signals translate from one clock domain to another, many types of synchronization occur when the clock domain is changed. By using handshake signals to translate data and using asynchronous FIFO to translate bus data among different domain are good ideas in system on chip. These mechanisms ensure the correctness of the data pass, which is cross clock domain signal synchronization. Keywords:system on-chip; clock domain cross; synchronization; average time between failures 作者簡介: 收稿日期:2015-9-15 中圖分類號:TN402 文獻標(biāo)識碼:A 文章編號:1681-1070(2016)01-0025-065 結(jié)論
(R & D center in Suzhou , 214 Institute of China North Industries, Suzhou 215163, China)