王偉偉,閆新峰,修 展,徐 進(jìn),張 甜
(北京航天長(zhǎng)征飛行器研究所,北京 100076)
隨著航天技術(shù)的發(fā)展,F(xiàn)PGA憑借其豐富的接口和邏輯資源,逐漸取代單片機(jī)和DSP,越來(lái)越多地應(yīng)用到產(chǎn)品設(shè)計(jì)中。它可以大大減小設(shè)計(jì)規(guī)模,提高設(shè)計(jì)效率。根據(jù)可編程技術(shù)不同,F(xiàn)PGA分為SRAM(static random access memory)型、反熔絲型和Flash型[1-2]。由于SRAM型FPGA采用CMOS工藝,集成度高、性能優(yōu)越、資源豐富、成本低廉,其可重復(fù)編程的特性使它擁有廣闊的應(yīng)用,尤其是在航天器的在軌更新和維護(hù)方面,優(yōu)勢(shì)明顯。但航天系統(tǒng)是一個(gè)可靠性要求的系統(tǒng),空間輻射對(duì)于SRAM型FPGA影響巨大,會(huì)引起單粒子反轉(zhuǎn),如果導(dǎo)致關(guān)鍵性能失效,很有可能導(dǎo)致任務(wù)失敗,帶來(lái)巨大的損失。同時(shí)航天工程是一個(gè)復(fù)雜的工程,需要各系統(tǒng)協(xié)同合作才能完成。通常在研制初期,由于進(jìn)度原因,細(xì)節(jié)考慮不全或因?yàn)橛脩粜枨笞兓?,在總裝后需要對(duì)產(chǎn)品中FPGA軟件進(jìn)行升級(jí)才能正常工作,這時(shí)如果產(chǎn)品不具備在線重構(gòu)功能,則必須進(jìn)行拆卸操作,由此造成了巨大的時(shí)間和成本損失,因此FPGA具備在線重構(gòu)功能成為系統(tǒng)越來(lái)越迫切的需求[3-4]。
針對(duì)Xilinx 7系列以下FPGA、7系列FPGA和ZYNQ提出了三種提高在線重構(gòu)可靠性的設(shè)計(jì)方法,分別為基于ASIC在線重構(gòu)設(shè)計(jì)方法、基于MultiBoot多鏡像的設(shè)計(jì)方法和基于ZYNQ的在線重構(gòu)技術(shù)[5-7]。這三種方法幾乎涵蓋了Xilinx所有FPGA,實(shí)現(xiàn)了在線重構(gòu)技術(shù),提高了系統(tǒng)可靠性。
在嵌入式領(lǐng)域,F(xiàn)PGA憑借豐富的接口和邏輯資源,越來(lái)越受到工程師的歡迎,尤其是配置方式的多樣性和在線重構(gòu)技術(shù),給工程師提供了豐富的設(shè)計(jì)方法和設(shè)計(jì)空間,根據(jù)實(shí)際需求隨時(shí)改變?cè)O(shè)計(jì)來(lái)實(shí)現(xiàn)改變或增加新的功能,提高系統(tǒng)的安全性和可靠性。不同廠家的FPGA配置方式有所不同但大同小異,本文主要針對(duì)Xilinx的FPGA進(jìn)行研究,提出設(shè)計(jì)方法。
Xilinx FPGA支持多種配置方式,從配置時(shí)鐘的來(lái)源可以分為:主模式(Master Modes)和從模式(Slave Modes);從數(shù)據(jù)讀取方式可分為:并行模式(Master Modes)和串行模式(Serial Modes)。根據(jù)這兩種不同進(jìn)行組合,可以得到5種FPGA常用的配置方式:主串、從串、主并、從并和JATG模式。工程上最常使用的是SelectMAP(主并)和SPI模式(主從),分開(kāi)使用Xilinx的配置芯片PROM和FPGA支持的SPI Flash芯片。SelectMAP和SPI模式采用主模式,F(xiàn)PGA在上電后加載片外Flash芯片中的配置比特流,配置所需的時(shí)鐘信號(hào)(CCLK)由FPGA內(nèi)部產(chǎn)生,且FPGA控制整個(gè)配置過(guò)程。自動(dòng)將配置數(shù)據(jù)從相應(yīng)的Flash芯片讀入到SRAM中。以7系列FPGA為例,其配置流程大致分為8個(gè)步驟,如圖1所示。
圖1 FPGA配置流程
上電后,F(xiàn)PGA的PROGRAM_B引腳變低開(kāi)始整個(gè)配置過(guò)程,可以通過(guò)控制FPGA硬件硬件PROGRAM_B引腳的變化來(lái)重新配置FPGA。上電后,使用JTAG JPROGRAM指令或IPROG命令,配置存儲(chǔ)器將并清空。在此期間,通過(guò)使用全局三態(tài)將I/O置于高阻態(tài),如果硬件引腳PUDC_B為低電平,則內(nèi)部上拉。硬件引腳INIT_B在初始化期間內(nèi)部驅(qū)動(dòng)為低電平,完成后變?yōu)楦唠娖?。接著設(shè)備對(duì)外部模式配置硬件M[2:0]進(jìn)行采樣,開(kāi)始驅(qū)動(dòng)時(shí)鐘CCLK,將一組32bit特殊的同步字(0xAA995566)發(fā)送到配置邏輯。同步字用來(lái)將配置數(shù)據(jù)與內(nèi)部配置邏輯對(duì)齊。設(shè)備同步后,先通過(guò)設(shè)備ID檢查才能加載配置數(shù)據(jù)。如果在配置期間發(fā)生ID錯(cuò)誤,則設(shè)備會(huì)嘗試重新配置,設(shè)備ID檢查內(nèi)置于比特流中。之后FPGA開(kāi)始加載配置幀,加載配置數(shù)據(jù)時(shí)會(huì)根據(jù)數(shù)據(jù)包計(jì)算循環(huán)冗余校驗(yàn)(CRC),然后和比特流中存儲(chǔ)好的CRC值進(jìn)行比較,匹配通過(guò)后FPGA開(kāi)始進(jìn)行啟動(dòng)序列,啟動(dòng)完成后,F(xiàn)PGA配置完成,開(kāi)始正常工作。
根據(jù)上述FPGA的配置過(guò)程,可以通過(guò)軟硬件設(shè)計(jì)保證FPGA能夠?qū)⑴渲么鎯?chǔ)器存儲(chǔ)的配置比特流可靠地加載到FPGA中。隨著FPGA技術(shù)的不斷發(fā)展,不同代的FPGA產(chǎn)品在重構(gòu)方便擁有不同的特性。Xilinx FPGA 7系列具備MultiBoot多鏡像啟動(dòng)功能,支持在線更新系統(tǒng),配置文件可以現(xiàn)場(chǎng)動(dòng)態(tài)升級(jí)。7系列以前的FPGA則不具備該功能,需要外置芯片來(lái)進(jìn)行重構(gòu)設(shè)計(jì)。而對(duì)于ZYNQ系列,由于內(nèi)置有ARM處理器,因此其配置方式更加靈活多樣,方便實(shí)現(xiàn)在線重構(gòu)設(shè)計(jì)[8-10]。
FPGA軟件的一個(gè)重要特性是它具有重構(gòu)性,可以遠(yuǎn)程實(shí)現(xiàn)配置數(shù)據(jù)的更新,更改軟件,實(shí)現(xiàn)新的功能。該功能解決了產(chǎn)品在總裝后無(wú)法在不拆卸的情況下更新FPGA軟件的難題,縮短了時(shí)間,大大節(jié)省了人力財(cái)力,提高了效率。針對(duì)遙測(cè)系統(tǒng)不斷變化的需求,軟件更新頻率很高,因此該功能逐漸變?yōu)檐浖O(shè)計(jì)的基本要求,增強(qiáng)了產(chǎn)品的安全性和可靠性,大大提高了設(shè)計(jì)效率。典型的在線升級(jí)系統(tǒng)如圖2所示。
圖2 典型的在線升級(jí)系統(tǒng)設(shè)計(jì)框圖
如圖2所示,一般地,目標(biāo)系統(tǒng)和地面系統(tǒng)進(jìn)行通信采用UART、1553B、Ethernet等接口形式中的一種或多種,實(shí)現(xiàn)彈地?cái)?shù)據(jù)之間的傳輸。這樣就可以將地面系統(tǒng)中更改后的新的FPGA配置文件通過(guò)上述接口傳輸?shù)侥繕?biāo)系統(tǒng)上的FPGA控制器,接著FPGA控制flash讀寫(xiě)將配置文件正確寫(xiě)入到Flash固定位置,從而實(shí)現(xiàn)數(shù)據(jù)流的更新。FPGA的在線重構(gòu)技術(shù),關(guān)鍵是要保證在更新失敗的情況下,任然可以運(yùn)行舊版本或可以重新對(duì)其進(jìn)行配置,否則就失去了在線重構(gòu)的意義。下面針對(duì)上文提到的3種設(shè)計(jì)方法分別進(jìn)行描述。
對(duì)于Xilinx 7系列以下的FPGA芯片,本身不具備在線重構(gòu)能力,需要外置配置管理芯片進(jìn)行配置,從而實(shí)現(xiàn)在線重構(gòu),提高可靠性和安全性。一般地,對(duì)于只存在一個(gè)FPGA芯片的設(shè)備,可以外加一個(gè)MCU或CPLD來(lái)實(shí)現(xiàn)對(duì)FPGA的在線重構(gòu)設(shè)計(jì)。Xilinx的應(yīng)用筆記中給出了基于MicroBlaze軟核和CPLD的在線重構(gòu)技術(shù)來(lái)實(shí)現(xiàn)系統(tǒng)的在線更新。若一個(gè)設(shè)備中有多個(gè)FPGA芯片,且配置芯片也不同,有采用SelectMAP模式的PROM芯片,也有基于SPI模式的Flash存儲(chǔ)芯片,各個(gè)模塊之間通過(guò)背板連接。為了減少成本,提高設(shè)計(jì)效率,可以使用專用ASIC芯片來(lái)統(tǒng)一管理各FPGA芯片,實(shí)現(xiàn)在線重構(gòu),實(shí)現(xiàn)框圖如圖3所示。
圖3 在線升級(jí)ASIC設(shè)計(jì)原理框圖
該設(shè)計(jì)可以分別通過(guò)JTAG和SPI接口實(shí)現(xiàn)對(duì)PROM和SPI Flash的讀寫(xiě)操作,最大支持8路JATG和8路SPI接口,同時(shí)支持JTAG協(xié)議的菊花鏈設(shè)計(jì),可以對(duì)一個(gè)板卡上的多個(gè)FPGA進(jìn)行配置。上位機(jī)可以通過(guò)UART接口選擇對(duì)哪個(gè)板卡上的某個(gè)FPGA進(jìn)行操作,實(shí)現(xiàn)在線升級(jí)。同時(shí)也可以直接在設(shè)備附近使用JATG下載器對(duì)FPGA進(jìn)行在線調(diào)試和升級(jí),這樣完全保證了在總裝完成后也可以對(duì)產(chǎn)品進(jìn)行調(diào)試和升級(jí)的需求,解決了軟件升級(jí)需要重新拆裝的難題,大大節(jié)約了成本,提高了效率。
針對(duì)Xilinx 7 系列FPGA可以使用推薦的MultiBoot方案來(lái)實(shí)現(xiàn)FPGA的在線重構(gòu)。MultiBoot直接操作的是兩個(gè)鏡像,也可以是多個(gè)鏡像。其中一個(gè)鏡像永遠(yuǎn)不會(huì)改變,用于令一個(gè)鏡像在加載失敗時(shí)可以返回到該鏡像上重新加載,稱之為G鏡像(Golden Image),后面的鏡像稱之為M鏡像(MuliBoot Image)。當(dāng)需要進(jìn)行遠(yuǎn)程更新實(shí)現(xiàn)重構(gòu)時(shí),F(xiàn)PGA可以直接對(duì)Flash 芯片中M鏡像存放的位置進(jìn)行讀寫(xiě)操作,G鏡像的存儲(chǔ)位置和數(shù)據(jù)永遠(yuǎn)不變。這樣在M鏡像出現(xiàn)錯(cuò)誤時(shí),可以退回到G鏡像,保證FPGA能夠正常運(yùn)行,然后再對(duì)M鏡像進(jìn)行更新。MultiBoot實(shí)現(xiàn)框圖如圖4所示。
圖4 MultiBoot 實(shí)現(xiàn)流程圖
一般的FPGA從Flash的基地址開(kāi)始存放G鏡像,后面存放M鏡像。根據(jù)前面介紹的FPGA配置方法中,上電后,F(xiàn)PGA從地址為0的地方開(kāi)始加載,也就是先加載G鏡像,但是在G鏡像的開(kāi)始位置添加了IPROG(內(nèi)部編程)命令和M鏡像的地址,當(dāng)FPGA運(yùn)行到這個(gè)位置時(shí)會(huì)直接跳到M鏡像位置開(kāi)始加載,IPROG是一條命令可以在G鏡像中生效,也可以在設(shè)計(jì)中使用,將IPROG通過(guò)內(nèi)部配置訪問(wèn)接口ICAP(internal configuration accesa port)接口發(fā)送,從而實(shí)現(xiàn)任意時(shí)刻觸發(fā)重新重構(gòu)。當(dāng)加載M鏡像過(guò)程中遇到IDCode錯(cuò)誤、CRC錯(cuò)誤、WatchDog超時(shí)和BPI地址越界錯(cuò)誤時(shí),F(xiàn)PAG會(huì)觸發(fā)退回(FallBack)操作,同時(shí)FPGA內(nèi)部寄存器會(huì)記錄,發(fā)生退回操作后,會(huì)忽略IPROG指令,直接加載G鏡像后面的配置文件,運(yùn)行G鏡像。
Xilinx 7系列FPGA通過(guò)將IRPOG指令潛入到比特流中的方式,實(shí)現(xiàn)了FPGA的多鏡像啟動(dòng),確保了FPGA配置的可靠性。IPROG指令內(nèi)容如表1所示,其中WBSTAR為Warm Boot Start Address Register的縮寫(xiě),即熱啟動(dòng)地址寄存器。
表1 IPROG指令描述
在G鏡像中通過(guò)加入IPROG指令實(shí)現(xiàn)了地址的跳轉(zhuǎn),當(dāng)M鏡像發(fā)生錯(cuò)誤后,會(huì)觸發(fā)FallBack操作,退回到基地址位置,F(xiàn)PGA將忽略該部分指令,繼續(xù)執(zhí)行G鏡像的后面其他部分內(nèi)容,實(shí)現(xiàn)G鏡像的加載,正常運(yùn)行。G鏡像中設(shè)計(jì)有遠(yuǎn)程更新程序,可以操作Flash芯片,更新M鏡像數(shù)據(jù),從而實(shí)現(xiàn)對(duì)M鏡像的在線更新,實(shí)現(xiàn)FPGA的遠(yuǎn)程更新和重構(gòu)。
Xilinx ZYNQ與傳統(tǒng)FPGA有著巨大的差異,是一款SoC(可編程片上系統(tǒng)),擁有雙核ARM A9處理器和7系列FPGA邏輯資源。啟動(dòng)過(guò)程體現(xiàn)了以處理器為核心這一特點(diǎn),先啟動(dòng)處理器(PS)再啟動(dòng)邏輯部分(PL),也就是PL的配置是通過(guò)ARM核來(lái)配置的,不支持從PL端直接啟動(dòng)配置。
ZYNQ7000的配置按先后順序分為3個(gè)階段:stage0、stage1、stage2,其中stage2可選。每個(gè)階段的功能及處理過(guò)程如表2所示。
表2 ZYNQ配置過(guò)程
根據(jù)表2中的內(nèi)容可知,ZYNQ上電后先運(yùn)行BootROM,初始化外部存儲(chǔ)設(shè)備驅(qū)動(dòng)程序,然后從存儲(chǔ)設(shè)備的0地址開(kāi)始,搜索第一階段啟動(dòng)程序FSBL(First Stage Boot Loader),然后根據(jù)FSBL加載PL鏡像和后續(xù)的PS鏡像?;赒aud-SPI(QSPI) Flash啟動(dòng)方式的ZYNQ啟動(dòng)流程如圖5所示。
圖5 基于QSPI Flash的ZYNQ啟動(dòng)流程
如圖5所示,上電后,ZYNQ運(yùn)行BootROM,初始化QSPI接口,開(kāi)始讀取Flash中數(shù)據(jù),由于BootROM能夠訪問(wèn)QSPI Flash的最大地址為16 M,因此在此地址區(qū)間內(nèi)必須存在完整的FSBL。找到FSBL后,根據(jù)FSBL開(kāi)始加載PL和PS鏡像。由此可知,如果QSPI Flash中存在多個(gè)鏡像文件時(shí),ZYNQ只執(zhí)行第一個(gè)鏡像,第一個(gè)鏡像加載不成功才會(huì)加載后面的鏡像。根據(jù)此特性,可設(shè)計(jì)在線升級(jí)方案,如圖6所示。
圖6 ZYNQ 多鏡像在QSPI Flash中的存儲(chǔ)位置
如圖6所示,在拿到一個(gè)全新的ZYNQ硬件設(shè)計(jì)后,QSPI Flash為空,不存在任何可執(zhí)行的鏡像文件。這時(shí)需要用JTAG模式,將Golden鏡像下載到QSPI FLash的高地址位置,該地址要大于一個(gè)ZYNQ可執(zhí)行鏡像的大小,保證更新時(shí)不會(huì)破壞到G鏡像。在生成鏡像文件時(shí),PPGA和ARM執(zhí)行文件要選擇md5校驗(yàn),這樣可以確保鏡像的正確性和唯一性。在Golden鏡像中有在線升級(jí)程序,可以根據(jù)地面指令,更新MultiBoot鏡像,即從0地址開(kāi)始更新最新的鏡像,由于G鏡像和M鏡像中的軟件版本有區(qū)別,這樣可以在線驗(yàn)證更新是否成功。如果為成功,版本信息顯示G鏡像版本;如果成功則顯示M鏡像版本。通過(guò)這種方式可以實(shí)現(xiàn)ZYNQ類器件的在線重構(gòu),簡(jiǎn)單方便,穩(wěn)定可靠。
針對(duì)3種不同的設(shè)計(jì)方法,通過(guò)設(shè)計(jì)地面軟件來(lái)實(shí)現(xiàn)對(duì)FPGA的在線重構(gòu)。首先打開(kāi)地面軟件,選擇待升級(jí)的二進(jìn)制配置bin文件,并計(jì)算總CRC。然后再給PFGA上電,F(xiàn)PGA在上電后會(huì)發(fā)送準(zhǔn)備好信號(hào)給地面軟件,地面收到該信號(hào)后會(huì)發(fā)送在線升級(jí)指令給FPGA,如果一分鐘內(nèi)未收到在線升級(jí)指令,則FPGA退出在線升級(jí)狀態(tài),進(jìn)入正常工作狀態(tài)。收到在線升級(jí)指令后,F(xiàn)PGA開(kāi)始對(duì)配置寄存器進(jìn)行擦除操作,擦除完成后給地面反饋擦除結(jié)果。地面收到擦除完成指令后,開(kāi)始以每64字節(jié)為一包發(fā)送有效配置數(shù)據(jù),直到所有都完成后,再發(fā)送總CRC。FPGA對(duì)每包數(shù)據(jù)進(jìn)行校驗(yàn)并計(jì)算CRC,所有包完成后計(jì)算得到CRC,并和地面?zhèn)魉蛠?lái)的CRC進(jìn)行對(duì)比,正確則燒寫(xiě)成功,否則燒寫(xiě)失敗。燒寫(xiě)成功后,對(duì)FPGA重新加電,通過(guò)版本號(hào)判斷是否更新成功。通過(guò)多次測(cè)試,3種方式均100%燒寫(xiě)成功,可靠實(shí)現(xiàn)了在線升級(jí)功能。
針對(duì)FPGA類軟件可以在線重構(gòu)的特性,根據(jù)Xilinx三種不同類型的FPGA的不同特性,分別提出基于ASIC的FPGA在線重構(gòu)技術(shù)、基于MultiBoot多鏡像的在線重構(gòu)設(shè)計(jì)以及基于ZYNQ的在線重構(gòu)技術(shù)設(shè)計(jì)方法。Xilinx所有的FPGA,均可通過(guò)這三種技術(shù)中的一種或某種組合實(shí)現(xiàn)在線重構(gòu),解決了總裝后無(wú)法進(jìn)行軟件更新的難題,同時(shí)保證了在線重構(gòu)的安全性和可靠性,提高了設(shè)計(jì)效率。