文獻(xiàn)標(biāo)識碼: A
文章編號: 0258-7998(2010)12-0042-03
自從2003年XQVR4000XL成功運用于火星探測任務(wù)中后,國內(nèi)外航天領(lǐng)域?qū)ilinx FPGA產(chǎn)生了極其濃厚的興趣,這種SRAM工藝的FPGA被越來越多地運用到星載數(shù)字系統(tǒng)中,極大提高了系統(tǒng)的集成度。FPGA進行數(shù)據(jù)處理或數(shù)據(jù)傳輸時,需要使用到高速時鐘;而出于某些因素考慮,一些低速的接口、通信協(xié)議等模塊仍然繼續(xù)使用,而且與高速時鐘域還會有數(shù)據(jù)流交換、控制信號傳遞等操作,時鐘域間的操作對時序穩(wěn)定性提出了極其苛刻的要求。
本文基于實際項目需求[1],結(jié)合核心處理芯片XC2-V3000的特點,提出了一種基于全局時鐘網(wǎng)絡(luò),時鐘鑒相和FIFO緩沖的混合時鐘域設(shè)計方案,解決了工作在各個時鐘頻段的時鐘驅(qū)動、控制信號傳遞、數(shù)據(jù)流交換的問題。經(jīng)過硬件在線調(diào)試,驗證了這種方案確實可行,可提供高可靠性的時鐘信號。
1 混合時鐘域系統(tǒng)時序設(shè)計
FPGA內(nèi)時序電路根據(jù)時鐘驅(qū)動方式不同,可以分為同步時序電路和異步時序電路[2]。異步時序電路中觸發(fā)器的驅(qū)動是邏輯設(shè)計中的直接觸發(fā)事件,各觸發(fā)器的輸出并不同步變化,容易出現(xiàn)毛刺問題,一般很少采用。同步時序電路中,所有觸發(fā)器受同一個時鐘信號驅(qū)動,在時鐘信號的上升沿或下降沿到來時刻同步輸出結(jié)果。同步設(shè)計的系統(tǒng)功能可靠,實現(xiàn)簡單,絕大多數(shù)設(shè)計采用的都是這種設(shè)計方法。
同步設(shè)計時鐘信號一般從FPGA特定管腳輸入,模塊設(shè)計可以使用它作為驅(qū)動時鐘,同時,這個輸入時鐘經(jīng)過鎖相分頻或同步計數(shù)分頻等處理后又可以產(chǎn)生內(nèi)部時鐘。默認(rèn)情況下,分頻時鐘經(jīng)由普通布線路徑驅(qū)動相應(yīng)的模塊,被驅(qū)動模塊與分頻器的布線距離不一定相同,這樣會帶來隱患。
以兩個串聯(lián)模塊為例,如圖1所示,同一個時鐘通過不同路徑的可編程連線驅(qū)動這兩個模塊,其中模塊1的輸出作為模塊2的輸入。時鐘上升沿到來時刻,模塊2的次態(tài)取決于模塊1的現(xiàn)態(tài)。設(shè)tM1是模塊1的輸出建立時間,也就是時鐘上升沿到M1模塊輸出更新完畢的時間。設(shè)t1是分頻時鐘到達(dá)模塊1的時刻,t2是分頻時鐘到達(dá)模塊2的時刻。令Δt=t1-t2,功能設(shè)計時假設(shè)Δt=0,認(rèn)為時鐘到來時刻相同。由于分頻時鐘走的是普通可編程連線,Δt并不等于0。若Δt<0,模塊2先工作,模塊1 的輸出Data1尚未發(fā)生改變,模塊2的輸出仍然正確;若Δt>tM1,即模塊1先工作,而且工作結(jié)束輸出穩(wěn)定后模塊2才開始工作,這樣模塊2接收到的是模塊1的次態(tài),系統(tǒng)工作異常;若Δt在0到tM1之間,則系統(tǒng)工作在臨界狀態(tài)。在臨界狀態(tài)下,系統(tǒng)有可能工作正常,也有可能工作不正常。同步時序電路的時鐘偏差問題隱蔽性很強,不易分析。
時鐘源到所有由該時鐘驅(qū)動的觸發(fā)器的最大延時之差稱為時鐘偏差。針對解決時鐘偏差問題,本文提出了將所有驅(qū)動時鐘引入全局時鐘網(wǎng)絡(luò),不能引入全局網(wǎng)絡(luò)的時鐘作為普通控制信號處理的方案。
FPGA芯片內(nèi)部使用單獨的一層金屬布線層和相應(yīng)的可配置開關(guān),構(gòu)成一種接近中心散射的對稱梳妝全局時鐘網(wǎng)絡(luò),也稱作全局時鐘樹。全局時鐘網(wǎng)絡(luò)負(fù)載能力強,時鐘偏差、時鐘波形畸變小,工作可靠性好。在設(shè)計實現(xiàn)時,只要模塊使用全局時鐘作為驅(qū)動,設(shè)計工具會自動將工作在該時鐘域內(nèi)的所有觸發(fā)器平衡分布在時鐘樹上,使時鐘偏差最小。全局時鐘網(wǎng)絡(luò)驅(qū)動的同步時序電路時鐘偏差將不再影響系統(tǒng)正常工作。
在設(shè)計全局時鐘網(wǎng)絡(luò)時,要注意幾個問題:
(1)分頻時鐘信號質(zhì)量。計數(shù)分頻器產(chǎn)生的時鐘信號接入全局時鐘網(wǎng)絡(luò)前要手動添加一個寄存器,對該信號進行寄存器濾波,消除可能出現(xiàn)的信號毛刺。
(2)時鐘網(wǎng)絡(luò)的覆蓋性[3]。在器件XC2V3000的所有16個全局時鐘接入點(BUFG)中,8個是主時鐘接入點,8個是次時鐘接入點,分別對應(yīng)一個主接入點,如圖2所示。主接入點和次接入點引入的時鐘覆蓋范圍不一樣。主接入點的8個時鐘都可以驅(qū)動全部4個時區(qū)(Quadrant NW/NE/SW/SE),如果系統(tǒng)內(nèi)需要超過8個全局時鐘信號,則需要使用次接入點。次接入點與主接入點在硬件上并沒有本質(zhì)區(qū)別,只是次接入點的時鐘不能工作在它所對應(yīng)的主接入點的時區(qū)內(nèi)。
ISE在布局布線過程中會自動為設(shè)計代碼中的BUFG選擇合適的布局,低于8個全局時鐘信號時會全部選擇主接入點以獲得更優(yōu)化的布局,如有特殊情況需要進行手動布局,則需要留意這樣的位置約束。由于設(shè)計工具在布局時會沿著時鐘樹平衡分布,當(dāng)資源消耗量大的兩個或者多個時鐘網(wǎng)絡(luò)驅(qū)動同一個時區(qū)時,要充分考慮邏輯資源沖突問題。布局時資源緊張,不能進行優(yōu)化設(shè)計,可能產(chǎn)生臨界狀態(tài),并且導(dǎo)致功耗集中,局部發(fā)熱快、溫度高,長期工作會導(dǎo)致器件的性能下降。這種情況在邏輯資源比較緊張的設(shè)計中容易出現(xiàn),因此設(shè)計初期要進行資源預(yù)估,保證足夠的降額。Xilinx建議用戶設(shè)計資源利用率一般在60%~70%左右,超過這個范圍,系統(tǒng)性能將會受到影響。
全局時鐘樹可以實現(xiàn)芯片內(nèi)高速、中速、低速和甚低速任意組合的混合時鐘域設(shè)計,有助于將印刷板上原本使用專用器件完成的功能移植到FPGA上實現(xiàn),提高系統(tǒng)的集成度,在航天器微型化的發(fā)展中起關(guān)鍵作用。
使用全局時鐘樹實現(xiàn)的混合時鐘域設(shè)計中,時鐘域之間不可避免地會有控制信號傳遞和數(shù)據(jù)流的交換。如果這兩個時鐘有“沿對沿”的相位關(guān)系,可能會發(fā)生“時鐘碰撞”。觸發(fā)器工作過程中存在數(shù)據(jù)建立和保持時間的約束,如果不能滿足約束,觸發(fā)器就會進入某種不確定狀態(tài)——亞穩(wěn)態(tài)。如圖3所示,Clk1和Clk2的相位關(guān)系使得在某些時刻Clk1時鐘域輸出的數(shù)據(jù)Data還未完全建立,Clk2的上升沿便觸發(fā)了對這個數(shù)據(jù)的采集,進入到Clk2時鐘域的數(shù)據(jù)Data_Clk2便處于亞穩(wěn)態(tài)。這個亞穩(wěn)態(tài)數(shù)據(jù)會對Clk2時鐘域的工作狀態(tài)產(chǎn)生不可預(yù)期的影響,可能導(dǎo)致連鎖反應(yīng),甚至引起整體系統(tǒng)功能混亂。
為解決這個問題,提高同步時序設(shè)計可靠性,本文提出了基于時鐘鑒相和基于異步FIFO的解決方案。
當(dāng)信號在兩個頻率相差較大的時鐘域間傳遞時,時鐘鑒相法可以保證信號的可靠傳遞。低速時鐘域的信號向高速時鐘域傳遞的時序如圖4所示。使用高速時鐘對低速時鐘波形進行采樣,分別記錄采樣現(xiàn)態(tài)CLK_SL和兩個先前態(tài)CLK_SL_DL1、CLK_SL_DL2,根據(jù)這3個狀態(tài)可以判斷低速時鐘的相位。令STATE=CLK_SL& CLK_SL_DL1&CLK_SL_DL2,當(dāng)STATE=“100”時認(rèn)為采到低速時鐘的上升沿,假設(shè)低速信號在這個上升沿開始變化,則在STATE=“110”時,低速信號輸出穩(wěn)定,用采樣時鐘將此時的信號寄存,這樣就完成了低速信號到高速時鐘域的傳遞。高速時鐘域的信號向低速時鐘域傳遞時,同樣使用高速時鐘對低速時鐘進行采樣,記錄現(xiàn)態(tài)和兩個先前態(tài)。假設(shè)低速時鐘域中,低速時鐘在時鐘的上升沿采集控制信號,則當(dāng)STATE=“011”時,認(rèn)為是低速時鐘的下降沿,執(zhí)行對信號的賦值操作。在低速時鐘的上升沿,高速信號不刷新,低速時鐘域可以正確接收信號。
如果系統(tǒng)眾多時鐘里只有一個高速時鐘,其余都是低速或甚低速時鐘,可以利用時鐘鑒相法將混合時鐘域轉(zhuǎn)化為單一時鐘域。具體做法是使用高速時鐘觸發(fā)片內(nèi)所有觸發(fā)器,原低速時鐘驅(qū)動模塊改用高速時鐘驅(qū)動,低速時鐘作為一般控制信號或同步刷新信號使用。時鐘域單一化有利于實現(xiàn)同步設(shè)計,當(dāng)所用控制信號和數(shù)據(jù)流信號在同一個時刻觸發(fā)變化時,信號傳遞時的亞穩(wěn)態(tài)錯誤便不會存在,可以極大地提高系統(tǒng)的穩(wěn)定性。混合時鐘域單一化方法在模塊化設(shè)計中對每個觸發(fā)點都要做一次時鐘鑒相,增加了系統(tǒng)的資源消耗,而且設(shè)計代碼可讀性不強,移植性也不好。在大規(guī)模系統(tǒng)設(shè)計時,單一的高速時鐘驅(qū)動還會增加功耗。在大型復(fù)雜設(shè)計中并不推薦混合時鐘域單一化。
當(dāng)信號跨越的兩個時鐘域時鐘頻率比較接近時,時鐘鑒相法不能有效地相互鑒別時鐘相位,亞穩(wěn)態(tài)問題仍然威脅系統(tǒng)的可靠性。在兩個都是低速時鐘域的情況下,可以先將信號從源時鐘域中轉(zhuǎn)到高速時鐘域,然后再傳遞到目標(biāo)時鐘域。但中轉(zhuǎn)傳遞降低了工作效率而且增加了資源消耗,因此較少采用。
對于頻率比較接近的時鐘域間的信號傳遞,比較合理的方案是文獻(xiàn)[4]使用的異步FIFO數(shù)據(jù)緩存[4]。先進先出存儲器(FIFO)是一種專門用于數(shù)據(jù)緩沖和時鐘切換的存儲單元。FPGA內(nèi)支持同步和異步FIFO兩種IP核,時鐘域間數(shù)據(jù)傳遞使用的是異步FIFO。異步FIFO內(nèi)使用格雷碼計數(shù)器和交互握手信號,大大降低了兩個時鐘域的時鐘信號出現(xiàn)時鐘碰撞導(dǎo)致內(nèi)部狀態(tài)混亂的危險性。典型異步FIFO結(jié)構(gòu)如圖5所示。
源時鐘域中需要向目標(biāo)時鐘域傳遞的信號,不論是控制信號還是數(shù)據(jù)流信號,統(tǒng)一組合成STD_LOGIC_VECTOR類型的數(shù)據(jù),在刷新同步信號到來時置寫使能WR_EN有效,在源時鐘域的時鐘上升沿,若FIFO未滿,則將數(shù)據(jù)寫入FIFO。目標(biāo)時鐘域接收數(shù)據(jù)時判斷FIFO是否為空,若非空,則將數(shù)據(jù)讀出,還原。使用異步FIFO可以進行連續(xù)、高數(shù)據(jù)率的數(shù)據(jù)傳遞,功能可靠,使用簡單。但受片內(nèi)資源的限制,不能大范圍使用,而且源時鐘域和目標(biāo)時鐘域的時鐘頻率不能相差太大,否則會造成數(shù)據(jù)擁堵,增加資源消耗。
2 實際工程應(yīng)用
本文設(shè)計目標(biāo)系統(tǒng)是基于XC2V3000的極紫外探測器主控系統(tǒng),該系統(tǒng)外部輸入時鐘為100 MHz,系統(tǒng)內(nèi)共包含位置解碼算法模塊的驅(qū)動時鐘100 MHz,總線控制模塊的工作時鐘50 MHz,姿態(tài)調(diào)整機構(gòu)位置傳感器采樣時鐘12.5 MHz,LVDS數(shù)據(jù)傳輸驅(qū)動時鐘5 MHz,RS-422通信模塊工作時鐘500 kHz,以及姿態(tài)調(diào)整機構(gòu)驅(qū)動頻率400 Hz,跨越高速、中速、低速和甚低速4個時鐘域。根據(jù)本文提出的方案,將DCM和同步計數(shù)分頻器生成的時鐘全部通過主接入點導(dǎo)入全局時鐘網(wǎng)絡(luò),使這些時鐘均能覆蓋整個芯片面積。位置解碼算法模塊100 MHz時鐘域與總線控制模塊50 MHz時鐘域之間的信號傳遞使用異步FIFO,頻率在50 MHz以下的時鐘域使用時鐘鑒相法與50 MHz傳遞信號,相互之間不直接傳遞。
經(jīng)過后仿真測試和硬件調(diào)試的驗證,證明了本文提出的混合時鐘域解決方案確實可行,有助于提高集成度,并能極大提高系統(tǒng)的可靠性。
參考文獻(xiàn)
[1] 尼啟良,劉世界,陳波.極紫外位置靈敏陽極光子計數(shù)成像探測器研究[J].中國光學(xué)與應(yīng)用光學(xué),2009(1):35-39.
[2] 杜文志.星載FPGA內(nèi)時序電路設(shè)計與時鐘控制技術(shù)分析[J].航天器工程,2008(5):58-63.
[3] Virtex-II Platform FPGA User Guide.www.xilinx.com,2007.
[4] 冼友倫,盧護林,蘇濤.基于FPGA的多通道高速實時信號處理系統(tǒng)設(shè)計[J].電子技術(shù)應(yīng)用,2005(3):98-101.