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