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