Xilinx Microblaze Bootloader


                                                                                                                               作者:Hello,Panda

        一般而言,Xilinx Microblaze會被用來在系統中做一些控制類和簡單接口的輔助性工作,比如運行IIC、SPI、UART之類的低速接口驅動,對FPGA邏輯功能模塊初始化配置及做些輔助計算等等。類程序的代碼量普遍不大,常常在十幾KB到幾時KB之間,因此對存儲的需求通常也不是太高,使用FPGA內部RAM資源便已經夠用。那么,當Microblaze需要運行文件系統、USBHCD、網絡協議棧甚至是操作系統時,代碼量可能會高達幾MB甚至是幾十MB的規模,此時程序就必須在外部存儲器運行了。本文以將外部QSPIFlash中存儲的鏡像加載到外部DDR為例,講一講Microblaze Bootloader的實現方法。

 

1.Microblaze Bootloader

 

          Microblaze的工作原理和所有的通用處理器一樣,這里不用贅述。我們一般情況下會將.elf代碼、FPGA bit文件和.imm RAM初始化文件合成一個download.bit文件燒寫到外部Flash中去。這里.elf的可執行代碼就變成了FPGA Block RAM的初始化值,復位釋放后即可執行。想必聊到這里大家就已經明白Microblaze Bootloader該如何實現了:在有限空間的BlockRAM里面執行一小段代碼,負責初始化必要的外設並將Flash里面的其他代碼搬運到外部存儲器中執行。這種原理和所有的通用處理器是類似的,這里的Block RAM就相當於是ARM之類通用處理器的片上RAM(OCM)資源,執行的這一小段代碼就相當於第一季BootLoader(FSBL)。

        以下所有的示例都是在Xilinx XC7K325 FPGA上進行驗證。開發環境為Vivado2015.2。硬件平台包含一片256Mbit(32M字節)的Spansion QSPI Flash,一片海力士16bit位寬的容量為512MB的DDR3。

2.搭建FPGA硬件

        要驗證這個系統,必須要有①Microblaze②DDR Mig③Cache RAM④中斷控制器⑤QSPI Flash IP核⑥總線相關的AXIInterconnect⑦串口輸出調試信息等協同工作才行(工程頂層結構見附件)。

        這里需要特別說明的是QSPI Flash的配置,如圖1所示.AXI接口的XIP模式和Performace模式采用AXI Full接口,可以獲得更高的帶寬和方便使用DMA,這里使用最基本的AXI Lite接口。

  

 

圖1 QSPI IP核參數配置

        需要注意的地方有兩點:

            ①   ext_spi_clk:在QSPI模式下這個時鍾的兩分頻就是給SPI Flash的訪問時鍾,因此這個時鍾要根據QSPI Flash的參數設置到合理值;

            ②   STARTUPE2原語:如果外部的Flash掛在FPGA的專用配置管腳上就要使能該原語,使用普通IO則不能使能。

3. 創建Microblaze Bootloader

 

         以下介紹如何在SDK中創建Microblaze Bootloader的方法。

         第一步:創建基於SPI Flash的serc SPI Bootloader,如下圖2所示。

 

圖2 創建serc spi bootloader

          第二步:修改xilisf庫,serial_flash_family=5選擇Spansion 系列QSPI Flash, serial_flash_interface=1選擇AXI 接口,如圖3所示。

 

圖3 修改xilisf庫參數

       第三步:修改存儲應用程序的Flash偏移量,如圖4所示。

 

圖4 修改存儲應用程序的Flash偏移量

        當前示例選用的FPGA bit文件約為10.5MB,因此偏移量選擇12MB,需要根據實際FPGA容量進行調整。

         第四步:確認serc spi bootloader鏈接腳本均在內部RAM空間,應用app工程的鏈接腳本都指向外部DDR。

         到此為止serc spi bootloader工程創建完畢。

4. 燒寫Flash

          燒寫Flash分成兩個部分,一個是bit文件,一個是應用程序的serc文件。

4.1 燒寫bit文件

          燒寫bit文件,第一步需要將fpga bit和serc spi bootloader的elf文件先合成,如圖5所示,點擊編程,默認合成的文件命名為download.bit。如果擅長使用命令行,也可以用updatemem命令手動生成。

 

圖5 編程生成bit文件

            第二步是燒寫生成的download.bit文件到flash,這里不再多說,注意flash的偏移地址為0x00即可。

4.2 燒寫應用程序serc

           實際上應用程序燒進flash的是serc文件,該文件可以燒寫到特殊的偏移位置。如圖6所示,如果需要用其它工具燒寫,也可使用命令mb-objcopy手動轉換.elf文件為serc文件。

圖6 燒寫應用程序到特定偏移地址

 

       需要特別注意的是,Bootloader會Check Flash的ID,因此需要確保將您的Flash芯片對應的ID添加到支持型號列表里(如果默認沒有)。

5. 總結

        Microblaze  Bootloader在Microblaze運行大中型軟件的系統中是必須的,希望本文能起到拋磚引玉的作用。如有任何問題或心得都可加入QQ討論群300148644交流。

轉載請注明作者和出處。

轉載:http://blog.csdn.net/haoxingheng/article/details/51295659


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM