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