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