俞帆+張偉欣
摘 要: 隨著FPGA設(shè)計(jì)中的時(shí)鐘頻率越來越高,時(shí)鐘方案越來越復(fù)雜,跨時(shí)鐘域問題變成了設(shè)計(jì)和驗(yàn)證中的關(guān)鍵點(diǎn)。為了解決跨時(shí)鐘域問題對(duì)FPGA設(shè)計(jì)造成功能錯(cuò)誤,對(duì)跨時(shí)鐘域信號(hào)采用兩級(jí)寄存器或多級(jí)寄存器同步、握手協(xié)議和異步FIFO等同步方法;同時(shí)還提出了不檢查時(shí)序、修改SDF文件和添加約束文件三種仿真中的技術(shù),解決了跨時(shí)鐘域產(chǎn)生的亞穩(wěn)態(tài)現(xiàn)象對(duì)FPGA仿真驗(yàn)證造成的影響。
關(guān)鍵詞: CDC; 亞穩(wěn)態(tài); 同步; 仿真
中圖分類號(hào): TN710?34 文獻(xiàn)標(biāo)識(shí)碼: A 文章編號(hào): 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)場(chǎng)可編程門陣列)設(shè)計(jì)中往往存在多個(gè)時(shí)鐘域,這就會(huì)帶來跨時(shí)鐘域(Clock Domain Crossing,CDC)問題。如果對(duì)跨時(shí)鐘域產(chǎn)生的亞穩(wěn)態(tài)等問題解決不當(dāng),就有可能造成設(shè)計(jì)功能錯(cuò)誤。本文就跨時(shí)鐘域問題產(chǎn)生的原因、在設(shè)計(jì)中的解決方法和仿真驗(yàn)證中的相關(guān)技術(shù)進(jìn)行闡述和討論,這對(duì)提高FPGA設(shè)計(jì)的可靠性有著重要的意義。
1 亞穩(wěn)態(tài)
在數(shù)字集成電路中,寄存器要滿足建立時(shí)間(setup time)和保持時(shí)間(hold time)的時(shí)序要求。建立時(shí)間是指在時(shí)鐘沿到來之前,寄存器輸入數(shù)據(jù)信號(hào)必須保持穩(wěn)定的時(shí)間。保持時(shí)間是指在時(shí)鐘沿之后,數(shù)據(jù)信號(hào)必須保持穩(wěn)定的時(shí)間。亞穩(wěn)態(tài)(Metastability)現(xiàn)象就是如果寄存器數(shù)據(jù)端的變化與時(shí)鐘的有效沿很近(不能滿足建立時(shí)間或保持時(shí)間要求),其輸出信號(hào)就會(huì)在一段不可預(yù)知長(zhǎng)度的時(shí)間內(nèi)處于一個(gè)非“0”非“1”的中間狀態(tài)(這段時(shí)間稱為亞穩(wěn)態(tài)恢復(fù)時(shí)間),之后可能穩(wěn)定在“1”狀態(tài),也可能穩(wěn)定在“0” 狀態(tài)。而且這種亞穩(wěn)態(tài)可能向后傳播,造成后級(jí)出現(xiàn)邏輯錯(cuò)誤。
亞穩(wěn)態(tài)的形成過程如圖1所示,時(shí)鐘域aclk的輸出信號(hào)adat從高到低的變化與時(shí)鐘bclk的上升沿非常接近,不滿足建立時(shí)間或保持時(shí)間的要求,輸出信號(hào)bdat1就會(huì)有亞穩(wěn)態(tài)產(chǎn)生,經(jīng)過一段時(shí)間后隨機(jī)穩(wěn)定在“1”或“0”上。當(dāng)亞穩(wěn)態(tài)產(chǎn)生的不確定電平被后續(xù)電路采樣時(shí),就可能發(fā)生功能錯(cuò)誤。
圖1 亞穩(wěn)態(tài)示意圖
亞穩(wěn)態(tài)現(xiàn)象是寄存器的一個(gè)固有特點(diǎn),由于亞穩(wěn)態(tài)恢復(fù)時(shí)間的不確定性,不能根本的去除亞穩(wěn)態(tài)的影響。通過在設(shè)計(jì)中預(yù)留一定的亞穩(wěn)態(tài)恢復(fù)時(shí)間,使信號(hào)恢復(fù)到確定的電平后參與邏輯運(yùn)算,降低亞穩(wěn)態(tài)的影響。MTBF(Mean Time Between Failure,平均無故障時(shí)間)是衡量一個(gè)設(shè)計(jì)的可靠性指標(biāo),MTBF的值越大,則出現(xiàn)亞穩(wěn)態(tài)問題的概率越小。一個(gè)高的平均無故障時(shí)間表明一個(gè)設(shè)計(jì)是可靠的。MTBF的計(jì)算公式如下所示:
[MTBF=eTmetC2C1?fclk?fdata]
式中:[Tmet]為寄存器從時(shí)鐘上升沿觸發(fā)后的時(shí)序余量時(shí)間;[fclk]為接收時(shí)鐘域的時(shí)鐘頻率;[fdata]為數(shù)據(jù)的變化頻率;[C1]和[C2]為與FPGA器件有關(guān)的參數(shù)。可以通過延長(zhǎng)[Tmet]的時(shí)間或降低[fclk]和[fdata]的頻率來增大MTBF的值。
[Tmet]的計(jì)算公式為:
[Tmet]=采樣時(shí)鐘周期時(shí)間-輸出信號(hào)的[Tco]時(shí)間-數(shù)據(jù)到達(dá)下一級(jí)寄存器輸入端口的延時(shí)時(shí)間[Tdata-]下一級(jí)寄存器時(shí)間[Tsu]
式中:[Tco]為輸出相對(duì)于時(shí)鐘沿之后的延時(shí)時(shí)間;[Tsu]為輸入相對(duì)于時(shí)鐘沿所需的建立時(shí)間。精確的說,[Tmet]時(shí)間還應(yīng)該加上時(shí)鐘網(wǎng)絡(luò)延時(shí)時(shí)間[(Tclk2-Tclk1)。]如圖2所示。
圖2 寄存器采集數(shù)據(jù)示意圖
因?yàn)閇Tco]和[Tsu]是由FPGA器件的工藝以及工作環(huán)境決定的,時(shí)鐘網(wǎng)絡(luò)延時(shí)時(shí)間很大程度上也是由FPGA器件決定。所以在時(shí)鐘頻率[fclk]和數(shù)據(jù)變化頻率[fdata]固定的情況下,只有減小[Tdata]的值才能增大[Tmet]的值。而[Tdata]是指兩個(gè)寄存器之間的邏輯延時(shí)以及連線延時(shí)之和,為了使[Tdata]最小,兩個(gè)寄存器之間應(yīng)該沒有任何邏輯。
2 同步方法
2.1 兩級(jí)寄存器同步
根據(jù)上面的分析,為了防止新時(shí)鐘域中的第一級(jí)寄存器的亞穩(wěn)態(tài)信號(hào)對(duì)下級(jí)邏輯造成影響,可以采用兩級(jí)寄存器同步的方法。具體電路如圖3所示。
在圖3中可以看出,時(shí)鐘域bclk的第一級(jí)寄存器的輸出信號(hào)bdat1如果存在亞穩(wěn)態(tài),經(jīng)過1個(gè)時(shí)鐘周期后,bdat1的亞穩(wěn)態(tài)趨于穩(wěn)定,第二級(jí)寄存器就能夠采樣到穩(wěn)定的值,輸出信號(hào)bdat2不會(huì)產(chǎn)生亞穩(wěn)態(tài)。
在一些高速的設(shè)計(jì)中,可能兩級(jí)寄存器同步也無法獲得足夠的MTBF,第一級(jí)寄存器輸出的亞穩(wěn)態(tài)保持了足夠長(zhǎng)的時(shí)間,導(dǎo)致第二級(jí)輸出還有亞穩(wěn)態(tài),這時(shí)就需要采用三級(jí)寄存器或者更多級(jí)寄存器的方法來同步。
圖3 兩級(jí)寄存器同步
2.2 從快時(shí)鐘域到慢時(shí)鐘域
當(dāng)接收時(shí)鐘域的頻率滿足大于1.5倍發(fā)送時(shí)鐘域的頻率時(shí),可以直接用兩級(jí)寄存器同步。但是如果發(fā)送時(shí)鐘域的頻率大于接收時(shí)鐘域的頻率時(shí),如果直接用兩級(jí)寄存器同步,跨時(shí)鐘域信號(hào)可能不能正常采樣,造成數(shù)據(jù)丟失。比較可靠的方法是跨時(shí)鐘域信號(hào)的電平寬度大于1.5倍的接收時(shí)鐘周期,這樣就可以保證跨時(shí)鐘域信號(hào)正常采樣。
可以在設(shè)計(jì)時(shí)直接在發(fā)送時(shí)鐘域里把跨時(shí)鐘域信號(hào)展寬到大于1.5倍的接收時(shí)鐘周期,也可以采用握手協(xié)議。握手協(xié)議的原理是:在發(fā)送時(shí)鐘域里將所要傳輸?shù)臄?shù)據(jù)準(zhǔn)備好,再產(chǎn)生一個(gè)標(biāo)志信號(hào)通過同步器傳遞到接收時(shí)鐘域告訴它來讀取數(shù)據(jù),當(dāng)接收時(shí)鐘域的控制邏輯檢測(cè)到這個(gè)信號(hào)后會(huì)將發(fā)送時(shí)鐘域準(zhǔn)備好的數(shù)據(jù)讀進(jìn)來,然后會(huì)產(chǎn)生一個(gè)傳輸完成信號(hào)告訴發(fā)送時(shí)鐘域數(shù)據(jù)讀取完畢,最后發(fā)送時(shí)鐘域接收到這個(gè)信號(hào)后會(huì)撤銷標(biāo)志信號(hào),完成一次數(shù)據(jù)傳輸。
使用握手協(xié)議可以進(jìn)行從快時(shí)鐘域向慢時(shí)鐘域的傳輸,也可以進(jìn)行多位數(shù)據(jù)的傳輸。
2.3 異步FIFO
在多位數(shù)據(jù)進(jìn)行跨時(shí)鐘傳輸時(shí)還可以使用異步FIFO。異步FIFO是一種先進(jìn)先出電路,用來進(jìn)行2個(gè)異步時(shí)鐘之間的數(shù)據(jù)傳輸。FIFO的存儲(chǔ)介質(zhì)為一塊雙端口RAM,可以同時(shí)進(jìn)行讀寫操作。在寫時(shí)鐘域部分,由寫地址產(chǎn)生邏輯產(chǎn)生寫控制信號(hào)和寫地址;讀時(shí)鐘域部分由讀地址產(chǎn)生邏輯產(chǎn)生讀控制信號(hào)和讀地址。在空/滿標(biāo)志產(chǎn)生部分,由讀寫地址相互比較產(chǎn)生空/滿標(biāo)志。
異步FIFO的指針邏輯使用格雷碼,代替了通常使用的二進(jìn)制碼。格雷碼在每次計(jì)數(shù)時(shí)只改變其中的一位??梢栽诟窭状a總線上使用同步器,因?yàn)槊恳淮慰偩€改變時(shí)只有一根信號(hào)線有變化,于是就消除了格雷碼總線各位數(shù)據(jù)通過不同同步器時(shí)的競(jìng)爭(zhēng)情況。
3 仿真中的相關(guān)技術(shù)
當(dāng)使用仿真工具對(duì)FPGA設(shè)計(jì)進(jìn)行后仿真時(shí),如果存在跨時(shí)鐘域問題,不滿足建立時(shí)間或保持時(shí)間的要求就會(huì)產(chǎn)生亞穩(wěn)態(tài),仿真工具無法確定當(dāng)前的值,輸出變?yōu)椴欢☉B(tài)X。X態(tài)會(huì)往后傳播,造成仿真失敗。
在某FPGA設(shè)計(jì)做后仿真時(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中可以看出,時(shí)鐘clkin_t的下降沿與寄存器的輸入信號(hào)\clk_cnt_3[0]跳變沿的建立時(shí)間無法滿足,產(chǎn)生亞穩(wěn)態(tài),輸出信號(hào)\clk_cnt[0]_net_1變?yōu)閄。亞穩(wěn)態(tài)向后傳播,造成仿真無法正常進(jìn)行。為了解決仿真中的這個(gè)問題,可以采用以下一些技術(shù)。
3.1 不進(jìn)行時(shí)序檢查
通過在仿真時(shí)添加命令讓仿真器不進(jìn)行時(shí)序檢查。以Synopsys公司的仿真器VCS為例,可以在編譯時(shí)添加命令+notimingcheck,VCS工具就不會(huì)檢查時(shí)序,當(dāng)建立時(shí)間或保持時(shí)間不滿足時(shí),也不會(huì)產(chǎn)生X態(tài)。這種方法的弊端是所有的邏輯單元均不會(huì)檢查時(shí)序。
3.2 修改SDF文件
還可以對(duì)違反時(shí)序的單元直接修改SDF文件中的時(shí)序約束。在該例子中,違反時(shí)序的單元是寄存器\clk_cnt[0],通過查找SDF文件,可以看到該寄存器的時(shí)序約束如圖5所示。
圖5 SDF文件中違反時(shí)序約束的寄存器
該寄存器違反的是輸入數(shù)據(jù)相對(duì)于時(shí)鐘下降沿的建立時(shí)間約束,可以在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ù)相對(duì)于時(shí)鐘下降沿的建立時(shí)間大于0就能滿足時(shí)序要求,也就不會(huì)產(chǎn)生X態(tài)。
3.3 添加vcs_cfg文件
除了上面兩種方法,VCS仿真器還可以采用編寫vcs_cfg文件的方法來對(duì)一些特定的單元不檢查時(shí)序。此方法在編譯時(shí)要添加命令+optconfigfile+vcs_cfg,該例子中編寫的vcs_cfg文件內(nèi)容為:
instance {top_tb.uut.\clk_cnt[0] } {noTiming};
通過此方法,只對(duì)寄存器\clk_cnt[0]不檢查時(shí)序,不影響其他的邏輯單元。以上三種方法都可以解決后仿真中亞穩(wěn)態(tài)現(xiàn)象出X態(tài)的問題,消除X態(tài)后的仿真波形圖如圖6所示,仿真可以正常運(yùn)行。
圖6 消除X態(tài)后的仿真波形圖
4 結(jié) 論
隨著FPGA設(shè)計(jì)的復(fù)雜化,時(shí)鐘頻率更高,時(shí)鐘方案更復(fù)雜,對(duì)跨時(shí)鐘域信號(hào)做同步處理的方法越來越重要,同時(shí)在仿真驗(yàn)證時(shí)怎樣處理跨時(shí)鐘域信號(hào)也非常關(guān)鍵。本文詳細(xì)闡述了跨時(shí)鐘問題產(chǎn)生的原因,平均無故障時(shí)間MTBF的影響因素,跨時(shí)鐘域的同步方法,最后針對(duì)具體的FPGA設(shè)計(jì),在后仿真時(shí)產(chǎn)生亞穩(wěn)態(tài)問題的幾種解決方法進(jìn)行了重點(diǎn)的介紹,通過這些方法,可以使跨時(shí)鐘域產(chǎn)生的亞穩(wěn)態(tài)問題不影響后仿真驗(yàn)證。
參考文獻(xiàn)
[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è)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(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í)序設(shè)計(jì)[J].微電子學(xué),2004,34(5):522?528.
[8] 趙永建,段國(guó)東,李苗.集成電路中的多時(shí)鐘域同步設(shè)計(jì)技術(shù)[J].計(jì)算機(jī)工程,2008,34(9):247?249.
[9] 徐翼,鄭建宏.異步時(shí)鐘域的亞穩(wěn)態(tài)問題和同步器[J].微計(jì)算機(jī)信息,2008,24(5):272?275.
[10] 謝修祥,王廣生.異步多時(shí)鐘系統(tǒng)的同步設(shè)計(jì)技術(shù)[J].電子工程師,2005,31(5):33?37.
instance {top_tb.uut.\clk_cnt[0] } {noTiming};
通過此方法,只對(duì)寄存器\clk_cnt[0]不檢查時(shí)序,不影響其他的邏輯單元。以上三種方法都可以解決后仿真中亞穩(wěn)態(tài)現(xiàn)象出X態(tài)的問題,消除X態(tài)后的仿真波形圖如圖6所示,仿真可以正常運(yùn)行。
圖6 消除X態(tài)后的仿真波形圖
4 結(jié) 論
隨著FPGA設(shè)計(jì)的復(fù)雜化,時(shí)鐘頻率更高,時(shí)鐘方案更復(fù)雜,對(duì)跨時(shí)鐘域信號(hào)做同步處理的方法越來越重要,同時(shí)在仿真驗(yàn)證時(shí)怎樣處理跨時(shí)鐘域信號(hào)也非常關(guān)鍵。本文詳細(xì)闡述了跨時(shí)鐘問題產(chǎn)生的原因,平均無故障時(shí)間MTBF的影響因素,跨時(shí)鐘域的同步方法,最后針對(duì)具體的FPGA設(shè)計(jì),在后仿真時(shí)產(chǎn)生亞穩(wěn)態(tài)問題的幾種解決方法進(jìn)行了重點(diǎn)的介紹,通過這些方法,可以使跨時(shí)鐘域產(chǎn)生的亞穩(wěn)態(tài)問題不影響后仿真驗(yàn)證。
參考文獻(xiàn)
[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è)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(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í)序設(shè)計(jì)[J].微電子學(xué),2004,34(5):522?528.
[8] 趙永建,段國(guó)東,李苗.集成電路中的多時(shí)鐘域同步設(shè)計(jì)技術(shù)[J].計(jì)算機(jī)工程,2008,34(9):247?249.
[9] 徐翼,鄭建宏.異步時(shí)鐘域的亞穩(wěn)態(tài)問題和同步器[J].微計(jì)算機(jī)信息,2008,24(5):272?275.
[10] 謝修祥,王廣生.異步多時(shí)鐘系統(tǒng)的同步設(shè)計(jì)技術(shù)[J].電子工程師,2005,31(5):33?37.
instance {top_tb.uut.\clk_cnt[0] } {noTiming};
通過此方法,只對(duì)寄存器\clk_cnt[0]不檢查時(shí)序,不影響其他的邏輯單元。以上三種方法都可以解決后仿真中亞穩(wěn)態(tài)現(xiàn)象出X態(tài)的問題,消除X態(tài)后的仿真波形圖如圖6所示,仿真可以正常運(yùn)行。
圖6 消除X態(tài)后的仿真波形圖
4 結(jié) 論
隨著FPGA設(shè)計(jì)的復(fù)雜化,時(shí)鐘頻率更高,時(shí)鐘方案更復(fù)雜,對(duì)跨時(shí)鐘域信號(hào)做同步處理的方法越來越重要,同時(shí)在仿真驗(yàn)證時(shí)怎樣處理跨時(shí)鐘域信號(hào)也非常關(guān)鍵。本文詳細(xì)闡述了跨時(shí)鐘問題產(chǎn)生的原因,平均無故障時(shí)間MTBF的影響因素,跨時(shí)鐘域的同步方法,最后針對(duì)具體的FPGA設(shè)計(jì),在后仿真時(shí)產(chǎn)生亞穩(wěn)態(tài)問題的幾種解決方法進(jìn)行了重點(diǎn)的介紹,通過這些方法,可以使跨時(shí)鐘域產(chǎn)生的亞穩(wěn)態(tài)問題不影響后仿真驗(yàn)證。
參考文獻(xiàn)
[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è)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(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í)序設(shè)計(jì)[J].微電子學(xué),2004,34(5):522?528.
[8] 趙永建,段國(guó)東,李苗.集成電路中的多時(shí)鐘域同步設(shè)計(jì)技術(shù)[J].計(jì)算機(jī)工程,2008,34(9):247?249.
[9] 徐翼,鄭建宏.異步時(shí)鐘域的亞穩(wěn)態(tài)問題和同步器[J].微計(jì)算機(jī)信息,2008,24(5):272?275.
[10] 謝修祥,王廣生.異步多時(shí)鐘系統(tǒng)的同步設(shè)計(jì)技術(shù)[J].電子工程師,2005,31(5):33?37.