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