在當今變化的市場環(huán)境中,產(chǎn)品是否便于現(xiàn)場升級、便于靈活使用,已成為產(chǎn)品進入市場的關(guān)鍵因素。而基于 SRAM結(jié)構(gòu)的 FPGA器件的出現(xiàn),為系統(tǒng)設(shè)計者動態(tài)改變運行電路中的邏輯功能創(chuàng)造了條件,也為現(xiàn)場升級等奠定了基礎(chǔ)。但由于 SRAM的掉電易失性,系統(tǒng)每次上電時,必須重新配置數(shù)據(jù),只有在數(shù)據(jù)配置正確的情況下系統(tǒng)才能正常工作。
筆者在實際項目應(yīng)用中,采用 SST89V564微處理器對 FPGA進行快速高效的 PPA數(shù)據(jù)配置,不僅可以完成對 FPGA的上電啟動配置,同時利用其 IAP技術(shù)還可以在 FPGA配置完以后,通過修改微處理器中的配置數(shù)據(jù)和參數(shù)來實現(xiàn)系統(tǒng)的在線升級。
1.FPGA的 PPA配置過程
FPGA的在線配置方式一般有兩類:一是通過下載電纜由計算機直接對其進行配置;二是通過微處理器對其進行配置。前者調(diào)試時非常方便,在應(yīng)用現(xiàn)場是很不現(xiàn)實的,只適合產(chǎn)品的調(diào)試,而一般實際產(chǎn)品中采用微處理器對 FPGA進行配置。
FPGA器件 PPA配置時序如圖 1所示,其中 nCS和 CS兩個片選信號只需用一個,當
500)this.style.width=500;" border="0" />
選用 nCS作為片選信號控制配置,CS接高電平。其配置過程為微處理器在 nCONFIG引腳上產(chǎn)生一個最少 21µs的低脈沖,等待直至 nSTATUS和 CONF_DONE變低。此時將 nCONFIG置高, nSTATUS會在 nCONFIG跳高后 4µs內(nèi)跳高,則表示 FPGA可以配置了[1]。
配置成功時,F(xiàn)PGA器件釋放 CONF_DONE信號,由外部將其拉高。如果微處理器檢
測到該信號為高,則表明配置成功;否則,要對其重新配置。
2.基本硬件組成
2.1 SST89V564RD及接口設(shè)計
SST89V564RD是 SST公司的 8位集成 SUPERFLASH 存儲器的 51 兼容 MCU,帶有 1K字節(jié)片內(nèi) RAM和 72K字節(jié)片內(nèi) SUPERFLASH。其片內(nèi) Flash分成 Block0(64K字節(jié))和 Block1(8K字節(jié))兩塊,Block0和 Block1低 8K地址相同,程序運行時,可通過設(shè)置特功能寄存器 SFCF對低 8K字節(jié)的 Flash程序存儲塊進行切換,以使程序運行在 Block0或 Block1。微處理器與 FPGA的接口電路如圖 2所示。
500)this.style.width=500;" border="0" />
2.2 SST89V564RD微處理器片內(nèi) Flash應(yīng)用劃分
SST89V564RD微處理器片內(nèi) Flash兩塊( 64K+8K)中, Block1分成 64個扇區(qū),每個扇區(qū)包括 128個字節(jié),總共 8K字節(jié);Block0分成 512個扇區(qū),每個扇區(qū)包括 128個字節(jié),總共 64K字節(jié)[2]。
微處理器兩塊 Flash地址應(yīng)用劃分為: Block0中,低地址段 0x0000~0x1FFF存放對 Block1進行擦寫的 IAP程序,高地址段 0x2000~0xFFFF存放 FPGA配置數(shù)據(jù)。 Block1的所有空間用來存放上電啟動時對 FPGA進行配置以及配置完后的 IAP操作程序。微處理器默認下從 Block1啟動。當程序運行在 IAP命令狀態(tài)時,可以通過設(shè)置特功能寄存器 SFCF使程序運行在 Block0或 Block1,來對另一 Flash塊進行擦寫或升級。
由于 Block0和 Block1的低 8K字節(jié)的地址相同,因此在編程應(yīng)用程序到 Flash中時,編程器將 Block1的地址定義在 0x10000~0x11FFF地址段,在編譯程序時需要將 Block1的程序定位在 0x10000~0x11FFF之間才能正確燒寫。
3.軟件設(shè)計
微處理器狀態(tài)流程如圖 3所示,在上電啟動時,微處理器從 Block1啟動,讀取 Block1中 0x2000開始的配置數(shù)據(jù),完成對 FPGA的配置。配置完成以后,微處理器處于 IAP狀態(tài),既可以通過串口 IAP指令來對 Block0高地址段的 FPGA配置數(shù)據(jù)進行擦寫或升級,也可以通過串口 IAP指令切換微處理器跳到 Block0中低地址段運行,來對 Block1中的程序進行擦寫或升級。
由于 Block0中低地址段存放的只是對 Block1進行擦寫的 IAP程序,因此無需擦寫或升級該部分程序。升級只限于當更改 FPGA邏輯功能時升級 Block0高地址段的配置數(shù)據(jù),或者更改了 FPGA芯片時更改 Block1中的配置數(shù)據(jù)參數(shù)以及 Block0中高地址段的配置數(shù)據(jù)。當程序運行在 Block0中,要切換到 Block1運行重新配置 FPGA時,將產(chǎn)生復位信號,復位微處理器和 FPGA使微處理器重新對 FPGA進行配置。
500)this.style.width=500;" border="0" />
硬件電路的設(shè)計只提供了接口工作的內(nèi)核和基礎(chǔ),只有在軟件的控制下,接口才能發(fā)揮作用,硬件電路與軟件程序是緊密相關(guān)的 [4]。本設(shè)計中 FPGA采用 Altera公司的 EPF10K10ATC144-3,含有 576個邏輯單元和 6144個RAM位,其配置數(shù)據(jù)大小為 15000Bytes,微處理器給EPF10K10ATC144-3的配置程序如下:
unsigned char FpgaConfig(void)
{
unsigned int iConfigDataByteCount;
unsigned char code * pConfigDataAddress;
pConfigDataAddress = 0x2000; //FPGA 配置數(shù)據(jù)的起始地址
nCONFIG = 0;
while((nSTATUS==1) || (CONFIG_DONE == 1));
nCONFIG = 1;
while((nSTATUS==0);
iConfigDataByteCount = 0;
CFG_CS_ = 0;
while(CONFIG_DONE == 0)
{
while(RDYnBUSY == 0);
FPGA_CFG_ADDRESS = *pConfigDataAddress;
pConfigDataAddress++;
iConfigDataByteCount++;
if ((iConfigDataByteCount > 0x3A98) || ( nSTATUS==0) )
//EPF10K10ATC144-3 配置數(shù)據(jù)為0x3A98(15000)字節(jié),升級成相同封裝和引腳的
//EPF10K30ATC144-3 時,只需將0x3A98 改成0xC63E(50750)即可
{
CFG_CS_ = 1;
return ERROR;
}
}
CFG_CS_ = 1;
return SUCCESS;
}
在不更改硬件板的條件下,若更改 FPGA芯片升級系統(tǒng),升級成含有 1728個邏輯單元和 12288個 RAM位的 EPF10K30ATC144-3芯片時,由于與 EPF10K10ATC144-3具有相同的封裝和引腳排列[3],因此硬件上可以直接更換 FPGA芯片來升級,而軟件上只需將 Block1程序中對 FPGA配置的數(shù)據(jù)大小參數(shù) 15000改成 50750(見上程序注釋)。而升級芯片的配置數(shù)據(jù),則直接通過串口 IAP將配置數(shù)據(jù)寫入 Block0高地址段即可。因此,能非常方便的在線完成 FPGA內(nèi)部邏輯甚至更換 FPGA芯片時的系統(tǒng)升級。
4.結(jié)論
本文給出了基于 SST89V564RD處理器的 FPGA被動并行異步配置的軟硬件實現(xiàn),該方法充分利用了 SST89V564RD的 IAP技術(shù)以及分塊大容量的 Flash存儲技術(shù),能快速、方便、靈活地對對 FPGA的內(nèi)部邏輯功能進行在線升級,還可以完成在升級相同封裝和引腳的 FPGA芯片時,進行整個系統(tǒng)的在線升級。本方法也適合于其他類似的微處理器。
FPGA的應(yīng)用領(lǐng)域包羅萬象,我們今天來看看在音樂科技領(lǐng)域及醫(yī)療照護的智能巧思。
關(guān)鍵字: FPGA 科技領(lǐng)域 智能強大的產(chǎn)品可降低信號噪音并提高分辨率與動態(tài)
關(guān)鍵字: Spectrum儀器 數(shù)字化儀 FPGA