www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 嵌入式 > 嵌入式教程
[導(dǎo)讀]并行NOR Flash在SOPC開發(fā)中的應(yīng)用

摘要 討論Intel STrataFlash 3V Memory系列的JS28F128J3D75并行NOR flash在基于Xilinx MicroBlaze的SOPC開發(fā)中的4種不同用途。J3D Flash可以用于存儲FPGA配置比特流、可引導(dǎo)的軟處理器代碼、可直接執(zhí)行的軟處理器代碼,以及非易失的數(shù)據(jù)或參數(shù)。本文給出了這4種用途的應(yīng)用方法與技巧,指出了應(yīng)該特別注意的技術(shù)細節(jié),這些方法與技巧可以直接應(yīng)用到SOPC項目開發(fā)中。

引言

隨著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)文獻的基礎(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引腳連接示意圖。

若配置后需要切換至×16模式,則需綜合考慮1600E的HSWAP腳。HSWAP接高電平時,1600E所有用戶I/O的內(nèi)部上拉電阻禁用,HDC通過4.7 kΩ電阻接高電平,LDC2通過4.7 kΩ電阻接地,LDC1和LDC0通過4.7 kΩ電阻接高電平,同時這3個信號應(yīng)分別連到J3D的BYTE#、OE#、CE0腳。這樣上電后的瞬間,J3D工作在×8模式,且因CE0腳被拉高而處于非選中狀態(tài),不會導(dǎo)致對J3D的誤操作;然后在1600E的控制下進入配置狀態(tài),配置結(jié)束可通過控制LDC2輸出高電平而將J3D切換為×16模式。HSWAP接低電平時,1600E所有用戶I/O的內(nèi)部上拉電阻使能,LDC1、LDC0和HDC無需外接上拉電阻;而LDC2應(yīng)接340 Ω的下拉電阻,以使上電后J3D工作在×8模式,從而順利進入配置狀態(tài),配置結(jié)束后可將J3D切換為×16模式。

圖1  1600E與J3D引腳連接示意圖

若配置后工作在×8模式,則J3D的BYTE#腳接低電平,1600E的LDC2懸空。當(dāng)HSWAP接高電平時,LCD1和LCD0分別連至OE#、CE0腳,同時應(yīng)通過4.7 kΩ電阻上拉;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進行多比特流配置。例如先配置一個診斷測試比特流,測試成功后,再重新配置應(yīng)用比特流。

2  存儲可引導(dǎo)的軟處理器代碼

首先利用Xilinx嵌入式開發(fā)工具箱EDK創(chuàng)建一個嵌入式工程,包括MicroBlaze硬件平臺和相應(yīng)的軟件工程。在EDK界面下,用鼠標(biāo)選中創(chuàng)建的軟件工程,右擊并在彈出的菜單中選擇Generate Linker Script...項,進入Generate Linker Script對話框。將Sections、Heap和Stack指定到BRAM或外部RAM(一般將Heap和Stack指定到BRAM,代碼和數(shù)據(jù)段指定到外部RAM),并指定輸出腳本文件名及路徑,如圖2所示。

雙擊相應(yīng)軟件工程下的Compiler Options選項,進入Set Compiler Options對話框,設(shè)定Link Script項為剛才產(chǎn)生的腳本文件,并指定Output ELF File項的路徑與名稱。現(xiàn)在可以編譯相應(yīng)的軟件工程,產(chǎn)生相應(yīng)的可執(zhí)行ELF文件,設(shè)為Bootable.elf。

圖2  Generate Linker Script對話框

在EDK主界面下,用鼠標(biāo)選擇Device Configuration → Program Flash Memory,進入Program Flash Memory對話框,并按圖3進行設(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進行配置,然后引導(dǎo)加載J3D中的代碼至相應(yīng)的BRAM或SDRAM中(具體映射位置已在Generate Linker Script對話框中設(shè)定)。

圖3  Program Flash Memory對話框

3  存儲可直接執(zhí)行的軟處理器代碼

這里仍然使用上面創(chuàng)建的EDK工程,由于J3D具有類似SRAM的接口,上電后可以直接像SRAM一樣進行讀操作,但卻不能直接進行寫操作。因此,應(yīng)將只讀段.code、.rodata、.sdata2、.sbss2指定到J3D中,其余段指定到BRAM中,這可以在Generate Linker Script對話框中完成。重新編譯后生成新的Bootable.elf文件。此時,Bootable.elf仍是一個整體,需要將其在物理上分為2個文件: 一個存放只讀段,另一個存放其余段。具體可以通過下面的操作實現(xiàn)。

 ?、?創(chuàng)建存儲在BRAM中的鏡像volatile.elf。在XPS中,選擇Project → Launch EDK Shell,并執(zhí)行下列命令:

  $ mbobjcopy

  --set-section-flags .text=alloc,readonly,code

  --set-section-flags .init=alloc,readonly,code

  --set-section-flags .fini=alloc,readonly,code

  --set-section-flags .rodata=alloc

  --set-section-flags .sdata2=contents

  --set-section-flags .sbss2=contents

  ./TestApp_Memory/Bootable.elf

  ./TestApp_Memory/volatile.elf

  ② 創(chuàng)建存儲在Flash中的鏡像J3D.bin。在XPS中,選擇Project → Launch EDK Shell,并執(zhí)行下列命令:

  $ mbobjcopy O binary

  -j .text

  -j .init

  -j .fini

  -j .rodata

  -j .sdata2

  -j .sbss2

  ./TestApp_Memory/Bootable.elf

  ./TestApp_Memory/J3D.bin

將volatile.elf合并到系統(tǒng)配置比特流system.bit,生成dowload.bit,再經(jīng)iMPCT轉(zhuǎn)為MCS格式后下載到配置PROM中。再將J3D.bin通過Program Flash Memory對話框下載到J3D中。這樣系統(tǒng)上電并完成配置后,J3D中的代碼無需引導(dǎo)便可以直接執(zhí)行。

4  存儲非易失數(shù)據(jù)或參數(shù)

有時候系統(tǒng)需要存儲非易失的數(shù)據(jù)或參數(shù),這就需要通過編寫程序直接對J3D進行讀/寫操作。當(dāng)然,前提是先要在EDK中為J3D添加一個XPS MCH EMC接口。這個接口對并行NOR Flash和SRAM來說都是適用的,如果用于SRAM則可以直接讀/寫,不需要驅(qū)動,而用于并行Flash則需要自己編寫相應(yīng)的驅(qū)動程序。下面為自行編寫的一個執(zhí)行塊擦除、單字寫、單字讀操作的程序。需要注意的是: 寫操作前一定要先進行擦除操作,寫命令或?qū)憯?shù)據(jù)之后一定要對狀態(tài)寄存器進行判斷是否完成相應(yīng)操作;讀操作則很簡單,像SRAM的讀/寫一樣。

  Xuint16 data=0xF0F0;

  Xuint16 Status,ReadData;

  /*塊擦除程序*/

  XIo_Out16(XPAR_FLASH_16MX8_MEM0_BASEADDR,0x2020 );//指定地址塊的擦除設(shè)置

  XIo_Out16(XPAR_FLASH_16MX8_MEM0_BASEADDR,0xD0D0 );//指定地址塊的擦除確認

  do{

  Status = XIo_In16(XPAR_GENERIC_EXTERNAL_MEMORY_MEM0_BASEADDR);

  }while ((Status & 0x0080) != 0x0080);//讀狀態(tài)寄存器直至塊擦除完成

  /*單字寫程序*/

  XIo_Out16(XPAR_FLASH_16MX8_MEM0_BASEADDR,0x4040 );//指定地址處單字寫操作設(shè)置

  XIo_Out16(XPAR_FLASH_16MX8_MEM0_BASEADDR,data );//向指定地址處寫入一個字長的數(shù)據(jù)

  do{

  Status = XIo_In16(XPAR_GENERIC_EXTERNAL_MEMORY_MEM0_BASEADDR);

  }while ((Status & 0x0080) != 0x0080);//讀狀態(tài)寄存器直至寫操作完成

  /*單字讀程序*/

  ReadData=XIo_In16(XPAR_FLASH_16MX8_MEM0_BASEADDR );//讀相應(yīng)地址處的數(shù)據(jù)

還有一種情況是在系統(tǒng)運行前就把數(shù)據(jù)寫入Flash中。首先,把數(shù)據(jù)寫入一個二進制文件中。注意,MicroBlaze的存儲格式是BigEndian(即高字節(jié)數(shù)據(jù)保存在低地址,低字節(jié)數(shù)據(jù)保存在高地址),PC機的存儲格式則是LittleEndian(即高字節(jié)數(shù)據(jù)保存在高地址,低字節(jié)數(shù)據(jù)保存在低地址),因此如果是用VC++產(chǎn)生的二進制文件,一定要進行高、低字節(jié)交換。在Matlab中生成數(shù)據(jù)文件則可以在相應(yīng)的文件操作函數(shù)中添加參數(shù)’b’(表示以BigEndian格式存儲),如FileID=fopen(’data.bin’,’w+’,’b’)。產(chǎn)生的二進制文件可以通過Program Flash Memory對話框下載到J3D中,注意不要選中Auto?convert file to SREC format when programming flash和Create Flash Bootloader Application選項。

結(jié)語

本文討論了在以Xilinx Spartan XC3S1600E為基礎(chǔ)的SOPC設(shè)計中,Intel J3D并行NOR Flash的4種不同用途及其使用方法與技巧,尤其對一些技術(shù)關(guān)鍵問題予以詳細的闡述,其中融入了筆者在項目開發(fā)中的實際經(jīng)驗,具有較高的參考價值。J3D既可以用于存儲FPGA配置比特流,又可以存儲軟處理器程序代碼,也可以存儲非易失的數(shù)據(jù)和參數(shù),甚至三者可以并存于同一片J3D中。本文只是以Intel J3D并行NOR Flash為例討論其在SOPC開發(fā)中的用法,這些方法同樣適用于其他廠家具有CFI(Common Flash Interface)接口的并行NOR Flash。靈活地綜合運用這些方法,對于SOPC開發(fā)具有重要意義。

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動電源

在工業(yè)自動化蓬勃發(fā)展的當(dāng)下,工業(yè)電機作為核心動力設(shè)備,其驅(qū)動電源的性能直接關(guān)系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅(qū)動電源設(shè)計中至關(guān)重要的兩個環(huán)節(jié),集成化方案的設(shè)計成為提升電機驅(qū)動性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機 驅(qū)動電源

LED 驅(qū)動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設(shè)備的使用壽命。然而,在實際應(yīng)用中,LED 驅(qū)動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設(shè)計、生...

關(guān)鍵字: 驅(qū)動電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計 驅(qū)動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術(shù)之一是電機驅(qū)動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅(qū)動系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動汽車的動力性能和...

關(guān)鍵字: 電動汽車 新能源 驅(qū)動電源

在現(xiàn)代城市建設(shè)中,街道及停車場照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動電源 LED

LED通用照明設(shè)計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅(qū)動電源

關(guān)鍵字: LED 驅(qū)動電源 開關(guān)電源

LED驅(qū)動電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動電源
關(guān)閉