(中國電子科技集團(tuán)公司第十研究所,四川成都610036)
近年來,隨著FPGA規(guī)模和性能的不斷提升,使得FPGA在航電系統(tǒng)綜合集成方向有著廣泛的使用。通過構(gòu)建通用的硬件處理平臺(tái),注入不同的FPGA軟件,實(shí)現(xiàn)系統(tǒng)的多種功能,以支持系統(tǒng)長生命周期持續(xù)、迭代、滾動(dòng)發(fā)展[1]。
通常,FPGA程序更新都是通過JTAG下載電纜連接計(jì)算機(jī)進(jìn)行配置,采用邊界掃描方式對(duì)FPGA外圍FLASH芯片進(jìn)行編程實(shí)現(xiàn)[2]。上述方法適合在規(guī)模較小的產(chǎn)品研制初期使用;在產(chǎn)品研制后期,對(duì)于大型航電系統(tǒng)來說,若依然采用JTAG下載方式進(jìn)行FPGA程序維護(hù)更新,就變得操作繁瑣、效率低下[3-4]。尤其對(duì)交付的系統(tǒng)設(shè)備,一般都不預(yù)留JTAG接口;同時(shí),對(duì)于已交付的設(shè)備經(jīng)常插拔JTAG仿真器,也會(huì)對(duì)硬件有所損傷。
采用遠(yuǎn)程在線更新的方式,可以解決產(chǎn)品研制后期FPGA程序維護(hù)更新效率低下的問題。對(duì)于FPGA在線更新,國內(nèi)相關(guān)文獻(xiàn)主要是基于處理器、接口芯片連接FPGA的方式進(jìn)行[5-8]。文獻(xiàn)[5-8]分別研究了通過PPC處理器本地總線、CPLD芯片、DSP處理器EMIF總線、CPCI總線接口芯片實(shí)現(xiàn)FPGA程序更新。以上加載FLASH的方式都是基于單個(gè)FPGA或者幾個(gè)FPGA進(jìn)行的,對(duì)大型航電系統(tǒng)中,幾十、上百個(gè)FPGA芯片程序更新、移植使用,會(huì)使系統(tǒng)硬件架構(gòu)變得非常復(fù)雜。
本文針對(duì)大型航電系統(tǒng)中FPGA節(jié)點(diǎn)程序更新,提出了一種基于RapidIO總線的FPGA遠(yuǎn)程在線更新方案,并將該方案成功運(yùn)用于信號(hào)與信息處理機(jī)平臺(tái)中。
傳統(tǒng)設(shè)計(jì)中,大型航電系統(tǒng)內(nèi)各子系統(tǒng)因硬件平臺(tái)不同而采用了不同的通信總線協(xié)議,不僅增加系統(tǒng)的復(fù)雜性,還降低了系統(tǒng)的可靠性和實(shí)時(shí)性。為取得好的效費(fèi)比,大型航電系統(tǒng)中趨向于使用單一類型的通信總線協(xié)議實(shí)現(xiàn)子系統(tǒng)內(nèi)、子系統(tǒng)間的互連[9]。作為一種可靠性、開放式互連架構(gòu),RapidIO以其高效率、高穩(wěn)定性、低成本的特點(diǎn),為系統(tǒng)內(nèi)各處理器間互連通信提供了高帶寬、低延遲數(shù)據(jù)傳輸?shù)慕鉀Q方案[10]。
FPGA程序遠(yuǎn)程更新正是基于航電系統(tǒng)內(nèi)統(tǒng)一高速互連總線RapidIO進(jìn)行設(shè)計(jì)實(shí)現(xiàn)的,其結(jié)構(gòu)框圖如圖1所示。PC機(jī)讀取待更新FPGA節(jié)點(diǎn)鏡像升級(jí)文件,通過以太網(wǎng)傳輸配置文件,從PPC節(jié)點(diǎn)下發(fā)控制命令和數(shù)據(jù)報(bào)文,經(jīng)SRIO交換網(wǎng)絡(luò)傳輸至FPGA中,FLASH芯片專用配置邏輯將程序依次寫入指定的FLASH更新區(qū)域。更新完成后,FPGA將會(huì)觸發(fā)專用升級(jí)電路,重新加載FLASH更新區(qū)域的新程序,從而實(shí)現(xiàn)FPGA程序遠(yuǎn)程更新。
圖1 FPGA遠(yuǎn)程更新系統(tǒng)架構(gòu)框圖
整個(gè)更新過程由FPGA節(jié)點(diǎn)內(nèi)部在線更新專用程序自動(dòng)完成,無須外部干預(yù)。多個(gè)FPGA芯片在線更新流程可以同時(shí)進(jìn)行,不同F(xiàn)PGA芯片通過設(shè)備ID進(jìn)行區(qū)分。
基于VITA46標(biāo)準(zhǔn)的某綜合化信號(hào)與信息處理機(jī)平臺(tái)如圖2所示,采用上下兩層結(jié)構(gòu),每層10個(gè)插槽。機(jī)架內(nèi)部模塊間采用1X模式、2.5 Gbit/s速率SRIO(串行RapidIO)高速總線進(jìn)行互連。
圖2 綜合化信號(hào)與信息處理機(jī)平臺(tái)
FPGA芯片部署在信號(hào)處理模塊內(nèi),每個(gè)信號(hào)處理模塊由4個(gè)FPGA芯片組成。本平臺(tái)包括6個(gè)信號(hào)處理模塊,共24個(gè)FPGA芯片。
為了使在線更新功能不影響FPGA本身功能軟件的使用,本設(shè)計(jì)采用軟件虛通道的思路進(jìn)行。以軟件異構(gòu)的方式在FPGA節(jié)點(diǎn)與PPC處理器節(jié)點(diǎn)之間創(chuàng)建實(shí)時(shí)通信鏈路,配置多個(gè)虛通道,每個(gè)虛通道對(duì)應(yīng)一個(gè)邏輯通道號(hào)。功能軟件工作在通用邏輯通道,在線更新功能工作在在線更新專用邏輯通道,二者獨(dú)立,互不影響。同時(shí),當(dāng)更新通道中的PPC節(jié)點(diǎn)發(fā)生故障時(shí),上層系統(tǒng)管理軟件可以通過軟件重構(gòu)的方式,選用其他處理器節(jié)點(diǎn)替代故障PPC節(jié)點(diǎn),完成FPGA在線更新功能。
FPGA節(jié)點(diǎn)作為整個(gè)在線更新設(shè)計(jì)的核心控制部分,采用模塊化設(shè)計(jì),通過VHDL語言編程的方式實(shí)現(xiàn)。按照功能模塊劃分,主要包括SRIO IP核、RIO接口適配模塊、指令控制模塊、數(shù)據(jù)緩存模塊、數(shù)據(jù)回讀模塊、數(shù)據(jù)校驗(yàn)?zāi)K和FLASH控制模塊。FPGA節(jié)點(diǎn)內(nèi)部模塊框圖如圖3所示。
在線更新時(shí),數(shù)據(jù)傳輸出錯(cuò)或者數(shù)據(jù)未能正常寫入FLASH中,輕者導(dǎo)致本次在線更新失敗,重者導(dǎo)致板卡損壞,其后果無法估量。為了保證在線更新正確無誤,FPGA節(jié)點(diǎn)在接收、燒寫鏡像文件時(shí)采用了多級(jí)校驗(yàn)機(jī)制,所有的報(bào)文都必須返回ack,當(dāng)確認(rèn)節(jié)點(diǎn)處理好上一個(gè)文件數(shù)據(jù)之后,再傳送下一幀數(shù)據(jù)。確保燒寫到FLASH中的數(shù)據(jù)與原始鏡像文件完全一致。數(shù)據(jù)幀交互機(jī)制如圖4所示。
圖3 FPGA節(jié)點(diǎn)內(nèi)部模塊框圖
圖4 數(shù)據(jù)幀交互機(jī)制
使用Xilinx FPGA內(nèi)部SRIO IP核,選擇1X模式、2.5 Gbit/s速率,時(shí)鐘頻率為125 MHz,器件ID為8位,通信采用基本HELLO包格式,支持內(nèi)存映射與消息機(jī)制的通信類型。
通常,串行FLASH與并行FLASH都支持page寫的方式,即一次寫入256 B。采用內(nèi)存映射寫方式,單個(gè)數(shù)據(jù)包最大有效數(shù)據(jù)載荷也是256 B。因此,約定每次寫入FLASH數(shù)據(jù)最大長度為256 B,使得SRIO傳輸效率最大化,也方便后續(xù)FLASH寫處理流程的實(shí)現(xiàn)。
接口適配模塊作為FPGA與SRIO交換網(wǎng)絡(luò)之間的數(shù)據(jù)傳輸通道,一方面,接收來自外部PPC節(jié)點(diǎn)的數(shù)據(jù)報(bào)文,并根據(jù)收發(fā)雙方約定的協(xié)議進(jìn)行數(shù)據(jù)報(bào)文的解析,把不符合要求的報(bào)文丟棄,符合要求的數(shù)據(jù)報(bào)文送到數(shù)據(jù)緩存模塊,控制指令報(bào)文送入指令控制模塊;另一方面,對(duì)校驗(yàn)返回ack值與nack值通過門鈴doorbell的方式通知PPC節(jié)點(diǎn),使PPC節(jié)點(diǎn)進(jìn)入數(shù)據(jù)持續(xù)傳輸或者數(shù)據(jù)重傳操作流程。
FLASH控制模塊是FPGA節(jié)點(diǎn)的核心模塊,統(tǒng)管著FLASH的整個(gè)操作流程,按照指令控制模塊接收到的控制指令的要求,一方面協(xié)調(diào)數(shù)據(jù)模塊完成數(shù)據(jù)寫入FLASH操作;另一方面還要回讀FLASH數(shù)據(jù),用于校驗(yàn)工作。
在FPGA中采用狀態(tài)機(jī)實(shí)現(xiàn)FLASH遠(yuǎn)程更新流程,如圖5所示,狀態(tài)轉(zhuǎn)移圖如圖6所示。在線更新專用通道初始化完成后,系統(tǒng)進(jìn)入報(bào)文接收等待狀態(tài)。接收到報(bào)文信息后,根據(jù)解析出來的報(bào)文類型,轉(zhuǎn)入到相關(guān)的FLASH操作流程。若是更新擦除指令,則進(jìn)入更新擦除流程,解除FLASH寫保護(hù),完成擦除block操作后,自動(dòng)進(jìn)入更新寫狀態(tài),寫完一個(gè)block后,讀出該block中數(shù)據(jù),進(jìn)行CRC校驗(yàn)。CRC校驗(yàn)正確,則返回報(bào)文接收等待狀態(tài);CRC校驗(yàn)錯(cuò)誤,則進(jìn)入數(shù)據(jù)重傳流程,直至讀出的數(shù)據(jù)CRC校驗(yàn)正確。指定的讀、寫、擦除狀態(tài)是為了增加系統(tǒng)的靈活性,可以手動(dòng)配置FLASH的存儲(chǔ)區(qū)域。
對(duì)更新數(shù)據(jù)校驗(yàn)采用計(jì)算CRC32的方式進(jìn)行,有兩種方式可以實(shí)現(xiàn)。一方面,在明確更新文件CRC32校驗(yàn)多項(xiàng)式以及CRC存放位置、計(jì)算區(qū)間的情況下,當(dāng)文件寫入時(shí)記錄寫入FLASH空間的大小,即確定需要參與計(jì)算的區(qū)間以及確定CRC32所在的位置,根據(jù)地址記錄。待讀出校驗(yàn)時(shí)就可以通過讀FLASH計(jì)算的CRC與文件包含的CRC值作對(duì)比,此時(shí)寫入FLASH的時(shí)候無需作CRC32校驗(yàn)。另一方面,如果不能很明確更新文件的結(jié)構(gòu),想找出CRC32的值就無從下手,此時(shí),可以通過寫入FLASH的時(shí)候計(jì)算一次CRC32,對(duì)寫入的所有數(shù)據(jù)都計(jì)算在內(nèi),待讀出校驗(yàn)時(shí),再次計(jì)算一次,比較寫入計(jì)算的CRC與讀出計(jì)算的CRC是否一致,從而可以斷定寫入FLASH的更新文件是否正常。但是后者只能確定FPGA在讀寫FLASH的時(shí)候是否出錯(cuò),不能完全保證更新文件的正確性,若要對(duì)更新文件的正確性進(jìn)行判定,則需要把數(shù)據(jù)回讀模塊的數(shù)據(jù)通過SRIO核上報(bào)給上級(jí)PPC節(jié)點(diǎn),由上層軟件進(jìn)行確定。
圖5 FLASH遠(yuǎn)程更新流程
圖6 FLASH遠(yuǎn)程更新狀態(tài)轉(zhuǎn)移圖
某綜合化信號(hào)與信息處理機(jī)平臺(tái)如圖7所示。
圖7 綜合化信號(hào)與信息處理機(jī)實(shí)物圖
對(duì)該處理機(jī)信號(hào)處理模塊中的24個(gè)FPGA芯片進(jìn)行軟件在線更新功能測(cè)試。其中PPC芯片采用PPC-8548,FPGA芯片采用FPGA-V7-485T,FLASH芯片采用FLASH-JS28F00AP30,測(cè)試結(jié)果如表1所示。
表1 FPGA程序更新測(cè)試結(jié)果
經(jīng)測(cè)試,PPC-8548通過RapidIO網(wǎng)絡(luò)向FPGA-V7-485T發(fā)送數(shù)據(jù),在1X模式、2.5 Gbit/s速率下,可達(dá)到10 MB/s。充分利用FLASH在擦除block塊開銷時(shí)間長以及PPC-8548傳輸速率高、遠(yuǎn)程更新虛通道可擴(kuò)展等特點(diǎn),可通過PPC-8548芯片同時(shí)對(duì)6個(gè)信號(hào)處理模塊內(nèi)的6個(gè)FPGA芯片進(jìn)行程序更新。從表1可以看出,隨著軟件版本及FPGA節(jié)點(diǎn)數(shù)目增多,相比JTAG方式,在線更新方式優(yōu)勢(shì)更加明顯。
針對(duì)航電系統(tǒng)中FPGA芯片程序遠(yuǎn)程更新,給出了一種基于RapidIO的FPGA遠(yuǎn)程在線更新方案。采用軟件無線電設(shè)計(jì)思想、硬件通用化設(shè)計(jì)、軟件可復(fù)用可重構(gòu)思路進(jìn)行。經(jīng)測(cè)試,設(shè)計(jì)穩(wěn)定可靠,相比傳統(tǒng)的JTAG加載方式,本設(shè)計(jì)更新FPGA程序的速度得到了很大的提升。該設(shè)計(jì)目前已用于某工程項(xiàng)目中。
[1]陳穎,苑仁亮,曾利.航空電子模塊化綜合系統(tǒng)集成技術(shù)[M].北京:國防工業(yè)出版社,2013:1-2.
[2]李強(qiáng),羅超,夏威,等.FPGA遠(yuǎn)程更新系統(tǒng)[J].儀表技術(shù)與傳感器,2014(7):72-74.
[3]劉劍,李賽輝,周邦華,等.一種基于Nand Flash多版本程序的FPGA智能加載方法[J].雷達(dá)與對(duì)抗,2015,35(3):68-70.
[4]于樂,王嘉良.易于移植的FPGA在線更新控制器設(shè)計(jì)[J].航空電子技術(shù),2015,46(4):47-50.
[5]黃勇.一種新型的FPGA快速動(dòng)態(tài)配置和遠(yuǎn)程加載技術(shù)[J].通信技術(shù),2013,46(12):93-96.
[6]汪灝,張學(xué)森.一種基于串行方式的FPGA遠(yuǎn)程加載電路[J].電子科學(xué)技術(shù),2016,3(2):171-173.
[7]趙秋明,王龍飛,肖丹,等.一種新型軟件無線電重構(gòu)加載方法研究[J].電視技術(shù),2013,37(19):87-90.
[8]熊璐.基于CPCI的動(dòng)態(tài)可重構(gòu)系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2016,39(8):104-107.
[9]黃振中,倪明,柴小麗.基于VxWorks的RapidIO-IP設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程,2010,36(18):243-245.
[10]王怡然,常文革,田海山.Rapid IO技術(shù)在高速信號(hào)處理系統(tǒng)中的應(yīng)用[J].雷達(dá)科學(xué)與技術(shù),2013,11(4):390-394.