一種高檔FPGA可重構(gòu)配置方法
基于軟件無(wú)線電的某機(jī)載多模式導(dǎo)航接收機(jī)能較好地解決導(dǎo)航體制不兼容對(duì)飛行保障區(qū)域的限制,但由于各體制信號(hào)差異較大,各自實(shí)現(xiàn)其硬件將相當(dāng)龐大,若對(duì)本系統(tǒng)中數(shù)字信號(hào)處理的核心 FPGA芯片使用可重構(gòu)的配置方法,將導(dǎo)航接收機(jī)的多種模式以時(shí)分復(fù)用的方式得以實(shí)現(xiàn),可以重復(fù)利用 FPGA的硬件資源,達(dá)到了縮小體積,減小功耗,增加靈活性和降低系統(tǒng)硬件復(fù)雜程度等目的。本系統(tǒng)中的核心器件是新一代高檔 FPGA,適合于計(jì)算量大的數(shù)字信號(hào)處理,包含實(shí)現(xiàn)數(shù)字信號(hào)處理的 DSP塊、數(shù)字鎖相環(huán)、硬件乘法器以及各種接口等多項(xiàng)技術(shù),支持遠(yuǎn)程更新,但其配置數(shù)據(jù)大,實(shí)現(xiàn)較為復(fù)雜。采用 CPLD+FLASH方案,有效的解決了這一問(wèn)題。
1 FPGA及其可重構(gòu)技術(shù)簡(jiǎn)介
現(xiàn)代高速度 FPGA運(yùn)行時(shí)需將其配置數(shù)據(jù)加載到內(nèi)部 SDRAM中,改變 SDRAM里面的數(shù)據(jù),可使 FPGA實(shí)現(xiàn)不同的功能,即所謂的可重構(gòu)技術(shù)??芍貥?gòu)技術(shù)包括靜態(tài)系統(tǒng)重構(gòu)和動(dòng)態(tài)系統(tǒng)重構(gòu)[1]。在 FPGA處于工作狀態(tài)時(shí)對(duì)其部分配置數(shù)據(jù)進(jìn)行更改稱為動(dòng)態(tài)配置,否則稱為靜態(tài)配置。由于本系統(tǒng)在工作時(shí)需要改變整個(gè) FPGA功能,所以采用靜態(tài)配置。這種配置是完全的,它對(duì)整個(gè) FPGA的功能、參數(shù)完全更改,而且其引腳功能也被更改。
系統(tǒng)的關(guān)鍵部件為一片高檔密度 FPGA EP2S30,其要求的一次配置數(shù)據(jù)達(dá)1.205MBytes,故其配置采用“Flash存儲(chǔ)器+CPLD主控器”的方案。
EP2S30支持5種配置方案,即AS(Active Serial)模式、PS(PassiveSerial)模式、FPP(FastPassive Parallel)模式、PPA(Passive parallel Asynchronous)模式和JTAG配置模式等。為縮短配置時(shí)間,本系統(tǒng)采用FPP模式,配置數(shù)據(jù)不壓縮,使各配置數(shù)據(jù)長(zhǎng)度一致,以便于分配Flash存儲(chǔ)空間,且只需要同數(shù)據(jù)率相同的時(shí)鐘信號(hào)[2]。
2 可重構(gòu)系統(tǒng)硬件設(shè)計(jì)
2.1 芯片介紹
2.1.1 FPGA芯片
采用 Altera公司 StratixⅡ系列 FPGA,具有多達(dá) 33880個(gè)等價(jià)邏輯單元 (LE)和 13552個(gè)自適應(yīng)邏輯單元(ALM),支持可編程片上系統(tǒng) (SOPC),有多達(dá) 1369Kbits片上 RAM,支持 NIOS嵌入式處理器,片上有多達(dá) 16個(gè) DSP塊和 64個(gè) 18位×18位硬件乘法器以及 6個(gè) PLL模塊,支持遠(yuǎn)程更新。其片內(nèi)資源完全可以實(shí)現(xiàn)系統(tǒng)所需的數(shù)字下變頻(DDC)、幅度調(diào)制與解調(diào)、方位和距離脈沖形成以及控制信號(hào)的產(chǎn)生等。但其配置數(shù)據(jù)達(dá) 1.205MBytes,要完成多模式可重構(gòu)配置,其配置數(shù)據(jù)存儲(chǔ)器必須有足夠大的空間。
2.1.2 Flash芯片
為實(shí)現(xiàn)快速配置,綜合存儲(chǔ)容量、工作電壓以及等各方面的要求,F(xiàn)lash芯片選用 AMD公司 AM29LV065,其為 8M×8bits Flash存儲(chǔ)器,內(nèi)部被分為 128個(gè) 64Kbytes扇區(qū),可以存儲(chǔ) 6套配置方案數(shù)據(jù)。支持 3.3V電壓讀寫和擦除,支持扇區(qū)擦除和整片擦除,這一特性有利于實(shí)現(xiàn)某一配置數(shù)據(jù)單獨(dú)更改。地址不變時(shí)能自動(dòng)進(jìn)入休眠狀態(tài),將數(shù)據(jù)鎖存,從而減小功耗。
2.1.3 控制芯片
控制芯片采用 Altera公司 MAX7000AE系列 CPLD EPM7064A,其具有 ISP功能,為 3.3V內(nèi)核,IO口靈活方便,避免了采用單片機(jī)作為控制芯片時(shí) IO口不夠用的問(wèn)題。
2.2 硬件連接
配置系統(tǒng)硬件連接如圖 1所示。
配置系統(tǒng)中配置主控制器 EPM7064A是整個(gè)配置系統(tǒng)的核心,它在數(shù)據(jù)加載過(guò)程中與 PC機(jī)通訊,產(chǎn)生 Flash命令控制字并將配置數(shù)據(jù)寫入 Flash存儲(chǔ)器,同時(shí)對(duì) Flash存儲(chǔ)空間進(jìn)行自動(dòng)分配;在配置過(guò)程中根據(jù)系統(tǒng)的配置模式控制信號(hào)將 Flash中的數(shù)據(jù)讀出并配置到 FPGA中,同時(shí)完成 FPGA配置所需的時(shí)序,并檢測(cè) FPGA的狀態(tài),若配置成功進(jìn)入休眠狀態(tài)以節(jié)省功耗,若配置不成功將對(duì) FPGA進(jìn)行復(fù)位并重新配置。
為簡(jiǎn)化 CPLD的控制時(shí)序,便于對(duì) FPGA進(jìn)行自動(dòng)配置,將 Flash的存儲(chǔ)空間按順序劃分為 6個(gè)塊,分別存儲(chǔ) 6個(gè)配置數(shù)據(jù)。每個(gè)塊包含 20個(gè)扇區(qū),1.25MBytes存儲(chǔ)空間。
500)this.style.width=500;" border="0" />
CPLD控制部分軟件設(shè)計(jì)與實(shí)現(xiàn)
3.1 EPM7064A的 Verilog HDL描述
EPM7064A是整個(gè)配置電路的核心,它完成 Flash配置數(shù)據(jù)的加載和配置時(shí)序的產(chǎn)生。按照由上至下的進(jìn)行設(shè)計(jì),將其分成三個(gè)主要功能模塊,即數(shù)據(jù)加載過(guò)程中與 PC機(jī)通訊的 UART模塊、寫 Flash時(shí)序產(chǎn)生模塊和配置時(shí)序產(chǎn)生模塊,分別由 Verilog HDL硬件描述語(yǔ)言實(shí)現(xiàn)。
數(shù)據(jù)加載過(guò)程中,EPM7064A的 UART模塊與 PC機(jī)通訊,同時(shí)產(chǎn)生 Flash編程控制字,將 PC機(jī)送來(lái)的數(shù)據(jù)寫入指定的塊。其主要工作過(guò)程是串口模塊接收到一個(gè)字節(jié)數(shù)據(jù)后,其 DATARDY有效,觸發(fā) Flash寫模塊先將三個(gè)控制字?jǐn)?shù)據(jù) AA、55、A0寫入 Flash,然后將接收到的數(shù)據(jù)寫入 Flash。寫 Flash仿真時(shí)序圖如圖 4所示。
500)this.style.width=500;" border="0" />
數(shù)據(jù)讀取和配置時(shí)序模塊的主要程序代碼如下:
module conf( clk20m, //設(shè)時(shí)鐘頻率20Mhz
…… ) //端口列表
…… //輸入輸出口定義
…… //寄存器定義
…… //配置模式參數(shù)定義
…… //工作狀態(tài)參數(shù)定義
always@(posedge clk)
begin
if (conf_start==1) //配置啟動(dòng)脈沖啟動(dòng)一次配置
nCONFIG<=0;
if(nCONFIG==0)
count1<=count1+1;
if (count1<=50) //進(jìn)入復(fù)位狀態(tài),復(fù)位時(shí)間大于2us
state<=reset;
if(count1>50)
nCONFIG<=1;
if(nSTATUS==1)
state<=configure; //進(jìn)入配置狀態(tài)
if(CONF_DONE)
begin state<=init; count2<=count2+1;end //進(jìn)入初始化狀態(tài)
if(INIT_DONE)
begin state<=user_mode;count2<=0;end //進(jìn)入用戶狀態(tài)
end
always@(posedge clk)
begin
case(state)
reset: begin
case(mode)
conf_mode1: address<=23'h000000;
…… //初始化該模式起始地址
endcase
clk_start<=0;
end
configure:
begin
if(clk_start==0)
count3<=count3+1;
if(count3>=2000) //進(jìn)入配置模式后延時(shí)100us 開始寫數(shù)據(jù)
clk_start<=1;
if(clk_start==1)
begin
DCLK<=~DCLK;
if(DCLK==0) begin address<=address+1;DATA_OUT<=datain;end
end
end
init: begin …… end //配置完成,進(jìn)入初始化工作狀態(tài)
user_mode: begin …… end //初始化完成,進(jìn)入用戶工作狀態(tài)
endcase
end
endmodule
程序代碼在 QUARTUSⅡ6.0下的仿真時(shí)序如圖 5所示。其簡(jiǎn)要工作過(guò)程是,外部 conf_start信號(hào)啟動(dòng)一次配置,EPM7064A將 nCONFIG和 nSTATUS信號(hào)拉低, FPGA進(jìn)入復(fù)位狀態(tài),根據(jù) mode取得相應(yīng)的 Flash初始地址,復(fù)位完成 FPGA將 nSTATUS釋放,延時(shí)大約 100us后 EPM7064開始給 FPGA提供時(shí)鐘和數(shù)據(jù),直到將配置數(shù)據(jù)全部寫入 FPGA,配置完成后 FPGA將 CONF_DONE釋放,表明配置完成, FPGA進(jìn)入初始化狀態(tài),經(jīng)過(guò)內(nèi)部初始化后, INIT_DONE變高,表明 FPGA進(jìn)入工作狀態(tài),各引腳將根據(jù)用戶定義的狀態(tài)工作。若配置過(guò)程中 nSTATUS被 FPGA拉低,則表明有配置錯(cuò)誤,重新進(jìn)行配置,在任何工作狀態(tài)下外部指令都可以再次啟動(dòng)配置。
500)this.style.width=500;" border="0" />
3.2 配置文件的獲取
在 FPGA的工程設(shè)計(jì)編譯后產(chǎn)生的 .pof和.sof文件只能直接用于在 PS模式下對(duì) FPGA進(jìn)行
配置,要用 Flash存儲(chǔ)配置數(shù)據(jù),需要將配置數(shù)據(jù)轉(zhuǎn)換成 .hexout或.hex格式, QUARTUSⅡ6.0提供兩種方法得到所需的文件[2],一是編譯時(shí)改變編譯選項(xiàng)自動(dòng)生成所需文件,二是將已有配置文件轉(zhuǎn)換為所需文件格式。
4 結(jié)束語(yǔ)
本文的創(chuàng)新點(diǎn)在于將可重構(gòu)配置方法成功應(yīng)用于某導(dǎo)航接收機(jī)中,充分利用了硬件資源。這種可重構(gòu)配置方法能根據(jù)指令自動(dòng)更改 FPGA配置程序,重構(gòu)系統(tǒng)功能,實(shí)現(xiàn)了多模式導(dǎo)航體制融為一體,系統(tǒng)靈活性和可擴(kuò)展性大大增強(qiáng),以較低的成本實(shí)現(xiàn)復(fù)雜系統(tǒng),具有一定的工程實(shí)用價(jià)值。