Xilinx FPGA的Fast Startup
在眾多當(dāng)代應(yīng)用中,嵌入式系統(tǒng)必須滿足極其苛刻的時(shí)序要求。其中之一就是啟動(dòng)時(shí)間——即上電后電子系統(tǒng)進(jìn)入可操作狀態(tài)所需要的時(shí)間。PCI Express®產(chǎn)品或汽車應(yīng)用中基于CAN的電子控制單元(ECU)就是具有嚴(yán)格時(shí)序要求的電子系統(tǒng)的應(yīng)用實(shí)例。
標(biāo)準(zhǔn)PCI Express®(PCIe)系統(tǒng)上電后僅100毫秒,系統(tǒng)的根組件就開(kāi)始掃描總線以便弄清拓?fù)浣Y(jié)構(gòu),并在這一過(guò)程中進(jìn)行初始化配置。 如果PCIe設(shè)備沒(méi)有準(zhǔn)備好響應(yīng)配置請(qǐng)求,根組件就找不到此PCIe設(shè)備,并認(rèn)為它不存在。該設(shè)備將無(wú)法加入PCIe總線系統(tǒng)。[1]
汽車應(yīng)用中的情形與此大體相仿。在基于CAN的網(wǎng)絡(luò)中,ECU進(jìn)入睡眠模式,這時(shí)它們將停止運(yùn)行并切斷電源連接。只有很少部分電路仍然保持戒備狀態(tài),以便探測(cè)喚醒信號(hào)。一旦出現(xiàn)喚醒事件,ECU就會(huì)重新連接電源并開(kāi)始引導(dǎo)。雖然在喚醒事件后的頭一個(gè)100 毫秒內(nèi)允許錯(cuò)過(guò)一些消息,但在此之后所有ECU都必須在網(wǎng)絡(luò)(如CAN網(wǎng)絡(luò))上做好充分的運(yùn)行準(zhǔn)備。
Xilinx Automotive、Xilinx研究實(shí)驗(yàn)室以及德國(guó)卡爾斯魯厄技術(shù)研究所之間合作展開(kāi)了深入的研發(fā)工作,正在設(shè)法通過(guò)一種兩步配置方法解決這一問(wèn)題。
半導(dǎo)體行業(yè)的科技趨勢(shì)已經(jīng)能使FPGA廠家大大增加其器件中的資源。但比特流規(guī)模也在成比例地增長(zhǎng),配置器件需要FPGA的時(shí)間也是如此。因此,即使對(duì)于中等規(guī)模的FPGA,使用低成本配置方案也不可能滿足嚴(yán)格的啟動(dòng)時(shí)序要求。圖1表示不同的Xilinx® Spartan®-6 FPGA器件在使用低成本SPI/Quad-SPI配置接口時(shí)的配置時(shí)間。即使使用快速配置方案(即在40 MHz配置時(shí)鐘下運(yùn)行的Quad-SPI),也只有小型FPGA器件才能達(dá)到100 毫秒的啟動(dòng)時(shí)序要求。對(duì)于Xilinx Virtex®-6器件來(lái)說(shuō),這個(gè)結(jié)果看來(lái)更具挑戰(zhàn)性,因?yàn)檫@些器件提供了更豐富的FPGA資源。
為了克服這個(gè)難題,F(xiàn)ast Startup分兩步配置FPGA器件,而非單步(整片)的全器件配置。按照這種新穎的思路,我們的策略是在上電時(shí)使用最高優(yōu)先級(jí)比特流僅載入時(shí)序關(guān)鍵模塊,然后再載入非時(shí)序關(guān)鍵模塊。這種方法最大程度地減少了初始配置數(shù)據(jù),從而最大程度地減少了在面向時(shí)序關(guān)鍵設(shè)計(jì)的FPGA器件啟動(dòng)時(shí)間。
FAST STARTUP對(duì)比部分重配置
Fast Startup允許FPGA設(shè)計(jì)盡快啟動(dòng)設(shè)計(jì)的關(guān)鍵模塊,關(guān)鍵模塊的啟動(dòng)速度比標(biāo)準(zhǔn)全配置方法要快得多[2]。雖然,從本質(zhì)上來(lái)講Fast Startup利用了部分重配置,但它與這種方法的傳統(tǒng)概念所有不同。部分重配置的初衷是將完整設(shè)計(jì)作為可在運(yùn)行時(shí)修改的初始配置使用。相反,F(xiàn)ast Startup已經(jīng)使用了一個(gè)初始的部分比特流,以在上電時(shí)僅僅配置FPGA器件的一個(gè)特定(很小的一部分)區(qū)域。第一次配置僅包含完整FPGA設(shè)計(jì)中必須配置和快速運(yùn)行的那些部分。而剩下的部分則在以后、在運(yùn)行時(shí),利用部分重配置進(jìn)行配置。圖2說(shuō)明了這一順序概念。
工具流程概述
Fast Startup的工具流程依靠設(shè)計(jì)保存流程,來(lái)創(chuàng)建針對(duì)時(shí)序關(guān)鍵子系統(tǒng)及非時(shí)序關(guān)鍵子系統(tǒng)的部分比特流。
設(shè)計(jì)保存流程將FPGA設(shè)計(jì)分割為邏輯模塊(稱為“分區(qū)”)。分區(qū)構(gòu)成了層次邊界,將內(nèi)部模塊與設(shè)計(jì)中的其他組件相互隔離。分區(qū)一旦實(shí)現(xiàn)(即完成布局和布線),就能被其他實(shí)現(xiàn)運(yùn)行導(dǎo)入,以按照每個(gè)實(shí)例中完全相同的方式實(shí)現(xiàn)該分區(qū)的模塊[3]。
因此,使用Fast Startup方法的第一步是將完整的FPGA設(shè)計(jì)分成兩部分:即含有時(shí)序關(guān)鍵子系統(tǒng)的高優(yōu)先級(jí)分區(qū)和針對(duì)其余組件的低優(yōu)先級(jí)分區(qū)。
圖2 – Fast Startup概念:順序配置
為了得到盡可能小的高優(yōu)先級(jí)分區(qū)的部分比特流,設(shè)計(jì)中有一些一般性問(wèn)題需要考慮。首先,該分區(qū)必須只能包含此類組件:或者是時(shí)序關(guān)鍵組件,或者是系統(tǒng)需要這些組件來(lái)執(zhí)行低優(yōu)先級(jí)部分(如ICAP)的部分重配置。得到小規(guī)模初始部分比特流的關(guān)鍵是使用盡可能小的區(qū)域?qū)崿F(xiàn)高優(yōu)先級(jí)分區(qū)。也就是說(shuō),您必須將這個(gè)分區(qū)局限在FPGA中的一個(gè)適當(dāng)區(qū)域中。
為了在FPGA中找到理想的物理位置,這個(gè)區(qū)域應(yīng)該提供該設(shè)計(jì)需要的適當(dāng)數(shù)量的資源。訪問(wèn)該區(qū)域以外的資源也是可行的,但我們不鼓勵(lì)這么做——盡管對(duì)于I/O引腳來(lái)說(shuō),
這樣做一般是無(wú)法避免的。在尋找適當(dāng)區(qū)域時(shí),還要牢記的是這個(gè)FPGA區(qū)域有可能會(huì)妨礙FPGA設(shè)計(jì)中非時(shí)序關(guān)鍵部分的資源。
當(dāng)您已經(jīng)對(duì)FPGA進(jìn)行分區(qū),且已經(jīng)找到了這些分區(qū)的適當(dāng)區(qū)域之后,下一步就是使用一個(gè)空的(黑盒子)低優(yōu)先級(jí)分區(qū)實(shí)現(xiàn)高優(yōu)先級(jí)分區(qū)。得到的比特流含有很多針對(duì)未使用資源的配置幀。您可以刪除這些幀,以便得到針對(duì)初步配置高優(yōu)先級(jí)分區(qū)的有效部分比特流。[4]
低優(yōu)先級(jí)分區(qū)的實(shí)現(xiàn)
為了創(chuàng)建低優(yōu)先級(jí)的部分比特流,首先,您要?jiǎng)?chuàng)建含有這兩個(gè)分區(qū)(即高優(yōu)先級(jí)分區(qū)和低優(yōu)先級(jí)分區(qū))的完整FPGA設(shè)計(jì)的實(shí)現(xiàn)。從以前的實(shí)現(xiàn)中導(dǎo)入高優(yōu)先級(jí)分區(qū),從而保證其實(shí)現(xiàn)方法與原來(lái)的實(shí)現(xiàn)方法相同。
對(duì)于Virtex-6器件而言,部分重配置(PR)流程可用于所有上述的實(shí)現(xiàn)。這樣,就會(huì)自動(dòng)得到針對(duì)低優(yōu)先級(jí)分區(qū)的部分比特流。由于Spartan-6器件 系列不支持PR流程,在實(shí)現(xiàn)針對(duì)Spartan-6設(shè)計(jì)的Fast Startup時(shí),我們使用了針對(duì)差異化的部分重配置的BitGen選項(xiàng),以獲得低優(yōu)先級(jí)分區(qū)的部分比特流。[5]圖3給出了該工具流程的高層概覽。
圖3 – Fast Startup工具流程
為了在硬件中驗(yàn)證Fast Startup配置方法,我們的研究小組在一塊Virtex-6 ML605板和一塊Spartan-6 SP605板上實(shí)現(xiàn)了這種方法。
Virtex-6實(shí)現(xiàn)的應(yīng)用背景源自視頻領(lǐng)域。用戶接通視頻系統(tǒng)電源時(shí),他們總是希望立刻就看到系統(tǒng)有所響應(yīng),而不用等待數(shù)秒。因此,在圖4所示的系統(tǒng)中,一個(gè)配備了TFT控制器的高優(yōu)先級(jí)子系統(tǒng)可以迅速點(diǎn)亮TFT屏幕。對(duì)于其他低優(yōu)先級(jí)應(yīng)用,即第二個(gè)設(shè)計(jì)提供了對(duì)以太網(wǎng)內(nèi)核、UART和硬件計(jì)時(shí)器的控制和訪問(wèn)。
為方便擴(kuò)展和清晰隔離兩個(gè)分區(qū),我們使用了AXI至AXI橋接器。這也在最大程度上減少了穿過(guò)兩個(gè)設(shè)計(jì)分區(qū)邊界的網(wǎng)絡(luò)。低優(yōu)先級(jí)分區(qū)與高優(yōu)先級(jí)分區(qū)共享系統(tǒng)時(shí)鐘。
表1表示FPGA資源利用情況,表2表示傳統(tǒng)啟動(dòng)方法、僅有高優(yōu)先級(jí)分區(qū)壓縮比特流的啟動(dòng)方法[6]和Fast Startup配置方法的配置時(shí)間。每種方法都使用BPIx16配置接口,而采用的配置速率(這個(gè)選項(xiàng)決定了目標(biāo)配置時(shí)鐘頻率)為2 MHz和10 MHz。我們使用一臺(tái)示波器測(cè)量了該數(shù)據(jù),捕獲了FPGA的“init”和“done”信號(hào)。 表2中“壓縮的”一欄表示僅有高優(yōu)先級(jí)分區(qū)的壓縮比特流。含有兩個(gè)分區(qū)的完整FPGA設(shè)計(jì)的壓縮比特流將達(dá)到3.1 Mbyte。
資源類型 |
分區(qū) |
|||
高優(yōu)先級(jí) |
% |
低優(yōu)先級(jí) |
% |
|
觸發(fā)器 |
8,849 |
2.9 |
1,968 |
0.7 |
查找表 |
7,039 |
4.7 |
2,197 |
1.5 |
I/O |
135 |
22.5 |
20 |
3.3 |
RAMB36s |
34 |
8.2 |
2 |
0.5 |
XC6VLX240T |
配置方法 |
||
配置接口 |
傳統(tǒng)的 8.9 MB |
壓縮的 2.0 MB |
Fast Startup 1.4 MB |
BPIx16 CR2 |
1,740 ms |
389 ms |
278 ms |
BPIx16 CR10 |
450 ms |
112 ms |
84.4 ms |
為了驗(yàn)證針對(duì)Spartan-6的Fast Startup方法,我們選擇了汽車領(lǐng)域的ECU應(yīng)用情形。每當(dāng)您在汽車電子控制單元中看到一個(gè)FPGA器件時(shí),它一般都僅由ECU的主應(yīng)用處理單元使用(見(jiàn)圖5)。我們的目標(biāo)是實(shí)現(xiàn)一種將系統(tǒng)處理器放入FPGA中的設(shè)計(jì)。這樣我們就能避免對(duì)外置處理器的需要,從而降低整個(gè)系統(tǒng)的成本、復(fù)雜性、空間和功耗。
對(duì)于這種情形,系統(tǒng)分區(qū)是顯而易見(jiàn)的。我們把我們ECU設(shè)計(jì)分成作為高優(yōu)先級(jí)分區(qū)的系統(tǒng)處理器部分和作為低優(yōu)先級(jí)分區(qū)的應(yīng)用處理部分。
這種設(shè)計(jì)與Virtex-6設(shè)計(jì)存在很多相似之處,但不同的是,我們用SPI取代BPI作為外置閃存的接口,因此必須用CAN控制器取代TFT控制器。上電后,系統(tǒng)控制器只有有限的時(shí)間引導(dǎo)并準(zhǔn)備好處理第一個(gè)通信數(shù)據(jù)。由于ECU使用CAN總線用于通信,這個(gè)引導(dǎo)時(shí)間一般限制為100毫秒。按照傳統(tǒng)配置方法,使用帶低成本配置接口(如SPI或Quad-SPI)的大型Spartan-6很難達(dá)到如此嚴(yán)格的時(shí)序要求。而使用速度更快、更加昂貴的配置接口在汽車領(lǐng)域中是無(wú)法接受的。
測(cè)量裝置
對(duì)于SP605汽車ECU演示來(lái)說(shuō),我們?cè)趯?shí)驗(yàn)室中進(jìn)行了測(cè)量,圖6給出了測(cè)量裝置。圖中左側(cè)是一個(gè)基于Spartan-3的X1500汽車平臺(tái),它實(shí)現(xiàn)了針對(duì)CAN總線的網(wǎng)絡(luò)發(fā)包器,該發(fā)生器能夠收發(fā)CAN消息并使用硬件計(jì)時(shí)器測(cè)量CAN消息之間的時(shí)間。右側(cè)為目標(biāo)平臺(tái),它沒(méi)有直接與CAN總線相連,而是使用來(lái)自額外的定制電路板的CAN收發(fā)器。除了提供一個(gè)CAN PHY之外,這個(gè)定制電路板還要控制目標(biāo)電路板的電源。
由于沒(méi)有接收器確認(rèn)由網(wǎng)絡(luò)發(fā)包器發(fā)送的消息,這條消息立刻重復(fù)發(fā)送,直至FPGA已經(jīng)完成其配置并用有效的波特率配置了CAN內(nèi)核。一旦Spartan-6設(shè)計(jì)的CAN內(nèi)核確認(rèn)了這條消息,網(wǎng)絡(luò)發(fā)包器的CAN內(nèi)核將觸發(fā)一個(gè)中斷,由這個(gè)中斷停止硬件計(jì)時(shí)器。該計(jì)時(shí)器現(xiàn)在保存著SP605設(shè)計(jì)的引導(dǎo)時(shí)間。測(cè)量結(jié)果包括SP605設(shè)計(jì)內(nèi)一個(gè)額外的硬件計(jì)時(shí)器,此結(jié)果表明,當(dāng)執(zhí)行該軟件來(lái)配置內(nèi)置BRAM內(nèi)存的CAN內(nèi)核時(shí),軟件啟動(dòng)時(shí)間可以忽略不計(jì)。
表3表示每個(gè)分區(qū)的FPGA資源消耗。百分比信息是用來(lái)表示使用的XC6S45LXT器件的有效資源的總數(shù)量。
資源類型 |
分區(qū) |
|||
高優(yōu)先級(jí) |
% |
低優(yōu)先級(jí) |
% |
|
觸發(fā)器 |
3,480 |
6% |
1,941 |
4% |
查找表 |
3,507 |
13% |
1,843 |
7% |
I/O |
58 |
20% |
20 |
7% |
RAMB |
12 |
10% |
2 |
2% |
配置接口 |
配置方法 |
||
傳統(tǒng)的1,450 KB |
壓縮的 920 KB |
Fast Startup 314 KB |
|
SPIx1 CR2 |
5,297 ms |
3,382 ms |
1,157 ms |
SPIx1 CR26 |
292 ms |
196 ms |
85 ms |
SPIx2 CR2 |
2,671 ms |
1,699 ms |
596 ms |
SPIx2 CR26 |
161 ms |
113 ms |
58 ms |
SPIx4 CR2 |
1,348 ms |
872 ms |
311 ms |
SPIx4 CR26 |
97 ms |
73 ms |
45 ms |
在硬件中驗(yàn)證
我們開(kāi)發(fā)的高級(jí)配置方法可以稱為優(yōu)先化的FPGA啟動(dòng),因?yàn)樗謨刹脚渲闷骷?。這種方法不僅對(duì)于解決現(xiàn)代FPGA中配置時(shí)間不斷增加的挑戰(zhàn)是必不可少,而且也能在很多現(xiàn)代應(yīng)用中得到使用,如PCI Express或基于CAN的汽車系統(tǒng)。
除了提出高優(yōu)先級(jí)初始配置方法,我們還在硬件中對(duì)這種方法進(jìn)行了驗(yàn)證。我們使用并測(cè)試了針對(duì)Fast Startup的工具流程和方法,以在Spartan-6評(píng)估板(SP605)上實(shí)現(xiàn)基于CAN的汽車ECU,以及在Virtex-6原型板上實(shí)現(xiàn)視頻設(shè)計(jì)。通過(guò)使用這種新穎的方法,我們減小了初始比特流大小,從而使配置時(shí)間改進(jìn)了84%(與標(biāo)準(zhǔn)完整配置方案相比)。
Xilinx將在針對(duì)7系列FPGA的軟件中支持針對(duì) PCI Express應(yīng)用的Fast Startup概念,并通過(guò)優(yōu)化的實(shí)現(xiàn)方法簡(jiǎn)化其使用。在7系列中,新的兩步比特流方法是實(shí)現(xiàn)起來(lái)最簡(jiǎn)單最低成本的方法。設(shè)計(jì)FPGA時(shí),用戶可以通過(guò)一個(gè)簡(jiǎn)單的軟件開(kāi)關(guān)實(shí)現(xiàn)兩級(jí)比特流。該比特流的第一級(jí)僅包含配置時(shí)序關(guān)鍵模塊需要的配置幀。配置時(shí),會(huì)產(chǎn)生一個(gè)FPGA STARTUP序列,關(guān)鍵模塊變成活動(dòng)模塊,這樣就可輕易滿足100毫秒時(shí)序要求。當(dāng)時(shí)序關(guān)鍵模塊運(yùn)行時(shí)(例如PCI Express枚舉/配置系統(tǒng)過(guò)程正在進(jìn)行),剩下的FPGA配置得以加載。兩級(jí)比特流方法能夠使用便宜的閃存器件存儲(chǔ)比特流。