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