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