版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
/基于XilinxFPGA的嵌入式Linux設計流程FPGA是通過邏輯組合電路來實現(xiàn)各種功能的器件。由于FPGA內部集成了大量的邏輯資源和可配置的I/O引腳,加上獨特的并行處理架構,可以輕松實現(xiàn)同時對多個外部設備的配置和管理,以與內外各種接口數(shù)據(jù)的傳輸?,F(xiàn)在開發(fā)廠商又在FPGA內部加入了大量的DSP和BlockRAM資源,非常適合圖像處理、數(shù)字信號處理等運算密集的應用,因此在這些領域取得了廣泛的應用。但是由于FPGA程序編寫的靈活性和功能的多樣性,使得它在一個復雜工程中對各個程序的使用調度、統(tǒng)籌管理上有很大的局限性,這樣就必須引入操作系統(tǒng)進行統(tǒng)一的管理。Linux系統(tǒng)則因為其良好的可裁減、可配置等特點在嵌入式領域應用廣泛。Linux操作系統(tǒng)提供了許多系統(tǒng)級的應用,例如網(wǎng)絡協(xié)議的實現(xiàn)、進程調度、內存管理等,同時Linux是一個成熟的開源操作系統(tǒng),有豐富的應用資源,利用這些資源和強大的系統(tǒng)功能,用戶可以快速地開發(fā)基于嵌入式環(huán)境復雜系統(tǒng)。因此,結合FPGA和Linux雙方優(yōu)勢,可以很好地滿足嵌入式系統(tǒng)設計需求,量體裁衣,去除冗余。本文給出了一種基于XilinxFPGA的嵌入式Linux操作系統(tǒng)解決方案?;贔PGA的嵌入式系統(tǒng)的硬件設計本設計是基于XilinxXC4VFX40系列FPGA,它內部集成了兩個PowerPC405處理器,4個10/100/1000M以太網(wǎng)MAC模塊,運行頻率300MHz時,具有420D-MIPS性能,能解決高速網(wǎng)絡數(shù)據(jù)傳輸問題,并且能解決通過網(wǎng)絡加載操作系統(tǒng)和交叉編譯等問題。它內部有448個可配置I/O口,2592kbBlockRAM,能實現(xiàn)對各種外部設備的并行控制以與較多數(shù)據(jù)的存儲與處理。加載一個操作系統(tǒng),一般需要幾十兆的內存空間,F(xiàn)PGA內部自帶的RAM空間是遠遠不夠的,本設計在板上擴展了兩片MICRON公司的256MbDDR內存,作為上電時操作系統(tǒng)的加載和運行空間?,F(xiàn)在主流的嵌入式操作系統(tǒng),都需要搭建交叉編譯環(huán)境,把在主機上編寫好的可執(zhí)行文件下載到目標板上,這就需要實現(xiàn)網(wǎng)絡數(shù)據(jù)的傳輸。由于XC4VFX40自帶了以太網(wǎng)MAC模塊,只需要在外面添加個PHY芯片和帶隔離器的RJ45接口就能實現(xiàn)這個功能。本設計由于對網(wǎng)絡數(shù)據(jù)實時性要求很高,因此采用Marvell公司的千兆以太網(wǎng)PHY芯片88E1111-RCJ。它能根據(jù)自身配置和主機設計,實現(xiàn)10/100/1000M自適應傳輸,并且Linux本身對這個芯片提供了驅動支持,實現(xiàn)無縫鏈接。操作系統(tǒng)加載到DDR中能快速有效的運行,但是掉電就會丟失,因此必須加入FLASH芯片,把系統(tǒng)文件存儲到外部FLASH中。加電時,F(xiàn)PGA把操作系統(tǒng)文件從FLASH讀入到DDR中運行。FPGA設計當然會擴展很多接口出來,利用自身并行處理的優(yōu)勢,控制很多外圍設備,本設計也不例外,擴展了8個通用的GPIO,2個PS/2接口,1個USB接口,1個AC97聲卡接口,1個HotLink接口,以與4個RS422接口,同時擴展了兩個CPCI接口,引出了16位數(shù)據(jù)地址線和Ethernet控制線,整個系統(tǒng)的硬件框圖如圖1所示。在進行電路設計時,是以FPGA為核心,向外擴展各種設備,因此特別注意了FPGA各個引腳的連接。由于DDR和PHY芯片都需要提供+2.5V電壓,因此和DDR、PHY芯片連接引腳所在的BANK需要提供+2.5V電壓參考,并且不能接以LVTTL或LVCMOS為電壓參考的引腳。重要快速的時鐘信號必須接到全局時鐘引腳上。由于FPGA需要通過外部FLASH啟動操作系統(tǒng),需要并行配置,以減少加載時間,配置電路如圖2所示。在DDR布線時,數(shù)據(jù)和地址線需要走等長線,數(shù)據(jù)線之間不能相差10Mil,地址線要控制在20Mil以內,時鐘也需要走差分等長線,長度應大于地址線,DDR各個信號還需要47Ω的并行端接,改善信號質量。千兆PHY輸出MDI信號也需要在頂層做差分等長,不然在進行1000M數(shù)據(jù)傳輸時很可能不穩(wěn)定。DDR和PHY需要完整的電源回路做參考,電源層劃分時也要特別注意,其他電路做常規(guī)處理就可以了。EDK和ISE軟件設計首先需要調用Xilinx提供的EDK軟件,對各個模塊加入必要的IPCORE,以便操作系統(tǒng)能正常調用這些器件的驅動操作他們。本設計采用的是EDK10.1.2版本,PPC方面選用ppc405內核,頻率設定在300MHz,同時需要添加中斷輸入引腳,以便響應以太網(wǎng)、串口等外部中斷,其他使用默認設置。DDR控制器采用EDK提供的Multi-Port-MemoryController模塊,需要設置DDR芯片廠商、大小和數(shù)據(jù)位數(shù)等,特別指出的是,要設置獨立的兩條PLB總線和PPC連接,作為PPC的指令和數(shù)據(jù)總線。MAC單元需要加入XPS_LL_TEMAC模塊來控制,本設計需要設置PHY類型為GMII(千兆以太網(wǎng)),同時要指定物理地址和收發(fā)FIFO大小。FLASH單元需要加入xps_mch_emc模塊,同時設置FLASH類型和讀寫時間。為了方便調試,還需要加入串口控制臺模塊,本設計使用的是UartLite模塊,設置需要的波特率和校驗類型。特別注意的是,系統(tǒng)還需要時鐘管理模塊(DCM),提供各個模塊需要的不同時鐘,還要設置一段FPGA內部RAM區(qū)域,放置PPC的.boot文件。外部這些模塊都通過PLB總線和PPC通信,需要統(tǒng)一編址,一般把DDR內存空間地址分配到0x0開始,整個系統(tǒng)的構建如圖3所示。本設計,除了在EDK中搭建了操作系統(tǒng)必須的各種模塊后,還需要在ISE中編寫各個時序電路程序,因此把EDK中編寫好的工程作為一個模塊,加入到ISE中,然后統(tǒng)一編譯,這樣生成了我們需要的完整功能的程序。特別指出的是,PPC405數(shù)據(jù)地址采用的是大端模式,接入到ISE中時,需要把數(shù)據(jù)顛倒位置,如DATA[0:31]變?yōu)镈ATA[31:0],才能正常讀寫。Linux操作系統(tǒng)的加載與燒寫加載Linux操作系統(tǒng)需要利用EDK軟件提供的板級升級包(BSP)配置內核。BSP包含了所選定處理器架構的屬性文件以與相關硬件的驅動源文件。首先要在EDKProjectOption中ProjectPeripheralRespository選項下設置Xilinx提供的gen-mhs-devtree/edk_lib庫路徑,然后在軟件平臺設置中選擇Dts模式,編譯更新升級包,生成.dts配置文件。Dts文件包含了所有模塊地址分配,中斷以與驅動信息,把他加入到Linux內核中,然后配置內核選項選擇對應的處理器架構、所選硬件的驅動模塊以與需要的其他內核模塊,之后再對完成配置的內核進行編譯,生成Linux的內核image文件。生成內核image文件之后,還需要生成系統(tǒng)運行所需要的根文件系統(tǒng)。根文件系統(tǒng)中包含了嵌入式Linux系統(tǒng)的所有應用程序、庫以與系統(tǒng)配置等相關文件。根文件系統(tǒng)中常用的程序和命令可利用開源軟件Busybox構造。構造完成之后,在Busybox生成的目錄和文件的基礎上再構造根文件系統(tǒng)的目錄樹,并添加相關設備文件和配置文件以與系統(tǒng)運行時需要的腳本文件,從而形成最終的根文件系統(tǒng),ramdisk.image。把他拷貝到內核中的../arch/powerpc/boot目錄下,在linux2.6.x根目錄下運行makezlmage.initrt,生成最終的系統(tǒng)文件。需要指出的是,在編譯linux內核時,需要設置好交叉編譯環(huán)境:首先安裝ELDK編譯軟件,然后在編輯自己的帳戶目錄下的.bashrc(例如:/home/ppc/)中加入下面內容:CROSS_COMPILE=ppc_4xx$PATH=$PATH:/home/ppc/PowerPc/ELDK/usr/bin:/home/ppc/PowerPc/ELDK/binexportCROSS_COMPILEPATH保存,然后執(zhí)行$source.bashrc把生成的zlmage.initrd文件通過EDK軟件下的XMD調試窗口,使用dowzlmage.initrd命令下載到DDR中,然后運行run命令,就正常啟動Linux了。程序下載到DDR中,掉電后,數(shù)據(jù)就丟失了,不能保存和連續(xù)使用,因此要把操作系統(tǒng)燒寫到FLASH,上電后讓它能自動運行,掉電后也不會丟失。EDK提供了專門的FLASH燒寫工具ProgramFlashMemory,首先要把zlmage.initrd文件轉換為FLASH能識別的.SREC文件,需要在EDKShell下運行下面命令:$powerpc-eabi-objcopy–Ielf32-powerpc–OsreczImage.initrd.srec第一次燒寫FLASH時需要把ProgramFlashMemory中CreateFlashBootlooderApplication勾上,讓系統(tǒng)自動生成Bootlooder程序。操作系統(tǒng)燒寫到Flash中后,需要FPGA在上電后自動從FLASH讀取操作系統(tǒng)數(shù)據(jù),然后自動運行,這幾需要把剛剛生成的bootloadr_0工程中的.elf加入到.bit生成新的配置文件,使用EDK下的UpdataBitstream命令就能實現(xiàn)。最后把生成的.mcs文件燒寫到FPGAPROM中,上電后,系統(tǒng)就能自動運行了。設計結果與分析在Linux系統(tǒng)正常加載后,我們設計一個程序,它通過以太網(wǎng),從上位機獲得數(shù)據(jù),存入FPGA內部BlockRam中,再在ISE中編寫程序,把獲得的數(shù)據(jù)取出,產生頻率可變的波形發(fā)生器,并回傳發(fā)送的參數(shù)給上位機。通過實驗證明,在FPGA加入操作系統(tǒng)后,能輕松實現(xiàn)網(wǎng)絡數(shù)據(jù)的收發(fā),并通過FPGA自身的邏輯,產生我們需要的各種控制信號,做到了系統(tǒng)的統(tǒng)一調度和各個功能的并行處理,發(fā)揮了操作系統(tǒng)和FPGA各自的優(yōu)勢。但是也發(fā)現(xiàn),F(xiàn)PGA下操作系統(tǒng)運行的頻率不高,最多600MHz,中斷響應間隔較長,大約3ms左右,系統(tǒng)上電啟動時間較長,大約40s左右,這些都需要在今后設計中進一步完善和提升。結語本文介紹了基于FPGA的嵌入式Linux設計流程,從硬件設計到Linux系統(tǒng)加載,再到應用程序運行整個過程,從中可以看出,該設計既發(fā)揮了FPGA并行處理和多時序控制上的優(yōu)勢,也發(fā)揮了嵌入式Linux系統(tǒng)調度和可裁剪性方面的優(yōu)勢,還提高了這個系統(tǒng)的穩(wěn)定行,也減少了FPGA與外部高速總線連接的資源開銷,二者的結合,既滿足了嵌入式應用按需定制、量體裁衣的需求,又能開發(fā)出穩(wěn)定而功能強大的嵌入式系統(tǒng),在現(xiàn)在嵌入式系統(tǒng)開發(fā)中有很好的運用。MicroBlaze處理器的PetaLinux操作系統(tǒng)移植引言隨著FPGA(FieldPrograromableGateArray,現(xiàn)場可編程門陣列)技術的迅速發(fā)展,SOPC(SystamOnaPrograromableChip,可編程片上系統(tǒng))作為一種特殊的嵌入式微處理器系統(tǒng),已逐漸成為一個新興的技術方向。SOPC融合了SoC和FPGA各自的優(yōu)點,并具備軟硬件在系統(tǒng)可編程、可裁減、可擴充、可升級的功能。其核心是在FPGA上實現(xiàn)的嵌入式微處理器核,而如何針對特定的微處理器選擇合適的嵌入式操作系統(tǒng)是SOPC開發(fā)的難點之一。本文針對Xilinx公司的MicroBlaze軟核,介紹了PetaLinux嵌入式操作系統(tǒng)與其移植方法,研究了PetaLinux的相關配置和啟動方案。1基于MicroBlaze處理器的系統(tǒng)設計1.1MicroBlaze處理器簡介MicroBlaze軟核處理器是一種針對XilinxFPGA器件而優(yōu)化的功能強大的微處理器。它內部采用RISC架構的32位指令和數(shù)據(jù)總線,支持CoreConnect片上總線的標準外設計集合,具有兼容性和重復利用性,且可根據(jù)性能需求和邏輯區(qū)域成本任意裁減,極大地擴展了應用范圍,其最精簡的核只需要將近400個Slice。MicroBlaze的CoreConnect總線、它能夠將FPGA內各種不同的IP核連接到一起構成一個完整的系統(tǒng)。CoreConnect總線是一個總線標準的集合,它包括PLB總線(ProcessorLocalBus,處理器本地總線),LMB總線(LocalMemoryBus,高速本地存儲器總線),F(xiàn)SL(FastSimplexLink,快速單連接)總線,以與XCL(XilinxCacheLink)總線等。1.2系統(tǒng)結構和外部設備概述本系統(tǒng)主要是在Virtex-4開發(fā)板上構建一個以MicroBlaze處理器為中心的嵌入式信號處理系統(tǒng),在FPGA內部實現(xiàn)系統(tǒng)的總線架構、數(shù)據(jù)存儲、地址譯碼、外設接口等系統(tǒng)部件和功能。各功能部件在FPGA內部都以IP核的形式構建并連接,整個系統(tǒng)的結構框圖如圖1所示。其中,SysACE用于存放文件系統(tǒng)和應用程序配置文件,INTC用來實現(xiàn)中斷控制;GPIO和UART16550用于系統(tǒng)調試,自定義IP核DDC用來實現(xiàn)數(shù)字接收機下變頻功能,這些外設通過PLB總線與MicroBlaze處理器和DDR相連;用于快速傅里葉變換的自定義IP核FFT通過FSL總線與Micr-oBlaze內部通用寄存器直接相連,實現(xiàn)了數(shù)據(jù)的快速傳輸;DDR通過XCL總線與MicroBlaze處理器相連,實現(xiàn)了MicroBlaze處理器對片外存儲器的高速訪問。1.3嵌入式操作系統(tǒng)的選擇選用PetaLinux嵌入式操作系統(tǒng)。它是PetaLogix公司專門針對FPGA的片上系統(tǒng)設計的嵌入式Linux開發(fā)套件,在滿足應用工程的邏輯編程能力和對嵌入式Linux要求的同時,可極大地縮短產品開發(fā)周期。PetaLinux作為專門針對于XilinxFPGA的嵌入式Linux解決方案,不但提供了專門的BSP生成器,而且提供了眾多的參考設計,可以幫助設計者快速掌握PetaLinux的配置方法。PelaLinux內核正在不斷的完善之中,且不斷地加入基于XilinxFPGA嵌入式系統(tǒng)IP核的設備驅動,比如XilinxUSB、SysACE、FSL總線設備驅動、10/100/1000M三態(tài)以太網(wǎng)MAC等。這些設備驅動極大地減輕了嵌入式系統(tǒng)開發(fā)者的工作量,縮短了產品開發(fā)的周期。2PetaLinux系統(tǒng)移植在SOPC硬件系統(tǒng)構建完成后,就要針對此結構配置操作系統(tǒng)內核,下面介紹具體步驟。2.1建立交叉編譯環(huán)境嵌入式系統(tǒng)開發(fā)一般采用交叉編譯的方法,即在宿主機上對內核和應用程序進行編譯,生成目標機處理器可執(zhí)行的二進制位流文件,將此文件下載到目標機運行。PetaLinux針對MicroBlaze處理器建立了交叉編譯器,運行source./settings.sh腳本,系統(tǒng)會自動建立交叉環(huán)境。2.2建立硬件平臺PetaLinux為每個應用工程建立一個文件夾,里面保存該工程的硬件配置。在移植PetaLinux時,只需選擇相應的硬件平臺,內核就會讀取該工程文件夾下的配置文件。使用PetaLinux-new-platform命令建立硬件平臺,如果使用MMU(虛擬內存管理單元),則在此命令后添加-m選項。硬件平臺建立起來后,運行makemenuconfig命令,在Vendor/ProductSeletion選項中,選擇該硬件平臺。另外,還需將在EDK下生成的配置文件轉換成Linux操作系統(tǒng)可以識別的格式。在工程文件夾下運行PetaLinux-copy-autoconfig命令,自動完成格式轉換,并拷貝配置文件到已選擇的工程文件夾下。2.3添加自定義設備驅動本系統(tǒng)自定義了IP核,因此必須開發(fā)驅動程序并將其添加到PetaLinux配置中。添加自定義設備驅動主要步驟如下:①在平臺配置目錄下Makefile文件中添加語句platobj-$(CONFIG_PETALOGIX_DDC)+=ddc.o和$(obj)/ddc.o:.config使設備初始化函數(shù)ddc.C與內核配置相關聯(lián);②在驅動程序所在目錄下的Makefile文件中添加obj-$(CONFIG_PETALOGIX_DDC)+=ddc_adapter.o使設備驅動程序ddc_adapter.c與內核配置相關聯(lián);③修改設備驅動程序所在目錄下的Kconfig文件,使配置內核時可以選擇該設備驅動,并添加以下語句:通過以上文件的修改,就可以在配置PetaLinux內核時選擇自定義的設備驅動。2.4配置PetaLinux內核由于Linux內核的可裁減性,能夠方便地對內核進行修改、裁減、編譯,最終移植到一個嵌入式系統(tǒng)中。運行圖形編輯工具makemenuc-onfig命令,對內核和系統(tǒng)環(huán)境進行配置。在內核配置的設備驅動選項中,一定要選擇與系統(tǒng)硬件配置一致的硬件設備驅動,否則內核編譯時就會出錯。針對本系統(tǒng)的硬件配置,主要配置以下幾項驅動:①[Blockdevices]塊設備。選擇XilinxSystemACEsupport。②[Miscdevice]混雜設備。選擇FSLFIFOdriver,然后進入FSLChannelSelection,選擇FIFOonFSLO,并選擇自添加設備驅動Pet-aLogixDDC101Driver。③[Networkdevicesupport]網(wǎng)絡設備。選擇Ethernet(1000Mbit)子菜單中的Xilinx10/100/1000LLTEMACsupport。④[Characterdevices]字符設備。選擇Serialdrivers子菜單中的8250/16550andcompatibleserialsupport和Consoleon8250/16550andcompatibleserialport。文件系統(tǒng)選項中,默認選擇了ext2、romfs和cramfs文件系統(tǒng),其他文件系統(tǒng)可以根據(jù)需要自行選擇。本系統(tǒng)需要掛載DOS文件系統(tǒng)的CF卡,因此進行以下配置:①[DOS/FAT/NT]。選擇MSDOSfssupport。②[NativeLanguageSupport]。選擇Codepage437(UnitedStates,Canada)。內核配置中的其他配置可以根據(jù)目標系統(tǒng)的不同靈活配置,配置完成后保存退出,自動進入系統(tǒng)環(huán)境配置菜單。系統(tǒng)環(huán)境配置是對Peta-Linux的屬性、命令進行配置,主要有以下幾個選項:①[SystemSettings]系統(tǒng)設置。配置系統(tǒng)的網(wǎng)絡地址、默認用戶名、默認登陸密碼和所用根文件系統(tǒng)等內容。②CoreApplications]內核應用。主要配置內核的常用特性。③[NetworkApplications]網(wǎng)絡應用。配置網(wǎng)絡應用時的相關命令。④[MiscellaneousApplications]混雜應用。配置系統(tǒng)內核中的命令。⑤[BusyBox]。配置系統(tǒng)內核中的命令。PetaLinux已經(jīng)設置好了編譯規(guī)則,因此配置完成后,依次執(zhí)行命令makedep、makeclean、makeall,建立文件依賴關系,清除舊的文件,編譯內核,生成內核image。3PetaLinux啟動方案經(jīng)過編譯的PetaLinux內核image文件主要有image.bin、image.elf、image.ub。根據(jù)選擇image文件的不同,PetaLinux有4種啟動方案:XMD下載啟動、TFTP網(wǎng)絡下載啟動、Flash啟動和SysACECF卡啟動。其中,XMD和TFTP網(wǎng)絡下載啟動方案,在每次系統(tǒng)上電后都必須重新下載,適用于系統(tǒng)調試;Flash啟動方案在系統(tǒng)上電后自動從Flash中讀取配置文件,但Flash燒寫速度較慢,更改系統(tǒng)配置較為不便。因此,本系統(tǒng)選用SysACECF卡啟動方案。使用SysACECF卡啟動PetaLinux,先將硬件比特流文件和image.elf制作成ACE文件,再復制到CF卡中,配置CF卡啟動PetaLinux。制作ACE文件,可在EDKShell窗口運行命令:xmd-tclgenace.tcl(命令工具)-jprog-boardm1402(所需的開發(fā)板)-hwimplementation/download.bit(生成的比特流文件)-elfimage.elf(編譯Linux內核生成的可執(zhí)行網(wǎng)表文件)-acesystem.ace(需生成的ACE文件)成功后,適合于ML-402開發(fā)板的ACE文件就生成了。Linux運行需要根文件系統(tǒng)的支持,啟動時必須加載文件系統(tǒng)以支持系統(tǒng)的運行,而image.elf中不包含文件系統(tǒng)。因此,使用SysACECF卡啟動時必須手動加載文件系統(tǒng)。在編譯PetaLinux內核時,已經(jīng)生成了以romfs文件夾為名稱的文件系統(tǒng),所以只需將CF卡分區(qū)和格式化,然后掛載此文件系統(tǒng)。具體步驟如下:①將CF卡掛載到Linux系統(tǒng)中,運行命令fdisk/dev/sda把CF卡分成3個區(qū)。第1分區(qū)存放system.ace文件,第2分區(qū)為LinuxSwap交換分區(qū),第3分區(qū)存放根文件系統(tǒng)。②Linux下格式化第3分區(qū)為ext2文件系統(tǒng),運行命令mke2fs/dev/sda3。在/ete/fstab下輸入命令/dev/sda3/mnt/rootfsautodefaults,user,noauto00。把設備sda3掛在/mnt/rootfs文件下,文件系統(tǒng)為默認的ext2,普通用戶,能掛載,不轉儲,啟動時不掃描文件系統(tǒng)。通過命令mount/mnt/rootfs掛載該目錄,這樣就可以把根文件系統(tǒng)rootfs拷貝到CF卡的該分區(qū)上。③Windows下格式化第1分區(qū)為FAT32文件系統(tǒng),把system.ace復制到這個分區(qū)。④Linux下格式化第2分區(qū)為交換分區(qū),運行命令mks/sda2。一切準備就緒后,插入CF卡,開啟電源,就可以從CF卡啟動PetaLinux。結語本文介紹了一種可用于MicroBlaze處理器的嵌入式Linux操作系統(tǒng)——PetaLinux,并詳細討論了其內核配置和啟動方案。通過移植Peta-Linux,本文開發(fā)的SOPC可以直接用于實際工程。該嵌入式操作系統(tǒng)移植快速、簡單,由于其基于Linux2.6內核,可以保證較高的穩(wěn)定性。因此,在SOPC應用日益復雜的背景下具有較高的實用價值。本文創(chuàng)新點:實現(xiàn)了PetaLinux在MicroBlaze處理器的移植,并成功實現(xiàn)PetaLinux中自定義硬件設備驅動的添加和SysACECF卡的啟動方案。MPMC的使用雙擊Bus_Interface標簽欄下的DDR_SDRAM,進入編輯MPMC的界面。如圖3.2.1所示:
點擊看大圖圖3.2.1點擊DDR_SDRAM3.2.1BaseConfiguration主標簽欄:BaseConfiguration包含兩個標簽欄。其中,用戶可以在PortTypeConfiguration中配置端口類型,MPMC最多可以有8個端口,每個端口有前述的4種接口類型XCL,PLBv46,SDMA,NPI以與不使用INACTIVE。
點擊看大圖圖3.2.2MPMC端口的4種接口類型以與不使用INACTIVE分配完畢后可以通過LeftJustify將不工作的端口消除掉。在這個過程中所有與端口有關的參數(shù)和外部總線連接都被移到左邊。圖3.2.3點擊LeftJustify之前圖3.2.4點擊之后在CommonAddress中可以觀察和設置初始地址。想配置任一個獨立的端口地址,需到Advanced標簽欄下Address選項選擇。
圖3.2.5CommonAddress標簽欄3.2.2MemoryInterface主標簽欄MPMC可以與不同廠商的許多不同種內存一起工作。這個標簽欄讓你在MemoryPartSelector標簽下選擇與MPMC連接的內存。MemoryPartSelector它包含Type選項,Memorymanufacturer選項,Memorystyle選項,Memorydensity選項,Memorywidth選項和PartNo.選項。
圖3.2.6MemoryPartSelector過濾的結果在PartNo.下拉列表中出現(xiàn)。如果內置的內存數(shù)據(jù)庫正確部分不能使用時,MemoryPartSelector/PartNo.下拉列表也會包含一個用戶選項。在你選擇了CUSTOM選項之后,所有內存參數(shù)都可修改,你能夠輸入你想要的參數(shù)。在你選擇了內存部分之后,參數(shù)將被自動載入到SelectedMemoryInfo區(qū)和Memory/DIMMSettings標簽中去Memory/DIMMSettings在這個設置區(qū)內,選擇下拉菜單,你可以調整DIMMs的數(shù)目,內存數(shù)據(jù)寬度,內存時鐘周期,ODT設置和部分其他信息。
圖3.2.7MemoryInterface標簽MemoryPartSettingsTabMemoryPartSettings標簽欄有兩個區(qū)間:PartSettings和MemoryTimingSettings。PartSettings包含DataDepth,DataWidth,Bank,Row,和ColumnBits。MemoryTimingSettings包含內存部分選項。
圖3.2.8MemoryPartSettings標簽3.2.3PortConfiguration主標簽欄在PortConfiguration標簽欄可以設置每個獨立端口的參數(shù)。端口0-3和端口4-7可以在標簽欄中顯示。端口標簽欄分成如圖3.2.9所示的表明端口號的四個象限。只有與現(xiàn)有端口類型相關的參數(shù)(在BaseConfiguration主標簽欄中選擇)可以查看并修改。
圖3.2.9PortConfiguration3.2.4Advanced主標簽欄Advanced的標簽欄提供了更多高級MPMC的用戶資源。DataPath在DataPath這個標簽欄中,你既能夠配置常規(guī)傳遞途徑的設置,也能單獨設置每個端口。GeneralPipelineSettings允許你設置常規(guī)傳遞途徑的參數(shù),而Port-specificSettings允許你按照如下方式為獨立的端口改變傳遞途徑的設置:NPIWidth:NPI的寬度。ReadFIFOConfig:用BRAM,SRL,或者Wr-Only(只能寫,不能讀緩存)執(zhí)行FIFO。WriteFIFOConfig:用BRAM,SRL,或者Rd-Only(只能讀,不能寫緩存)執(zhí)行FIFO。ReadMemoryPipeline:允許傳遞途徑讀內存。ReadPortPipeline:允許傳遞途徑讀潛在端口。WriteMemoryPipeline:允許傳遞途徑寫內存。
WritePortPipeline:允許傳遞途徑寫端口。AddressAckPipeline:允許傳遞途徑確認抵制要求。
圖3.2.10DataPathPort-specificSettings中ReadFIFOConfig有三個選項:BRAM,SRL,Wr-Only。
圖3.2.11ReadFIFOConfig同樣,WriteFIFOConfig有三個選項:BRAM,SRL,Rd-Only。
圖3.2.12WriteFIFOConfigArbitrationMPMC最多有8個端口,它們能同時訪問內存。因此,在任何必要時候都能有一個仲裁機制來斷定哪個端口有優(yōu)先權,就顯得十分重要了。在Arbitration標簽欄中,你可以選擇用哪種仲裁機制。
從下拉菜單中選取一種仲裁機制:RoundRobin:采取循環(huán)仲裁模式。
圖3.2.13RoundRobitFixed:采取確定的優(yōu)先級模式。Custom:在這種模式中,可以定制時間檔的數(shù)值和每個時間檔的仲裁優(yōu)先級。在每個時間檔中仲裁優(yōu)先級被編譯成描述端口間優(yōu)先級下降的字符串。
圖3.2.14Custom例如,字符串“01234567”給端口0最高的優(yōu)先級,然后從端口1到7優(yōu)先級下降。MiscMisc這個從標簽欄包含了需要你注意,但不在先前類別內的參數(shù)。
圖3.2.15Misc上面大概地介紹了MPMC的結構和功能,具體如何在設計中加入使用NPI接口將在第七章中給出一個實際的例子。BootloaderBootLoader的基本概念板級支持包(BSP)BSP是板級支持包(BoardSupportPackage)的縮寫,是通常用在嵌入行業(yè)中的一個術語,用來代表在一個特殊硬件平臺上快速構建一個嵌入操作系統(tǒng)所需的原始資料或者二進制軟件包。BSP的作用是支持操作系統(tǒng),使之能夠更好的運行于硬件平臺。BSP是相對于操作系統(tǒng)而言的,不同的操作系統(tǒng)對應于不同定義形式的BSP,包括WindowsCE、Linux、Vxworks等。SoC/CPU廠商應向其芯片的用戶提供一個基本的BSP包,以支持主板廠商或整機制造廠商在此基礎上定制和開發(fā)各種商用終端產品。
在嵌入式系統(tǒng)學習過程中設計到了Bootloader,下面講述了Bootloader的基本作用,在后續(xù)的文章中我將對如何編寫自己的Bootloader進行介紹。1.Bootloader的基本概念:簡單地說,bootloader就是在操作系統(tǒng)內核運行前運行地一段小程序。通過這段小程序,可以對硬件設備,如CPU、SDRAM、Flash、串口等進行初始化,也可以下載文件到系統(tǒng)板、對Flash進行擦除和編程,真正起到引導和加載內核鏡像的作用,但是隨著嵌入式系統(tǒng)的發(fā)展,bootloader已經(jīng)逐漸在基本功能的基礎上,進行了擴展,bootloader可以更多地增加對具體系統(tǒng)的板級支持,即增加一些硬件模塊功能上的使用支持,以方便開發(fā)人員進行開發(fā)和調試。從這個層面上看,功能擴展后bootloader可以虛擬地看成是一個微小的系統(tǒng)級的代碼包。bootloader是依賴于硬件而實現(xiàn)的,特別是在嵌入式系統(tǒng)中。不同的體系結構需求的bootloader是不同的;除了體系結構,bootloader還依賴于具體的嵌入式板級設備的配置。也就是說,對于兩塊不同的嵌入式板而言,即使它們基于相同的CPU構建,運行在其中一塊電路板上的bootloader,未必能夠運行在另一塊電路開發(fā)板上。BootLoader最為系統(tǒng)復位或上電后首先運行的代碼,一般應寫在起始物理地址0x0開始。Bootloader的啟動過程可以是單階段的,也可以是多階段的。通常多階段的bootloader能提供更為復雜的功能,以與更好的可移植性。從固態(tài)存儲設備上啟動的bootloader大多數(shù)是二階段的啟動過程,也即啟動過程可以分為stage1和stage2兩部分。2.ARMBootloader的一般作用對于一個ARM系統(tǒng)來說,本質上,bootloader作為引導與加載內核鏡像的“工具”,在實現(xiàn)上,必須提供以下幾個功能,更確切地說,必須做到以下幾點:(1)初始化RAM(必需):bootloader必須能夠初始化RAM,因為將來系統(tǒng)要通過它保存一些Volatile數(shù)據(jù),但具體地實現(xiàn)要依賴與具體的CPU以與硬件系統(tǒng)。(2)初始化串口(可選,推薦):bootloader應該要初始化以與使能至少一個串口,通過它與控制臺聯(lián)系進行一些debug的工作;甚至與PC通信。(3
n啟動內核鏡像(必需):根據(jù)內核鏡像保存的存儲介質不同,可以有兩種啟動方式:FALSH啟動以與RAM啟動;但是無論是哪種啟動方式,下面的系統(tǒng)狀態(tài)必須得到滿足:l
CPU寄存器的設置:
R0=0;
R1=機器類型;
R2=啟動參數(shù)標記列表在RAM中的起始地址;
這三個寄存器的設置是在最后啟動內核時通過啟動參數(shù)來傳遞完成的。l
CPU模式:
關閉中斷;屬于SVC模式;Bootloader中沒有必要支持中斷的實現(xiàn),這屬于內核機制以與設備驅動管理的管理范疇;SVC模式是系統(tǒng)的一種保護模式,這樣就可以進行一些只能在SVC模式下的操作,例如一些特定寄存器訪問操作。l
Cache和MMU的設置:
MMU必須關閉;數(shù)據(jù)cache必須關閉;指令cache可以關閉也可以開啟;Bootloader中所有對地址的操作都是使用物理地址,是實在的實地址,不存在虛擬地址,因此MMU必須關閉。Bootloader主要是裝載內核鏡像,鏡像數(shù)據(jù)必須真實寫回SDRAM中,所以數(shù)據(jù)cache必須關閉;而對于指令cache,不存在強制性的規(guī)定,但是一般情況下,推薦關閉指令cache。
Bootloader啟動內核鏡像的方法是通過跳轉語句直接跳轉至內核鏡像的第一句指令語句。
Bootloader存在的必要性Bootloader的功能決定了在引導Linux系統(tǒng)時,必須使用bootloader,除非你對linux內核進行了修改。Bootloader有兩個主要功能:1.在發(fā)布模式,自動引導linux系統(tǒng),為系統(tǒng)初始化各種參數(shù)。2.在調試模式,要能夠方便的下載內核,引導內核。Linux系統(tǒng)一定要bootloader支持嗎?答:是的。通用的Linux內核,啟動時需要很多參數(shù),這些參數(shù)必須通過bootloader傳遞。而且內核一般是壓縮存放到外存上的,從外存到內存的拷貝也是由bootloader完成。Bootloader為什么不和kernel放到一起呢?答:不可以這樣做。從bootloader的第二個功能就知道,bootloader是不能和內核放到一起。當然,在發(fā)布模式時,是可以集成到一起的,通常沒必要。從哪里可以得到bootloader?答:目前通用的bootloader很多,不論是嵌入式還是桌面系統(tǒng),比如lilo,grub,blob等。桌面用的bootloader我們就不討論了,重點說一下嵌入式領域用的bootloader。采用通用的bootloader功能強大,開發(fā)容易,而且由專人維護升級,不過多是針對特定的CPU或者特定開發(fā)板的。如果是學習,推薦自己開發(fā)bootloader。如何編寫自己的bootloader?答:編寫一個bootloader只要能夠完成前面提到的兩個功能就可以了。分別描述一下這兩個功能的實現(xiàn):1.該功能比較簡單,就是從FLASH中拷貝數(shù)據(jù)到RAM。如果內核的存放不是基于文件系統(tǒng)的,直接采用匯編就可以完成塊拷貝。然而如果內核存放在文件系統(tǒng)之上,比如內核存放到了基于ext2文件系統(tǒng)的CF卡上。首先我們的bootloader要能夠訪問CF卡,然后要能夠識別文件系統(tǒng),只有這樣才能正確找到內核文件并拷貝到內存中。2.該功能一般通過串口實現(xiàn)。對于ARM來說,驅動串口比較容易,直接從主機的串口接收內核數(shù)據(jù)存放到RAM中,就可以啟動內核了。如果需要發(fā)布,還要實現(xiàn)把內核從RAM燒寫到外存的能力。為了提高速度,充分挖掘開發(fā)板和CPU的潛力,出現(xiàn)了許多用網(wǎng)口和USB接口下載內核的bootloader。使用網(wǎng)口,bootloader必須提供網(wǎng)卡驅動和TCP/IP協(xié)議的支持。使用USB接口,需要提高大容量存儲類驅動。為了拓展思路,你也可以使用紅外,存儲卡接口進行數(shù)據(jù)下載。使用紅外接口,和串口基本一樣,無非就是沒有了連線。使用存儲卡,通常需要文件系統(tǒng)的支持。比如,我們使用SD卡存放內核,在主機交叉編譯好內核后,把內核存放到SD卡上。然后將XD卡插到目標板的插槽中,bootloader必須有能力把SD卡上的內核拷貝的RAM中,過程參考功能1的實現(xiàn)。Background]
-幾乎所有的嵌入式系統(tǒng)都需要用外部存儲器
-最終的設計不可能用DemoBoard,肯定都要重新畫PCB
-DDRMemoryController是一個挺復雜的系統(tǒng),移植起來比較麻煩
[Question]
怎樣移植現(xiàn)有設計的MemroyController到定制PCB板上?
[Solution]
-此文針對EDK10.1SP3MPMC4.03MIG2.3
-MPMC提供兩種PHY-
MIG
PHY和STATICPHY。
MIG
PHY可以達到比較高的performance,移植也相對困難。STATICPHY使用DCMPHASESHIFT功能來調校時序,調校一次后可以把數(shù)值固定下來以后就不必調了,缺點是速度只能達到100-125MHz。
-Port的經(jīng)驗主要參考MPMCDatasheetP43MemoryInterfaceGenerator(MIG)BasedPHYInterface和
P47Converting
MIG
UCF
to
MPMCv.4
UCF,另外AR29221雖然AR是針對Spartan3的,但是Virtex系列也很有參考意義。
-使用MIG
PHY需要遵循特定的管腳分配規(guī)則。-參考UG086-SectionVI.MemoryImplementationGuidelines
-自己調整過的管腳分配需要在MIG中Verify。
-MPMC提供perl語言將MIG的UCF根據(jù)MHS中MPMC的引腳名字轉換成相應的UCF,Virtex-5DDR2PHY需要設置C_MEM_DQS_IO_COL和C_MEM_DQ_IO_MS
-調整MPMC的Parameter,比如C_MEM_PARTNO等
-
MIG
PHY不需要任何軟件設置,自動會做Calibration。如果過不了MemoryTest或讀寫不正常,那么首先把MPMC_InitDone引到LED上觀察初始化有沒有完成。
-如果MIG
PHY初始化不能自動完成,可以參考UG086SectionV.DDR2DebugGuide的debugflow來查找關鍵信號,比如calib_start,calib_done等?;蛘咴囉肧TATICPHY
-STATICPHY的用法在MPMCdatasheet中有詳細介紹。主要步驟為:
0.在UCF中定義好管腳位置。
1.MPMCPARAMETERC_USE_STATIC_PHY=1
2.取消MPMC_Clk_200MHzPORT的連接
3.根據(jù)Datasheet中StaticPHYImplementation-->DCMPhaseAdjustPort的說明修改MHS文件,添加一個DCM,連接MPMC_DCM_PSINCDEC,MPMC_Clk0,MPMC_Clk_Mem等信號并調整LOCKED信號。
4.將MPMC_CTRLBus連接到系統(tǒng)的PLB46總線上。這個總線用于控制StaticPHY的控制寄存器。
5.根據(jù)Datasheet中StaticPHYImplementation-->TimingConstraints在UCF中添加時序約束。
6.添加一個SWApplication,內容為\sw\XilinxProcessorIPLib\drivers\mpmc_v2_00_a\examples\mpmc_calibration_example.c,放在BRAM中,所需空間大約為10K。
7.這個calibrationexample會自動找到所需設置的phaseshift值,記下來并填在DCM的C_PHASE_SHIFT參數(shù)中。
-如果還是有問題,仔細查看ngdbuild/map/parreport的warning,從中查找信息。通常staticphy都是可以用的。
-我犯過的一個錯誤:在UCF編輯管腳的時候,把CAS管腳寫成了CS管腳,結果有一個CS管腳的定義被overwrite,怎么都不能完成calibrate,XMDmrd讀取同一個地址的的數(shù)據(jù)永遠都不一樣。通過檢查ngdbuildreport發(fā)現(xiàn)這個warning,于是通過staticphy,也通過了MIG
PHY。
-另一個錯誤:V5DDR2Place報錯引用Place:292-Thecomponentsu_system/mpmc_0/mpmc_0/mpmc_core_0/gen_v5_ddr2_phy.mpmc_phy_if_0/u_phy_i
o_0/gen_dq[28].u_iob_dq/stg3b_out_falland
u_system/mpmc_0/mpmc_0/mpmc_core_0/gen_v5_ddr2_phy.mpmc_phy_if_0/u_phy_io_0/gen_dq[29].u_iob_dq/stg3b_out_fallseem
to
beplaced/locked
to
thesamesite
SLICE_X0Y138
是由于沒有設置C_MEM_DQS_IO_COL和C_MEM_DQ_IO_MS引起的。
-
MIG太復雜,通常來講不推薦自己改代碼。因此感覺就算查了MIG
PHY的關鍵信號幫助也不太大。絕望時仔細查查AnswerRecord,試一試StaticPHY。
項目需要MicroBlaze1將采集到的大批數(shù)據(jù)緩存到SDRAM中,然后再通知MicroBlaze0將該數(shù)據(jù)讀出再通過Ethernet接口送給PC。由于特殊原因,F(xiàn)PGA在一塊現(xiàn)成的控制卡上,需要將該卡插到我們的母板上。但是該控制板最初的設計是用來控制電機的,所以根本就沒考慮過什么端接電阻匹配和等長這些問題,給項目帶來了意想不到的問題。所以以后做SDRAM控制的時候,硬件上一定要提前考慮好,這樣的話后期邏輯的設計就會省事多了,特別是做DDR的設計。言歸正傳,還是看怎么倒騰這塊控制卡吧,當然母板設計的時候考慮了等長和匹配,但只是母板上。
什么都不動的情況下用MPMC來訪問SDRAM,最高只能跑到80MHz,與客戶最低100MHz最好125MHz的時鐘需求差距還很大。首先從硬件上考慮,做到阻抗匹配,將控制卡上與SDRAM連接的所有端口上已有的電阻去掉(有的沒有,有的有,還不一樣33,100)。結果并不是很理想,但是在現(xiàn)有的這樣的硬件條件下,可改的就這些電阻了,除非重新做板??磥碇缓迷贛PMC控制器和約束上做文章了。
首先添加了DRIVE約束,試了4,8,12下發(fā)現(xiàn)8的時候示波器看到波形效果最好(太大會導致過沖較大,太小會導致上升時間變長)。至此SDRAM訪問頻率達到了90MHz,但是還是不能滿足客戶需求。
給MPMC時鐘引腳添加SLEW=FAST約束發(fā)現(xiàn)時鐘頻率可以達到了100MHz,并進行了全容量測試沒有問題。所以感覺還是時鐘的問題,畢竟MPMC輸出的時鐘的原則上的上升沿是對準數(shù)據(jù)和控制數(shù)據(jù)的中間的,保證數(shù)據(jù)被正確采集。但是由于硬件設計的原因致使可用采集窗口變窄,致使無法正確采集到數(shù)據(jù)。
上面的結果使得P1的母板能夠工作在100MHz頻率下,但是P2的板子回來以后發(fā)現(xiàn)可能是做工的原因導致P2的板子讀寫數(shù)據(jù)個別位不一致。真是頭疼加郁悶。沒辦法,還得繼續(xù)想辦法。結合前面的調試,數(shù)據(jù)、地址和控制線無法再做調整,除非加IODELAY(這個工作量太大)。還是從時鐘上想辦法,10.0.3版本EDK上的MPMC控制器的時鐘是不能夠調整相位的,也就是說除了MPMC內部對時鐘進行了180度相移外,用戶無法再進行調整。所以只好不用MPMC提供的時鐘,自己用DCM來產生時鐘,并且利用DCM相位可調的功能調整輸出的時鐘相位(這種方法Xilinx網(wǎng)站上也有介紹,從11版本后的MPMC輸出時鐘據(jù)說可調相位了,沒有用過還)。經(jīng)過大量的測試終于找到了能夠100MHz工作的窗口。至此徹底解決該問題。
經(jīng)驗總結:
1、對SDRAM訪問關鍵是硬件設計時要考慮好;
2、適當?shù)奶砑蛹s束能使改善工作頻率
3、通過調整時鐘相位可以手動找到數(shù)據(jù)訪問窗口,改善工作頻率Spi配置SPI(SerialPeripheralInteRFace,串行外圍設備接口)是一種高速、全雙工、同步的通信總線,在芯片的引腳上只占用4根線,不僅節(jié)約了芯片的引腳,同時在PCB的布局上還節(jié)省空間。正是出于這種簡單、易用的特性,現(xiàn)在越來越多的芯片集成了這種通信協(xié)議。1SPI配置介紹1.1Spantan-3ESPI配置流程SPI方式是通過符合SPI接口時序的第三方SPIFlash對FPGA進行加載。它適合作為FPGA硬件結構的bit文件保存介質,如果應用軟件工程編譯后的代碼較小,保存在同一片SPIFLash中(即復用SPIFlash)無疑是可行的最廉價方案。由于本沒計軟件工程規(guī)模較小,所以利用此復用SPIFlash方式對FPGA進行配置,既保存FPGA配置的bit文件,也保存應用軟件工程的bit文件。系統(tǒng)在上電或向PROG_B引腳發(fā)出低脈沖后,F(xiàn)PGA芯片經(jīng)過一個初始化序列清空內部FPGA配置存儲器。此序列開始時,DONE和INIT_B引腳均轉為低。初始化完成后,INIT_B引腳轉為高,并采樣芯片的配置模式與變量選擇引腳。SPI模式下,F(xiàn)PGA對變量選擇(VS[2:0])引腳采樣,以確定發(fā)出哪個SPI命令序列。當初始化之后發(fā)出INIT_B信號時,模式引腳和變量選擇引腳都必須處在正確的邏輯級,以確保正確采樣。在變量選擇引腳選擇SPI命令集之后,F(xiàn)PGA將CSO_B選擇信號置為低,并且開始通過FPGA的CCLK引腳對SPIFlash存儲器進行時鐘控制。接著發(fā)出8位讀命令后跟24位起始地址0x000000和目標命令集的適量虛擬字節(jié)。FPGA從地址0開始讀取SPIFlash存儲器陣列,直到讀完所需的配置位數(shù)。如果從存儲器件讀取到有效比特流,則發(fā)DONE信號,以指示FPGA配置成功。圖1為SPI配置方式的時序。圖2是AT45DB161DSPIFlash的配置接口。這種配置方式只占用了FPGA芯片的4個引腳,而且配置成功之后,所有SPI引腳都成為可用的用戶I/O引腳,這就節(jié)省了FPGA的引腳資源。1.2SPIFlash存儲器的復用復用SPIFlash是指既用它來保存硬件配置文件、Bootloader引導程序還用來保存用戶應用程序。在加載階段,F(xiàn)PGA自動從SPIFlash中讀取硬件配置bit文件與Bootloader程序進行配置到片內BRAM中運行。當完成加載后,F(xiàn)PGA內部邏輯啟動,通過運行的Bootloader程序讀取SPIFlash中的用戶應用程序,并寫到外部SDRAM的相應位置,最后Bootloader程序切換指令指針到SDRAM指定位置,在外部的SDRAM中開始執(zhí)行應用程序。圖3給出了本系統(tǒng)中復用SPIFlash嵌入式系統(tǒng)結構圖,用EDK中的opb_sdram連接外部SDRAM,用opb_spi連接SPIFlash(AT45DB161D),通過Bootloader軟件程序實現(xiàn)從SPIFlash中復制用戶應用程序到SDRAM中,然后在SDRAM中運行。但是,Boot-loader在系統(tǒng)上電時會通過FP-GA芯片的配置引腳首先加載到BRAM中運行,這樣就可以實現(xiàn)上電自動加載啟動程序。2Bootloader引導程序的設計在工程代碼編寫之前要求對硬件器件有所了解,主要需要了解FPGA所需要的配置文件空間,還有Flash存儲結構。例如:XC3S500E配置文件空間為2270208位,所以要根據(jù)它計算存儲應用程序的基地址。AT45DB161D是串行接口的閃存芯片,它包含有17301504位,被組織為4096頁,每頁512/528字節(jié)。除了主存儲器,AT45DB161D還包括2個SRAM數(shù)據(jù)緩沖區(qū),每個緩沖區(qū)512/528字節(jié)。在主存儲器正在編程時,緩沖區(qū)是允許接收數(shù)據(jù)的,并且支持數(shù)據(jù)流式寫入。(此處為528字節(jié)/頁)AT45DB161D的存儲器陣列分為3個級別的粒度,分別為扇區(qū)、塊與頁。圖4對各個級別進行了分析,詳細說明了每個扇區(qū)與塊的頁數(shù)。所有的編程操作都是針對頁的。擦除操作可以作用于芯片、扇區(qū)、塊或頁。最后利用定義的空函數(shù)int(*boot_app_jump)(void);”將地址指針指向內存的應用程序基地址,使其從此處開始運行程序。//將目的地址賦給跳轉函數(shù)boot_app_jump=(int(*)(void))DESTINATION_AD-DR;//運行跳轉函數(shù),使其在該函數(shù)地址開始運行程序boot_app_jump();3SPIFlash軟件引導過程與SPIFlash編程本實驗使用簡單的應用程序(打印hello_world),即工程“hello_world”。工程serial_Flash_bootloader就是上面設計的引導程序。
3.1編譯用戶應用程序的二進制文件由于應用程序要在外部SDRAM中運行,所以不需要初始化BRAM存儲器,如圖5所示。為了指明程序的開始地址和應用程序的可執(zhí)行文件的產生路徑,需要在編譯選項中設置。右鍵“應用程序工程”,SetCompilerOptions在OutputELFfile中選擇可執(zhí)行文件的產生路徑,如XC3S500E\hello_world\hello_world.elf,在ProgramStartAddress中鍵入程序執(zhí)行的起始地址(這里是SDRAM的基地址:0x90000000)。接下來編譯應用程序工程,編譯完成后就會在XC3S500E\hello_world文件夾中產生hello_world.elf。為了后面對SPIFlash編程的需要,應將elf轉變成二進制形式的文件。這就需要利用cygwinshell窗口命令來完成,這個腳本提供了一個簡單的命令實現(xiàn)這個目的。利用mb-objcopy-Obinary<options><ELF><bi-naryoutput>命令就可以將elf轉變成二進制形式的文件(.b文件)。例如:mb-objcopy-Obinary./helloworld/helloworld.elf./hello_world/hello_world.b用來在工程目錄下hello_world文件夾創(chuàng)建工程的一個hello_world.b的二進制文件。生成的文件hello_world.b大約2KB左右。3.2Bootloader引導程序與硬件配置文件的生成serial_Flash_bootloader要初始化到BRAM中(即在“工程”上右鍵→BRAMInitializationandunmarka11)。這樣做的意義是在編譯Bootloader程序時就將它編譯后的執(zhí)行文件(.elf文件)加入到硬件system.bit中生成一個download.bit。這個文件既包含了系統(tǒng)硬件配置信息,又包括了Bootloader程序執(zhí)行文件。由于設置了初始化到BRAM中,所以在系統(tǒng)上電時才能使Bootloader程序自動加載到片內BRAM中運行,實現(xiàn)程序的引導功能。只要利用EDK用軟件中downloadbitstram功能就可以實現(xiàn)上述功能。3.3編寫SPIPROM文件本部分提供為SPIFlash存儲器創(chuàng)建PROM文件的指導原則。在將生成bitstram.bit比特流轉換成SPI格式PROM文件之前,設計人員必須確認該比特流是用bitg-en-gStartupClk:Cclk選項生成的。此選項使啟動順序與Spartan-3E內部時鐘同步,從而確保FPGA功能正常。①將硬件配置和serial_Flash_bootloader引導程序的bitstrem.bit轉換為MCS格式文件。②將前面得到的應用程序的二進制文件(hello_world.b)轉換為MCS格式文件。③將以上得到了2個MCS文件合成1個MCS文件。④編程SPIFlash芯片。以上過程,除了③以外,Xilinx公司的iMPACT編程軟件都可以實現(xiàn)。③要由DOS命令完成。所以下面都是以DOS命令來完成編程的全過程。再使用DOS命令完成格式化和編程之前,要對down-load.bit、應用程序、spiPartNam和spi_offset參數(shù)進行設置,以便XSPI軟件程序能對用戶要求加以識別。如下:setbitstream=../implementation/download.bitsetapplication="hello"_worldsetspiPartName="AT45DB161D"//SPIFlash器件的名稱setspi_offset=0x63000//hello_world的應用程序就會從//Flash中0x63000地址向上存放,引導程序也是從這里開始加載//到SDRAM中的接下來就是執(zhí)行轉換的命令。第1步:REMStep1.Convertdownload.bittomcsimpactconvert_bits_to_mcs.cmd此命令將硬件配置和serial_Flash_bootloader引導程序的bitstrem.bit轉換為MCS格式文件。第2步:REMStep2.Convertbinaryapplicationtomcs
xmcsutil-accept_notice-i%application%.b-o%appli-cation%.mcs-29完成了應用程序(hello_world)的二進制文件(hello_world.b)轉換為MCS格式文件。第3步:REMStep3.combineapplicationmcswithbitstreammcsxmcsutil-accept_notice-ibitstream.mcs%applica-tion%.mcs-ocombined.mcs-16-segaddr0x00%spi_off-set%-usedataaddr-padff這個命令將以上得到了的MCS文件合成一個MCS文件。第4步:REMStep4.ProgramtheAT45DB161Dxip-accept_notice-skip_syncword_check-mcs-spi_epv-icombined.mcs-overify.txt-select_cable1完成對SPIFlash芯片編程。此命令使用輪詢擦除SPI內容,然后對SPI器件的內容進行編程和驗證。任何驗證不匹配項都記錄在result.out文件中。默認情況下,XSPI認定數(shù)據(jù)是HEX格式。如果輸入文件是HEX格式,則去除-mcs選項。Xilinx軟件工具iMPACT從Spartan-3E比特流生成SPI格式PROM文件。SPI存儲器件首先串行輸出數(shù)據(jù)的MSB字節(jié),而XilinxPROM則首先輸出數(shù)據(jù)的LSB。與標準XilinxPROM文件相比,SPI格式PROM文件在每字節(jié)內有位反轉,因此,需要在PROMgen中使用-spi選項才能正確格式化。XSPI支持.hex和.mcs兩種SPIPROM文件格式。以下所示為生成SPI格式.mcs文件的PROMGen命令行操作的示例。要生成SPI格式PROM文件.hex,請用-Phex替換-pmcs選項開關。結語本文介紹的是SPIFlash存儲器的復用編程方法的實現(xiàn)。在應用程序不是很大時,可以使用此方法復用SPIFlash存儲器,減少外圍電路,但是配置時間較長。在不要求配置時間的基礎上,可以考慮使用SPI配置模式。分頁燒寫Flash多頁程序并行自舉方法
發(fā)布時間:2009-6-610:40:13
TI公司的DSP芯片\o"IC庫存:TMS320Vc5410"TMS320Vc5410(簡稱5410)是性能卓越的低功耗定點DSP,在嵌入式系統(tǒng)中有著廣泛的應用。5410沒有自帶的片上非易失性存儲器,因此需要外部的非易失性存儲介質,如\o"IC庫存:EPROM"EPROM或\o"IC庫存:Flash"Flash,來存儲程序和數(shù)據(jù)。5410片內有64K字RAM,由于在片內RAM運行程序比片外運行有高速度低功耗等顯著優(yōu)點,通常上電后都需要從片外\o"IC庫存:EPROM"EPROM或\o"IC庫存:Flash"Flash上加載程序到片內RAM,但是芯片自帶的自舉程序(簡稱BootLoader)只支持32K字以內的外部程序加載,因此程序設計往往局限于32K字空間內,限制了編程的靈活性,不能充分發(fā)揮5410的性能。當程序空問大于32K字時,就需要自己編寫程序來實現(xiàn)自舉。下面首先介紹使用5410對\o"IC庫存:Am29LV200B"Am29LV200B\o"IC庫存:Flash"Flash存儲器進行程序分頁燒寫的方法,然后重點介紹利用Bootloader來編程實現(xiàn)多頁并行自舉引導的方法。
1
\o"IC庫存:Am29LV200B"Am29LV200B
Flash存儲器的分頁燒寫
1.1
\o"IC庫存:FIash"FIash
存儲器簡介
\o"IC庫存:Am29LV200B"Am29LV200B(簡稱Flash)是AMD公司生產的Flash存儲器,主要特點有:3V單電源供電,可內部產生高電壓進行編程和擦除操作;支持JEDEC單電源Flash存儲器標準;只需向其命令寄存器寫人標準的微處理器指令,具體編程、擦除操作由內部嵌入的算法實現(xiàn),并且可以通過查詢特定的引腳或數(shù)據(jù)線監(jiān)控操作是否完成;可以對任一扇區(qū)進行讀、寫或擦除操作,而不影響\o"IC展臺:其他"其他部分的數(shù)據(jù)。文中128K×16位A
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 設備類貨物運輸合同
- 私家車租車合同范本
- 木門購買安裝合同范本
- 會展服務協(xié)議合同正規(guī)范本
- 《教師嗓音保健》課件
- 企業(yè)人員借調合同
- 建筑工程施工總承包合同補充協(xié)議
- 光之教堂調研報告
- 基于非鉛鈣鈦礦單晶的高性能X射線探測器研究
- 基于雙氰基新型熒光染料生物硫醇熒光探針的構建及其性能研究
- (新版)工業(yè)機器人系統(tǒng)操作員(三級)職業(yè)鑒定理論考試題庫(含答案)
- 教育環(huán)境分析報告
- 人力資源服務公司章程
- (正式版)CB∕T 4552-2024 船舶行業(yè)企業(yè)安全生產文件編制和管理規(guī)定
- 病案管理質量控制指標檢查要點
- 2024年西藏中考物理模擬試題及參考答案
- 九型人格與領導力講義
- 人教版五年級上冊數(shù)學脫式計算練習200題及答案
- 卵巢黃體囊腫破裂教學查房
- 醫(yī)院定崗定編
- 2023年大學物理化學實驗報告化學電池溫度系數(shù)的測定
評論
0/150
提交評論