洪 偉,安 濤
(船舶重工集團公司723所,揚州225001)
信號模擬設備在雷達或其他偵察設備的調試、測試和檢修過程中發揮了重要的作用。隨著我軍信息化程度的不斷提高,偵察設備的種類也越來越多,為了適應這種變化,多功能成為信號模擬設備的一個重要發展方向。
隨著現場可編程門陣列(FPGA)技術的發展及其在信號模擬設備中的廣泛應用,各種信號模擬功能越來越集中于FPGA中實現,因此FPGA重配置成為信號模擬設備多功能化的一個重要手段。本文正是為了滿足這種應用需求,設計并實現了FPGA重配置。
FPGA是目前電子設備中應用非常廣泛的電子器件,其集成度很高,器件密度從數萬系統門到數千萬系統門不等,可以完成極其復雜的時序與組合邏輯電路,適用于高速、高密度的高端數字邏輯電路設計。除了一些專用器件采用Flash工藝或反熔絲工藝以外,目前使用的FPGA器件一般是基于靜態隨機存儲器(SRAM)工藝的,這種FPGA每次上電后都需要進行配置,配置過程就是對FPGA內容進行編程的過程[1]。
根據FPGA在配置電路中的角色,配置方式分為聯合測試行動組(JTAG)方式、主動方式和被動方式3種。JTAG方式一般用于設計調試階段,設計完成后一般使用主動方式或者被動方式進行配置。
在主動方式下,配置數據存放在外部配置芯片中,上電之后FPGA主動輸出控制信號和同步信號,配置芯片在FPGA的控制下將數據發送到FPGA,完成配置過程。配置數據一般使用FPGA廠商提供的軟件工具直接寫入配置芯片。
在被動方式下,配置過程由系統中的其他設備發起并控制,配置設備一般是微處理器、微控制器或者復雜可編程邏輯器件(CPLD)等。配置數據一般存放在連接到配置設備的存儲器中,需要自行設計程序將其寫入存儲器并進行管理。
FPGA重配置是利用FPGA可編程的特性,在設備正常工作期間,通過調用不同的配置文件對FPGA重新配置以實現特定功能的過程。采用這種方式能夠在不增加或者只增加很少設備和成本的情況下在單一設備上實現更多的功能。FPGA的3種配置方式理論上均可用于實現重配置,但是由于被動方式方便靈活,所以在設計中較常采用。
本設計中使用的FPGA為Altera公司Stratix II系列中的EP2S90,配置設備微控制器(MCU)為TI公司的TMS320F2812。Stratix II系列FPGA的被動配置方式根據接口信號及時序的不同細分為多種具體模式,包括被動串行(PS)、快速被動并行(FPP)、被動并行同步(PPS)、被動并行異步(PPA)以及被動串行異步(PSA)等。PS方式由于使用的引腳少,便于在各種配置設備上實現,所以本設計采用這種方式[2]。
使用PS方式首先要正確設置FPGA芯片上的配置方式選擇引腳 MSEL[3.0],根據器件手冊要求,這4個引腳狀態分別為0,0,1,0。
PS方式使用DCLK(配置時鐘)、DATA0(配置數據)、nCONFIG(配置命令)、nSTATUS(狀態信號)和CONF_DONE(配置完成指示)5個引腳來完成配置過程。本設計電路連接如圖1所示,FPGA的5根配置信號線全部連接到MCU的通用輸入輸出(IO)上,MCU通過其IO引腳實現FPGA配置時序。配置數據存儲在Flash芯片中,Flash芯片通過串行外圍設備接口(SPI)接口與MCU連接。

圖1 電路連接框圖
因為重配置是在設備正常工作的狀態下進行的,因此在電路設計時必須考慮FPGA的配置過程對設備中其他電路的影響。FPGA在配置過程中,其IO引腳為高阻,但是因為FPGA的控制信號都是通過電平轉換芯片與其他電路相連,所以在FPGA輸出為高阻的狀態下,電平轉換芯片輸入相當于懸空,導致其輸出為高電平。對于在FPGA配置期間必須保持低電平的信號需要在電平轉換芯片的輸入端增加下拉電阻。
FPGA的配置數據如何寫入Flash芯片、在Flash芯片中如何存儲是FPGA重配置設計中一個重要的部分,它不僅與FPGA和Flash芯片型號相關,還會直接影響軟件設計的復雜度。
本設計使用的Flash芯片為M25P128,其總存儲量為128Mbit,分為64個Sector,每個Sector分為1 024個Page,每個Page包含256個字節。本設計將Flash芯片等分為8個子存儲區,每個子存儲區由8個Sector組成,大小為16Mbit,分別用來存儲不同的FPGA配置數據或者其他數據。子存儲區從0到7進行編號,這樣只需知道子存儲區編號,即可計算出每個子存儲區的起始段地址(等于子存儲區編號乘8)和起始頁地址(等于子存儲區編號乘8 192)。
FPGA EP2S90的原始配置數據大小約為25.7Mbit,直接使用的話將無法放進1個子存儲區中,因此配置數據必須先進行壓縮處理,壓縮處理在Altera公司的設計軟件Quartus II中完成。配置數據壓縮之后體積可以減少35%~55%,考慮到FPGA在正常使用中并不會用完所有資源,所以壓縮后的配置數據完全可以存儲到一個16Mbit的子存儲區中。
壓縮之后的配置數據大小是字節的整數倍但并不固定,根據FPGA設計的不同,其大小也不同,為了盡量降低MCU程序的復雜度和代碼尺寸,本設計對壓縮后的配置數據按照統一的格式進行處理。在配置數據的前面插入256字節的數據用來存儲描述信息,其前4個字節用于描述配置文件的大?。▎挝粸樽止潱?,其他字節根據需要可以存儲如文件版本、編譯時間等信息,未使用的全部填充0xFF,在配置數據的后面添加若干個0xFF,將整個配置數據大小湊成256字節的整數倍。
因為經過處理后的文件大小為256字節(Page)的整數倍,所以MCU在數據存儲操作中只需要用到并 實 現 “sector erase”和 “page program”2 條Flash操作指令,在FPGA配置操作中只需要用到并實現“page read”1條Flash操作指令,降低了程序設計的復雜度。
軟件設計主要是MCU指令處理子程序的設計,包括數據存儲和FPGA配置程序2個部分。
數據存儲程序由段擦除指令處理子程序和頁編程指令處理子程序共同構成,其執行流程如圖2所示。

圖2 數據存儲程序流程圖
MCU正常加電初始化后處于等待指令狀態,接收到段擦除指令后,根據指令中的子存儲區編號zone計算得到本存儲區的起始段地址s,并通過串行外設接口(SPI)向Flash芯片發出擦除段s的指令,段s擦除完畢后繼續擦除下一個段,直到本存儲區8個段都擦除完畢。
在程序返回主程序之前根據子存儲區編號zone計算得到本存儲區的起始頁地址p供頁編程指令處理子程序執行時使用。段擦除指令執行完畢后告知主控系統并返回主程序,等待執行下一條指令。
因為整個配置文件的大小已經被預處理為Page大小的整數倍,所以頁編程指令處理子程序每次都將收到一個完整Page大小的數據,MCU只需調用一次Flash的頁編程指令將數據寫入當前頁p,然后將p指向下一個Page的起始地址即可。每次執行完畢后,告知主控系統并返回主程序,等待執行下一條指令。
FPGA配置程序執行流程如圖3所示。

圖3 FPGA配置程序流程圖
MCU首先將nCONFIG引腳置0,保持5μs后再置1,由此啟動FPGA配置,等待200μs后查看nSTATUS引腳狀態,如果不等于1,則FPGA沒能進入配置狀態,本次配置失敗,MCU告知主控系統本次配置失敗,然后程序返回,等待主控系統下一條指令。如果nSTATUS引腳為1,則表示FPGA已經進入配置狀態,可以接收外部配置數據。
MCU根據接收指令中的子存儲區編號計算得到該子存儲區起始頁地址,先讀取第1個Page的數據以獲得該配置文件大小,接著讀取下一個Page的數據并寫入MCU緩存區,記錄當前有效數據個數N為256個字節,然后通過改變DATA0和DCLK引腳狀態將1個字節的數據串行發送給FPGA,并將總配置文件剩余字節數Size減1,當前緩存區有效字節數N減1。
每發送1個字節給FPGA后查看一下nSTATUS引腳狀態,判斷配置過程是否出錯,判斷一下剩余字節數是否為0,判斷一下當前緩存區有效數據個數是否為0。如果nSTATUS引腳為0,則配置過程出錯,MCU告知主控系統本次配置失敗,然后程序返回,等待主控系統下一條指令。如果剩余字節數為0,則配置數據發送完畢;如果不為0,則需要繼續寫入數據。
如果緩存區有效數據不為0,則繼續從緩存區讀取一個字節數據寫入FPGA,如果緩存區有效數據為0,則需要先讀取下一個Page的數據寫入緩存區,再從緩存區讀取一個字節數據寫入FPGA。
所有數據都寫入FPGA后,MCU查看CONF_DONE引腳狀態,如果該引腳為1,則表示本次配置成功;否則,本次配置不成功。配置結束后MCU將結果告知主控系統并返回主程序,等待主控系統下一條指令。
本文基于EP2S90和TMS320F2812設計實現了FPGA重配置功能,并已成功應用于某型信號模擬設備中,使得該設備以較小體積和成本實現了多種功能的集成,競爭力顯著增強,經濟效益明顯。本設計通用性強,實用性高,未來可以推廣到其他設備和應用中。
[1]王誠,蔡海寧.Altera FPGA/CPLD 設計(基礎篇)[M].北京:人民郵電出版社,2011.
[2]蘇奎峰,呂強,常天慶.TMS320X281xDSP原理及C程序開發 [M].北京:北京航空航天大學出版社,2008.