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