中國空空導彈研究院 樊宏倫
FPGA(現(xiàn)場可編程門陣列)由于其資源豐富、設計周期短和風險小、使用靈活等優(yōu)點,已廣泛應用于信號處理和控制領域。FPGA大多采用SRAM工藝,掉電后內(nèi)部配置數(shù)據(jù)丟失,再次上電后需要重新對其進行配置,因此在FPGA外部多采用非易失性存儲器(稱為FPGA的配置PROM或配置Flash)來存儲配置數(shù)據(jù)以方便每次加電后對其進行自動配置。
在系統(tǒng)設計中,經(jīng)常會出現(xiàn)應用程序需要存儲部分非易失性數(shù)據(jù)的情況,受空間和成本限制,我們不太可能在電路設計中增加額外的外部存儲器。由于選用的配置Flash的存儲容量往往大于FPGA配置文件的大小,我們可利用配置Flash的剩余空間來存儲數(shù)據(jù)以達到節(jié)省電路板空間和成本的目的。
本文以Xilinx Virtex5 XC5VLX110 FPGA及其配置Flash XCF128X為例,介紹了FPGA配置完成后對Flash的讀電子簽名、總線讀寫、塊擦除等操作,并通過Chipscope工具進行了在線驗證,為后續(xù)應用提供了設計依據(jù)。
XCF128X是一款專門為Vitrex5系列FPGA配置設計的Flash,其采用低功耗CMOS NOR-Flash工藝,容量為128Mb。XC5VLX110 FPGA采用XCF128X作為配置Flash的電路如圖1所示。本文以主SelectMap模式為例介紹FPGA配置完成后對Flash的訪問操作,其它配置模式與此類似,不再贅述。在主SelectMap配置模式下地址總線23位、數(shù)據(jù)總線16位,配置時鐘由FPGA的CCLK管腳提供,CCLK時鐘頻率可在ISE開發(fā)環(huán)境的配置選項中的“配置速率”(-g Con figRate)中進行設置。
圖1 FPGA主SelectMap配置電路
XC5VLX110 FPGA的上電配置過程如下:
上電,F(xiàn)PGA清除內(nèi)部配置存儲器,將INIT_B管腳驅(qū)動為低電平(對應Flash的RP管腳為低進行復位);在復位時Flash將其RDY_WAIT管腳驅(qū)動為低電平(對應FPGA PROGRAM_B管腳為低);
FPGA和Flash分別釋放各自的INIT_B管腳和RDY_WAIT管腳,外部上拉電阻將INIT_B和RDY_WAIT(PROGRAM_B)分別拉為高電平;
在INIT_B上升沿采樣M2:M0管腳,確定其配置模式為主SelectMap配置模式;
Flash初始讀地址由地址總線A[22:0]上的下拉電阻確定為0x000000,F(xiàn)lash將初始讀地址鎖存到內(nèi)部地址計數(shù)器,輸出數(shù)據(jù)總線DQ[15:0]上的16位配置數(shù)據(jù);
配置數(shù)據(jù)在CCLK時鐘下被同步送到FPGA中,然后Flash增加其內(nèi)部地址計數(shù)器,并輸出數(shù)據(jù)總線DQ[15:0]上下一個16位置配置數(shù)據(jù)到FPGA,依次類推;
配置成功后,F(xiàn)PGA將Done信號驅(qū)動為高電平。
FPGA配置完成后,其部分配置管腳可以被釋放為通用I/O,如表1所示。設計人員可以根據(jù)Flash操作時序,在FPGA中編寫VHDL代碼,同時進行管腳約束后對Flash進行相應訪問。
表1 配置完成后釋放為通用I/O的管腳
由于CCLK管腳并沒有被釋放為通用I/O,如果在FPGA配置完成后需要對Flash進行同步讀操作,可以通過例化STARTUP_VIRTEX5原語實現(xiàn)對CCLK的控制。本文對Flash進行異步讀操作,不需要對此原語進行例化。
Flash操作采用命令訪問方式,在進行訪問之前要先寫相應命令,具體操作如表2所示。
表2 Flash操作命令
本節(jié)編寫對Flash進行讀電子簽名、異步讀寫和擦除等操作的VHDL代碼,并通過Chipscope工具進行了在線調(diào)試,驗證了FPGA配置完成后對Flash操作的可行性和正確性。
XC5VLX110 FPGA的配置文件大小為29124608bit(約為28Mb),因此XCF128X存在約100Mb的剩余空間可以利用。為了不覆蓋配置文件,本文對Flash Bank3的Block0(字地址區(qū)間為0x600000~0x60FFFF)進行相應操作。
Flash寫時序和異步讀時序分別如圖2和圖3所示。
圖2 Flash寫時序
圖3 Flash異步讀時序
Flash讀取電子簽名的在線調(diào)試圖如圖4所示。其中讀取的制造商ID為0049,器件ID為506B,與器件手冊一致。
圖4 Flash讀取電子簽名的在線調(diào)試圖
Flash上電后寄存器默認配置為同步讀模式,需要將配置寄存器的CR15位設置為1進入異步讀模式。Flash上電后處于鎖定狀態(tài),進行寫操作前需要先對寫地址空間解鎖;若Flash寫地址空間非空,解鎖后還需要對其進行擦除操作。Flash讀寫操作的在線調(diào)試圖如圖5所示,在地址0x60000寫入數(shù)據(jù)0xAA55,然后讀該地址,讀出來的數(shù)據(jù)為0xAA55。
圖5 Flash讀寫操作的在線調(diào)試圖
Flash塊擦除的在線調(diào)試圖如圖6所示,F(xiàn)lash 地址0x60000擦除后內(nèi)部數(shù)據(jù)為0x FFFF。
圖6 Flash擦除的在線調(diào)試圖
本文以Xilinx Virtex5 XC5VLX110 FPGA及其配置Flash XCF128X為例,介紹了FPGA配置完成后對Flash的讀電子簽名、總線讀、總線寫、塊擦除等操作,并通過Chipscope工具進行了在線驗證,在空間和成本受限的情況下為后續(xù)需要存儲外部數(shù)據(jù)的應用提供了設計依據(jù)。