沈?yàn)t波 顏科峰 陳子龍
(第七一五研究所,杭州,310023)
一種以太網(wǎng)在線更新FPGA目標(biāo)程序的方法
沈?yàn)t波 顏科峰 陳子龍
(第七一五研究所,杭州,310023)
為了解決現(xiàn)有水聲通信系統(tǒng)中FPGA目標(biāo)程序不能在線更新的問題,提供一種在線更新目標(biāo)程序的方法及系統(tǒng)。待更新的目標(biāo)程序經(jīng)由以太網(wǎng)傳輸鏈路發(fā)送至包含F(xiàn)PGA的傳輸節(jié)點(diǎn),F(xiàn)PGA通過SPI協(xié)議,將目標(biāo)程序?qū)懭雈lash;重新上電后,F(xiàn)PGA從flash中讀取新的目標(biāo)程序,完成目標(biāo)程序在線更新。該方法支持單個節(jié)點(diǎn)的更新及多個節(jié)點(diǎn)批量更新,具有良好的工程應(yīng)用價值。
水聲通信系統(tǒng);FPGA;目標(biāo)程序;SPI協(xié)議;在線更新
通常情況下,F(xiàn)PGA必須在上電階段,從外部存儲器讀取目標(biāo)程序,加載配置后才能運(yùn)行。對于目標(biāo)程序的在線更新,意味著在FPGA正常運(yùn)行期間,通過FPGA自身或者其他控制器去主動修改外部存儲器的內(nèi)容;待下次重新上電后,F(xiàn)PGA才能加載配置更新后的目標(biāo)程序。本文從實(shí)際工程應(yīng)用出發(fā),給出了一種以太網(wǎng)作為傳輸鏈路,通過上位機(jī)在線更新目標(biāo)程序的方法和系統(tǒng)。
在水聲通信系統(tǒng)中,傳輸節(jié)點(diǎn)示意如圖1所示,傳輸鏈路無法實(shí)現(xiàn)對FPGA目標(biāo)程序在線更新。本文描述的水聲通信系統(tǒng)由以太網(wǎng)作為傳輸鏈路連接各個節(jié)點(diǎn),每個節(jié)點(diǎn)均具備中繼轉(zhuǎn)發(fā)功能;工作狀態(tài)下,“節(jié)點(diǎn)1”的水聲信號經(jīng)由N-1級節(jié)點(diǎn)轉(zhuǎn)發(fā)至上位機(jī);其余N-1個節(jié)點(diǎn)的水聲信號以此類推,最終,所有水聲信號由節(jié)點(diǎn)N傳至上位機(jī)。
圖1 傳輸節(jié)點(diǎn)示意圖
以Xilinx Spartan-3E系列FPGA為例進(jìn)行描述。通常情況,F(xiàn)PGA上電主動從Xilinx PROM中讀取目標(biāo)程序,加載配置后運(yùn)行。當(dāng)需要更新Xilinx PROM目標(biāo)程序時,將節(jié)點(diǎn)結(jié)構(gòu)件拆除,通過專用JTAG接口在Xilinx ISE環(huán)境下完成對目標(biāo)程序的更新,工作流程煩瑣,且無法實(shí)現(xiàn)節(jié)點(diǎn)1至節(jié)點(diǎn)N批量更新。根據(jù)文獻(xiàn)[1]所述,Xilinx Spartan-3E 系列FPGA支持第三方廠家生產(chǎn)的SPI(Serial Peripheral Interface)flash存儲目標(biāo)程序,替換Xilinx PROM功能。通過以太網(wǎng)傳輸鏈路將目標(biāo)程序通過SPI協(xié)議反向從FPGA寫入flash,待重新上電后,F(xiàn)PGA從flash中讀取新的目標(biāo)程序,實(shí)現(xiàn)在線更新的目標(biāo),流程如圖2。
圖2 以太網(wǎng)更新程序操作步驟
當(dāng)使用SPI協(xié)議配置Xilinx FPGA,F(xiàn)PGA作為主設(shè)備,SPI flash作為從設(shè)備,如圖3所示。FPGA通過SCK時鐘控制時序,當(dāng)選通信號SS有效時,數(shù)據(jù)MOSI隨時鐘節(jié)拍從FPGA至flash;同一時鐘周期,數(shù)據(jù)MISO從flash至FPGA。
圖3 SPI配置框圖
FPGA上電后,主動從flash讀取目標(biāo)程序,加載配置后運(yùn)行。當(dāng)需要更新目標(biāo)程序時,F(xiàn)PGA通過傳輸鏈路接收目標(biāo)程序,以SPI協(xié)議對flash進(jìn)行擦除、讀寫操作,實(shí)現(xiàn)對flash內(nèi)容的更新。
支持第三方SPI flash的Xilinx FPGA目標(biāo)程序?yàn)镸CS格式。一個MCS目標(biāo)文件由多段記錄組成,每段記錄包含三部分:“9字符前綴”、“內(nèi)容”及“校驗(yàn)和”;其中“9字符前綴”為:1個字符“起始”(:)用于表征該段記錄的開始;2個字符“字節(jié)數(shù)”用于表征該段記錄的“內(nèi)容”所包含的字節(jié)數(shù);4字節(jié)“地址”;2字節(jié)“記錄類型”[2,3]。
Xilinx FPGA目標(biāo)程序主要使用3類“記錄類型”,格式如圖4:Data Record,表示向flash寫入目標(biāo)程序;End of File Record,表示目標(biāo)程序結(jié)束;Extended Linear Address Record,設(shè)置偏置地址值。
圖4 記錄類型
一個MCS目標(biāo)程序先由“04- Extended Linear Address Record”設(shè)置flash存儲空間的偏置地址;隨后是若干段“00-Data Record”將每段的“內(nèi)容”寫入指定地址的flash存儲空間;接著由“04-Extended Linear Address Record”設(shè)置新的存儲空間的偏置地址;若干段“00-Data Record”寫入新偏置地址的flash存儲空間;最后,由“01-End of File Record”表示整個目標(biāo)程序結(jié)束。
當(dāng)需要在線更新目標(biāo)程序時,首先上位機(jī)通過以太網(wǎng)發(fā)送“擦除”指令給FPGA,F(xiàn)PGA收到指令對flash進(jìn)行擦除操作,擦除完成后反饋確認(rèn)信息給上位機(jī);上位機(jī)收到確認(rèn)信息后,將待更新的目標(biāo)程序以段為單位發(fā)送至FPGA,F(xiàn)PGA解析后對flash進(jìn)行“寫入”操作,直至目標(biāo)程序結(jié)束;待FPGA完成所有“寫入”操作,進(jìn)行校驗(yàn)操作,讀取“寫入”的內(nèi)容,以段為單位回傳至上位機(jī),上位機(jī)將收到的內(nèi)容與發(fā)送的目標(biāo)程序進(jìn)行比對,校驗(yàn)正確表明flash目標(biāo)程序更新成功。更新目標(biāo)流程如圖5所示。
圖5 更新目標(biāo)程序流程圖
本文所述的以太網(wǎng)在線更新目標(biāo)程序的方法解決了水聲通信系統(tǒng)中節(jié)點(diǎn)FPGA目標(biāo)程序無法在線升級的問題。針對結(jié)構(gòu)封閉,不易拆裝的場合,在線升級目標(biāo)程序操作簡便實(shí)用,提高了代碼更新的效率,使得批量生產(chǎn)和維護(hù)變得容易,具備良好工程應(yīng)用價值。該方法已經(jīng)應(yīng)用于具體設(shè)備中。設(shè)計(jì)的在線更新方法,需要確保代碼更新期間設(shè)備保持供電,一旦操作過程掉電,將導(dǎo)致新的目標(biāo)程序“寫入”失敗,同時舊的程序已被“擦除”,必須重新通過JTAG下載程序。今后可以考慮外掛兩片flash,切換操作,保證掉電情況下,至少有目標(biāo)程序可以加載,直至更新成功。
[1] Stephanie Tapp. Configuring Xilinx FPGAs with SPI Serial Flash[Z]. 2010.
[2] Xilinx.PROMGen - Description of PROM/EEPROM file formats: MCS[Z]. 2012.
[3] Xilinx. Spartan-3 Generation Configuration User Guide[Z]. 2009.