俞帆+張偉欣
摘 要: 隨著FPGA設(shè)計中的時鐘頻率越來越高,時鐘方案越來越復(fù)雜,跨時鐘域問題變成了設(shè)計和驗證中的關(guān)鍵點。為了解決跨時鐘域問題對FPGA設(shè)計造成功能錯誤,對跨時鐘域信號采用兩級寄存器或多級寄存器同步、握手協(xié)議和異步FIFO等同步方法;同時還提出了不檢查時序、修改SDF文件和添加約束文件三種仿真中的技術(shù),解決了跨時鐘域產(chǎn)生的亞穩(wěn)態(tài)現(xiàn)象對FPGA仿真驗證造成的影響。
關(guān)鍵詞: CDC; 亞穩(wěn)態(tài); 同步; 仿真
中圖分類號: TN710?34 文獻標(biāo)識碼: A 文章編號: 1004?373X(2014)07?0151?03
Problem of clock domain crossing in FPGA design
YU Fan, ZHANG Wei?xin
(Shanghai Aerospace Electronic Technology Institute, Shanghai 201109, China)
Abstract: With the increasing clock frequency in the FPGA design, the clock scheme is more and more complex, and the issue of crossing the clock domain becomes a key point in design and verification. In order to correct the function error in FPGA design generated by crossing clock domain, two?stage register or multi?stage register synchronization, hand?shake protocol and asynchronous FIFO are used for the signal crossing the clock domain. At the same time, some technologies of no?timing check, SDF file modification and constraint file addition are proposed, which overcome influence of metastable state phenomennon produced by clock domain crossing on FPGA simulation and verification.
Keywords: CDC; metastability; synchronization; simulation
0 引 言
在FPGA(Field Programmable Gate Array,現(xiàn)場可編程門陣列)設(shè)計中往往存在多個時鐘域,這就會帶來跨時鐘域(Clock Domain Crossing,CDC)問題。如果對跨時鐘域產(chǎn)生的亞穩(wěn)態(tài)等問題解決不當(dāng),就有可能造成設(shè)計功能錯誤。本文就跨時鐘域問題產(chǎn)生的原因、在設(shè)計中的解決方法和仿真驗證中的相關(guān)技術(shù)進行闡述和討論,這對提高FPGA設(shè)計的可靠性有著重要的意義。
1 亞穩(wěn)態(tài)
在數(shù)字集成電路中,寄存器要滿足建立時間(setup time)和保持時間(hold time)的時序要求。建立時間是指在時鐘沿到來之前,寄存器輸入數(shù)據(jù)信號必須保持穩(wěn)定的時間。保持時間是指在時鐘沿之后,數(shù)據(jù)信號必須保持穩(wěn)定的時間。亞穩(wěn)態(tài)(Metastability)現(xiàn)象就是如果寄存器數(shù)據(jù)端的變化與時鐘的有效沿很近(不能滿足建立時間或保持時間要求),其輸出信號就會在一段不可預(yù)知長度的時間內(nèi)處于一個非“0”非“1”的中間狀態(tài)(這段時間稱為亞穩(wěn)態(tài)恢復(fù)時間),之后可能穩(wěn)定在“1”狀態(tài),也可能穩(wěn)定在“0” 狀態(tài)。而且這種亞穩(wěn)態(tài)可能向后傳播,造成后級出現(xiàn)邏輯錯誤。
亞穩(wěn)態(tài)的形成過程如圖1所示,時鐘域aclk的輸出信號adat從高到低的變化與時鐘bclk的上升沿非常接近,不滿足建立時間或保持時間的要求,輸出信號bdat1就會有亞穩(wěn)態(tài)產(chǎn)生,經(jīng)過一段時間后隨機穩(wěn)定在“1”或“0”上。當(dāng)亞穩(wěn)態(tài)產(chǎn)生的不確定電平被后續(xù)電路采樣時,就可能發(fā)生功能錯誤。
圖1 亞穩(wěn)態(tài)示意圖
亞穩(wěn)態(tài)現(xiàn)象是寄存器的一個固有特點,由于亞穩(wěn)態(tài)恢復(fù)時間的不確定性,不能根本的去除亞穩(wěn)態(tài)的影響。通過在設(shè)計中預(yù)留一定的亞穩(wěn)態(tài)恢復(fù)時間,使信號恢復(fù)到確定的電平后參與邏輯運算,降低亞穩(wěn)態(tài)的影響。MTBF(Mean Time Between Failure,平均無故障時間)是衡量一個設(shè)計的可靠性指標(biāo),MTBF的值越大,則出現(xiàn)亞穩(wěn)態(tài)問題的概率越小。一個高的平均無故障時間表明一個設(shè)計是可靠的。MTBF的計算公式如下所示:
[MTBF=eTmetC2C1?fclk?fdata]
式中:[Tmet]為寄存器從時鐘上升沿觸發(fā)后的時序余量時間;[fclk]為接收時鐘域的時鐘頻率;[fdata]為數(shù)據(jù)的變化頻率;[C1]和[C2]為與FPGA器件有關(guān)的參數(shù)??梢酝ㄟ^延長[Tmet]的時間或降低[fclk]和[fdata]的頻率來增大MTBF的值。
[Tmet]的計算公式為:
[Tmet]=采樣時鐘周期時間-輸出信號的[Tco]時間-數(shù)據(jù)到達下一級寄存器輸入端口的延時時間[Tdata-]下一級寄存器時間[Tsu]
式中:[Tco]為輸出相對于時鐘沿之后的延時時間;[Tsu]為輸入相對于時鐘沿所需的建立時間。精確的說,[Tmet]時間還應(yīng)該加上時鐘網(wǎng)絡(luò)延時時間[(Tclk2-Tclk1)。]如圖2所示。
圖2 寄存器采集數(shù)據(jù)示意圖
因為[Tco]和[Tsu]是由FPGA器件的工藝以及工作環(huán)境決定的,時鐘網(wǎng)絡(luò)延時時間很大程度上也是由FPGA器件決定。所以在時鐘頻率[fclk]和數(shù)據(jù)變化頻率[fdata]固定的情況下,只有減小[Tdata]的值才能增大[Tmet]的值。而[Tdata]是指兩個寄存器之間的邏輯延時以及連線延時之和,為了使[Tdata]最小,兩個寄存器之間應(yīng)該沒有任何邏輯。
2 同步方法
2.1 兩級寄存器同步
根據(jù)上面的分析,為了防止新時鐘域中的第一級寄存器的亞穩(wěn)態(tài)信號對下級邏輯造成影響,可以采用兩級寄存器同步的方法。具體電路如圖3所示。
在圖3中可以看出,時鐘域bclk的第一級寄存器的輸出信號bdat1如果存在亞穩(wěn)態(tài),經(jīng)過1個時鐘周期后,bdat1的亞穩(wěn)態(tài)趨于穩(wěn)定,第二級寄存器就能夠采樣到穩(wěn)定的值,輸出信號bdat2不會產(chǎn)生亞穩(wěn)態(tài)。
在一些高速的設(shè)計中,可能兩級寄存器同步也無法獲得足夠的MTBF,第一級寄存器輸出的亞穩(wěn)態(tài)保持了足夠長的時間,導(dǎo)致第二級輸出還有亞穩(wěn)態(tài),這時就需要采用三級寄存器或者更多級寄存器的方法來同步。
圖3 兩級寄存器同步
2.2 從快時鐘域到慢時鐘域
當(dāng)接收時鐘域的頻率滿足大于1.5倍發(fā)送時鐘域的頻率時,可以直接用兩級寄存器同步。但是如果發(fā)送時鐘域的頻率大于接收時鐘域的頻率時,如果直接用兩級寄存器同步,跨時鐘域信號可能不能正常采樣,造成數(shù)據(jù)丟失。比較可靠的方法是跨時鐘域信號的電平寬度大于1.5倍的接收時鐘周期,這樣就可以保證跨時鐘域信號正常采樣。
可以在設(shè)計時直接在發(fā)送時鐘域里把跨時鐘域信號展寬到大于1.5倍的接收時鐘周期,也可以采用握手協(xié)議。握手協(xié)議的原理是:在發(fā)送時鐘域里將所要傳輸?shù)臄?shù)據(jù)準(zhǔn)備好,再產(chǎn)生一個標(biāo)志信號通過同步器傳遞到接收時鐘域告訴它來讀取數(shù)據(jù),當(dāng)接收時鐘域的控制邏輯檢測到這個信號后會將發(fā)送時鐘域準(zhǔn)備好的數(shù)據(jù)讀進來,然后會產(chǎn)生一個傳輸完成信號告訴發(fā)送時鐘域數(shù)據(jù)讀取完畢,最后發(fā)送時鐘域接收到這個信號后會撤銷標(biāo)志信號,完成一次數(shù)據(jù)傳輸。
使用握手協(xié)議可以進行從快時鐘域向慢時鐘域的傳輸,也可以進行多位數(shù)據(jù)的傳輸。
2.3 異步FIFO
在多位數(shù)據(jù)進行跨時鐘傳輸時還可以使用異步FIFO。異步FIFO是一種先進先出電路,用來進行2個異步時鐘之間的數(shù)據(jù)傳輸。FIFO的存儲介質(zhì)為一塊雙端口RAM,可以同時進行讀寫操作。在寫時鐘域部分,由寫地址產(chǎn)生邏輯產(chǎn)生寫控制信號和寫地址;讀時鐘域部分由讀地址產(chǎn)生邏輯產(chǎn)生讀控制信號和讀地址。在空/滿標(biāo)志產(chǎn)生部分,由讀寫地址相互比較產(chǎn)生空/滿標(biāo)志。
異步FIFO的指針邏輯使用格雷碼,代替了通常使用的二進制碼。格雷碼在每次計數(shù)時只改變其中的一位??梢栽诟窭状a總線上使用同步器,因為每一次總線改變時只有一根信號線有變化,于是就消除了格雷碼總線各位數(shù)據(jù)通過不同同步器時的競爭情況。
3 仿真中的相關(guān)技術(shù)
當(dāng)使用仿真工具對FPGA設(shè)計進行后仿真時,如果存在跨時鐘域問題,不滿足建立時間或保持時間的要求就會產(chǎn)生亞穩(wěn)態(tài),仿真工具無法確定當(dāng)前的值,輸出變?yōu)椴欢☉B(tài)X。X態(tài)會往后傳播,造成仿真失敗。
在某FPGA設(shè)計做后仿真時,存在亞穩(wěn)態(tài)問題,仿真波形如圖4所示。
圖4 亞穩(wěn)態(tài)仿真波形圖
其中后仿真文件中的相關(guān)代碼如下所示:
DF1B\clk_cnt[0] (.D(\clk_cnt_3[0]), .CLK(clkin_t), .Q(\clk_cnt[0]_net_1 ));
從圖4中可以看出,時鐘clkin_t的下降沿與寄存器的輸入信號\clk_cnt_3[0]跳變沿的建立時間無法滿足,產(chǎn)生亞穩(wěn)態(tài),輸出信號\clk_cnt[0]_net_1變?yōu)閄。亞穩(wěn)態(tài)向后傳播,造成仿真無法正常進行。為了解決仿真中的這個問題,可以采用以下一些技術(shù)。
3.1 不進行時序檢查
通過在仿真時添加命令讓仿真器不進行時序檢查。以Synopsys公司的仿真器VCS為例,可以在編譯時添加命令+notimingcheck,VCS工具就不會檢查時序,當(dāng)建立時間或保持時間不滿足時,也不會產(chǎn)生X態(tài)。這種方法的弊端是所有的邏輯單元均不會檢查時序。
3.2 修改SDF文件
還可以對違反時序的單元直接修改SDF文件中的時序約束。在該例子中,違反時序的單元是寄存器\clk_cnt[0],通過查找SDF文件,可以看到該寄存器的時序約束如圖5所示。
圖5 SDF文件中違反時序約束的寄存器
該寄存器違反的是輸入數(shù)據(jù)相對于時鐘下降沿的建立時間約束,可以在SDF文件中將這兩行的約束值均修改為0,如下所示:
(SETUP (posedge D) (negedge CLK) (0.00:0.00:0.00))
(SETUP (negedge D) (negedge CLK) (0.00:0.00:0.00))
修改SDF文件后,只要輸入數(shù)據(jù)相對于時鐘下降沿的建立時間大于0就能滿足時序要求,也就不會產(chǎn)生X態(tài)。
3.3 添加vcs_cfg文件
除了上面兩種方法,VCS仿真器還可以采用編寫vcs_cfg文件的方法來對一些特定的單元不檢查時序。此方法在編譯時要添加命令+optconfigfile+vcs_cfg,該例子中編寫的vcs_cfg文件內(nèi)容為:
instance {top_tb.uut.\clk_cnt[0] } {noTiming};
通過此方法,只對寄存器\clk_cnt[0]不檢查時序,不影響其他的邏輯單元。以上三種方法都可以解決后仿真中亞穩(wěn)態(tài)現(xiàn)象出X態(tài)的問題,消除X態(tài)后的仿真波形圖如圖6所示,仿真可以正常運行。
圖6 消除X態(tài)后的仿真波形圖
4 結(jié) 論
隨著FPGA設(shè)計的復(fù)雜化,時鐘頻率更高,時鐘方案更復(fù)雜,對跨時鐘域信號做同步處理的方法越來越重要,同時在仿真驗證時怎樣處理跨時鐘域信號也非常關(guān)鍵。本文詳細(xì)闡述了跨時鐘問題產(chǎn)生的原因,平均無故障時間MTBF的影響因素,跨時鐘域的同步方法,最后針對具體的FPGA設(shè)計,在后仿真時產(chǎn)生亞穩(wěn)態(tài)問題的幾種解決方法進行了重點的介紹,通過這些方法,可以使跨時鐘域產(chǎn)生的亞穩(wěn)態(tài)問題不影響后仿真驗證。
參考文獻
[1] CUMMINGS C E. Clock domain crossing (CDC) design & verification techniques using systemverilog [EB/OL]. [2008?09?26]. http://www.sunburst?design.com/papers.
[2] CUMMINGS C E. Synthesis and scripting techniques for designing multi?asynchronous clock designs [EB/OL]. [2012?09?28]. http://www.sunburst?design.com/papers.
[3] 吳厚航.深入淺出玩轉(zhuǎn)FPGA[M].北京:北京航空航天大學(xué)出版社,2010.
[4] 吳昆,黃坤,傅勇,等.一種基于格雷碼的異步FIFO設(shè)計與實現(xiàn)[J].計算機與數(shù)字工程,2007,35(1):141?144.
[5] DALLY W J, POULTON J W. Digital systems engineer [M]. UK: Cambridge University Press, 1998.
[6] ARORA Mohit. The art of hardware architecture [M]. New York: Springer Science Business Media Press, 2012.
[7] 杜旭,王夏泉.ASIC中的異步時序設(shè)計[J].微電子學(xué),2004,34(5):522?528.
[8] 趙永建,段國東,李苗.集成電路中的多時鐘域同步設(shè)計技術(shù)[J].計算機工程,2008,34(9):247?249.
[9] 徐翼,鄭建宏.異步時鐘域的亞穩(wěn)態(tài)問題和同步器[J].微計算機信息,2008,24(5):272?275.
[10] 謝修祥,王廣生.異步多時鐘系統(tǒng)的同步設(shè)計技術(shù)[J].電子工程師,2005,31(5):33?37.
instance {top_tb.uut.\clk_cnt[0] } {noTiming};
通過此方法,只對寄存器\clk_cnt[0]不檢查時序,不影響其他的邏輯單元。以上三種方法都可以解決后仿真中亞穩(wěn)態(tài)現(xiàn)象出X態(tài)的問題,消除X態(tài)后的仿真波形圖如圖6所示,仿真可以正常運行。
圖6 消除X態(tài)后的仿真波形圖
4 結(jié) 論
隨著FPGA設(shè)計的復(fù)雜化,時鐘頻率更高,時鐘方案更復(fù)雜,對跨時鐘域信號做同步處理的方法越來越重要,同時在仿真驗證時怎樣處理跨時鐘域信號也非常關(guān)鍵。本文詳細(xì)闡述了跨時鐘問題產(chǎn)生的原因,平均無故障時間MTBF的影響因素,跨時鐘域的同步方法,最后針對具體的FPGA設(shè)計,在后仿真時產(chǎn)生亞穩(wěn)態(tài)問題的幾種解決方法進行了重點的介紹,通過這些方法,可以使跨時鐘域產(chǎn)生的亞穩(wěn)態(tài)問題不影響后仿真驗證。
參考文獻
[1] CUMMINGS C E. Clock domain crossing (CDC) design & verification techniques using systemverilog [EB/OL]. [2008?09?26]. http://www.sunburst?design.com/papers.
[2] CUMMINGS C E. Synthesis and scripting techniques for designing multi?asynchronous clock designs [EB/OL]. [2012?09?28]. http://www.sunburst?design.com/papers.
[3] 吳厚航.深入淺出玩轉(zhuǎn)FPGA[M].北京:北京航空航天大學(xué)出版社,2010.
[4] 吳昆,黃坤,傅勇,等.一種基于格雷碼的異步FIFO設(shè)計與實現(xiàn)[J].計算機與數(shù)字工程,2007,35(1):141?144.
[5] DALLY W J, POULTON J W. Digital systems engineer [M]. UK: Cambridge University Press, 1998.
[6] ARORA Mohit. The art of hardware architecture [M]. New York: Springer Science Business Media Press, 2012.
[7] 杜旭,王夏泉.ASIC中的異步時序設(shè)計[J].微電子學(xué),2004,34(5):522?528.
[8] 趙永建,段國東,李苗.集成電路中的多時鐘域同步設(shè)計技術(shù)[J].計算機工程,2008,34(9):247?249.
[9] 徐翼,鄭建宏.異步時鐘域的亞穩(wěn)態(tài)問題和同步器[J].微計算機信息,2008,24(5):272?275.
[10] 謝修祥,王廣生.異步多時鐘系統(tǒng)的同步設(shè)計技術(shù)[J].電子工程師,2005,31(5):33?37.
instance {top_tb.uut.\clk_cnt[0] } {noTiming};
通過此方法,只對寄存器\clk_cnt[0]不檢查時序,不影響其他的邏輯單元。以上三種方法都可以解決后仿真中亞穩(wěn)態(tài)現(xiàn)象出X態(tài)的問題,消除X態(tài)后的仿真波形圖如圖6所示,仿真可以正常運行。
圖6 消除X態(tài)后的仿真波形圖
4 結(jié) 論
隨著FPGA設(shè)計的復(fù)雜化,時鐘頻率更高,時鐘方案更復(fù)雜,對跨時鐘域信號做同步處理的方法越來越重要,同時在仿真驗證時怎樣處理跨時鐘域信號也非常關(guān)鍵。本文詳細(xì)闡述了跨時鐘問題產(chǎn)生的原因,平均無故障時間MTBF的影響因素,跨時鐘域的同步方法,最后針對具體的FPGA設(shè)計,在后仿真時產(chǎn)生亞穩(wěn)態(tài)問題的幾種解決方法進行了重點的介紹,通過這些方法,可以使跨時鐘域產(chǎn)生的亞穩(wěn)態(tài)問題不影響后仿真驗證。
參考文獻
[1] CUMMINGS C E. Clock domain crossing (CDC) design & verification techniques using systemverilog [EB/OL]. [2008?09?26]. http://www.sunburst?design.com/papers.
[2] CUMMINGS C E. Synthesis and scripting techniques for designing multi?asynchronous clock designs [EB/OL]. [2012?09?28]. http://www.sunburst?design.com/papers.
[3] 吳厚航.深入淺出玩轉(zhuǎn)FPGA[M].北京:北京航空航天大學(xué)出版社,2010.
[4] 吳昆,黃坤,傅勇,等.一種基于格雷碼的異步FIFO設(shè)計與實現(xiàn)[J].計算機與數(shù)字工程,2007,35(1):141?144.
[5] DALLY W J, POULTON J W. Digital systems engineer [M]. UK: Cambridge University Press, 1998.
[6] ARORA Mohit. The art of hardware architecture [M]. New York: Springer Science Business Media Press, 2012.
[7] 杜旭,王夏泉.ASIC中的異步時序設(shè)計[J].微電子學(xué),2004,34(5):522?528.
[8] 趙永建,段國東,李苗.集成電路中的多時鐘域同步設(shè)計技術(shù)[J].計算機工程,2008,34(9):247?249.
[9] 徐翼,鄭建宏.異步時鐘域的亞穩(wěn)態(tài)問題和同步器[J].微計算機信息,2008,24(5):272?275.
[10] 謝修祥,王廣生.異步多時鐘系統(tǒng)的同步設(shè)計技術(shù)[J].電子工程師,2005,31(5):33?37.