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