Zynq系列FPGA如何固化bit文件到QSPI_Flash

最近因爲項目須要,要將bit文件固化到zedboard的flash中,使程序上電自啓,斷電不丟失。app

咱們知道,通常板級調試的時候都是直接下載bit流到FPGA就行,固化到Flash的話,也是先生成.mcs文件,而後下載到Flash便可。工具

可是在通過反覆嘗試以後,發現對zynq系列好像行不通。spa

why?這得從zynq的啓動流程提及。.net

1、ZYNQ的啓動流程

ZYNQ7000 SOC 芯片能夠從 FLASH 啓動,也能夠從 SD 卡里啓動, 本節介紹程序 FLASH 啓動的方法。Zynq7000 SOC 芯片上電後,最早運行的是ARM端系統(PS)。而後再經過ARM系統軟件部分加載FPGA的比特流文件.bit至FPGA(PL),配置FPGA PL端的邏輯功能。ZYNQ 系統的啓勱流程以下:設計

 ZYNQ啓動分爲兩個階段

  • 第一階段是 BOOT ROM(ZYNQ廠家固化代碼)
  • 第二階段是 FSBL (First Stage Bootloader)SDK工具來製做。

通過以上兩個階段,PL端配置程序及應用程序纔開始運行。3d

1.1 第一階段 (BOOT ROM)

  • 上電後,Zynq7000 SOC 會首先執行片內 Boot ROM 代碼,Boot ROM 代碼讀取 Boot mode 寄存器來判斷是哪種啓動方式(SD card/QSPI Flash/JTAG)。
  • 肯定好哪一種啓勱方式後,Boot ROM 從相應的啓動設備(SD Card/QSPI Flash)加載 First Stage Bootloader (FSBL) 到On Chip Memory(OCM) RAM,而且將執行權交付給 FSBL。

1.2 第二階段 FSBL (First Stage Bootloader)

使用SDK 工具一步步生成 FSBL 代碼和可執行文件,結合代碼可知 FSBL 主要作了以下工做:調試

 

  • 初始化 CPU,初始化串口;
  • Processor System (PS) 一些控制器的初始化,如 MIO, PLL, CLK and DDR;
  • 禁止 L1 Data Cache;
  • 註冊 ARM 中斷向量;
  • 經過 Boot mode 寄存器,判斷是哪一種啓動方式。

1.2.1 QSPI Flash 啓動方式:

  • 初始化 QSPI Flash 控刢器;
  • 從 Flash 拷貝 system.bit 到 FPGA (若是 Flash 中存有 system.bit);
  • 從 QSPI Flash 拷貝應用程序的代碼到DDR3;
  • 調轉到應用程序執行;

1.2.2 SD Card 啓動方式:

  1. 初始化 SD 控刢器;
  2. 從 SD Card 拷貝 system.bit 到 FPGA (若是 BOOT.BIN 中存有 system.bit);
  3. 從 SD card 拷貝應用程序的代碼到 DDR3;
  4. 跳轉到應用程序執行;

1.2.3 JTAG 啓動方式,直接退出。

 

所以,對於Zynq系列的FPGA芯片來講,固化到Flash中的bit文件須要一個引導程序(也就是FSBL),才能被用來配置PL。實際上,FSBL會做爲BootLoader和bit文件一塊兒合成一個.bin或者.mcs文件,而後下載到Flash中,過程以下:blog

 

2、生成BOOT.bin或者BOOT.mcs

 2.1 VIVADO操做

  你應該已經有了一個完整的工程,接下來你須要添加並配置PS端,生成新的bit文件:ip

     (1)創建一個新的塊設計(Create Block Design)開發

    

    (2)添加ZYNQ7 Processing System

    

    (3)雙擊所添加的zynq7,配置peripheral I/O,咱們只保留Quad SPI Flash

    

    (4)在 Diagram 界面裏點擊"Run Block Automation"完成對 ZYNQ7 Processing System IP核的配置,生成外部 ZYNQ 系統的外部連接 IO 管腳。

    

    (5)在 Source 窗口中選中 design_1.bd,右鍵並前後選擇Generate Output Projects 和 Create HDL Wrapper 選項,生成頂層文件design_1_wrapper。

    (6)在頂層文件中例化咱們原來的工程;(特別注意:要將原來工程的外部引腳也例化爲如今頂層工程的I/O,並配置好約束)。

    (7)從新生成bit流。

    (8)Export to Hardware(包含bitstram 文件),Launch SDK,暫時告別VIVADO,進入SDK進行操做。

 2.1 SDK操做

     (1)進入SDK 開發環境後,點擊菜單 File -> New -> Application Project。

    

    (2)點擊next,選擇Zynq FSBL

    

    (3)接下去咱們要把 FSBL 可執行文件,FPGA PL的bit比特流文件和PS應用程序結合成一個 Bin 文件或Mcs文件。

    選擇菜單 Xilinx Tools->Create Boot Image:

    

    選擇output.bif的存放地址,選擇生成bin文件仍是mcs文件,而後依次添加zynq_fsbl.elf(BootLoader)、bit文件、應用程序elf文件(這個若是沒有能夠省略),最終生成用於固化的bin或者mcs文件。

    

    (4)將生成的bin或者mcs文件下載到Flash(通過驗證,這兩種類型的文件均可以

    開發板上電,選擇菜單 Xilinx Tools->Program Flash:

    

    加載文件:

    

    (5)點擊Program,出現以下信息,則成功。而後斷電,切換板子的啓動方式,而後從新上電就會發現板子自動配置完成的燈亮了,搞定!

     

 

  注意:若出現如下信息,排除掉Jtag線纜的問題以後,可能的緣由是以前同時鏈接過多個開發板,致使識別出來的芯片型號有不止一個,而後它就檢測到JTAG斷開(我就是這個問題)。

    

   解決方法很簡單:關掉SDK,從新打開,從新Program Flash便可。

 

參考鏈接:1.https://blog.csdn.net/taowei1314520/article/details/78595482

     2.https://blog.csdn.net/fengyuwuzu0519/article/details/80411894

相關文章
相關標籤/搜索