隨著半導體工藝技術的迅猛發(fā)展,現(xiàn)場可編程邏輯器件FPGA的集成度迅速提高,已達到百萬門量級,與此同時,F(xiàn)PGA中的邏輯資源也日益豐富,使得基于FPGA的片上系統(tǒng)設計成為可能.基于FPGA的片上系統(tǒng)設計因其具有開發(fā)周期短,設計成本低,軟硬件可編程,系統(tǒng)設計靈活、可裁減、可擴充、可升級等優(yōu)點正在成為電子系統(tǒng)設計的研究熱點,且已經在通訊、工控等領域得到實際應用.
目前FPGA從實現(xiàn)技術上進行分類,可以分為基于查找表(LuT,k—up table)技術,SRAM工藝的FPGA、基于nash技術的FPGA和基于反熔絲(Anti—fuse)技術的FPGA,而使用最多的還是基于SRAM工藝的FPGA,如Altem的Cycl0ne和S tix系列、xilin)【的Spanan和Virtex系列.基于SRAM 的FPGA片內帶有存儲配置位流的sRAM,上電時,將存儲在專用配置芯片中的配置信息加載到FPGA中,從而實現(xiàn)一定的邏輯功能,掉電時片內SRAM中的配置數(shù)據(jù)遺失,需要下一次加電時重新加載配置.這種片內易失存儲器存儲配置數(shù)據(jù)的結構,使得FPGA可以在線動態(tài)的對其sRAM中的配置數(shù)據(jù)進行更新,從而實現(xiàn)電路邏輯功能動態(tài)改變.系統(tǒng)可重構主要就是利用基于sRAM的FPGA這種動態(tài)重配置特性才得以實現(xiàn)的,下面就以Altem公司Cyclone II系列FPGA分析其配置方式及其可重構應用.
1 可重構配置方法
根據(jù)FPGA在配置過程中的角色可把cyclone II系列FPGA的配置方式分為三種:FPGA主動串行(As)方式、FPGA被動串行(PS)方式和JATG方式.不同配置模式通過配置模式選擇管腳MsEL[1:0]進行選擇,其中MsEL[1:0]=o0時選擇As模式,MsEL[1:O]=01時選擇PS模式,對于某些串行配置器件當MsEL[1:0]=l0時為快速AS模式,配置速度比PS模式快一倍.Cyclone II系列FPGA支持配置數(shù)據(jù)自解壓,將壓縮的配置數(shù)據(jù)存儲在配置器件或其它存儲器中,配置時傳送壓縮的位流數(shù)據(jù)到FPGA中,F(xiàn)PGA可實時的解壓縮并對內部sRAM進行編程,配置數(shù)據(jù)的壓縮比例可達35%-5O% ,可有效節(jié)省配置存儲空間.
在As方式下,由FPGA主動輸出控制和同步信號給專用串行配置芯片,配置芯片接收到配置命令后,就開始將配置數(shù)據(jù)串行的發(fā)送至FPGA,完成配置工作.目前常用的專用串行配置芯片為容量為4 Mb的EPCS4和16 Mb的EPcS16等.AS配置模式主要用到四個信號:串行數(shù)據(jù)輸入DcLK、控制信號輸入AsDI、片選信號ncs和串行數(shù)據(jù)輸出DATA.
在PS方式下,由系統(tǒng)中其它設備發(fā)起配置過程,F(xiàn)PGA在配置過程中只輸出應答信號,發(fā)起控制配置過程的設備可以是處理器、Altem EPC系列配置芯片、CPLD等功能設備.在下一小節(jié)將對PS配置方式做詳細的介紹.JTAG調試接口已經作為一個標準接口集成在芯片內,主要用于芯片的測試,cycl0ne II系列FPGA都支持JTAG方式對FPGA進行配置,JrrAG方式具有比其它配置方式都高的優(yōu)先級.JrI'AG接口定義了四個標準信H號:
● rI℃K測試時鐘,各種信號都需要與測試時鐘同步;
● TDI測試數(shù)據(jù)輸入,測試數(shù)據(jù)串行輸入,數(shù)據(jù)在TCK上升沿傳送;
● TDO測試數(shù)據(jù)輸出,測試數(shù)據(jù)串行輸出,數(shù)據(jù)在TCK下降沿傳送;
●TMs測試模式選擇,決定JTAG電路內部TAP控制器狀態(tài)機的變化.
2 基于ARM的配置方法及實現(xiàn)
2.1 PS配置原理
如圖l所示,利用s3c2410x作為主控制器采用被動串行方式對EP2c20內部邏輯進行重構.FPGA的PS配置方式是比較常用的一種配置方式,可以有效實現(xiàn)FPGA的在線配置,其基本流程為:在系統(tǒng)中將FPGA被動配置方式配置接口與ARM處理器的IO管腳相連,在處理器端通過軟件控制相應管腳的高低電平將數(shù)據(jù)串行的發(fā)送到FPGA中.重構程序運行在ARM處理器中作為實時系統(tǒng)的一個任務,當需要重配FPcA內部邏輯時,調用相應任務,配置完成后,刪除當前任務即可,因此,可將預先建立的配置文件庫存儲到ARM的nash中,由ARM處理器中運行的配置程序來完成動態(tài)重構任務。FPGA與Ps配置方式有關的管腳功能如表l所示:
整個配置過程幾個關鍵信號的時序圖如圖2所示,配置過程可以分為復位、配置和初始化三個階段:
在復位階段,微處理器首先在nc0NFIG信號線上產生一個寬度大于8 s的負脈沖,然后開始檢測nsTATus信號的狀態(tài).FPGA檢測到ncONFIG信號的下降沿后會迫使nsTATus和cONF—DONE信號拉低,使FPGA處于復位狀態(tài),當ncONFIG變?yōu)楦唠娖綍r,F(xiàn)PGA退出復位狀態(tài),釋放漏級開路的nSTATUS管腳,nSTATuS在外部需要被l0 K的上拉電阻拉高,nSTATUS管腳變?yōu)楦唠娖胶?,F(xiàn)PGA即進人配置階段,此時,F(xiàn)PGA已做好了接收配置數(shù)據(jù)的準備.
FPGA的nsTATuS管腳變高后,延時5 s左右,在DCLK的上升沿FPGA即可從DA L0管腳串行的接收配置數(shù)據(jù),配置數(shù)據(jù)按低位在先高位在后的順序從數(shù)據(jù)線上送出.當所有數(shù)據(jù)都接收完后釋放漏級開路的CONFIG— DONE管腳,CONFIG—DONE管腳在外部需要被10 K的上拉電阻拉高,CONFIG—DONE管腳由低到高的跳變表明配置階段結束,F(xiàn)PGA進入初始化階段.如果在配置過程中出現(xiàn)錯誤,則n rATuS管腳將輸出低電平,F(xiàn)PGA在內部自動復位,處理器可以通過查詢ns1IATuS管腳狀態(tài)判斷在配置過程中是否有錯誤發(fā)生,如果nsTATuS管腳在配置過程中變低則表明有錯誤發(fā)生,如果在軟件中設置了錯誤發(fā)生后自動重新開始配置選項則FPcA會延時一段時間后釋放nsTATuS,此時nsTATuS被外部上拉電阻拉高,CPu在nsTA—Tus上檢測到一個由低到高的跳變后重新開始配置.若軟件中未設置“錯誤發(fā)生后自動重新開始配置”選項則需要CPu首先將nCONFIC管腳置低再拉高以開始重新配置.
在初始化階段,初始化時鐘可以是FPGA內部時鐘或外部由CLKusR管腳提供的時鐘,本例使用了FPGA內部時鐘,F(xiàn)PGA將為初始化提供時鐘,這樣,初始化階段不再需要外部時鐘.初始化階段完成后INIT—DONE管腳變?yōu)楦唠娖?,指示FPGA成功進人用戶模式,配置過程結束.需要注意的是,若此時CONF—DONE或INIT_DONE未變?yōu)楦唠娖?,則表明此次配置過程不成功,需要cPu重新進行配置.
2.2 配置程序設計
下面是完整的重構程序及流程圖(圖3所示),作為s3c24lOx ARM處理器 μC/OS—II實時操作系統(tǒng)的一個任務運行,但在工程應用中要結合實際情況做適當修改.
基于μC/OS—II配置程序:
U8Fpga~DownLoad(v0id)
{U8 Bootaddr;
U32 CountNum =O柏:
u8 FpgaBu如;
U16 i:
Bo0taddT:(u8 )(O】(33ooooo0);/ 配置數(shù)據(jù)起始地址 /
SeI— Datao(O);
seLnCONFIG(0);/_將ncONFIG置低電平 /
set— DCLK(O);
hude1ay(10);/}延時1O /
if(Re們一nSTATUS)
{prin (”err0r:nSTATuSis 1 1”);
retum O;}
Set— nC0NFIG(1);
while(!Read—nsTATUS);
hudelay(5);
p nd(”十co gIlre FPGA.-);
while(c0untNum <=O)(24294)/}串行配置數(shù)據(jù) /
{FpgaBu任er= (Bo0t&ddT+c0un um);