《電子技術應用》
您所在的位置:首頁 > 可編程邏輯 > 設計應用 > 一種基于FPGA的在線程序升級方案
一種基于FPGA的在線程序升級方案
2017年電子技術應用第3期
張永樂,王永勇,鄭 煒
北京航天萬源科技有限公司,北京100176
摘要: 介紹了一種基于XILINX FPGA的在線程序升級方案,該方案不需要額外增加器件,在不改變硬件狀態(tài)的前提下,實現(xiàn)產(chǎn)品的軟件功能升級。由于對配置芯片(PROM)的所有操作均由FPGA的內(nèi)部邏輯實現(xiàn),故此方案具有良好的移植性和擴展性。
關鍵詞: FPGA 在線升級 JTAG
中圖分類號: TN791
文獻標識碼: 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.
Scheme of a in-system program updating based on FPGA
Zhang Yongle,Wang Yongyong,Zheng Wei
Beijing Aerospace Wanyuan Science&Technology Corporation,Beijing 100176,China
Abstract: A in-system programming updating scheme based on XILINX FPGA is proposed. The product software functions can be updated with no destruction of hardware status and no need for adding extra devices.As all of the operations on PROM are implemented by means of FPGA′s logic resources,the scheme has good portability and scalability.
Key words : FPGA;in-system program;JTAG

0 引言

    本文的研究課題是基于一種已應用在某型號上的彈載測試設備,因總體要求有變,需要對出廠后的產(chǎn)品功能進行升級。由于此類產(chǎn)品在出廠前都需要進行特殊的工藝處理,產(chǎn)品交付后不具備開蓋重復燒錄程序的條件,且根據(jù)型號研制要求,彈上設備在完成系統(tǒng)匹配試驗和綜合試驗后禁止拆卸維修,因為設備拆卸后,狀態(tài)遭到破壞,前期進行的各項試驗需要重新評估,影響到型號研制進度。為解決這個難題,本文提出了一種在線程序升級方案,在不破壞產(chǎn)品硬件狀態(tài)的前提下,利用FPGA靈活的內(nèi)部邏輯資源實現(xiàn)自身的軟件功能升級。

1 應用背景

    隨著內(nèi)部資源的日趨豐富以及可重復配置的優(yōu)勢,F(xiàn)PGA在測試設備中擔任了重要的角色,實現(xiàn)的功能也日趨復雜化和多樣化,對產(chǎn)品功能實現(xiàn)重配置的應用需求也在日益加大。產(chǎn)品功能重配置是在不改動設備硬件狀態(tài)的前提下,通過更新FPGA的程序文件,達到產(chǎn)品功能更改及升級的方法。目前主流的應用方案是使用MCU(或DSP)+存儲芯片的架構(gòu)[1],MCU負責存儲芯片的讀寫,存儲芯片作為FPGA的程序代碼存儲器,產(chǎn)品上電后,MCU將存儲芯片中的數(shù)據(jù)讀出,并按照特定時序(FPGA加載時序)發(fā)送到FPGA,此過程即為FPGA的數(shù)據(jù)加載流程[2]。此方案不適用于本文的研究課題,原因有二:首先,此方案需額外增加MCU和存儲芯片兩個芯片,印制板的布局難度加大,尤其對于本設備印制板上器件已經(jīng)很多并無多余空間的情況更加明顯;其次,軟件的數(shù)量增多,增加了MCU軟件后,出故障的概率也隨之加大,由于MCU不僅需要對存儲芯片進行讀寫操作,還需要對FPGA的上電加載過程進行模擬,如果加載不成功,不僅產(chǎn)品的升級功能失敗,產(chǎn)品的基本功能也隨之失效,考慮到本產(chǎn)品的特殊應用場合,此方案風險較大,不宜采用。

    本文采用的方案是在FPGA的內(nèi)部構(gòu)建功能模塊,由該模塊完成PROM芯片燒寫所需要的相關操作。在對產(chǎn)品進行軟件升級時,該模塊執(zhí)行升級工作,不需要進行升級時,模塊閑置,不發(fā)揮作用。該模塊與產(chǎn)品的原功能模塊獨立運行,互不干涉。設備上電時,F(xiàn)PGA的程序加載流程仍由自帶的PROM配置芯片自動完成。該方案既沒有額外增加芯片,也沒有額外增加軟件個數(shù),大大降低了出錯的風險。

2 功能實現(xiàn)

    設備的系統(tǒng)連接框圖如圖1所示,設備通過RS-422接口與地面測控臺連接,地面測控臺通過網(wǎng)絡通信接口與計算機連接。測試設備的主控芯片F(xiàn)PGA為XILINX公司的Virtex-4系列XC4VSX35芯片,PROM配置芯片型號為XCF32PFSG48C,存儲容量32 Mbit[3]。

qrs1-t1.gif

    計算機通過網(wǎng)絡接口將燒寫文件發(fā)送到測控臺,測控臺通過RS-422接口將燒寫數(shù)據(jù)發(fā)送到設備,設備通過RS-422接口向測控臺反饋狀態(tài)信息。下面分別從燒寫文件的生成、測控臺與設備的通信協(xié)議、FPGA與PROM的連接、FPGA軟件設計4個方面進行闡述。

2.1 燒寫文件生成

    XILINX設計工具(PROMGen)可生成多種格式的配置數(shù)據(jù)文件,這些數(shù)據(jù)文件可以存儲在PROM中,也可以存儲在其他非易失性存儲芯片中[4]。配置文件的常用格式見表1。

qrs1-b1.gif

    FPGA程序編寫完成,經(jīng)過ISE(ISE Design Suite 14.2)開發(fā)環(huán)境綜合實現(xiàn)后直接生成.bit編程文件,該文件可由IMPACT工具通過編程器燒寫到PROM中。.bit格式文件是二級制配置數(shù)據(jù)文件,包含了頭文件數(shù)據(jù),頭文件數(shù)據(jù)中包含PROM的相關信息,用于控制PROM燒寫過程,該格式文件適用于使用編程器燒寫。.hex文件為ASCII碼PROM文件格式,僅包含配置數(shù)據(jù),不包含頭文件等信息,可使用PROMGen或iMPACT工具生成,.hex文件為本文采用的文件格式。

2.2 設備通信協(xié)議

    測控臺與設備通過RS-422連接,采用異步串行通信,波特率為921.6 kb/s,8 bit數(shù)據(jù)位,1 bit奇校驗,1 bit停止位。對于RS-422的物理層通信,采用無校驗的方式。發(fā)送與接收采取數(shù)據(jù)幀傳輸,表2以測控臺發(fā)送的數(shù)據(jù)幀為例說明。

qrs1-b2.gif

    表2中,0xFD、0x55為幀頭;指令類型0x02表示該指令為數(shù)據(jù)傳送指令,其他指令類型在此不贅述;數(shù)據(jù)長度表示該幀數(shù)據(jù)的數(shù)據(jù)區(qū)中包含的數(shù)據(jù)字節(jié)個數(shù),數(shù)據(jù)區(qū)字節(jié)個數(shù)可變,數(shù)據(jù)長度0x00~0xFF表示數(shù)據(jù)區(qū)中實際數(shù)據(jù)個數(shù)0~255個;校驗和為數(shù)據(jù)區(qū)中所有數(shù)據(jù)(0~255個)的累加和。

    由于傳送的文件為“.hex”純數(shù)據(jù)文件,文件中僅包含A~F、a~f、0~9等三類字符,對應十六進制數(shù)據(jù)分別為0x41~0x46,0x61~0x66,0x30~0x39,可確保幀頭數(shù)據(jù)0xFD、0x55在整個數(shù)據(jù)幀中的唯一性,接收方可依此作為判斷每幀數(shù)據(jù)起始的依據(jù)。

2.3 接口實現(xiàn)

    FPGA和PROM、JTAG的具體連接關系見圖2。

qrs1-t2.gif

    圖2中,JTAG1下載口用于對FPGA進行在線調(diào)試和仿真,JTAG2下載口用于對PROM進行程序燒寫。 FPGA的4個I/O口連接到JTAG2鏈,在對PROM芯片進行程序燒寫時,I/O 1~I/O 4為高阻態(tài),編程器通過JTAG2口對PROM進行程序燒寫。燒寫完成后,F(xiàn)PGA執(zhí)行程序,此程序中嵌入了對PROM的在線升級功能,在需要對PROM芯片進行在線升級時,I/O 1~I/O 4則分別模擬TCK、TMS、TDI、TDO管腳,由FPGA內(nèi)部邏輯實現(xiàn)JTAG時序控制功能,對PROM進行擦除、編程、校驗等操作,完成PROM的程序升級。

2.4 模塊組成

    FPGA內(nèi)部由3個模塊組成,分別為422通信模塊、中心控制模塊、JTAG時序控制模塊,組成圖見圖3。

qrs1-t3.gif

    422模塊與測控臺進行數(shù)據(jù)交互,接收測控臺發(fā)送的程序數(shù)據(jù),并回復相應的狀態(tài)信息到測控臺。JTAG模塊用于生成邊界掃描控制時序,對PROM進行擦除、編程和校驗等相關操作??刂颇K用于對422模塊和JTAG模塊進行協(xié)調(diào)控制,對422模塊接收到的數(shù)據(jù)進行校驗,并判斷JTAG模塊當前的運行狀態(tài)后,按照自定義的握手協(xié)議將數(shù)據(jù)發(fā)送到JTAG模塊,同時將JTAG模塊回復的信息反饋到422模塊。

2.5 模塊通信時序設計

    控制模塊與JTAG模塊的連接見圖4。

qrs1-t4.gif

    圖4中,重要信號說明如下:

    EPV_CTRL:啟動擦除、編程、校驗操作;

    RDY:準備好信號,JTAG模塊準備好接收數(shù)據(jù);

    LOAD:握手信號,收到RDY為高將LOAD置高表示數(shù)據(jù)已就緒。

    以上信號均為高有效,通信時序見圖5。

qrs1-t5.gif

    圖5中,控制模塊將EPV_CTRL信號置高,等待RDY信號有效,當檢測到RDY信號為高后,將LOAD信號置高,同時將數(shù)據(jù)放在DATA線上,下一個CLK周期檢測到RDY變?yōu)榈?,則延遲一個周期,在下下個周期將LOAD信號置低,LOAD信號和DATA線上數(shù)據(jù)至少保持2個CLK周期(注:DATA數(shù)據(jù)線上傳送的第一個字節(jié)為CRC校驗值,相關說明見2.8節(jié))。

2.6 JTAG模塊設計

    下面重點介紹JTAG模塊的實現(xiàn)原理。

    該模塊的主要功能是對PROM器件進行擦除、編程和校驗操作,每個步驟都是一些必要的指令序列去控制PROM執(zhí)行相應的動作。例如對PROM進行擦除操作,需要首先發(fā)送指令將PROM置為ISP模式,然后發(fā)送擦除指令,指定需要擦除的塊(BLOCK),擦除開始后,監(jiān)測是否有錯誤發(fā)生,直到擦除結(jié)束。

    JTAG模塊發(fā)送特定的指令去控制PROM,實現(xiàn)不同的操作。指令的發(fā)送時序遵循IEEE1194.1邊界掃描協(xié)議。邊界掃描協(xié)議最初是用于對芯片進行測試的,通過在芯片內(nèi)部定義一個測試訪問口(Test Access Port,TAP),以及專用的JTAG測試工具對內(nèi)部節(jié)點進行測試,JTAG測試允許將多個器件串聯(lián)在一起,形成一個JTAG鏈,實現(xiàn)對各個器件的分別測試?,F(xiàn)今,JTAG接口也常用于實現(xiàn)在線編程(In-System Programming,ISP),對Flash等器件進行編程。

    完整的JTAG處理鏈由JTAG寄存器和TAP控制器組成[5]。JTAG寄存器包含了邊界掃描需要的所有指令。TAP控制器主要包含一個狀態(tài)機,對控制PROM編程需要的每個必要的步驟進行編碼, TCK上升沿時刻TMS的狀態(tài)值決定狀態(tài)機的跳轉(zhuǎn)流程,包括數(shù)據(jù)入數(shù)據(jù)寄存器的流程和指令入指令寄存器的流程。相關的狀態(tài)轉(zhuǎn)換原理可參閱參考文獻[5],此不贅述。

2.7 編程操作

    對PROM的編程包含擦除、編程、校驗3個步驟。

    (1)擦除: 控制模塊將EPV_CTRL置高, JTAG模塊擦除整片PROM,并讀取PROM的狀態(tài),檢查完成狀態(tài)或錯誤狀態(tài),完成擦除后,在下一個CLK時鐘上升沿將RDY置高,并進入編程流程。如擦除過程中有錯誤發(fā)生,ERROR被置高,控制模塊必須通過RST復位JTAG模塊,并將EPV_CTRL置高,再次嘗試擦除操作。

    (2)編程:擦除操作成功后,JTAG模塊將RDY置高,表示該模塊已經(jīng)準備好接收編程數(shù)據(jù),控制模塊將LOAD置高,同時把數(shù)據(jù)送到DATA線上,同一個時鐘的下降沿,JTAG模塊鎖存數(shù)據(jù),下一個時鐘上升沿,JTAG模塊將RDY置低,再下一個時鐘上升沿,控制模塊將LOAD置低。因JTAG模塊需要將數(shù)據(jù)按位串行移到PROM,所以控制模塊發(fā)完數(shù)據(jù)后,至少需要等8個周期才能發(fā)送下一字節(jié)數(shù)據(jù),發(fā)送新的數(shù)據(jù)前需要首先監(jiān)控RDY信號的狀態(tài)。

    控制模塊每發(fā)送完256 bit的數(shù)據(jù)后,PROM對這些數(shù)據(jù)進行Flash編程,約需15 μs,控制模塊需要延遲等待。在編程期間,模塊監(jiān)測PROM的狀態(tài)查看是否有問題發(fā)生,控制模塊發(fā)送完所有的數(shù)據(jù)到JTAG模塊后,將EPV_CTRL置低,JTAG模塊將最后256 bit的數(shù)據(jù)傳送到PROM,若沒有錯誤,進入校驗操作。

    (3)校驗:控制模塊將EPV_CTRL置低后,JTAG模塊將最后一批數(shù)據(jù)發(fā)送到PROM,開始進入校驗流程,JTAG模塊讀取PROM中的所有數(shù)據(jù)對數(shù)據(jù)進行8 bit CRC校驗,并與.hex文件的CRC校驗值進行比較,如果不相等,將ERROR置高,DONE保持低,如果相等,則DONE置高,所有連接到JTAG口的I/O管腳高阻態(tài),校驗結(jié)束。

2.8 數(shù)據(jù)校驗

    為保證燒寫過程的可靠性及抗干擾性,必須對燒寫數(shù)據(jù)進行校驗,校驗措施如下:

    (1)在設備與地面測控臺的422通信幀尾加入校驗字,對每幀數(shù)據(jù)進行累加和校驗,保證幀數(shù)據(jù)的完整性及正確性;

    (2)由于生成的.hex文件為純配置數(shù)據(jù),不包含文件的校驗信息,為保證燒寫過程的完整性,對整個文件進行數(shù)據(jù)校驗,在.hex文件頭插入該數(shù)據(jù)文件所有字節(jié)的CRC8校驗值,在燒寫完成后,將PROM中的數(shù)據(jù)全部讀出并進行CRC8校驗運算,若與文件頭的CRC8校驗值相等,則表明燒寫操作成功。

3 設計注意要點

    圖2中FPGA的I/O口與PROM在同一個JTAG鏈,在進行程序升級時,此JTAG鏈(JTAG2)不能連接編程器。

    本方案中對PROM的內(nèi)容進行更新是從地址0順序進行的,此更新并不改變PROM內(nèi)部的設置寄存器(setup registers)的值,僅改變PROM中數(shù)據(jù)區(qū)的內(nèi)容。

4 結(jié)論

    本文基于FPGA靈活的重配置功能,提出了一種對PROM進行程序升級的方案,該方案簡單高效,所有功能均在FPGA內(nèi)部實現(xiàn),硬件上僅需要使用FPGA的4個I/O口去模擬JTAG接口時序,實現(xiàn)對PROM內(nèi)部的數(shù)據(jù)更新。另外,通信過程中的幀校驗及CRC校驗,確保了數(shù)據(jù)的正確性及高可靠性。目前該方案已成功應用到系列產(chǎn)品上。

參考文獻

[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實現(xiàn)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)

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權禁止轉(zhuǎn)載。