引言
隨著FPGA技術(shù)的發(fā)展,,出現(xiàn)了一種新概念的嵌入式系統(tǒng),即SOPC(System On Programmable Chip),。SOPC技術(shù)融合了SoC和FPGA的優(yōu)點,,將處理器、片上總線,、片上存儲器,、內(nèi)部外設(shè)、I/O接口以及自定義邏輯集成在同一片F(xiàn)PGA中,,而且軟硬件可裁剪,、可升級、可修改,,具有軟硬件在系統(tǒng)編程能力,,在保證高性能的同時具有非常高的靈活性。由于大部分功能部件在FPGA內(nèi)實現(xiàn),,外部只需要很少的器件,如大容量的RAM,、Flash,、DAC,、ADC等。在系統(tǒng)需要脫離計算機獨立運行時(絕大部分情況如此),,非易失的存儲器件Flash是必不可少的,。Flash可以用來存儲配置比特流、代碼,、數(shù)據(jù)或參數(shù)等重要信息,。本文以Intel StrataFlash 3V Memory系列的JS28F128J3D75并行NOR Flash(簡稱“J3D”)和Xilinx FPGA Spartan3E系列的XC3S1600E(簡稱“1600E”)為背景,在結(jié)合項目開發(fā)經(jīng)驗和參閱相關(guān)文獻(xiàn)的基礎(chǔ)上,,介紹了并行NOR Flash在SOPC開發(fā)中的4種不同應(yīng)用,。
1 存儲FPGA配置比特流
1600E工作在BPI(Bytewide Peripheral InteRFace)配置模式時,通過專門的引腳與J3D連接,,這些引腳在配置完成后可以作為用戶I/O使用,。連接時,大部分引腳參考1600E的數(shù)據(jù)手冊直接連接即可,,但有些引腳需要特別注意,。J3D有×8(數(shù)據(jù)總線寬度為8位)和×16(數(shù)據(jù)總線寬度為16位)兩種工作模式。配置時應(yīng)工作在×8模式,,配置完成后,,根據(jù)需要可以設(shè)置為×8或×16模式。圖1為1600E與J3D引腳連接示意圖,。
圖1 1600E與J3D引腳連接示意圖
若配置后需要切換至×16模式,,則需綜合考慮1600E的HSWAP腳。HSWAP接高電平時,,1600E所有用戶I/O的內(nèi)部上拉電阻禁用,,HDC通過4.7kΩ電阻接高電平,LDC2通過4.7 kΩ電阻接地,,LDC1和LDC0通過4.7kΩ電阻接高電平,,同時這3個信號應(yīng)分別連到J3D的BYTE#、OE#,、CE0腳,。這樣上電后的瞬間,J3D工作在×8模式,,且因CE0腳被拉高而處于非選中狀態(tài),,不會導(dǎo)致對J3D的誤操作;然后在1600E的控制下進(jìn)入配置狀態(tài),,配置結(jié)束可通過控制LDC2輸出高電平而將J3D切換為×16模式,。HSWAP接低電平時,1600E所有用戶I/O的內(nèi)部上拉電阻使能,,LDC1,、LDC0和HDC無需外接上拉電阻,;而LDC2應(yīng)接340Ω的下拉電阻,以使上電后J3D工作在×8模式,,從而順利進(jìn)入配置狀態(tài),,配置結(jié)束后可將J3D切換為×16模式。
若配置后工作在×8模式,,則J3D的BYTE#腳接低電平,,1600E的LDC2懸空。當(dāng)HSWAP接高電平時,,LCD1和LCD0分別連至OE#,、CE0腳,同時應(yīng)通過4.7kΩ電阻上拉,;HSWAP接低電平時,,LCD1和LCD0不用上拉。
配置比特流文件首先通過iMPCT轉(zhuǎn)換成MCS文件,,再通過PicoBlaze NOR Flash Programmer(http://www.xilinx.com/products/boards/s3estarter/files/s3esk_picoblaze_nor_flash_programmer.zip)下載到J3D中,。
J3D可以同時配置多塊FPGA,也可對同一塊FPGA進(jìn)行多比特流配置。例如先配置一個診斷測試比特流,,測試成功后,,再重新配置應(yīng)用比特流。
2 存儲可引導(dǎo)的軟處理器代碼
首先利用Xilinx嵌入式開發(fā)工具箱EDK創(chuàng)建一個嵌入式工程,,包括MicroBlaze硬件平臺和相應(yīng)的軟件工程,。在EDK界面下,用鼠標(biāo)選中創(chuàng)建的軟件工程,,右擊并在彈出的菜單中選擇Generate Linker Script...項,,進(jìn)入Generate Linker Script對話框。將Sections,、Heap和Stack指定到BRAM或外部RAM(一般將Heap和Stack指定到BRAM,,代碼和數(shù)據(jù)段指定到外部RAM),并指定輸出腳本文件名及路徑,,如圖2所示,。
圖2 Generate Linker Script對話框
雙擊相應(yīng)軟件工程下的Compiler Options選項,進(jìn)入Set Compiler Options對話框,,設(shè)定Link Script項為剛才產(chǎn)生的腳本文件,,并指定Output ELF File項的路徑與名稱。現(xiàn)在可以編譯相應(yīng)的軟件工程,,產(chǎn)生相應(yīng)的可執(zhí)行ELF文件,,設(shè)為Bootable.elf。
在EDK主界面下,用鼠標(biāo)選擇Device Configuration → Program Flash Memory,進(jìn)入Program Flash Memory對話框,,并按圖3進(jìn)行設(shè)置,。單擊OK按鈕,會把Bootable.elf文件自動轉(zhuǎn)為SREC格式,,并下載到J3D的指定地址處,同時產(chǎn)生名為bootloadr_0的軟件工程,。bootloadr_0工程編譯后產(chǎn)生的可執(zhí)行文件executable.elf用來執(zhí)行引導(dǎo)裝載功能,,應(yīng)將其合并到系統(tǒng)比特流system.bit,從而生成dowload.bit,。dowload.bit經(jīng)iMPCT轉(zhuǎn)為MCS文件后下載到配置PROM中(若使用同一片J3D,,注意不能與Bootable.elf發(fā)生地址空間沖突)。這樣,,系統(tǒng)上電后,,首先對FPGA進(jìn)行配置,然后引導(dǎo)加載J3D中的代碼至相應(yīng)的BRAM或SDRAM中(具體映射位置已在Generate Linker Script對話框中設(shè)定),。
圖3 Program Flash Memory對話框