葉兵,唐智慧,賀孟
(中國電子科技集團公司 第三十研究所,成都 610041)
基于FPGA的極簡在系統(tǒng)編程設計
葉兵,唐智慧,賀孟
(中國電子科技集團公司 第三十研究所,成都 610041)
針對FPGA程序在線編程與加載問題,提出一種極其簡單的基于PicoBlaze6的FPGA高可靠性在系統(tǒng)編程方法?;诖朔椒?,實現了一個通過串口對SPI Flash在系統(tǒng)編程的設計,該設計著重闡述整個設計的工作原理與實現方法,并給出了帶電重啟與選擇加載的實現時序仿真圖與在系統(tǒng)編程的調試結果。調試結果表明,在系統(tǒng)編程得到成功實現,本設計已在工程實踐中得到應用。
FPGA;PicoBlaze6;在系統(tǒng)編程;SPI;多重啟動;自動回滾
在很多系統(tǒng)中,可編程邏輯器件(FPGA)的應用需要外置處理器配合實現,然而,對于小系統(tǒng)應用來說,外置處理器資源浪費多,成本開銷大。FPGA 內嵌8位單片機PicoBlaze,應用簡單[1],消耗資源極少,為上述問題提供了一個有效的解決途徑。
目前業(yè)界FPGA在系統(tǒng)編程設計趨于多樣化發(fā)展,例如模擬聯合測試行為組織(JATG)接口、模擬串行外設接口(SPI)、模擬并行外設接口(BPI)等[2-4],但是基本都需要外置處理器配合實現,甚至需要軟件程序啟動之后才能進行,存在實現方法復雜、接口多、設計麻煩、冗余性差、通用性差、可移植性差、程序配置文件更新麻煩等一些問題。
針對上述問題,提出了一種支持串口在線更新FPGA配置文件的在系統(tǒng)編程方法。系統(tǒng)設計支持計算機串口在系統(tǒng)編程更新FPGA程序配置文件:一方面,不需要外置處理器,單獨通過終端串口更新FPGA配置文件,應用簡單;另一方面,系統(tǒng)對軟件應用層只提供簡單的標準串口,接口簡單實用,可靠性強,應用廣泛,通用性強。同時,設計冗余性特別強,支持FPGA程序更新加載配置文件失敗后,自動回滾加載升級前一個版本的配置文件工作,能夠避免FPGA升級更新失敗所導致的死機問題,用戶通過查詢FPGA版本號能夠快速知道FPGA升級成功與否。本系統(tǒng)的在系統(tǒng)編程設計可移植性強,可移植應用到包含PicoBlaze6的Xilinx FPGA平臺系統(tǒng)[5]。
FPGA支持多種加載模式,如Master Serial/SPI、Master SelectMAP/BPI、JTAG、Slave SelectMAP和Slave Serial等。
部分Xilinx FPGA支持多個配置文件的多重啟動加載,FPGA通過多重啟動可從FLASH內存儲的多個配置文件中選擇加載。FPGA自身可觸發(fā)多重啟動功能,重啟FPGA配置過程,重新加載一個新的FPGA 配置文件,同時,部分Xilinx FPGA支持FPGA配置文件加載失敗后自動回滾加載回滾存儲區(qū)域配置文件。
PicoBlaze68位微控制器KCPSM6是Xilinx公司推出的一款FPGA內嵌處理器軟核,適用于Xilinx公司的Spartan6、Virtex6和7系列FPGA應用,只需要26個Slice和1個BRAM,消耗資源只相當于XC6SLX4的4.3%與XC6SLX150T的0.11%,資源占用率非常低。
KCPSM6支持52~119 MIPS的指令執(zhí)行速度,指令執(zhí)行速度與FPGA器件和器件速度等級有關系。KCPSM6的原理框圖如圖1所示,主要由以下部分組成:① 暫存寄存器:64字節(jié)、128字節(jié)與256字節(jié);② 兩塊寄存器A和B:16個,8位位寬;③ 算術邏輯處理單元;④ 程序存儲模塊:最大支持4 KB指令存儲;⑤ 譯碼與控制模塊;⑥ I/O接口模塊。
圖1 KCPSM6原理框圖
KCPSM6為用戶工程開發(fā)提供VHDL/verilog源文件,同時,KCPSM6在線調試可使用Jtagloader迅速更新RAM中存在的KCPSM6程序執(zhí)行文件,采用指令jtagloader-l your_program.hex即可實現KCPSM6程序運行指令的在線更新。
系統(tǒng)設計主要分為三部分:硬件電路設計、FPGA邏輯設計與軟件設計。設計實現了以PicoBlaze6為控制樞紐的FPGA 在系統(tǒng)編程功能。本設計通過計算機串口把需要更新的FPGA程序配置文件與Header頭文件(記錄FPGA配置文件啟動信息與回滾信息)編程寫入FPGA的SPI Flash中存儲[6-8];FPGA重啟后,檢測文件版本,若版本正確,編程配置文件更新成功;若版本錯誤,編程配置文件更新失敗,需重新通過計算機串口編程更新FPGA的程序配置文件。頭文件、更新的配置文件與自動回滾的配置文件分別存儲于Flash內三個不同的存儲區(qū)域;配置文件啟動區(qū)域和自動回滾區(qū)域是動態(tài)相互切換的;Header頭文件決定了啟動區(qū)域和回滾區(qū)域。整個在系統(tǒng)編程流程不用對FPGA重新上電或者復位操作。此外,設計實現多重啟動選擇加載功能,可通過指令操作控制ICAP實現完成。
FPGA上電后,FPGA加載頭文件規(guī)定的啟動信息區(qū)域的配置文件工作;如果啟動信息區(qū)域的配置文件加載失敗,FPGA自動回滾加載回滾區(qū)域的配置文件工作;當需要更新配置文件時,系統(tǒng)發(fā)指令更新FPGA回滾區(qū)域的配置文件并更新頭文件,修改以前的啟動信息地址為回滾區(qū)域的地址,以前回滾區(qū)域的地址為啟動信息地址,實現了兩個區(qū)域配置文件的交替更新并保存更新前一個版本的程序配置文件作為回滾區(qū)域配置文件。
FPGA程序配置文件加載流程如圖2所示,上電工作,FPGA加載區(qū)域X的配置文件,串口在系統(tǒng)編程更新區(qū)域Z的配置文件與頭文件,更新成功以后斷電重啟,若加載成功,FPGA加載區(qū)域Z的配置文件工作;加載失敗,FPGA自動回滾加載區(qū)域X的配置文件工作。系統(tǒng)設計可以通過串口發(fā)指令讀取程序版本號,判斷FPGA程序是否更新成功。
圖2 配置文件更新與加載流程圖
在設計中,Header頭文件、區(qū)域X和區(qū)域Z的Flash存儲空間如表1所列。Header頭文件存儲啟動地址的信息,決定了啟動區(qū)域是X還是Z;如果啟動區(qū)域是X,那么啟動地址信息是0x01 0000,回滾地址信息是0x40 0000;如果啟動區(qū)域地址是Z,那么啟動地址信息是0x40 0000,回滾地址信息是0x01 0000。如果更新加載的是區(qū)域X的文件,那么設計更新區(qū)域Z存儲的配置文件,并更新頭文件修改啟動信息地址為0x40 0000,回滾地址信息為0x01 0000;如果更新加載的是區(qū)域Z的文件,那么設計更新區(qū)域X存儲的配置文件,并更新頭文件(Header)修改啟動信息地址為0x40 0000,回滾地址信息為0x01 0000。
表1 Flash存儲區(qū)域劃分
4.1 電路設計
如圖3所示,系統(tǒng)硬件架構電路主要包括電源模塊、FPGA、FPGA外圍電路、串口芯片電路[9]、Flash電路、晶振電路等。
圖3 系統(tǒng)硬件架構
在本系統(tǒng)的設計中,FPGA采用Spartan6系列的XC6SLX150T,串口芯片采用MAX3232,配置文件存儲芯片采用SPI Flash M25P64;電源模塊為FPGA提供了工作所需要的核電壓、I/O電壓與輔助電壓等;晶振提供100 MHz時鐘給FPGA;串口芯片實現FPGA I/O與計算機終端的電平匹配;設計通過SPI接口更新與加載程序配置文件;設計實現了串口與SPI接口數據通信協(xié)議的轉換[10-11]。
4.2 FPGA邏輯設計
FPGA邏輯主要由串口模塊、KCPSM6模塊、執(zhí)行指令RAM模塊、ICAP模塊組成,如圖4所示。
圖4 FPGA邏輯框圖
串口模塊分為串口收模塊與串口發(fā)模塊,實現115 200波特率的傳輸速率[12]。串口模塊對外接口應用簡單,只有收發(fā)數據兩個接口,串口模塊包括Xon/Xoff 軟流控設計[13-16]。
KCPSM6模塊是整個系統(tǒng)的工作樞紐,控制實現串口數據與SPI數據的相互轉換。KCPSM6模塊按照執(zhí)行指令RAM模塊里面存儲的指令信息來運行的;執(zhí)行指令RAM模塊是由軟件匯編代碼編譯后轉化生成的FPGA代碼文件;執(zhí)行RAM模塊按設計嵌入整個工程文件中。KCPSM6模塊與執(zhí)行指令RAM模塊軟件設計的相關信息將在下一節(jié)中詳細介紹。
此外,設計實現了多重啟動選擇加載功能,通過重啟指令操作控制ICAP的配置信息寫入FPGA中,實現FPGA重啟選擇加載規(guī)劃的兩個區(qū)域內任意一個區(qū)域的配置文件。ICAP配置信息寫入時序如圖5所示,MLTBT_STRT_ADDR_H是啟動地址信息,FLBK_STRT_ADDR_H是回滾信息地址,使能信號CONFIG_EN(KCPSM6模塊輸出)由低電平變?yōu)楦唠娖剑瑔覫CAP模塊寫入ICAP配置信息上電重啟加載MLTBT_STRT_ADDR_H設置的啟動區(qū)域的FPGA配置文件工作。
圖5 ICAP配置信息寫入時序仿真圖
PicoBlaze采用的是精簡指令集,包括程序控制指令、算術指令、邏輯指令、移位和旋轉指令、中斷指令、存儲指令和I/O指令等。
在該設計中系統(tǒng)軟件分為三層:驅動層、內核層、事務層。驅動層負責訪問外圍硬件設備,這里指串口、 Flash接口、ICAP接口;事務層負責和上層軟件接口,從上層應用程序接收或發(fā)送信息;內核層在驅動層和事務層之間,負責兩層信息的字符轉義和用于燒寫Flash的MCS文件處理。具體架構如圖6所示。
圖6 軟件架構框圖
圖6的每個框圖都是一個子程序,這個程序架構的好處是,更改或減少任何一個子程序不需要改動其他子程序和程序架構,由此可見只要增加減少或更換Flash接口子程序就可適配各種類型的FPGA和Flash,而對上層應用程序提供標準統(tǒng)一的交互指令格式,上層應用程序只需按照標準數據格式下發(fā)接收指令和發(fā)送燒寫程序文件,就可實現FPGA程序配置文件的燒寫更新、上電多重啟動與選擇重啟加載等功能,完全不用關心FPGA和Flash的種類型號。而且該程序為了版本識別以及防止非法訪問,還設置了口令保護和版本控制功能。
如圖7所示,設計的板卡連接串口,輸入指令I,可以讀取Flash的ID——0x20 2017,驗證電路系統(tǒng)是否正常工作。輸入指令S,可以扇擦除Flash;輸入指令U,設計對Flash區(qū)域X或Z編程更新,要求將MCS文件寫入Flash中;編程完成后,設計會返回OK信號提示編程成功;輸入指令X,重啟加載區(qū)域X文件;輸入指令Z,重啟加載區(qū)域Z文件。如圖8所示,輸入指令D,可讀取當前啟動區(qū)域信息,為bootX,提示啟動區(qū)域為X;輸入指令M,寫頭文件到Flash中,修改配置文件啟動信息;更新頭文件后,輸入指令D,可讀取啟動區(qū)域信息bootZ,提示啟動區(qū)域為Z。重啟板卡后,計算機串口編程前后打印信息對比顯示:如圖7所示,更新前,FPGA程序版本Version是170320B1;如圖8所示,更新后,程序版本Version是170320B3;FPGA在系統(tǒng)編程更新成功。
圖7 更新前串口打印
圖8 更新后串口打印
[1] 魏厚剛,楊寬泗,孫武,等.KCPSM6 PicoBlaze的原理與應用[J].單片機與嵌入式系統(tǒng)應用,2013(2):77-78.
[2] 張江偉.基于Virtex_5和FLASH實現FPGA的多重配置[J].計算機與網絡,2012(3):130-132.
[3] 李磊,張春妹,趙翠華,等.一種FPGA配置加載管理電路的設計與實現[J].微電子學與計算機,2015,32(8):146-153.
[4] 晏勇.基于MCU的FPGA系統(tǒng)在線配置及實現[J].陜西科技大學學報,2013,31(4):122-126.
[5] 張坤.基于FPGA的PicoBlaze嵌入式通信系統(tǒng)設計[J].電子科技,2016,26(5):53-56.
[6] 薛宏亮.基于SPI總線FLASH時序控制的FPGA實現[J].電子制作,2016(8):12-13.
[7] 王永利.基于FPGA的帶寄存器尋址SPI接口設計[J].物聯網技術,2013(3):45-47.
[8] 關珊珊,周潔敏.基于XilinxFPGA的SPI Flash控制器設計與驗證[J].電子器件,2012,35(2):216-220.
[9] 黨俊博,李哲,李雅俊.基于FPGA的串口通信電路設計與實現[J].電子科技,2016,29(7):106-109.
[10] 殷安龍,張持健,陳林,等.基于FPGA的多串口通信設計與實現[J].電子設計工程,2016,24(17):45-47.
[11] 滿忠昊,權國棟,徐釗.基于FPGA多協(xié)議轉換網關設計[J].煤礦機械,2015,36(8):298-301.
[12] 于中權,王一誠,吳大慶,等.基于SystemGenerator的UART通訊[J].計算機與現代化,2015(1):96-101.
[13] 賀春芝,夏銀水,王倫耀.UART IP核的設計及其FPGA實現[J].浙江大學學報,2012,39(5):535-540.
[14] 楊瀾,戚秀真.UART微控制器設計方法及其FPGA實現[J].電子科技,2016,26(6):72-74.
[15] 謝謝.基于FPGA的UART設計[J].電子設計工程,2012,20(16):51-53.
[16] 于志翔.基于FPGA的UART設計與實現[J].電子測量技術,2015,38(3):77-81.
葉兵(工程師),主要研究方向為電子與通信工程、電路設計等。
Minimalist in System Programming Design Based on FPGA
Ye Bing,Tang Zhihui,He Meng
(The 30th Research Institute of China Electronic Technology Group Corporation,Chengdu 610041,China)
Aiming at the FPGA online program and load problem,a kind of extremely simple in system programming method based on PicoBlaze6 is proposed.Based on this method,the design of a serial port to the SPI Flash in system programming has been completed.The working principle of the design and implementation method are focused on.Finally the reboot application and selecting loading simulation diagram and the debugging results are given.The debugging results show that in system programming has been successfully implemented.This design has already been used in engineering practice.
FPGA;PicoBlaze6;in system programming;SPI;multiboot;automatic fallback
TN79
A
?士然
2017-05-08)