




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第9章 ZedBoard入門前面大家已經對ZYNQ架構以及相應的開發(fā)工具有一定的認識,接下來我們將帶領大家來一起體驗ZYNQ,體驗軟硬件協(xié)同設計的魅力。由于時間的關系,下面的一些實驗(本章及后續(xù)章節(jié)的實驗)可能有不完善的地方,歡迎讀者向我們反饋。9.1 跑馬燈本實驗將指導大家使用Vivado 集成設計環(huán)境創(chuàng)建本書的第一個Zynq設計。這里,我們使用跑馬燈這個入門實驗來向大家介紹Vivado IDE的IP Integrator環(huán)境,并在Zedboard上實現(xiàn)這個簡單的Zynq嵌入式系統(tǒng)。之后,我們將會使用SDK創(chuàng)建一個簡單的軟件應用程序,并下載到Zynq的ARM處理器中,對在PL端實現(xiàn)的硬件進行
2、控制。本實驗分為三個小節(jié)來向大家進行介紹:· 第一節(jié)我們將使用Vivado IDE創(chuàng)建一個工程。· 在第一節(jié)的基礎上,第二節(jié)我們將繼續(xù)構建一個Zynq嵌入式處理系統(tǒng),并將完成后的硬件導入到SDK中進行軟件設計。· 最后一節(jié)我們將使用SDK編寫ARM測試應用程序, 并下載到ZedBoard上進行調試。實驗環(huán)境:Windows 7 x64操作系統(tǒng), Vivado2013.4,SDK 2013.49.1.1 Vivado工程創(chuàng)建1) 雙擊桌面Vivado快捷方式,或者瀏覽Start > All Programes > Xilinx Design Tools
3、> Vivado 2013.4 > Vivado 2013.4來啟動Vivado.2) 當Vivado啟動后,可以看到圖9-1的Getting Started頁面。圖9- 1 Vivado 開始界面3) 選擇Create New Project選項,圖9-2所示的New Project 向導將會打開,點擊Next。圖9- 2 New Project 對話框4) 在Project Name對話框中,輸入first_zynq_design作為 Project name, 選擇C:/XUP/Zed作為Project location,確保Create project subdirecto
4、ry被勾選上,如圖9-3,點擊Next。圖9- 3 Project Name對話框5) 在Project Type對話框中,選擇RTL Project,確保Do not specify sources at this time 選項沒有被勾選,如圖9-4,點擊Next。圖9- 4 Project Type對話框6) 在Add Source對話框中, 選擇Verilog作為目標語言,如果你對VHDL熟悉的話, 你也可以選擇VHDL,如果這里你忘記了選擇,在工程創(chuàng)建完成后,也可以在工程設置中選擇你熟悉的HDL語言。如果你已經有了源文件,在這里就可以選擇Add file 或者Add director
5、y進行添加,由于我們沒有任何的源文件, 所以這里我們直接點擊Next即可,如圖9-5。圖9- 5 添加源文件7) 在Add Existing IP對話框中,點擊Next。8) 在Add Constraints對話框中,點擊Next。9) 在Default Part對話框中,在Specify框中選擇Boards選項,在下面的Board列表中選擇ZedBoard Zynq Evaluation and Development Kit,點擊Next,如圖9-6。圖9- 6 芯片選擇10) 在New Project Summary 對話框中,點解Finish完成工程創(chuàng)建,至此,我們已經使用Vivado
6、創(chuàng)建了一個Zynq設計的工程框架,圖9-7為Vivado的工程界面,在第四章我們已經對該界面進行過介紹,如果還不熟悉的讀者再回到前面復習一下。下面我將使用Flow Navigator的 IP Integrator功能完成第二節(jié)的嵌入式系統(tǒng)設計。圖9- 7 Vivado工程界面9.1.2 在Vivado中創(chuàng)建Zynq嵌入式系統(tǒng) 這一節(jié)我們將創(chuàng)建一個簡單的Zynq嵌入式系統(tǒng),該系統(tǒng)使用Zynq PL部分實現(xiàn)一個通用I/O控制器 (GPIO),控制器同ZedBoard上的8個LED相連接,并且通過AXI總線連接到PS端,這樣我們就可以通過將要在第三小節(jié)中實現(xiàn)的ARM應用程序來對LED進行控制。系統(tǒng)結
7、構圖如圖9-8所示。圖9- 8 系統(tǒng)結構圖1) 創(chuàng)建一個Block Design。在Flow Navigator窗口中展開IP Intergrator,選擇Create Block Design,如圖9-9。圖9- 9 創(chuàng)建Block Design2) 在Block Design對話框中輸入zynq_system_1作為Design name,如圖9-10,點擊OK繼續(xù)。這時,在workplace區(qū)域將會打開IP Integrator的圖表畫布,我們將在這個空白區(qū)域中像畫畫一樣的構建自己的系統(tǒng)。這里操作的最小單位是IP核,Xilinx官方還有一些第三方機構給我們提供了很多的免費IP核,你可以直
8、接在這里添加使用,當然,用戶也可以自定義自己的IP核,然后添加到工程中使用,或者提供給其他用戶使用,在13章第一節(jié)我們將會向大家介紹如何制作自己的IP核。圖9- 10 輸入設計名稱3) 在空白畫布中,右鍵空白區(qū)域,并選擇Add IP選項,或者點擊畫布最上方的綠色提示信息中的Add IP鏈接,如圖9-11。4) 這時一個IP核列表將會彈出,在Search一欄輸入Zynq,在搜索結果列表中雙擊ZYNQ7 Processing System添加PS端的IP核到畫布中,如圖9-12所示。由于我們使用的是ZedBoard,這一步完成后Vivado會對Zynq處理器進行相應的配置。同時在IDE的下面,選擇
9、TCL Console你將看到如下的信息,其實我們在Vivado圖形化界面所做的所有操作都將轉化為TCL命令來執(zhí)行。create_bd_cell -type ip -vlnv :ip:processing_system7:5.3 processing_system7_0圖9- 11 添加IP圖9- 12 添加PS IP核在空白畫布中, 可以看到ZYNQ7 Processing System被以圖形化的方式添加進來,當前的IP模塊是一個初始化界面,如果要使這個模塊能在ZedBoard工作起來,首先對其進行相應的配置。5) 雙擊ZYNQ7 Processing System模塊,打開其配置界面,
10、如圖9-13所示,首先先來熟悉一下這個界面。· Documentation:提供該IP模塊相關的文檔幫助。· Page Navigator: 這里提供了該IP模塊的詳細配置列表。Zynq Block Design頁面顯示了ZYNQ7 Processing System的總體概貌,我們可以通過點擊綠色部分對相應的模塊進行查看或者配置;PS-PL Configuration頁面提供了PS到PL的相關接口配置信息以及PS部分一些配置信息;Peripheral I/O Pins頁面主要是對一些通過外設接口的配置;MIO Configuration頁面主要是對MIO以及EMIO的分配
11、控制。Clock Configuration頁面主要是對PS端時鐘資源的配置及管理。DDR Configuration頁面主要是對DDR控制器一些參數(shù)的配置。Interrupts頁面主要是對中斷進行配置管理。· Presets:這里主要提供了一些開發(fā)板的預定義配置功能,Vivado將會按照已經設置好的配置信息來對該IP核進行配置,而不需要我手動的來配。點擊該按鈕,我們可以看到Vivado現(xiàn)在已經支持的開發(fā)板有Microzed、ZC702、ZC706、ZedBoard以及一個Default配置選項。· Import XPS Settings:這個功能主要是將XPS中的ZYNQ
12、7 Processing System的配置信息導入進來,其實就是導入一個xml文件。由于我們使用的是ZedBoard開發(fā)板,且只用到Vivado提供的默認配置,所以這里選擇Presets > Zedboard,點擊OK來完成對ZYNQ7 Processing System的配置。下一步我們將要連接PS端的DDR與FIXED_IO接口到頂層接口。6) 左建選擇ZYNQ7 Processing System模塊上的DDR接口,當光標變成筆裝的時候右鍵并選擇Make External,如圖9-14,對于FIXED_IO使用同樣的方法。 圖9- 13 ZYNQ7 Processing Syst
13、em界面注:5、6兩步更加簡單的方法是點擊Diagram頂端的Run Block Automation設計協(xié)助鏈接來完成對ZYNQ7 Processing System IP核的配置并將DDR與FIXED_IO Make External,如圖9-15所示。當選擇/processing_system7_0的時候,相應的IP核圖形界面會變成高亮顯示,表示其已被選中,并將會被自動配置。在彈出的Run Block Automation對話框中確保Apply Board Preset被勾選,否則其只會將DDR與FIXED_IO 連接到頂層端口,而不會對ZYNQ7進行默認配置。如果你在手動完成了ZYNQ
14、7的配置又要使用Run Block Automation這個功能,那么一定要確保Apply Board Preset選項沒有被選中, 否則它將會使用默認配置來覆蓋你原來的配置。圖9- 14 Make External Interface 操作圖9- 15 Run Block Automation-ZYNQ當完成了ZYNQ7 Processing System IP核的添加并對其進行配置后,你的Block Design應該如圖9-16所示。下面將添加AXI GPIO IPcore到系統(tǒng)中,該IP核被放在PL端,通過AXI總線同ARM相連接,并通過GPIO接口控制ZedBoard上的8個LED小燈
15、。我們將使用IP Integrator 的設計協(xié)助工具來將AXI GPIO連接到PS端。圖9- 16 ZYNQ7 Processing System 外部連接7) 右鍵Diagram窗口的空白區(qū)域,在彈出的菜單列表中選擇Add IP選項,在搜索欄中輸入GPIO,并在搜索結果列表中雙擊AXI GPIO將該IP添加到系統(tǒng)中。8) 在Diagram窗口頂部點擊Run Connection Automation鏈接,并選擇/axi_gpio_0/S_AXI選項,這時可以看到GPIO IPcore的S_AXI接口被高亮顯示,如圖9-17,點擊OK完成。圖9- 17 Run Connection Auto
16、mation-GPIO這時可以看到有兩個新的IP模塊自動被添加了進來:· Processor System Reset: 這個IP提供一個定制化的Reset功能,包括所有外設,互聯(lián)以及處理器生。· AXI Interconnect:提供AXI 總線互聯(lián)控制,它將PL端外設同PS端連接起來。9) 同樣點擊Run Connection Automation鏈接,并選擇/axi_gpio_0/GPIO,Run Connection Automation對話框將被打開,在Select Board Interface的下拉菜單中選擇leds_8bit選項,點擊OK,如圖9-18所示。
17、圖9- 18 Run Connection Automation-GPIO注:當使用如上的方式來對GPIO Make External時,Vivado會自動在系統(tǒng)中添加約束文件,將GPIO連接到ZedBoard的LED引腳上。10) 當完成上面一步,在Diagram中應該看到如圖9-19所示的畫面。圖9- 19 Module Connect System11) IP Integrator將會自動為掛在AXI總線上的邏輯設備分配地址空間, 這樣ARM才可以尋址到PL端的邏輯設備。選擇Address Editor選項,并展開Data,如圖9-20??梢钥吹絀P Integrator已經為AXI G
18、PIO 分配了64K的地址空間,基地址為0x41200000。由于ARM是統(tǒng)一編址的,所以在編寫ARM程序的時候就可以像讀寫內存一樣直接對該地址進行讀寫,從而實現(xiàn)對該IP核的控制。圖9- 20 地址編輯器12) 保存工程:Ctrl + S13) 在Diagram窗口的左面工具欄中選擇Validate Design 按鈕檢測設計的有效性。這個操作將會調用一次DRC檢測,如果檢測正確,Validation successful對話框將會彈出, 否則根據錯誤信息進行改正。點擊OK完成設計有效性檢測。至此,一個簡單的IP子系統(tǒng)已經設計完成,下面我們將設計完成Block Design生成可以綜合的HDL
19、設計文件。14) 在Source窗口中,選擇Sources選項,右鍵Block設計zynq_system_1,選擇Generate Output Products,如圖9-21。圖9- 21生成HDL文件15) 在彈出的對話框中直接點擊Generate。這一步將會生成Diagram Block Design的HDL源文件以及相應端口的約束文件。16) 繼續(xù)右鍵zynq_system_1,選擇Create HDL Wrapper,保持默認選項,點擊OK關閉Create HDL Wrapper對話框。這里,Vivado會為IP子系統(tǒng)生成一個頂層文件,這樣我們就可以對該系統(tǒng)進行綜合、實現(xiàn)并生成bit
20、流了。17) 在Flow Navigator中,展開Program and Debug,點擊Generate Bitstream,這時No Implementation Result Available對話框被打開, 點擊YES,如圖9-22。18) 當bit流生成完成,Bitstream Generation successful completed對話框被打開, 選擇Open Implementation Design對話框,點擊OK完成,如圖9-23所示。當bit流生成完成后,在Vivado中最后的工作就是要將設計導入到SDK中,然后對ARM進行編程,控制ZedBoard上的LED燈,實
21、現(xiàn)我們這次實驗的目的。圖9- 22 生成bit流圖9- 23 打開實現(xiàn)設計19) 在IP Integrator下點擊Open Block Design,選擇zynq_system_1.bd,重新打開前面創(chuàng)建的Block Design,如圖9-24。圖9- 24打開Block Design20) 選擇File > Export > Export Hardware for SDK.,Export Hardware for SDK 對話框將被打開,確保Include bitstream 和 Launch SDK兩個選項被選中,如圖9-25,點擊OK。注意:這里要導入的Source是Blo
22、ck Design,所以必須要先將zynq_system_1.bd打開,否則會出現(xiàn)錯誤;要想將bitstream導入到SDK, 必須先打開implementation design,否則這里的Include Bitstream將會是disable的。21) 到此,在Vivado下的工作就算完成了,如果沒有出現(xiàn)錯誤,說明我們的硬件工程總體上是沒有問題的。下面一節(jié)我們將在SDK中創(chuàng)建一個簡單的應用程序,來完成軟硬件協(xié)同設計中的軟件部分。圖9- 25 將硬件設計導入到 SDK9.1.3 SDK應用程序編寫這一節(jié)我們將講解如何使用SDK來創(chuàng)建一個簡單的軟件應用程序,并使用該程序來對ZedBoard上的
23、LED進行控制。從前面可以看到,系統(tǒng)已經為AXI GPIO分配了一個地址空間,ARM處理器通過訪問該地址空間中的寄存器來對GPIO進行控制寄存器,從而達到控制ZedBoard上的LED。如果你是接著9.1.2來做這一節(jié)實驗的話,當你完成9.1.2最后一步的時候,SDK就會自動的啟動了,否則我們可以通過瀏覽Start > All Programs > Xilinx Design Tools > Vivado 2013.4 > SDK > Xilinx SDK 2013.4來啟動SDK,并將Workspace定位到: C:XUPZedfirst_zynq_design
24、first_zynq_design.sdkSDKSDK_Export當SDK打開后我們就可以創(chuàng)建自己的應用程序了。1) 選擇File > New > Application Project。2) 在Application Project對話框中輸入Marquee作為Project Name,其他的保持默認設置,如圖9-26,點擊Next。圖9- 26 新建SDK工程3) 在Templates對話框中,選擇Empty Application,這里我們創(chuàng)建一個空工程,如圖9-27所示,點擊Finish完成工程創(chuàng)建。圖9- 27 創(chuàng)建一個空白模版4) 當工程編譯完成,SDK會自動打開Sy
25、stem.mss文件,該文件存在于板級支持包文件夾Marquee_bsp下。該文件提供了系統(tǒng)中所有的外設詳細信息。Documentation和Example提供了該外設很詳細的設計參考, 包括一些重要的數(shù)據結構以及API,或一些可用的參考例程,如圖9-28。圖9- 28 System.mss文件5) 選擇File > New > Source File,在彈出的對話框中點擊Browse按鈕,選擇Marquee/src作為Source Folder,在Source File輸入框中輸入Marquee.c,點擊Finish完成Source File的添加,如圖9-29。圖9- 29 新
26、建Source File6) 下面來編寫Marquee.c,具體代碼如下所示。#include "xparameters.h" /* Peripheral parameters */#include "xgpio.h" /* GPIO data struct and APIs */#include "xil_printf.h" #include "xil_cache.h"#define GPIO_BITWIDTH8/* This is the width of the GPIO */#define GPIO_DEV
27、ICE_ID XPAR_AXI_GPIO_0_DEVICE_ID /device id#define LED_DELAY 10000000 /* times delay*/#define LED_MAX_BLINK0x1/* Number of times the LED Blinks */#define LED_CHANNEL 1 /* GPIO channel*/#define printf xil_printf/* A smaller footprint printf */XGpio Gpio; /* The Instance of the GPIO Driver */XGpio Gpi
28、oOutput; /* The driver instance for GPIO Device configured as O/P */int GpioMarquee (u16 DeviceId, u32 GpioWidth)volatile int Delay;u32 LedBit;u32 LedLoop;int Status;/* * Initialize the GPIO driver so that it's ready to use, * specify the device ID that is generated in xparameters.h */ Status =
29、XGpio_Initialize(&GpioOutput, DeviceId); if (Status != XST_SUCCESS) return XST_FAILURE; /Set the direction for all signals to be outputs XGpio_SetDataDirection(&GpioOutput, LED_CHANNEL, 0x0); / Set the GPIO outputs to low XGpio_DiscreteWrite(&GpioOutput, LED_CHANNEL, 0x0); for (LedBit =
30、0x0; LedBit < GpioWidth; LedBit+) for (LedLoop = 0; LedLoop < LED_MAX_BLINK; LedLoop+) /Set the GPIO Output to HighXGpio_DiscreteWrite(&GpioOutput, LED_CHANNEL,1 << LedBit);/Wait a small amount of time so the LED is visible for (Delay = 0; Delay < LED_DELAY; Delay+);/Clear the GPI
31、O OutputXGpio_DiscreteClear(&GpioOutput, LED_CHANNEL,1 << LedBit);/ Wait a small amount of time so the LED is visiblefor (Delay = 0; Delay < LED_DELAY; Delay+); return XST_SUCCESS;int main(void)/Application start/* loop forever*/while(1)u32 status;status = GpioMarquee (GPIO_DEVICE_ID,GP
32、IO_BITWIDTH);if (status = 0) printf("SUCESS!.rn");else printf("FAILED.rn");return XST_SUCCESS;7) 保存工程,等待編譯結束。該程序以main函數(shù)開始,之后進入一個無限循環(huán),不斷的調用GpioMarquee函數(shù)。Xgpio_Initialize函數(shù)在gpio.h中被定義,它的功能是對XGpio句柄進行初始化,XPAR_AXI_GPIO_0_DEVICE_ID在xparameters.h文件中被定義,該文件是Vivado IDE自動生成并導入到SDK中的,它包含了所
33、有的系統(tǒng)硬件設備參數(shù)。XGpio_SetDataDirection(&Gpio, LED_CHANNEL, 0xFF)函數(shù)設置GPIO指定通道的I/O方向。XGpio_DiscreteWrite(&GpioOutput, LED_CHANNEL, 0x0)函數(shù)將數(shù)據寫入到設置好的通道中。8) 將ZedBoard同PC機相連接,插上串口線與Jtag線,如果是第一次連接請等待一段時間,操作系統(tǒng)會自動安裝所需的驅動。單擊Xilinx Tools > Program FPGA將bit流寫入FGPA中。右鍵工程目錄中的Marquee目錄,選擇Run As > Run Conf
34、igurations,設置STDIO Connection為相應的串口,如圖9-30。圖9- 30 設置串口,運行程序9) 選擇Run As > Launch on Hardware將程序下載到ZedBoard上運行,稍等片刻我們可以看到Console窗口中不斷的打印SUCCESS!此時ZedBoard上的跑馬燈已經運行了起來。圖9- 31 運行程序, 查看結果10) 如果到了這一步, 恭喜你,你已經掌握了ZYNQ軟硬件協(xié)同設計的基本流程。這對于一個入門者來說是至關重要的, 就像我們剛學C語言時候運行出Hello World程序一樣,是多么的讓人振奮。ZYNQ軟硬件協(xié)同設計的基本流程如下
35、所示。圖9- 32 ZYNQ設計流程9.2 ZYNQ嵌入式系統(tǒng)調試方法在ZYNQ的軟硬件協(xié)同設計中肯定會遇到各種問題,這時需要我們有個很好的方法來對系統(tǒng)進行Debug。在第四章中已經介紹了Vivado環(huán)境下的一些常用Debug核以及Vivado自帶的邏輯分析器,現(xiàn)在我們將用一個簡單的事例來說明如何在Vivado下對系統(tǒng)進行調試。接下來,我們將分兩個小節(jié)來對對這一問題進行概述。· 第一節(jié)講述如何在Vivado下建立硬件調試環(huán)境· 第二節(jié)將會介紹SDK使用,并使用SDK+Vivado進行系統(tǒng)調試9.2.1 Vivado硬件調試1) 這里,繼續(xù)9.1節(jié)所構建的工程,使用插入Net
36、list的方法對系統(tǒng)進行Debug。將C:XUPZed下的first_zynq_design文件夾復制到當前目錄下并將其重命名為zynq_debug。如圖9-33所示。圖9- 33 新建工程2) 進入zynq_debug目錄,雙擊first_zynq_design Vivado工程文件。打開first_zynq_design工程主界面。3) 點擊Open Block Design,選擇zynq_system_1.bd,打開Block Design,如圖9-34。圖9- 34 打開Block Design4) 選擇axi_gpio_0_GPIO接口連接,右鍵并選擇Make Debug,當綜合完成
37、后,系統(tǒng)會自動將被標記的連接線的Netlist插入,如圖9-35。5) 此時我們可以看到該接口連接被打上了debug標志。如圖9-36。6) 用同樣的方法將M00_AXI接口與S00_AXI接口之間的連接線也進行Make Debug,如圖9-37。7) 保存工程。8) 點擊Run Synthesis重新對工程進行綜合。9) 當綜合結束后會彈出Synthesis successfully completed對話框,選擇Open Synthesized Design選項查看綜合結果,點擊OK,如圖9-38。圖9- 35 Make Debug圖9- 36 GPIO Debug圖9- 37 AXI 總
38、線Debug圖9- 38 Open Synthesized Design10) 如果Debug窗口沒有打開,點擊IDE工具欄中的Layout selector,并在下拉菜單中選擇Debug選項來打開Debug窗口,如圖3-39。圖9- 39 打開Debug窗口11) 在IDE下方可以看到打開后的Debug窗口,該窗口列出了在第四步到第六步中標記的Debug Net。在Netlist窗口中我們也能看到相應的Net也被標記了,這里我們還可以對被標記的Net取消Debug,也可以將新的Net插入Debug窗口,不過這里我們什么都不做,如圖9-40、9-41。圖9- 40 取消Debug圖9- 41
39、Netlist Make Debug12) 在Debug窗口中的Net現(xiàn)在的狀態(tài)仍然是unassigned, 所以現(xiàn)在需要添加一個Debug IP 核來將這些Net連接上去。在Debug窗口的工具欄上, 選擇Set Up Debug,打開Set Up Debug向導,如圖9-42。圖9- 42 Set Up Debug13) 在Set Up Debug對話框中點擊Next。14) 在Specify Net to Debug對話框中,選擇Clock Domain undefined的3個選項并右鍵,選擇Select Clock Domain選項,如圖9-43。圖9- 43 關聯(lián)Clock15)
40、在彈出的Select Clock Domain對話框中選擇zynq_system_1_i/processing_system7_0_ FCLK_CLK0,如圖9-44。圖9- 44 選擇Clock16) 在Trigger and Capture Modes對話框中, 選擇Enable advanced trigger mode 和Enable basic Capture mode選項。點擊Next。圖9- 45 選擇模式17) 在Setup Debug Summary對話框中, 確保所有的信息如圖9-46所示。點擊Finish。18) 保存工程,此時在Source窗口中的Constraints
41、文件夾下會自動生成Debug相關的約束文件zynq_system_1_wrapper.xdc。19) 在Flow Navigator窗口中點擊Generate Bitstream,點擊Yes當No Implemetation Results Available對話框彈出時,等待Generate Bitstream完成。20) 當Generate Bitstream completed 對話框彈出時,保持默認選項,點擊OK打開Implementation Design,并在之后彈出的對話框中都點擊Yes。21) 按9.1節(jié)的方法將硬件設計導入到SDK中。不要關閉Vivado,我們將在后面繼續(xù)使用
42、。圖9- 46 Summary9.2.2 使用SDK進行ZYNQ debug 。在SDK中對ZYNQ進行Debug,其實是對ZYNQ的ARM處理器進行Debug,在ZYNQ嵌入式系統(tǒng)中,一般PL端的邏輯設備都被看成是ARM處理器的外設,兩者之間通過AXI總線接口進行通信。這樣, 我們就可以通過軟件的方式,來實時對硬件流進行調試。在SDK中已經集成了GDB工具。我們可以很方便的對程序設置斷點, 查看當前內存空間,ARM寄存器以及對ARM進行單步調試。這里,我們將使用9.2.1節(jié)導入的SDK工程為基礎。1) 將PC機同ZedBoard連接起來。2) 選擇Xilinx Tools > Prog
43、ram FPGA將bit文件下載到ZedBoard。3) 在工程管理面板右鍵Marquee工程,依次選擇Debug As > Launch On Hardware,點擊Yes關閉Confirm Perspective Switch對話框,打開SDK Debug管理界面如圖9-46所示。4) 初始化狀態(tài),程序指針指向GpioMarquee函數(shù), 點擊工具欄圖標或者按進入F5鍵進入到GpioMarquee函數(shù),現(xiàn)在程序指針指向了XGpio_Initialize函數(shù)。5) 點擊圖標或者按下F6鍵執(zhí)行下一條命令。6) 選擇第一個delay for循環(huán),并在這一行前面的藍色豎條上雙擊或者按下Ctr
44、l+Shift+B設置斷點。如圖9-48所示。7) 單擊Resume按鈕或者按下F8使程序運行到斷點處,此時我們的ZedBoard上的第一個小燈應該亮了起來。繼續(xù)點擊Resume按鈕,可以依次點亮板子上的8個小燈。圖9- 47 SDK Debug界面圖9- 48 設置斷點8) 在Varibles窗口中可以查看當前變量的值。如圖9-49。圖9- 49 查看變量9) 在Registers窗口中可以查看ARM處理器內部寄存器的值。如圖9-50所示。圖9- 50 Register10) 在Memory窗口可以查看內存空間的情況。如圖9-51。圖9- 51 Memory現(xiàn)在我們已經知道了如何在SDK中進
45、行一般的調試,而且能夠得到預期的效果,但是事情往往不是這樣的簡單,如果在第7步的時候我們沒有在ZedBoard上看到小燈被點亮,那該怎么辦呢?決解這一問題的最好辦法就是查看AXI總線是否有數(shù)據在流動, 所以前面所做的Vivado Debug工程就用到了。請不要關閉SDK,且斷點依然設置在相同的位置。11) 回到Vivado IDE 界面。在Program and Debug選項下點擊Open Hardware Manager。如圖9-52。圖9- 52 Open Hardware Manager12) 如果你的板子以此方式進行連接過, 請選擇open recent target并選擇相應的ta
46、rget即可,否則點擊open a new hardware target,并一直Next,最后Finish即可,如圖9-53。圖9- 53 open target13) 由于已經在SDK中下載了FPGA bit流,所以在Hardware 面板中一個ILA debug核被系統(tǒng)檢測到了。如圖9-54。圖9- 54 ILA core檢測注意:雖然可以在Vivado中對FPGA下載Bitstream,但請不要這樣做, 經過我們的多次測試, 這樣做會發(fā)生錯誤,Xilixn官方的給出的決解方案是由于使用的PS端的時鐘來接入ILA,所以要先在SDK中將bit流進行下載。14) 現(xiàn)在可以看到Integrat
47、ed Logic Analyzer的窗口被打開,如圖9-55。15) 點擊Run Trigger Immediate 按鈕 來觸發(fā)并捕捉Debug probe的數(shù)據。16) 在Waveform窗口中我們可以看到捕捉到的數(shù)據如圖9-56所示。這里我們注意到GPIO的值為0x01,說明第一個小燈是被點亮的,同時AXI總線的WDATA的值同GPIO的也是0x01,所以可以看出從ARM處理器寫到AXI GPIO的數(shù)據被正確接收到了,我們還可以看一下其他信號線的值,做一些分析。17) 轉到SDK界面中, 點擊Resume按鈕,繼續(xù)執(zhí)行程序,此時我們可以看到led2被點亮。圖9- 55Vivado集成邏輯
48、分析器窗口18) 轉到VIvado界面,點擊Run Trigger Immediate按鈕,查看狀態(tài)改變后GPIO的信號值,如圖9-57。我們發(fā)現(xiàn)0x01變成了0x02。19) 重復前面兩步,查看相應狀態(tài)改變是否會引起相應的波形的變化,并分析其原因。20) 至此, 在Vivado下對ZYNQ嵌入式系統(tǒng)的調試就講到這里,我們所講的只是其中一個方法, Vivado提供多種方法對ZYNQ進行調試,在第四章中也進行過簡單的介紹,詳細的方法請參考UG936以及UG908。圖9- 56 Waveform圖9- 57 狀態(tài)改變后的波形圖9.3 Booting Linux on ZedBoard在第一章中我們
49、帶領大家體驗了運行在ZedBoard上的Linaro Ubuntu,在第7章中我們介紹了FSBL引導程序,并描述了ZYNQ下的linux啟動過程。大家也許會有很多疑問,比如FSBL是怎么生成的,如何來制作BOOT.BIN啟動鏡像等等,這里將為大家解答這些問題。通過這一節(jié)的學習,希望大家能夠對ZYNQ下的linux啟動過程有更深入的體會。在ZedBoard中啟動Linux有兩種方式,一種是將ZedBoard作為主設備來引導Linux,另一種則是將其作為從設備。· Master Method:這種方式是將啟動鏡像存儲在非易失性存儲器中,如QSPI、NAND、NOR flash、以及SD卡
50、等。ARM核從這些存儲器中將啟動鏡像加載到PS端,并執(zhí)行boot程序引導linux啟動。· Slave Method:這種方式是將PC機作為主機,通過Jtag或者網絡將啟動鏡像加載到內存。下面我們分別對從SD卡啟動和從QSPI啟動linux進行介紹。首先,得準備以下幾個文件,你可以直接從本書網盤地址 上第九章相應章節(jié)下載使用。· fsbl_zynq.elf: FSBL鏡像文件,用于創(chuàng)建BOOT.BIN。· zynq_system_wrapper.bit:硬件工程文件, 用于創(chuàng)建BOOT.BIN· u-boot.elf: linux BootLoader,
51、用于創(chuàng)建BOOT.BIN,將在13章進行介紹· uImage: Linux 內核鏡像,通過U-boot加載到內存,將在13章進行介紹· uramdisk.image.gz: linux文件系統(tǒng),通過U-Boot加載到內存,將在13章進行介紹· devicetree.dtb:linux 系統(tǒng)設備樹文件,通過U-boot加載到內存,將在13章介紹9.3.1 創(chuàng)建FSBL.elf1) 瀏覽Start > All Programs > Xilinx Design Tools > Vivado 2013.4 > SDK >Xilinx SDK
52、2013.4啟動SDK,設置Workspace為9.1節(jié)生成的SDK_Export目錄,如圖9-58所示。圖9- 58 導入SDK工程2) 在SDK中,依次選擇File > new > Application Project,在彈出的Application Project對話框中輸入fsbl_zynq作為Project Name,其他選項保持默認設置,點擊Next。3) 在Templated對話框中選擇Zynq FSBL作為模版,點擊Finish完成工程創(chuàng)建,如圖9-58。SDK在工程瀏覽器中創(chuàng)建了fsbl_zynq應用工程以及fsbl_zynq_bsp 板級支持包工程。SDK將會
53、自動構建工程,并生成fsbl_zynq.elf文件。圖9- 58 選擇fsbl模版9.3.2 從SD卡啟動linux1) 將需要的3個文件拷貝到同一個文件夾中,在上面的鏈接中我們也給出了這3個文件,如圖9-59所示。圖9- 59 準備需要的文件2) 在SDK的菜單欄中選擇Tools > Create Zynq Boot Image。在彈出來的Create Zynq Boot Image對話框中將Bit file path設置為第一步3個文件所在的文件夾路徑,并在Boot image partition面板中點擊Add按鈕相繼添加這3個文件,這里一定要注意,我們添加文件的順序必須按照fsbl_zynq.elf > zynq_system_1_wrapper.bi > u-boot.elf的順序,否則系統(tǒng)將不能夠正常啟動,添加的過程中保持默認設置即可,同時Output path也保持默認設置即可,點擊Create Image按鈕生成.bin文件,如圖9-60所示。圖9- 60 建立SD卡啟動鏡像文件BOOT.bin3) 這時
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 教學公開課管理規(guī)定
- 網絡商城運營合作協(xié)議
- 某中學學生課外活動組織流程
- 最難忘的一位鄰居人物描寫(9篇)
- 2025年保育員(二級)兒童教育研究考試試卷
- 我的老師與我的成長故事寫人作文7篇范文
- 2025年統(tǒng)計學專業(yè)期末考試:抽樣調查方法在歷史學研究中的試題
- 2025年安徽省公務員錄用考試人民警察職位體能測評試卷
- 小狐貍和小鹿童話作文(13篇)
- 2025年法語TCF考試試卷語法知識深度解析與實戰(zhàn)案例分析試題
- 醫(yī)療設備儀器的清潔消毒
- (2024年)《甲亢病人的護理》ppt課件完整版
- 基于Matlab的巴特沃斯濾波器設計
- 兒童發(fā)展心理學全套課件
- 侵占公司資金還款協(xié)議
- 實驗室搬遷方案
- 2013年10月自考英語二試題及答案和評分標準完整版
- 電大國開??疲ǜ酱鸢福掇k公室管理》形考在線(形考任務五)試題
- 1、山東省專業(yè)技術職稱評審表(A3正反面手填)
- 聞診問診切診
- 2023年安徽省合肥市廬陽區(qū)小升初數(shù)學真題及答案
評論
0/150
提交評論