《電子技術(shù)應用》
您所在的位置:首頁 > 可編程邏輯 > 設(shè)計應用 > 大容量串行e-Flash的FPGA配置方案
大容量串行e-Flash的FPGA配置方案
摘要: 本方案提出了一種基于大容量串行e-Flash的XilinxSpartanlI系列FPGA在線配置的方法,。該方案適用于采用MCU的嵌入式系統(tǒng)中,,占用MCU的I/O口資源少,,且可以實現(xiàn)ROM的共享,。MCU程序采用C語言編寫,,便于在單片機,、ARM等MCU間的移植,。經(jīng)過實際測試,,配置XC2S30僅需數(shù)秒,,可以應用在對設(shè)備開機時間要求不高的場合。本方案已經(jīng)應用在某電力測量設(shè)備中,,效果理想,,運行可靠。
關(guān)鍵詞: FPGA Flash XC2S30 SpartanlI
Abstract:
Key words :

      引 言

      現(xiàn)場可編程門陣列FPGA" title="FPGA">FPGA(Field Programmable Gate Array)是一種集通用性強,、設(shè)計靈活,、集成度高和編程方便等諸多優(yōu)點于一身的現(xiàn)場可編程ASIC,。自1985年美國的Xilinx公司推出FPGA產(chǎn)品并取得成功以后,F(xiàn)PGA發(fā)展迅猛,,門數(shù)不斷提升,,達到數(shù)百萬門的規(guī)模;產(chǎn)品種類日益豐富,,性能不斷完善,,在軍事、通信,、醫(yī)療,、消費類電子等各領(lǐng)域發(fā)揮了巨大的作用。Xilinx公司的FPGA具有很高的性價比,,其集成開發(fā)環(huán)境ISE和Webpack效率高,、界面友好,因此在業(yè)界有著廣泛的應用,。通常對Xilinx公司的FPGA配置采用專用的配置芯片,,速度較快,其價格也正逐步降低,。筆者為配合某電力測量儀表的開發(fā),,對Xilinx公司的SpartanII系列FPGA的配置方案進行了探索,總結(jié)出一套成本低廉,、接口簡單,、便于移植的方法。該方法采用Megawin公司的1Mb大容量串行e-Flash" title="Flash">Flash存儲器MM36SB010存放FPGA配置文件,,通過MCU在被動串行模式下完成了對XC2S30" title="XC2S30">XC2S30的在線配置,。   

      1 Spartanll配置簡介 

      Xilinx公司的SpartanII系列FPGA產(chǎn)品成熟。該系列是采用0.18 μ m工藝的2.5V低電壓FPGA芯片,,功耗低,,可無限次編程。XC2S30是該系列FPGA中的一款,,總門數(shù)達3萬門,,可以實現(xiàn)電力測量儀表中采樣數(shù)據(jù)的串行編碼和多CPU間的數(shù)據(jù)交換的功能。   

      XC2S30采用CMOS SRAM工藝,。由于SRAM的易失性,斷電后配置信息消失,,因此上電時必須對該芯片重新配置才能使其正常工作,。本節(jié)將詳細介紹XC2S30的配置方式。該配置方式對SpartanlI" title="SpartanlI">SpartanlI系列的其它FPGA同樣適用,。   

      1.1 配置模式 

      XC2S30支持4種配置模式:被動串行模式(slave serialmode),、主動串行模式(master serial mode),、被動并行模式(slave parallel mode)和邊界掃描模式(boundary-scanmode)。在每次芯片上電初始化完畢后,,芯片將采樣模式引腳M[2:0]以決定配置模式,。配置引腳狀態(tài)和配置模式的關(guān)系如表1所列。(X代表任意狀態(tài),。)

配置模式

 

      根據(jù)不同的應用場合,,用戶可以選擇不同的配置方式。在XC2S30內(nèi)部邏輯設(shè)計階段,,可采用邊界掃描模式進行配置,。配置文件可通過Xilinx公司的下載電纜(如Xilinx并行下載電纜)下載到芯片,便于在線調(diào)試,。但是在產(chǎn)品成品階段,,已經(jīng)設(shè)計好的配置文件必須存儲于EEPROM或者Flash等非易失的存儲器中。在系統(tǒng)上電時,,外圍器件通過FPGA配置引腳將配置文件傳送至FPGA中,,從而使其正常工作。根據(jù)用戶的需要,,可以選擇主動串行模式,、被動串行模式和被動并行模式。其中串行的兩種模式需要的I/O口資源較少,,但速度較慢,;被動并行模式需要的I/O口資源較多,速度也較快,。根據(jù)本系統(tǒng)的設(shè)計要求,,選擇了占用I/0口資源較少的被動串行模式對XC2$30進行配置。    

      1.2 被動串行模式下的配置引腳

      在被動串行模式下,,所用到的配置引腳為模式選擇M[2:0],、配置時鐘CCLK、配置復位PROGRAM,、配置完成DONE,、配置數(shù)據(jù)串行輸入DIN和初始化狀態(tài)INIT。 

      1.3 被動串行模式下的配置步驟及時序 

      XC2S30上電后,,當內(nèi)核和I/O口電源引腳電壓達到高電平或者用戶將PROGRAM引腳置低時,,芯片便進入初始化狀態(tài)。此后芯片將INIT引腳置低,,代表芯片正在清空配置存儲器,,清空完成后INIT引腳將被置高,代表清空完畢。在INIT的上升沿,,模式選擇引腳M[2:0]被采樣,,以決定配置模式,若為11x則采用被動串行模式,。此后配置文件信息可以通過CCLK和DIN兩個配置引腳輸入至XC2S30中,。配置數(shù)據(jù)在CCLK的上升沿采樣。在配置期間芯片會自動進行CRC錯誤檢驗,。若發(fā)生了CRC校驗錯誤,,INIT引腳將被置低,用戶可以檢測該引腳判斷配置過程中是否出現(xiàn)錯誤,。當配置文件成功輸入至芯片中,,芯片置DONE引腳為高,用戶可檢測該引腳判斷配置是否成功,。此后芯片進入正常工作狀態(tài),。配置流程如圖1所示。

配置流程

      2 MM36SB010的讀寫方式

 

      MM36SB010是Megawin公司生產(chǎn)的大容量SPI串行e-F1ash存儲器,。該芯片具有低功耗(小于4mA),、寬電壓(2.4~5.5V)、高速(8MHz工作頻率),、大容量(1Mb)和小頁面(每頁128B),、低成本等諸多優(yōu)點,特別適合于消費電子,、通信,、工業(yè)控制等領(lǐng)域的應用。該芯片可工作在2線或者3線串行總線方式,。本方案使用該芯片存儲FPGA配置文件,,讀寫接口簡單,速度快,。 MM36SB010的容量為1Mb,,共分1024頁,每頁128B,。芯片內(nèi)部有1個128B的緩沖區(qū),,可以對讀寫數(shù)據(jù)進行暫存,內(nèi)部結(jié)構(gòu)如圖2所示,。

內(nèi)部結(jié)構(gòu)

 

 

      MM36SB010可工作在2線或者3線串行總線方式,,工作方式通過SMC(串行模式控制)引腳來選擇。當SMC為高電平時,,為2線方式,;當SMC為低電平時,為3線方式。本方案采用3線方式,,串行數(shù)據(jù)輸入和輸出引腳分開,數(shù)據(jù)輸入引腳為SDl0,,數(shù)據(jù)輸出引腳為SDO,。MM36SB010的狀態(tài)可通過引腳BUSY來檢測,也可以通過訪問狀態(tài)寄存器進行查詢,。3線工作方式的電路示意如圖3所示,。

3線工作方式的電路示意

 

 

 

      MCU可通過SCLK和SDIO引腳向MM36SB010發(fā)送控制命令,實現(xiàn)MM36SB010的軟件復位,、Flash存儲器或緩沖區(qū)數(shù)據(jù)的讀寫和狀態(tài)查詢等功能,。常用的命令有軟件復位(SRC)、讀狀態(tài)寄存器(RSE),、讀F1ash存儲器數(shù)據(jù)(RME,、RMEC)、寫緩沖區(qū)(WEB,、WEBC),、帶預擦除功能的寫緩沖區(qū)數(shù)據(jù)至Flash存儲器(WBMEP)。所有的命令,、地址和數(shù)據(jù)都從最低位(LSB)開始發(fā)送,。在MM36SB010上電后需執(zhí)行一次軟件復位指令,等待20ms后芯片即可正常工作,。數(shù)據(jù)可從Flash存儲器中用RME和RMEC:指令直接讀取,,但寫數(shù)據(jù)至Flash存儲器前必須用WEB和WEBC命令將數(shù)據(jù)送入緩沖區(qū)內(nèi),再用WBMEP或者WBMP命令將緩沖區(qū)內(nèi)的數(shù)據(jù)送入Flash存儲器,。    

      雖然MM36SB010的時鐘SCLK的頻率最高可達8MHz,,但是由于每次從Flash讀寫一個字節(jié)數(shù)據(jù)前必須先送入控制命令,因此實際的讀寫速度小于4MHz,。   

      3 配置方案 

      Xilinx公司針對各款FPGA都設(shè)計了專用的配置芯片,,如在系統(tǒng)可編程18VXX系列和串行一次性可編程PROM-XCl7V00系列。目前18Vxx系列價格正逐步降低,,但是由于其專用性,,該ROM很難被系統(tǒng)中其它部分共享;XCl7V00系列雖然價格較低,,但只能一次性燒寫,,只適用于成品階段。本方案中XC2S30的配置文件存儲于MM36SB010,,并由MCU完成其讀寫功能,,配置文件通過RS232串口下載。當配置文件下載完畢后,由MCU從MM36SB010中讀取并對XC2S30進行配置,。MM36SB010中其余存儲空間可供其它程序模塊使用,。    

      3.1 硬件框圖

      MCU通過SCLK、SDIO,、SDO完成對MM36SB010的讀寫,,同時MCU通過CCLK、DIN,、INIT,、PROGRAM、DONE引腳完成對XC2S30的配置,。硬件框圖如圖4所示,。

硬件框圖

 

      3.2 MCU程序 

 

      本方案的MCU內(nèi)部程序主要完成三部分功能:與PC機的串口通信、讀寫MM36SB010和配置XC2S30,。MCU工作在兩種狀態(tài),,在上電時MCU從MM36SB010中讀取配置文件并對XC2S30進行配置,完成配置后等待PC機從串口發(fā)出的下載命令,。接收到該命令后,,MCU開始接收配置文件并寫入MM36SB010。程序流程如圖5所示,。 

程序流程

 

      對XC2S30配置的程序部分主要完成被動串行模式的配置時序,,配置時序如圖6所示。 

被動串行模式的配置時序

 

      配置部分程序代碼如下:

//函數(shù)定義
//從e-Flash中讀取配置文件數(shù)據(jù)void ReadFlashData(unsigned int p_addr,,unsigned char b_addr,,unsigned char count,unsigned char*buf)
//p_addr為頁地址,,b_addr為頁內(nèi)地址,,buf為MCU內(nèi)部存儲        //器指針{ 
unsigned int i,

 

temp=0: send_one_byte(0x9C),;                                       //送RME指令 
send_one byte(b_addr),;                                     //送頁內(nèi)地址 
send_one_byte((unsigned char)(P_addr & 0x00FF));           //送頁低字節(jié)地址 
send_one_byte((unsigned char)p_addr&0xFF00)),;              //送頁高字節(jié)地址 
buf[0]=read one byte(),;                                    //讀取數(shù)據(jù) 
for(i=1;isend_one_byte(RMEC);                                       //送RMEC指令 
buf[i]=read_one_byte(),; 
}
}
                                                  //向SpartanlI發(fā)送配置數(shù)據(jù)
void SendConfigData(unsigned char count,,unsigned char*configdata)
{
unsigned chari,j,,temp,; 
CCLK=0,;
for(i=count;i>0;i--){
temp=*configdata++; 
for(j=0;j<8;j++){ 
if((temp&0x80==0 
DIN=O,; 
else 
DIN=1: 
tem0=temp<<1,; 

CCLK=I; 
CCL

 

K=0,; 
}
}                                                        //主程序
…… ……                                                     //程序初始化部分length=FILESIZE,;                                        //配置文件長度
INIT=1;
PROGRAM=0,;                                             //清空配置存儲器
Delay();                                            ;   //延時
PROGRAM=1,;while(INIT==0),;                                        //等待存儲器清空
while(1){ ReadFlashData(page_addr,bit_addr,,128,,databuf);
                         

 

                               //從MM36SB010中讀取128字節(jié)配置文件數(shù)據(jù) 
SendConfigData(128,,databuf),;                          //發(fā)送配置文件數(shù)據(jù)至XC2S30 
length-=128; 
if(1ength<128) 
break,;
}
void ReadFlashData(page_addr,,bit_addr,length,,databuf),;
SendConfigData(Iength,databu),;
if(DONE==1)……                                        //配置成功
else……                                               //配置失敗   

 

       結(jié)語 

       本方案提出了一種基于大容量串行e-Flash的XilinxSpartanlI系列FPGA在線配置的方法,。該方案適用于采用MCU的嵌入式系統(tǒng)中,占用MCU的I/O口資源少,,且可以實現(xiàn)ROM的共享,。MCU程序采用C語言編寫,便于在單片機,、ARM等MCU間的移植,。經(jīng)過實際測試,配置XC2S30僅需數(shù)秒,,可以應用在對設(shè)備開機時間要求不高的場合,。本方案已經(jīng)應用在某電力測量設(shè)備中,效果理想,,運行可靠,。

此內(nèi)容為AET網(wǎng)站原創(chuàng),,未經(jīng)授權(quán)禁止轉(zhuǎn)載。