最近由于項(xiàng)目需要,要將bit文件固化到zedboard的flash中,使程序上電自啟,斷電不丟失。
我們知道,一般板級(jí)調(diào)試的時(shí)候都是直接下載bit流到FPGA就行,固化到Flash的話,也是先生成.mcs文件,然后下載到Flash即可。
但是在經(jīng)過(guò)反復(fù)嘗試之后,發(fā)現(xiàn)對(duì)zynq系列好像行不通。
why?這得從zynq的啟動(dòng)流程說(shuō)起。
一、ZYNQ的啟動(dòng)流程
ZYNQ7000 SOC 芯片可以從 FLASH 啟動(dòng),也可以從 SD 卡里啟動(dòng), 本節(jié)介紹程序 FLASH 啟動(dòng)的方法。Zynq7000 SOC 芯片上電后,最先運(yùn)行的是ARM端系統(tǒng)(PS)。然后再通過(guò)ARM系統(tǒng)軟件部分加載FPGA的比特流文件.bit至FPGA(PL),配置FPGA PL端的邏輯功能。ZYNQ 系統(tǒng)的啟勱流程如下:
ZYNQ啟動(dòng)分為兩個(gè)階段
經(jīng)過(guò)以上兩個(gè)階段,PL端配置程序及應(yīng)用程序才開(kāi)始運(yùn)行。
1.1 第一階段 (BOOT ROM)
-
上電后,Zynq7000 SOC 會(huì)首先執(zhí)行片內(nèi) Boot ROM 代碼,Boot ROM 代碼讀取 Boot mode 寄存器來(lái)判斷是哪一種啟動(dòng)方式(SD card/QSPI Flash/JTAG)。
-
確定好哪種啟勱方式后,Boot ROM 從相應(yīng)的啟動(dòng)設(shè)備(SD Card/QSPI Flash)加載 First Stage Bootloader (FSBL) 到On Chip Memory(OCM) RAM,并且將執(zhí)行權(quán)交付給 FSBL。
1.2 第二階段 FSBL (First Stage Bootloader)
使用SDK 工具一步步生成 FSBL 代碼和可執(zhí)行文件,結(jié)合代碼可知 FSBL 主要做了如下工作:
-
初始化 CPU,初始化串口;
-
禁止 L1 Data Cache;
-
注冊(cè) ARM 中斷向量;
-
通過(guò) Boot mode 寄存器,判斷是哪種啟動(dòng)方式。
1.2.1 QSPI Flash 啟動(dòng)方式:
-
初始化 QSPI Flash 控刢器;
-
從 Flash 拷貝 system.bit 到 FPGA (如果 Flash 中存有 system.bit);
-
從 QSPI Flash 拷貝應(yīng)用程序的代碼到DDR3;
-
調(diào)轉(zhuǎn)到應(yīng)用程序執(zhí)行;
1.2.2 SD Card 啟動(dòng)方式:
-
初始化 SD 控刢器;
-
從 SD Card 拷貝 system.bit 到 FPGA (如果 BOOT.BIN 中存有 system.bit);
-
從 SD card 拷貝應(yīng)用程序的代碼到 DDR3;
-
跳轉(zhuǎn)到應(yīng)用程序執(zhí)行;
1.2.3 JTAG 啟動(dòng)方式,直接退出。
因此,對(duì)于Zynq系列的FPGA芯片來(lái)說(shuō),固化到Flash中的bit文件需要一個(gè)引導(dǎo)程序(也就是FSBL),才能被用來(lái)配置PL。實(shí)際上,F(xiàn)SBL會(huì)作為BootLoader和bit文件一起合成一個(gè).bin或者.mcs文件,然后下載到Flash中,過(guò)程如下:
二、生成BOOT.bin或者BOOT.mcs
2.1 VIVADO操作
你應(yīng)該已經(jīng)有了一個(gè)完整的工程,接下來(lái)你需要添加并配置PS端,生成新的bit文件:
(1)建立一個(gè)新的塊設(shè)計(jì)(Create Block Design)
(2)添加ZYNQ7 Processing System
(3)雙擊所添加的zynq7,配置peripheral I/O,我們只保留Quad SPI Flash
(4)在 Diagram 界面里點(diǎn)擊"Run Block Automation"完成對(duì) ZYNQ7 Processing System IP核的配置,生成外部 ZYNQ 系統(tǒng)的外部鏈接 IO 管腳。
(5)在 Source 窗口中選中 design_1.bd,右鍵并先后選擇Generate Output Projects 和 Create HDL Wrapper 選項(xiàng),生成頂層文件design_1_wrapper。
(6)在頂層文件中例化我們?cè)瓉?lái)的工程;(特別注意:要將原來(lái)工程的外部引腳也例化為現(xiàn)在頂層工程的I/O,并配置好約束)。
(7)重新生成bit流。
(8)Export to Hardware(包含bitstram 文件),Launch SDK,暫時(shí)告別VIVADO,進(jìn)入SDK進(jìn)行操作。
2.1 SDK操作
(1)進(jìn)入SDK 開(kāi)發(fā)環(huán)境后,點(diǎn)擊菜單 File -> New -> Application Project。
(2)點(diǎn)擊next,選擇Zynq FSBL
(3)接下去我們要把 FSBL 可執(zhí)行文件,F(xiàn)PGA PL的bit比特流文件和PS應(yīng)用程序結(jié)合成一個(gè) Bin 文件或Mcs文件。
選擇菜單 Xilinx Tools->Create Boot Image:
選擇output.bif的存放地址,選擇生成bin文件還是mcs文件,然后依次添加zynq_fsbl.elf(BootLoader)、bit文件、應(yīng)用程序elf文件(這個(gè)如果沒(méi)有可以省略),最終生成用于固化的bin或者mcs文件。
(4)將生成的bin或者mcs文件下載到Flash(經(jīng)過(guò)驗(yàn)證,這兩種類(lèi)型的文件都可以)
開(kāi)發(fā)板上電,選擇菜單 Xilinx Tools->Program Flash:
加載文件:
(5)點(diǎn)擊Program,出現(xiàn)如下信息,則成功。然后斷電,切換板子的啟動(dòng)方式,然后重新上電就會(huì)發(fā)現(xiàn)板子自動(dòng)配置完成的燈亮了,搞定!
注意:若出現(xiàn)以下信息,排除掉Jtag線纜的問(wèn)題之后,可能的原因是之前同時(shí)連接過(guò)多個(gè)開(kāi)發(fā)板,導(dǎo)致識(shí)別出來(lái)的芯片型號(hào)有不止一個(gè),然后它就檢測(cè)到JTAG斷開(kāi)(我就是這個(gè)問(wèn)題)。
解決方法很簡(jiǎn)單:關(guān)掉SDK,重新打開(kāi),重新Program Flash即可。
審核編輯 :李倩
-
FPGA
+關(guān)注
關(guān)注
1642文章
21918瀏覽量
611980 -
寄存器
+關(guān)注
關(guān)注
31文章
5401瀏覽量
122781
原文標(biāo)題:二、生成BOOT.bin或者BOOT.mcs
文章出處:【微信號(hào):zhuyandz,微信公眾號(hào):FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
詳解Zynq的兩種啟動(dòng)模式

【Z-turn Board試用體驗(yàn)】+板上資源Zynq7000啟動(dòng)流程的學(xué)習(xí)
【Z-turn Board試用體驗(yàn)】+Zynq7000啟動(dòng)流程介紹
Zynq在非JTAG模式下的啟動(dòng)配置流程
Zynq在非JTAG模式下的啟動(dòng)配置流程
ZYNQ嵌入式系統(tǒng)的開(kāi)發(fā)流程
ZYNQ學(xué)習(xí) —— 啟動(dòng)流程分析及各環(huán)節(jié)文件生成流程(ZedBo
啟動(dòng)流程分析及各環(huán)節(jié)文件生成流程(ZedBoard為例)
詳解zynq的啟動(dòng)步驟

ZYNQ開(kāi)發(fā)雙核運(yùn)行原理及過(guò)程
ZYNQ 的啟動(dòng)流程介紹
ZYNQ7020的PS端的基本開(kāi)發(fā)流程
Zynq在非JTAG模式下的啟動(dòng)配置流程
Zynq-7000 SoC的安全啟動(dòng)應(yīng)用說(shuō)明

評(píng)論