馬傳干
(中國西南電子技術(shù)研究所,四川成都 610036)
采用FPGA 和DSP 架構(gòu)的衛(wèi)星載荷設(shè)備,在空間環(huán)境中,軟件的可靠性設(shè)計是一個難題[1-2]。傳統(tǒng)的解決方法采取在軌更新升級,主要有3 種方式:1)利用一次性編程的反熔絲型FPGA 作為控制節(jié)點(diǎn),完成其他節(jié)點(diǎn)FPGA 軟件的重構(gòu)功能[3];2)通過預(yù)留鉤子函數(shù),利用增量編譯鏈接的特性,實(shí)現(xiàn)DSP 軟件部分功能的在軌修復(fù)[4];3)基于操作系統(tǒng)引導(dǎo)加載的原理,系統(tǒng)啟動并正常工作后,通過指令二次引導(dǎo)應(yīng)用程序加載,實(shí)現(xiàn)軟件更新升級的功能[5-7]。然而,這3 種方法都有一部分程序功能是固定的且無法修改。這種基于部分功能軟件可重構(gòu)的設(shè)計方式,其功能的可擴(kuò)展性不全面,難于適應(yīng)不斷增長的差異化需求。因此,針對現(xiàn)有技術(shù)存在的不足之處,基于SRAM 型“雙FPGA+DSP”的硬件架構(gòu),提出了一種具有安全啟動特性,硬件實(shí)現(xiàn)更簡單、功能重構(gòu)更靈活,且全功能FPGA 和DSP 軟件可實(shí)現(xiàn)在軌動態(tài)重構(gòu)的解決方案,并對該方案的硬件實(shí)現(xiàn)原理和相關(guān)技術(shù)進(jìn)行了分析和設(shè)計。
在星載傳感器系統(tǒng)中,功能軟件集中部署在載荷功能單元的可編程邏輯芯片F(xiàn)PGA 和數(shù)字信號處理器DSP 內(nèi)部。
基于SRAM 型“雙FPGA+DSP”架構(gòu)的載荷功能單元,其總體框圖如圖1 所示,圖中虛線框?yàn)榕c該功能單元密切關(guān)聯(lián)的設(shè)備[8-10]。
圖1 載荷功能單元總體框圖
載荷功能單元對外有兩類控制接口,分別為CAN總線接口以及OC復(fù)位脈沖接口,具體參數(shù)見表1。
表1 載荷功能單元對外接口表
載荷功能單元的主要元器件選型見表2。
表2 載荷功能單元主要元器件列表
在載荷功能單元中,軟件動態(tài)重構(gòu)包括FPGA和DSP 軟件多版本切換以及在軌更新升級兩種方式,其實(shí)現(xiàn)原理如圖2 所示。
圖2 功能軟件重構(gòu)原理框圖
1)軟件多版本切換的工作原理
在電路設(shè)計中,利用PROM 和NorFlash 雙存儲電路,實(shí)現(xiàn)FPGA 和DSP 全功能軟件多版本的本地存儲[11]。設(shè)備上電后,F(xiàn)PGA和DSP默認(rèn)加載PROM版本的功能軟件。當(dāng)載荷管理設(shè)備接收到地面站的版本切換指令,需要進(jìn)行軟件版本切換時,具體過程如下:
①載荷管理設(shè)備通過CAN 接口發(fā)送FPGA2 的版本切換指令及信息,DSP 解析指令后,由FPGA1 控制FPGA2 的加載模式和外掛NorFlash2 中相應(yīng)版本的地址空間,并通知載荷管理設(shè)備軟件版本切換準(zhǔn)備就緒;載荷管理設(shè)備確認(rèn)狀態(tài)后,發(fā)送FPGA2 的OC 復(fù)位信號,F(xiàn)PGA2 硬件復(fù)位后主動從NorFlash2中完成指定版本軟件的加載。
②載荷管理設(shè)備等待FPGA2切換版本成功后,發(fā)送FPGA1 的版本切換指令及信息;FPGA1 在FPGA2和載荷管理設(shè)備的協(xié)同控制下,完成版本在軌切換,其過程與FPGA2 的版本切換過程完全一樣。
③載荷管理設(shè)備發(fā)送DSP 的版本切換指令及信息,DSP 解析指令后,由FPGA1 控制其外掛NorFlash1中相應(yīng)DSP 版本的地址空間,然后在FPGA1 控制下DSP 完成版本切換。
④DSP 完成版本切換后,載荷管理設(shè)備通過CAN 總線的輪詢指令,判斷切換后功能是否運(yùn)行正常;正常則結(jié)束切換流程,不正常則通過發(fā)送OC復(fù)位信號,進(jìn)行版本回退,重新加載并運(yùn)行PROM 版本。
在版本切換過程中,F(xiàn)PGA1、FPGA2 和DSP 三者之間采用相互控制、相互引導(dǎo)的管控調(diào)度策略,實(shí)現(xiàn)了沒有本地通用CPU 或主控制器(如反熔絲型FPGA)的條件下,專用信號處理器(FPGA、DSP)全功能軟件版本的自主重構(gòu)特性,在簡化電路設(shè)計的同時,極大地提高了載荷功能單元的靈活性。
2)軟件在軌更新升級的工作原理
當(dāng)在軌預(yù)設(shè)軟件版本的工作模式都不能滿足要求,或者有新增任務(wù)需求時,則需要地面站發(fā)送在軌更新指令,載荷管理設(shè)備接收地面站的指令后,具體執(zhí)行過程如下:
①載荷管理設(shè)備通過CAN 接口發(fā)送軟件更新指令,DSP 接收指令并解析,獲取軟件類型、軟件版本號等信息,并判斷指令信息的正確性;指令正確,則開始逐包接收軟件更新數(shù)據(jù),并執(zhí)行數(shù)據(jù)校驗(yàn)操作。
②數(shù)據(jù)校驗(yàn)正確后,根據(jù)數(shù)據(jù)包的編號,將數(shù)據(jù)包寫入SDRAM 的緩存空間中,并繼續(xù)接收新的數(shù)據(jù)包,同時回復(fù)正確接收信息;否則,發(fā)送請求數(shù)據(jù)包重傳信息。
③當(dāng)所有數(shù)據(jù)包接收完畢,載荷管理設(shè)備發(fā)送數(shù)據(jù)存儲指令,DSP 根據(jù)指令中軟件類型、軟件版本號等信息,將SDRAM 中緩存的全部數(shù)據(jù)包,寫入NorFlash1 或者NorFlash2 的3 個不同物理空間。
軟件在軌更新過程中,同時支持所有數(shù)據(jù)包一次性上傳、數(shù)據(jù)包分包后多次斷電續(xù)傳、數(shù)據(jù)包僅部分上注等功能,不但解決了軟件在軌更新面臨的星地鏈路通信速率小、過境時間短、程序數(shù)據(jù)包數(shù)據(jù)量大等困難,而且極大地提高了載荷功能單元的擴(kuò)展性。
結(jié)合該方案的硬件電路,從加載模式、控制方式、版本切換流程、數(shù)據(jù)包存儲等幾個方面構(gòu)建了靈活的管控策略,實(shí)現(xiàn)了軟件可動態(tài)重構(gòu)的功能。
加載模式?jīng)Q定了系統(tǒng)的硬件設(shè)計和軟件設(shè)計,特別是對重構(gòu)軟件的管理有著重大影響,該方案中FPGA 和DSP 加載模式的設(shè)計見表3。
表3 FPGA和DSP加載模式
由表3 可知,基于PROM 和NorFlash 雙存儲電路,F(xiàn)PGA 設(shè)計了兩種加載模式[12]:主動串行模式和BPI_UP 并行模式;而DSP 采用片內(nèi)0x0 地址空間映射的32 位ROM 引導(dǎo)方式,具體設(shè)計電路見圖3。
圖3 加載模式電路圖
1)FPGA 主動串行加載模式
設(shè)計中,F(xiàn)PGA 的加載模式引腳M[2:0],通過下拉1 kΩ的電阻接地;設(shè)備上電后,初始狀態(tài)為“000”,此時FPGA 工作在主動串行加載方式,將自動從片外兩片級聯(lián)的PROM 中進(jìn)行加載。
FPGA 的型號為XQ5VFX100T,其配置bit 流為39 Mb。根據(jù)實(shí)際工程的測試,當(dāng)FPGA 資源使用率達(dá)到90%時,對bit 流文件的壓縮率可達(dá)70%,即39 Mb 壓縮后為27.3 Mb,因此方案中選用2 片16 Mb的PROM 進(jìn)行級聯(lián),滿足使用要求。
PROM 型號為XQR17V16,具有SEU(單粒子翻轉(zhuǎn))免疫的特性,所以主動串行加載方式確保了FPGA 上電狀態(tài)程序運(yùn)行的可靠性。
2)FPGA BPI_UP 并行加載模式
FPGA 的加載模式引腳M1,通過控制電路可以改變電平狀態(tài)。當(dāng)M[2:0]狀態(tài)為“010”時,F(xiàn)PGA 工作在BPI_UP 并行加載方式,此時控制電路觸發(fā)硬件#PROG 引腳復(fù)位后,F(xiàn)PGA 將自動從片外NorFlash 中進(jìn)行加載。
在空間環(huán)境下,NorFlash 具有SEU(單粒子翻轉(zhuǎn))的潛在風(fēng)險,而且斷電后重啟也不能恢復(fù)。為了確保存儲在NorFlash 中程序數(shù)據(jù)的可靠性,設(shè)計中將同一個版本的程序數(shù)據(jù)同時存儲在NorFlash 的3 個不同的物理空間,當(dāng)某一空間的數(shù)據(jù)發(fā)生SEU 時,采用3 取2 的原則,逐一比較3 個物理空間中的數(shù)據(jù),就可以實(shí)現(xiàn)數(shù)據(jù)的糾錯。因此FPGA 的一個NorFlash 軟件版本至少需要96 Mb 的存儲空間。
為了能夠存儲多個軟件版本,NorFlash 的型號選用3DFO256M16,單芯片容量為256 Mb,芯片內(nèi)部由4 片4M×16b 的基片組成。所以,通過控制4 個基片的片選信號和最高位地址線,可以將NorFlash 劃分為8 個32 Mb 的存儲空間,滿足了至少2 個FPGA軟件版本的同時存儲。
3)DSP 32 位ROM 引導(dǎo)方式
在電路設(shè)計中,DSP 的加載模式引腳BM[4:0],通過上下拉電阻的配置,狀態(tài)固定為“11101”,因此DSP 上電復(fù)位后,工作在32 位ROM 的自舉模式:即DMA 控制器從CE1 空間(相當(dāng)于FPGA1 空間)復(fù)制固定長度(C6701 是64 kb)程序到片內(nèi)地址0x0 處,然后從片內(nèi)地址0x0 處開始執(zhí)行。
考慮到64 kb 的程序可能無法滿足未來復(fù)雜功能的需求,為了兼容靈活性和擴(kuò)展性,通過二次搬移程序?qū)⒅苯右龑?dǎo)方式更改為二次引導(dǎo)模式,因此該方案中DSP 應(yīng)用程序的大小可擴(kuò)展到2 Mb(取決于外置PROM 存儲器空間),具體過程如下:
①DSP 上電復(fù)位后,默認(rèn)從FPGA1 片內(nèi)1 kb 的ROM 中直接復(fù)制用戶二次搬移程序到片內(nèi)地址0x0處,并開始執(zhí)行。
②用戶二次搬移程序根據(jù)FPGA1 內(nèi)部加載空間控制邏輯的狀態(tài)信息,從FPGA1 片外的PROM3或NorFlash1 的指定空間再次將用戶的應(yīng)用程序復(fù)制到片內(nèi)程序空間0x400 或片外SDRAM 空間0x400000 處,結(jié)束后開始運(yùn)行程序。
設(shè)計中,PROM3 程序的加載是上電默認(rèn)的狀態(tài),確保了DSP 上電運(yùn)行的可靠性;而NorFlash1 程序的二次加載實(shí)現(xiàn)了DSP 軟件多版本的可重構(gòu)。
結(jié)合FPGA1 的加載電路可知,NorFlash1 中同時存儲了FPGA1 和DSP 的多版本程序,對各版本程序存儲空間的劃分見表4。
表4 NorFlash1存儲空間分配表
表4中,F(xiàn)PGA1分配了6個存儲空間,存儲2個軟件版本,每個版本大小為28 Mb;DSP也分配了6個存儲空間,存儲2個軟件版本,每個版本大小為4 Mb;另外預(yù)留了3個存儲空間,共60 Mb,用于擴(kuò)展功能;最后一個4 Mb 存儲空間用于記錄NorFlash1 的信息列表。(注:NorFlash2 只用于存儲FPGA2 的程序,其存儲空間的劃分方法與NorFlash1完全相同,因此不再展開說明。)
控制方式是實(shí)現(xiàn)功能軟件動態(tài)重構(gòu)的核心。相比傳統(tǒng)采用本地通用CPU 或主控制器(如反熔絲型FPGA)進(jìn)行統(tǒng)一控制的方法,該方案采用DSP 解析指令、雙FPGA執(zhí)行指令、FPGA和DSP之間相互控制、相互引導(dǎo)的管控調(diào)度策略,具體電路設(shè)計如圖4所示。
圖4 控制方式電路圖
基于相互控制、相互引導(dǎo)的管控調(diào)度策略,圖4中的控制電路可分為3 部分,分別為DSP 控制電路、FPGA1 控制電路以及FPGA2 控制電路。
1)DSP 控制電路設(shè)計
與DSP 控制電路有交互的對象有FPGA1 和FPGA2,其相互邏輯關(guān)系具體如下:
①FPGA1 輸出硬件復(fù)位Reset 和工作時鐘Clkin信號給DSP,實(shí)現(xiàn)DSP 工作狀態(tài)的控制功能;
②FPGA1 通過EMIF 總線轉(zhuǎn)發(fā)CAN 指令給DSP,DSP 將解析后的指令信息又通過EMIF 總線發(fā)送給FPGA1 和FPGA2,實(shí)現(xiàn)重構(gòu)指令邏輯控制的功能。
2)FPGA1 控制電路設(shè)計
與FPGA1 控制電路有交互的對象有DSP、FPGA2、NorFlash2 以及載荷管理設(shè)備,其相互邏輯關(guān)系具體如下:
①載荷管理設(shè)備輸出OC 負(fù)脈沖,實(shí)現(xiàn)FPGA1的硬件復(fù)位功能;
②FPGA2 控制FPGA1 的加載模式引腳M1,實(shí)現(xiàn)串行加載和并行加載的控制功能;
③FPGA1 輸出硬件復(fù)位Reset 和工作時鐘Clkin信號給DSP,實(shí)現(xiàn)DSP 工作狀態(tài)的控制功能;
④FPGA1 轉(zhuǎn)發(fā)CAN 指令給DSP,并接收DSP 指令解析后的信息,實(shí)現(xiàn)重構(gòu)指令邏輯控制的功能;
⑤FPGA1 接收FPGA2 并行加載接口的片選信號FCS,結(jié)合DSP 輸出的重構(gòu)指令信息,通過片選信號CE0~CE3 和高位地址線A21,實(shí)現(xiàn)NorFlash2 存儲空間的選擇控制功能。
3)FPGA2 控制電路設(shè)計
與FPGA2 控制電路有交互的對象有DSP、FPGA1、NorFlash1 以及載荷管理設(shè)備,其相互邏輯關(guān)系具體如下:
①載荷管理設(shè)備輸出OC 負(fù)脈沖,實(shí)現(xiàn)FPGA2的硬件復(fù)位功能;
②FPGA1 控制FPGA2 的加載模式引腳M1,實(shí)現(xiàn)串行加載和并行加載的控制功能;
③FPGA2 接收DSP 指令解析后的信息,實(shí)現(xiàn)重構(gòu)指令邏輯控制的功能;
④FPGA2 接收FPGA1 并行加載接口的片選信號FCS,結(jié)合DSP 輸出的重構(gòu)指令信息,通過片選信號CE0~CE3 和高位地址線A21,實(shí)現(xiàn)NorFlash1 存儲空間的選擇控制功能。
版本切換流程是實(shí)現(xiàn)功能軟件多版本切換的關(guān)鍵。時鐘電路是版本切換過程的心臟,至關(guān)重要[13],為簡化電路設(shè)計,該方案采用單晶振的時鐘設(shè)計方法,具體為:40M 晶振→FPGA2→FPGA1→DSP。
結(jié)合時鐘電路設(shè)計以及FPGA 和DSP 之間相互控制、相互引導(dǎo)的策略,軟件版本切換的流程設(shè)計如圖5 所示。
圖5 軟件版本切換流程設(shè)計
圖5 中,軟件切換流程設(shè)計具有以下特點(diǎn):
①上電或硬件復(fù)位狀態(tài):所有功能器件FPGA和DSP 均為PROM 版本;
②功能器件切換NorFlash 版本時,優(yōu)先級從高到低為:FPGA2→FPGA1→DSP;
③高優(yōu)先級器件版本切換過程,輸出時鐘信號會中斷,為避免功能異常,低優(yōu)先級器件會再次加載PROM 版本;
④功能器件FPGA 或DSP 可以任意單獨(dú)切換軟件版本,當(dāng)高優(yōu)先級器件切換軟件版本后,需要對低優(yōu)先級器件進(jìn)行版本狀態(tài)恢復(fù);而低優(yōu)先級器件切換軟件版本不影響高優(yōu)先級器件的狀態(tài)。
軟件在軌更新過程中,程序數(shù)據(jù)包的存儲設(shè)計是實(shí)現(xiàn)數(shù)據(jù)包斷電續(xù)傳、部分上注等功能的關(guān)鍵[14-15]。為此,從數(shù)據(jù)包的組包方式、接收緩存以及存儲方式開展設(shè)計,設(shè)計原理如圖6 所示。
圖6 數(shù)據(jù)包存儲設(shè)計原理
1)數(shù)據(jù)組包方式
首先在地面完成新版本軟件程序的應(yīng)用驗(yàn)證,然后將程序數(shù)據(jù)按照約定的數(shù)據(jù)格式進(jìn)行組包,數(shù)據(jù)組包格式包含:軟件類型、版本號、數(shù)據(jù)包總數(shù)、當(dāng)前包編號、240 字節(jié)有效數(shù)據(jù)以及校驗(yàn)碼。
2)數(shù)據(jù)包接收緩存
為了減少NorFlash的操作次數(shù),提高效率,載荷功能單元通過CAN總線接收數(shù)據(jù)包,并根據(jù)數(shù)據(jù)包編號n直接映射為SDRAM的緩存地址,即“基地址+包編號n”(基地址為SDRAM程序緩存空間的首地址),然后直接緩存240字節(jié)的有效數(shù)據(jù);由于SDRAM的數(shù)據(jù)位寬為32 bit,有效數(shù)據(jù)240 字節(jié)是位寬的整數(shù)倍,因此確保了SDRAM程序緩存空間地址的連續(xù)性。
另外,程序數(shù)據(jù)的緩存是以數(shù)據(jù)包為單位,僅與數(shù)據(jù)包的編號有關(guān),因此一個完整程序數(shù)據(jù)包的更新,可以一次性完成更新,也可以分為多次更新任務(wù)完成,而且每次更新的數(shù)據(jù)包可以亂序組合。
3)數(shù)據(jù)存儲方式
在此次數(shù)據(jù)包更新任務(wù)完成后,載荷功能單元根據(jù)數(shù)據(jù)存儲指令,將SDRAM 中程序緩存空間的所有數(shù)據(jù)(包括已更新數(shù)據(jù)和未更新數(shù)據(jù))一次性寫入NorFlash 的3 個不同的物理空間[16]。
綜合上述的組包方式、接收緩存以及存儲原理分析,每次程序數(shù)據(jù)的在軌更新,可以實(shí)現(xiàn)對任意數(shù)據(jù)包的隨機(jī)更新和存儲。
該文針對衛(wèi)星載荷在軌期間任務(wù)需求變更以及軟件潛在設(shè)計缺陷的問題,提出了基于SRAM 型“雙FPGA+DSP”硬件架構(gòu)的軟件在軌動態(tài)重構(gòu)設(shè)計,在簡化硬件電路與功能軟件重構(gòu)方面取得了靈活性與有效性的統(tǒng)一,其加載模式、控制方式、版本切換流程、數(shù)據(jù)更新存儲的設(shè)計思路和設(shè)計方式,已經(jīng)在工程中得到應(yīng)用驗(yàn)證,對航天電子載荷設(shè)備的研制具有很好的參考價值。