文獻標識碼: A
DOI:10.16157/j.issn.0258-7998.2017.03.011
中文引用格式: 張永樂,王永勇,鄭煒. 一種基于FPGA的在線程序升級方案[J].電子技術應用,2017,43(3):48-50,54.
英文引用格式: Zhang Yongle,Wang Yongyong,Zheng Wei. Scheme of a in-system program updating based on FPGA[J].Application of Electronic Technique,2017,43(3):48-50,54.
0 引言
本文的研究課題是基于一種已應用在某型號上的彈載測試設備,因總體要求有變,需要對出廠后的產品功能進行升級。由于此類產品在出廠前都需要進行特殊的工藝處理,產品交付后不具備開蓋重復燒錄程序的條件,且根據型號研制要求,彈上設備在完成系統匹配試驗和綜合試驗后禁止拆卸維修,因為設備拆卸后,狀態遭到破壞,前期進行的各項試驗需要重新評估,影響到型號研制進度。為解決這個難題,本文提出了一種在線程序升級方案,在不破壞產品硬件狀態的前提下,利用FPGA靈活的內部邏輯資源實現自身的軟件功能升級。
1 應用背景
隨著內部資源的日趨豐富以及可重復配置的優勢,FPGA在測試設備中擔任了重要的角色,實現的功能也日趨復雜化和多樣化,對產品功能實現重配置的應用需求也在日益加大。產品功能重配置是在不改動設備硬件狀態的前提下,通過更新FPGA的程序文件,達到產品功能更改及升級的方法。目前主流的應用方案是使用MCU(或DSP)+存儲芯片的架構[1],MCU負責存儲芯片的讀寫,存儲芯片作為FPGA的程序代碼存儲器,產品上電后,MCU將存儲芯片中的數據讀出,并按照特定時序(FPGA加載時序)發送到FPGA,此過程即為FPGA的數據加載流程[2]。此方案不適用于本文的研究課題,原因有二:首先,此方案需額外增加MCU和存儲芯片兩個芯片,印制板的布局難度加大,尤其對于本設備印制板上器件已經很多并無多余空間的情況更加明顯;其次,軟件的數量增多,增加了MCU軟件后,出故障的概率也隨之加大,由于MCU不僅需要對存儲芯片進行讀寫操作,還需要對FPGA的上電加載過程進行模擬,如果加載不成功,不僅產品的升級功能失敗,產品的基本功能也隨之失效,考慮到本產品的特殊應用場合,此方案風險較大,不宜采用。
本文采用的方案是在FPGA的內部構建功能模塊,由該模塊完成PROM芯片燒寫所需要的相關操作。在對產品進行軟件升級時,該模塊執行升級工作,不需要進行升級時,模塊閑置,不發揮作用。該模塊與產品的原功能模塊獨立運行,互不干涉。設備上電時,FPGA的程序加載流程仍由自帶的PROM配置芯片自動完成。該方案既沒有額外增加芯片,也沒有額外增加軟件個數,大大降低了出錯的風險。
2 功能實現
設備的系統連接框圖如圖1所示,設備通過RS-422接口與地面測控臺連接,地面測控臺通過網絡通信接口與計算機連接。測試設備的主控芯片FPGA為XILINX公司的Virtex-4系列XC4VSX35芯片,PROM配置芯片型號為XCF32PFSG48C,存儲容量32 Mbit[3]。
計算機通過網絡接口將燒寫文件發送到測控臺,測控臺通過RS-422接口將燒寫數據發送到設備,設備通過RS-422接口向測控臺反饋狀態信息。下面分別從燒寫文件的生成、測控臺與設備的通信協議、FPGA與PROM的連接、FPGA軟件設計4個方面進行闡述。
2.1 燒寫文件生成
XILINX設計工具(PROMGen)可生成多種格式的配置數據文件,這些數據文件可以存儲在PROM中,也可以存儲在其他非易失性存儲芯片中[4]。配置文件的常用格式見表1。
FPGA程序編寫完成,經過ISE(ISE Design Suite 14.2)開發環境綜合實現后直接生成.bit編程文件,該文件可由IMPACT工具通過編程器燒寫到PROM中。.bit格式文件是二級制配置數據文件,包含了頭文件數據,頭文件數據中包含PROM的相關信息,用于控制PROM燒寫過程,該格式文件適用于使用編程器燒寫。.hex文件為ASCII碼PROM文件格式,僅包含配置數據,不包含頭文件等信息,可使用PROMGen或iMPACT工具生成,.hex文件為本文采用的文件格式。
2.2 設備通信協議
測控臺與設備通過RS-422連接,采用異步串行通信,波特率為921.6 kb/s,8 bit數據位,1 bit奇校驗,1 bit停止位。對于RS-422的物理層通信,采用無校驗的方式。發送與接收采取數據幀傳輸,表2以測控臺發送的數據幀為例說明。
表2中,0xFD、0x55為幀頭;指令類型0x02表示該指令為數據傳送指令,其他指令類型在此不贅述;數據長度表示該幀數據的數據區中包含的數據字節個數,數據區字節個數可變,數據長度0x00~0xFF表示數據區中實際數據個數0~255個;校驗和為數據區中所有數據(0~255個)的累加和。
由于傳送的文件為“.hex”純數據文件,文件中僅包含A~F、a~f、0~9等三類字符,對應十六進制數據分別為0x41~0x46,0x61~0x66,0x30~0x39,可確保幀頭數據0xFD、0x55在整個數據幀中的唯一性,接收方可依此作為判斷每幀數據起始的依據。
2.3 接口實現
FPGA和PROM、JTAG的具體連接關系見圖2。
圖2中,JTAG1下載口用于對FPGA進行在線調試和仿真,JTAG2下載口用于對PROM進行程序燒寫。 FPGA的4個I/O口連接到JTAG2鏈,在對PROM芯片進行程序燒寫時,I/O 1~I/O 4為高阻態,編程器通過JTAG2口對PROM進行程序燒寫。燒寫完成后,FPGA執行程序,此程序中嵌入了對PROM的在線升級功能,在需要對PROM芯片進行在線升級時,I/O 1~I/O 4則分別模擬TCK、TMS、TDI、TDO管腳,由FPGA內部邏輯實現JTAG時序控制功能,對PROM進行擦除、編程、校驗等操作,完成PROM的程序升級。
2.4 模塊組成
FPGA內部由3個模塊組成,分別為422通信模塊、中心控制模塊、JTAG時序控制模塊,組成圖見圖3。
422模塊與測控臺進行數據交互,接收測控臺發送的程序數據,并回復相應的狀態信息到測控臺。JTAG模塊用于生成邊界掃描控制時序,對PROM進行擦除、編程和校驗等相關操作。控制模塊用于對422模塊和JTAG模塊進行協調控制,對422模塊接收到的數據進行校驗,并判斷JTAG模塊當前的運行狀態后,按照自定義的握手協議將數據發送到JTAG模塊,同時將JTAG模塊回復的信息反饋到422模塊。
2.5 模塊通信時序設計
控制模塊與JTAG模塊的連接見圖4。
圖4中,重要信號說明如下:
EPV_CTRL:啟動擦除、編程、校驗操作;
RDY:準備好信號,JTAG模塊準備好接收數據;
LOAD:握手信號,收到RDY為高將LOAD置高表示數據已就緒。
以上信號均為高有效,通信時序見圖5。
圖5中,控制模塊將EPV_CTRL信號置高,等待RDY信號有效,當檢測到RDY信號為高后,將LOAD信號置高,同時將數據放在DATA線上,下一個CLK周期檢測到RDY變為低,則延遲一個周期,在下下個周期將LOAD信號置低,LOAD信號和DATA線上數據至少保持2個CLK周期(注:DATA數據線上傳送的第一個字節為CRC校驗值,相關說明見2.8節)。
2.6 JTAG模塊設計
下面重點介紹JTAG模塊的實現原理。
該模塊的主要功能是對PROM器件進行擦除、編程和校驗操作,每個步驟都是一些必要的指令序列去控制PROM執行相應的動作。例如對PROM進行擦除操作,需要首先發送指令將PROM置為ISP模式,然后發送擦除指令,指定需要擦除的塊(BLOCK),擦除開始后,監測是否有錯誤發生,直到擦除結束。
JTAG模塊發送特定的指令去控制PROM,實現不同的操作。指令的發送時序遵循IEEE1194.1邊界掃描協議。邊界掃描協議最初是用于對芯片進行測試的,通過在芯片內部定義一個測試訪問口(Test Access Port,TAP),以及專用的JTAG測試工具對內部節點進行測試,JTAG測試允許將多個器件串聯在一起,形成一個JTAG鏈,實現對各個器件的分別測試。現今,JTAG接口也常用于實現在線編程(In-System Programming,ISP),對Flash等器件進行編程。
完整的JTAG處理鏈由JTAG寄存器和TAP控制器組成[5]。JTAG寄存器包含了邊界掃描需要的所有指令。TAP控制器主要包含一個狀態機,對控制PROM編程需要的每個必要的步驟進行編碼, TCK上升沿時刻TMS的狀態值決定狀態機的跳轉流程,包括數據入數據寄存器的流程和指令入指令寄存器的流程。相關的狀態轉換原理可參閱參考文獻[5],此不贅述。
2.7 編程操作
對PROM的編程包含擦除、編程、校驗3個步驟。
(1)擦除: 控制模塊將EPV_CTRL置高, JTAG模塊擦除整片PROM,并讀取PROM的狀態,檢查完成狀態或錯誤狀態,完成擦除后,在下一個CLK時鐘上升沿將RDY置高,并進入編程流程。如擦除過程中有錯誤發生,ERROR被置高,控制模塊必須通過RST復位JTAG模塊,并將EPV_CTRL置高,再次嘗試擦除操作。
(2)編程:擦除操作成功后,JTAG模塊將RDY置高,表示該模塊已經準備好接收編程數據,控制模塊將LOAD置高,同時把數據送到DATA線上,同一個時鐘的下降沿,JTAG模塊鎖存數據,下一個時鐘上升沿,JTAG模塊將RDY置低,再下一個時鐘上升沿,控制模塊將LOAD置低。因JTAG模塊需要將數據按位串行移到PROM,所以控制模塊發完數據后,至少需要等8個周期才能發送下一字節數據,發送新的數據前需要首先監控RDY信號的狀態。
控制模塊每發送完256 bit的數據后,PROM對這些數據進行Flash編程,約需15 μs,控制模塊需要延遲等待。在編程期間,模塊監測PROM的狀態查看是否有問題發生,控制模塊發送完所有的數據到JTAG模塊后,將EPV_CTRL置低,JTAG模塊將最后256 bit的數據傳送到PROM,若沒有錯誤,進入校驗操作。
(3)校驗:控制模塊將EPV_CTRL置低后,JTAG模塊將最后一批數據發送到PROM,開始進入校驗流程,JTAG模塊讀取PROM中的所有數據對數據進行8 bit CRC校驗,并與.hex文件的CRC校驗值進行比較,如果不相等,將ERROR置高,DONE保持低,如果相等,則DONE置高,所有連接到JTAG口的I/O管腳高阻態,校驗結束。
2.8 數據校驗
為保證燒寫過程的可靠性及抗干擾性,必須對燒寫數據進行校驗,校驗措施如下:
(1)在設備與地面測控臺的422通信幀尾加入校驗字,對每幀數據進行累加和校驗,保證幀數據的完整性及正確性;
(2)由于生成的.hex文件為純配置數據,不包含文件的校驗信息,為保證燒寫過程的完整性,對整個文件進行數據校驗,在.hex文件頭插入該數據文件所有字節的CRC8校驗值,在燒寫完成后,將PROM中的數據全部讀出并進行CRC8校驗運算,若與文件頭的CRC8校驗值相等,則表明燒寫操作成功。
3 設計注意要點
圖2中FPGA的I/O口與PROM在同一個JTAG鏈,在進行程序升級時,此JTAG鏈(JTAG2)不能連接編程器。
本方案中對PROM的內容進行更新是從地址0順序進行的,此更新并不改變PROM內部的設置寄存器(setup registers)的值,僅改變PROM中數據區的內容。
4 結論
本文基于FPGA靈活的重配置功能,提出了一種對PROM進行程序升級的方案,該方案簡單高效,所有功能均在FPGA內部實現,硬件上僅需要使用FPGA的4個I/O口去模擬JTAG接口時序,實現對PROM內部的數據更新。另外,通信過程中的幀校驗及CRC校驗,確保了數據的正確性及高可靠性。目前該方案已成功應用到系列產品上。
參考文獻
[1] Mike Peattie.Using a microprocessor to configure Xilinx FPGAs via slave serial or select MAP mode[EB/OL].[2009-8-24].www.xilinx.com/support/documentation/application_notes/xapp502.pdf.
[2] 陳嵐,李紀云,朱人杰.基于Kintex7和SPI Flash實現FPGA
的多重加載[J].電子技術應用,2014,40(6):24-26.
[3] XILINX.Platform flash in-system programmable configuration PROMS data sheet[EB/OL].[2006-05-09].http:www.xilinx.com/support/documentation/data_sheets/ds123.pdf.
[4] XILINX.Virtex-4 FPGA configuration user guide[EB/OL].[2009-06-09].http:www.xilinx.com/support/documentation/user_guides/ug071.pdf.
[5] Randal Kuramoto.Updating a platform Flash PROM design revision in-system using SVF[EB/OL].[2009-09-15].http:www.xilinx.com/support/documentation/application_notes/xapp972.pdf.
作者信息:
張永樂,王永勇,鄭 煒
(北京航天萬源科技有限公司,北京100176)