黃 琳,王 新,胡成輝
(南京賽寶工業(yè)技術(shù)研究院,江蘇 南京 210000)
隨著數(shù)字化時代的發(fā)展,F(xiàn)PGA的應(yīng)用越來越廣泛,在航空航天,雷達電子,汽車等領(lǐng)域中發(fā)揮了重要作用。國際的FPGA公司XILINX、ALTERA等所出產(chǎn)的FPGA芯片容量也越來越大,各個行業(yè)的FPGA設(shè)計師在使用時會出現(xiàn)各種各樣的問題。跨時鐘域設(shè)計是各設(shè)計師必然會碰到的問題[1]。由于跨時鐘的異步系統(tǒng)內(nèi)含有多個時鐘源,它們存在頻率和相位的差異,當(dāng)他們用作寄存器的輸入時鐘時就可能違背建立時間和保持時間的要求,出現(xiàn)亞穩(wěn)態(tài)的現(xiàn)象[2]。
針對跨時鐘域設(shè)計中出現(xiàn)的問題,設(shè)計了一種基于底層FPGA硬件架構(gòu)為核心的FPGA跨時鐘域設(shè)計,能夠讓設(shè)計師在進行FPGA設(shè)計時充分理解程序在芯片上運行的過程,避免時序錯誤。
在FPGA的設(shè)計中,任何信號均需滿足“建立時間”和“保持時間”兩個參數(shù)?!敖r間”是指在時鐘沿到來之前,觸發(fā)器輸入信號必須保持穩(wěn)定的時間?!氨3謺r間”則是指在時鐘沿之后,信號必須要保持穩(wěn)定的時間。如果輸入信號不滿足這個規(guī)則,觸發(fā)器的輸出信號則會進入亞穩(wěn)態(tài)。
在跨時鐘域的設(shè)計中,時鐘域A信號的翻轉(zhuǎn)時間和時鐘B沒有必然的聯(lián)系,則該信號進入時鐘域B內(nèi)的觸發(fā)器時就有可能不滿足建立時間和保持時間的規(guī)則,由此出現(xiàn)時序程序運行不穩(wěn)定、出現(xiàn)亞穩(wěn)態(tài)等現(xiàn)象。
如圖1所示的verilog程序。
圖1 跨時鐘域程序
圖1中的verilog代碼中,clk_en信號為來自另一個時鐘域的使能信號,cnt_en為本時鐘域的控制信號,其功能仿真結(jié)果如圖2所示。
圖2 功能仿真圖
在圖1中的例子中,期望的底層實現(xiàn)為:CE=clk_en&cnt_en;
R=rst|(~clk_en).
如圖3所示,信號通過與門和或門實現(xiàn)信號的使能和復(fù)位,最后進行輸出。而實際FPGA底層運行的硬件架構(gòu)如圖4所示。
圖3 期望的跨時鐘域底層實現(xiàn)圖
圖4 實際跨時鐘域底層信號實現(xiàn)圖
CE=~(clk_en&~(cnt_en))=(~clk_en)|cnt_en;
D=clk_en(Q+1):0
由于FPGA底層布局布線和所期望的布局布線不同,造成實際運行時產(chǎn)生了亞穩(wěn)態(tài)的現(xiàn)象,具體到現(xiàn)象上,便會出現(xiàn)程序偶爾正常,偶爾不正常的現(xiàn)象出現(xiàn)。
當(dāng)異步信號clk_en拉起的時候,由于clk_en的上升沿到達時間是clk上升沿之前較長時間,由clk_en經(jīng)過組合邏輯產(chǎn)生的寄存器的使能FF_CE和數(shù)據(jù)FF_D的變化都滿足建立時間和保持時間,此時,輸出的結(jié)果符合預(yù)期,如圖5所示。
圖5 程序正常時的時序圖
若當(dāng)clk_en拉起時,clk_en的上升沿到達時間是CLK上升沿之前較短時間,并且由于寄存器使能FF_CE的延時較大,晚于CLK上升沿到達寄存器,再者由于寄存器數(shù)據(jù)FF_D的延時較小,早于CLK上升沿到達寄存器。此時在clk_en的上升沿便會出現(xiàn)一個不希望的計數(shù)值。如圖6所示。
圖6 程序異常時的時序圖
通過上面的分析,可以看出,出現(xiàn)該問題的原因是同時滿足了幾個條件,1)clk_en為跨時鐘域信號,無法保證其到達時間;2)實際的寄存器CE信號在clk_en為低時為高電平,不是期望的低電平;3)FF_CE的延時長,F(xiàn)F_D的延時短。
由于以上原因,造成在clk_en這個跨時鐘域信號來時無法滿足建立時間和保持時間,造成亞穩(wěn)態(tài)的產(chǎn)生。
由上節(jié)中的分析可知,當(dāng)跨時鐘域信號來時,若不進行處理,則無法保證不出現(xiàn)時序問題。針對該段程序的處理方法為避免對跨時鐘域信號的直接使用,采用同步復(fù)位的方式,并且恰當(dāng)調(diào)整分支語句的寫法,使FPGA底層布局布線能夠按照期望的進行,修改后的程序如下所示。
圖7 修改后程序
FPGA底層實現(xiàn)框圖如圖8所示。
如圖8所示,修改后的程序不會出現(xiàn)由于clk_en為低的時候,寄存器CE為高電平,不是期望的低電平,因此不會出現(xiàn)亞穩(wěn)態(tài)的現(xiàn)象。
圖8 FPGA底層實現(xiàn)框圖
跨時鐘域問題在復(fù)雜的FPGA設(shè)計中是必不可少的。對于跨時鐘域的設(shè)計,一般的設(shè)計師僅根據(jù)verilog語言的邏輯進行程序編寫,這樣容易造成在FPGA進行布局布線時不會按照期望的樣子進行布局布線,因此,需要設(shè)計師理解底層FPGA布局布線的規(guī)則,根據(jù)其規(guī)則進行程序編寫,這樣可減少在跨時鐘域設(shè)計過程中出現(xiàn)問題的概率,確保復(fù)雜FPGA設(shè)計的正確性,提高系統(tǒng)的可靠性。