本原創教程由芯驛電子科技(上海)有限公司(ALINX)創做,版權歸本公司全部,如需轉載,需受權並註明出處。node
AXU2CGA/AXU2CGB/AXU3EG/AXU4EV-E/AXU4EV-P/AXU5EV-E/AXU5EV-P /AXU9EG/AXU15EG編程
此文基於第十八章內容進行軟件開發安全
【ZYNQ Ultrascale+ MPSOC FPGA教程】第十八章Hello World(上)架構
ALINX:【ZYNQ Ultrascale+ MPSOC FPGA教程】第十八章Hello World(上)app
軟件工程師工做內容dom
Vitis工程目錄爲「ps_hello/vitis」svg
如下爲軟件工程師負責內容。工具
1.Vitis調試;post
2.建立Application工程;學習
1)新建一個文件夾,將vivado導出的xx.xsa文件拷貝進來;
2)Vitis是獨立的軟件,能夠雙擊Vitis軟件打開;
也能夠經過在Vivado軟件中選擇ToolsLaunch Vitis打開Vitis軟件
選擇以前新建的文件夾,點擊」Launch」
3)啓動Vitis以後界面以下,點擊「Create Application Project」,這個選項會生成APP工程以及Platfrom工程,Platform工程相似於之前版本的hardware platform,包含了硬件支持的相關文件以及BSP。
4)第一頁爲介紹頁,直接跳過,點擊Next
5)選擇「Create a new platform from hardware(XSA)」,選擇「Browse」
選擇以前生成的xsa,點擊打開
6)最下面的Generate boot components選項,若是勾選上,軟件會自動生成fsbl工程,咱們通常選擇默認勾選上。
7)填入APP工程名稱,在方框處點擊能夠選擇對應的處理器,咱們這裏保持默認
8)在這個界面能夠修改Domain名稱,選擇操做系統,ARM架構等,這裏保持默認,操做系統選擇standalone,也就是裸機。
9)選擇」Hellow World」模板,點擊「Finish」完成
10)完成以後能夠看到生成了兩個工程,一個是硬件平臺工程,即以前所說的Platfrom工程,一個是APP工程
11)展開Platform工程後能夠看到裏面包含有BSP工程,以及zynq_fsbl工程(此工程即選擇Generate boot components以後的結果),雙擊platform.spr便可看到Platform對應生成的BSP工程,能夠在這裏對BSP進行配置。軟件開發人員比較清楚,BSP也就是Board Support Package板級支持包的意思,裏面包含了開發所須要的驅動文件,用於應用程序開發。能夠看到Platform下有多個BSP,這是跟以往的SDK軟件不同的,其中zynqmp_fsbl便是fsbl的BSP,domain_psu_cortexa53_0便是APP工程的BSP。也能夠在Platform裏添加BSP,在之後的例程中再講。
12)點開BSP,便可看到工程帶有的外設驅動,其中Documentation是xilinx提供的驅動的說明文檔,Import Examples是xilinx提供的example工程,加快學習。
13)選中APP工程,右鍵Build Project,或者點擊菜單欄的「錘子」按鍵,進行工程編譯
14)能夠在Console看到編譯過程
編譯結束,生成elf文件
15)鏈接JTAG線到開發板、UART的USB線到PC
16)使用PuTTY軟件作爲串口終端調試工具,PuTTY是一個免安裝的小軟件
17)選擇Serial,Serial line填寫COM3,Speed填寫115200,COM3串口號根據設備管理器裏顯示的填寫,點擊「Open」
18)在上電以前最好將開發板的啓動模式設置到JTAG模式,拔到」ON」的位置
19)給開發板上電,準備運行程序,開發板出廠時帶有程序,這裏能夠把運行模式選擇JTAG模式,而後從新上電。選擇「hello」,右鍵,能夠看到不少選項,本實驗要用到這裏的「Run as」,就是把程序運行起來,「Run as」裏又有很對選項,選擇第一個「Launch on Hardware(Single Application Debug)」,使用系統調試,直接運行程序。
20)這個時候觀察串口軟件,便可以看到輸出」Hello World」
21)爲了保證系統的可靠調試,最好是右鍵「Run As -> Run Configuration...」
22)咱們能夠看一下里面的配置,其中Reset entire system是默認選中的,這是跟之前的SDK軟件不一樣的。若是系統中還有PL設計,還必須選擇「Program FPGA」。
23)除了「Run As」,還能夠「Debug As」,這樣能夠設置斷點,單步運行
24)進入Debug模式
25)和其餘C語言開發IDE同樣,能夠逐步運行、設置斷點等
26)右上角能夠切換IDE模式
普通的FPGA通常是能夠從flash啓動,或者被動加載,ZYNQ的啓動是由ARM主導的,包括FPGA程序的加載,ZYNQ MPSoC啓動通常爲三個步驟,在UG1085中也有介紹:
Pre-configuration satge :預加載階段由PMU控制,執行PMU ROM中的代碼設置系統。PMU處理全部的復位和喚醒過程。
Configuration stage : 接下來進入最重要的一步,當BootRom(CSU ROM代碼的一部分)搬運FSBL到OCM後,處理器開始執行FSBL代碼,FSBL主要有如下幾個做用:
Post-configuration stage : FSBL開始執行後,CSU ROM代碼進入post-configuration階段,負責起系統干預響應,CSU爲驗證文件正確性、經過PCAP加載PL、存儲管理安全密鑰、解密等提供持續的硬件支持。
3.1 生成FSBL
FSBL是一個二級引導程序,完成MIO的分配、時鐘、PLL、DDR控制器初始化、SD、QSPI控制器初始化,經過啓動模式查找bitstream配置FPGA,而後搜索用戶程序加載到DDR,最後交接給應用程序執行。
1) 因爲在新建時選擇了Generate boot components選項,因此Platform已經導入了fsbl的工程,並生成了相應的elf文件。
2) 修改調試宏定義FSBL_DEBUG_INFO_VAL,能夠在啓動輸出FSBL的一些狀態信息,有利於調試,可是會致使啓動時間變長。保存文件。能夠看一下fsbl裏包含了不少外設的文件,包括psu_init.c,qspi,sd等,你們能夠再仔細讀讀代碼。固然這個fsbl模板也是能夠修改的,至於怎麼修改根據本身的需求來作。
3) 從新Build Project
4) 接下來咱們能夠點擊APP工程的system,右鍵選擇Build project
5) 這個時候就會多出一個Debug文件夾,生成了對應的BOOT.BIN
6) 還有一種方法就是,點擊APP工程的system右鍵選擇Creat Boot Image,彈出的窗口中能夠看到生成的BIF文件路徑,BIF文件是生成BOOT文件的配置文件,還有生成的BOOT.bin文件路徑,BOOT.bin文件是咱們須要的啓動文件,能夠放到SD卡啓動,也能夠燒寫到QSPI Flash。
7) 在Boot image partitions列表中有要合成的文件,第一個文件必定是bootloader文件,就是上面生成的fsbl.elf文件,第二個文件是FPGA配置文件bitstream,在本實驗中因爲沒有FPGA的bitstream,不須要添加,第三個是應用程序,在本實驗中爲hello.elf,因爲沒有bitstream,在本實驗中只添加bootloader和應用程序。點擊Create Image生成。
8) 在生成的目錄下能夠找到BOOT.bin文件
3.2 SD卡啓動測試
1) 格式化SD卡,只能格式化爲FAT32格式,其餘格式沒法啓動
2) 放入BOOT.bin文件,放在根目錄
3) SD卡插入開發板的SD卡插槽
4) 啓動模式調整爲SD卡啓動
5) 打開串口軟件,上電啓動,便可看到打印信息,紅色框爲FSBL啓動信息,黃色箭頭部分爲執行的應用程序helloworld
3.3 QSPI啓動測試
1) 在Vitis菜單Xilinx -> Program Flash
2) Hardware Platform選擇最新的,Image FIle文件選擇要燒寫的BOOT.bin,FSBL file選擇fsbl.elf。選擇Verify after flash,在燒寫完成後校驗flash。
3) 點擊Program等待燒寫完成
4) 設置啓動模式爲QSPI,再次啓動,能夠在串口軟件裏看到與SD一樣的啓動效果。
3.4 Vivado下燒寫QSPI
1) 在HARDWARE MANGER下選擇器件,右鍵Add Configuration Memory Device
2) 選擇嘗試Micron,類型選擇qspi,寬度選擇x4-single,Density選擇256,這時候出現wt25qu256,選擇紅框型號。
3) 右鍵選擇編程文件
4) 選擇要燒寫的文件和fsbl文件,就能夠燒寫了,若是燒寫時不是JTAG啓動模式,軟件會給出一個警告,因此建議燒寫QSPI的時候設置到JTAG啓動模式
3.5 使用批處理文件快速燒寫QSPI
1) 新建一個program_qspi.txt文本文件,擴展名改成bat,內容填寫以下,
E:\XilinxVitis\Vitis\2020.1\bin\program_flash 爲咱們工具路徑,按照安裝路徑適當修改,-f 爲要燒寫的文件,-fsbl爲要燒寫使用的fsbl文件,-verify爲校驗選項。
callE:\XilinxVitis\Vitis\2020.1\bin\program_flash -f BOOT.bin -offset 0 -flash_type qspi-x4-single -fsbl fsbl.elf -verifypause |
2) 把要燒錄的BOOT.bin、fsbl、bat文件放在一塊兒
3) 插上JTAG線後上電,雙擊bat文件便可燒寫flash。
4.1 僅有PL端邏輯的固化
有不少人會問,若是隻有PL端的邏輯,不須要PS端該怎麼固化程序呢?不帶ARM的FPGA固化是沒問題的,可是對於ZYNQ來講,必需要有PS端的配合才能固化程序。那麼對於前面的」PL的「Hello World」LED實驗」該怎麼固化程序呢?
1) 根據本章的PS端添加ZYNQ核並配置,最簡單的方法就是在本章工程的基礎上添加LED實驗的verilog源文件,並進行例化,組成一個系統,並須要生成bitstream。
2) 生成bitstream以後,導出硬件,選擇include bitstream
3) 在生成BOOT.BIN時,仍是須要一個app工程hello,僅僅是爲了生成BOOT.BIN,默認狀況下在system右鍵Build Project,便可生成包含bitstream的BOOT.BIN。
打開Create Boot Image界面能夠看到,Boot Image Partitions的文件順序是fsbl、bitstream、app,注意順序不要顛倒,利用這樣生成的BOOT.BIN就能夠按照前面的啓動方式測試啓動了
在course_s2文件夾,咱們提供了一個名爲led_qspi_sd的工程,你們能夠參考。
在頻繁的修改源文件,並進行編譯的時候,最好選擇APP工程進行Build Project,這種狀況下只會生成elf文件。
若是想生成BOOT.BIN文件,能夠選擇system進行編譯,這種狀況既會生成elf也會生成BOOT.BIN,筆者最開始用的時候就吃過虧,每次編譯都是選擇system,結果每次都要等待生成BOOT.BIN,浪費時間,你們能夠注意一下。
本章從FPGA工程師和軟件工程師二者角度出發,介紹了ZYNQ開發的經典流程,FPGA工程師的主要工做是搭建好硬件平臺,提供硬件描述文件hdf給軟件工程師,軟件工程師在此基礎上開發應用程序。本章是一個簡單的例子介紹了FPGA和軟件工程師協同工做,後續還會牽涉到PS與PL之間的聯合調試,較爲複雜,也是ZYNQ開發的核心部分。
同時也介紹了FSBL,啓動文件的製做,SD卡啓動方式,QSPI下載及啓動方式,Vivado下載BOOT.BIN方式,本章沒有FPGA加載文件,後面的應用中會再介紹添加FPGA加載文件製做BOOT.BIN。
後續的工程都會以本章節的配置爲準,後面再也不介紹ZYNQ的基本配置。
千里之行,始於足下,相信通過本章的學習,你們對ZYNQ開發有了基本概念,高樓穩不穩,要看地基打的牢不牢,雖然本章較爲簡單,但也有不少知識點待諸位慢慢消化。加油!!!