




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第9章 ZedBoard入門前面大家已經(jīng)對(duì)ZYNQ架構(gòu)以及相應(yīng)的開發(fā)工具有一定的認(rèn)識(shí),接下來我們將帶領(lǐng)大家來一起體驗(yàn)ZYNQ,體驗(yàn)軟硬件協(xié)同設(shè)計(jì)的魅力。由于時(shí)間的關(guān)系,下面的一些實(shí)驗(yàn)(本章及后續(xù)章節(jié)的實(shí)驗(yàn))可能有不完善的地方,歡迎讀者向我們反饋。9.1 跑馬燈本實(shí)驗(yàn)將指導(dǎo)大家使用Vivado 集成設(shè)計(jì)環(huán)境創(chuàng)建本書的第一個(gè)Zynq設(shè)計(jì)。這里,我們使用跑馬燈這個(gè)入門實(shí)驗(yàn)來向大家介紹Vivado IDE的IP Integrator環(huán)境,并在Zedboard上實(shí)現(xiàn)這個(gè)簡單的Zynq嵌入式系統(tǒng)。之后,我們將會(huì)使用SDK創(chuàng)建一個(gè)簡單的軟件應(yīng)用程序,并下載到Zynq的ARM處理器中,對(duì)在PL端實(shí)現(xiàn)的硬件進(jìn)行
2、控制。本實(shí)驗(yàn)分為三個(gè)小節(jié)來向大家進(jìn)行介紹:· 第一節(jié)我們將使用Vivado IDE創(chuàng)建一個(gè)工程。· 在第一節(jié)的基礎(chǔ)上,第二節(jié)我們將繼續(xù)構(gòu)建一個(gè)Zynq嵌入式處理系統(tǒng),并將完成后的硬件導(dǎo)入到SDK中進(jìn)行軟件設(shè)計(jì)。· 最后一節(jié)我們將使用SDK編寫ARM測試應(yīng)用程序, 并下載到ZedBoard上進(jìn)行調(diào)試。實(shí)驗(yàn)環(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來啟動(dòng)Vivado.2) 當(dāng)Vivado啟動(dòng)后,可以看到圖9-1的Getting Started頁面。圖9- 1 Vivado 開始界面3) 選擇Create New Project選項(xiàng),圖9-2所示的New Project 向?qū)?huì)打開,點(diǎn)擊Next。圖9- 2 New Project 對(duì)話框4) 在Project Name對(duì)話框中,輸入first_zynq_design作為 Project name, 選擇C:/XUP/Zed作為Project location,確保Create project subdirecto
4、ry被勾選上,如圖9-3,點(diǎn)擊Next。圖9- 3 Project Name對(duì)話框5) 在Project Type對(duì)話框中,選擇RTL Project,確保Do not specify sources at this time 選項(xiàng)沒有被勾選,如圖9-4,點(diǎn)擊Next。圖9- 4 Project Type對(duì)話框6) 在Add Source對(duì)話框中, 選擇Verilog作為目標(biāo)語言,如果你對(duì)VHDL熟悉的話, 你也可以選擇VHDL,如果這里你忘記了選擇,在工程創(chuàng)建完成后,也可以在工程設(shè)置中選擇你熟悉的HDL語言。如果你已經(jīng)有了源文件,在這里就可以選擇Add file 或者Add director
5、y進(jìn)行添加,由于我們沒有任何的源文件, 所以這里我們直接點(diǎn)擊Next即可,如圖9-5。圖9- 5 添加源文件7) 在Add Existing IP對(duì)話框中,點(diǎn)擊Next。8) 在Add Constraints對(duì)話框中,點(diǎn)擊Next。9) 在Default Part對(duì)話框中,在Specify框中選擇Boards選項(xiàng),在下面的Board列表中選擇ZedBoard Zynq Evaluation and Development Kit,點(diǎn)擊Next,如圖9-6。圖9- 6 芯片選擇10) 在New Project Summary 對(duì)話框中,點(diǎn)解Finish完成工程創(chuàng)建,至此,我們已經(jīng)使用Vivado
6、創(chuàng)建了一個(gè)Zynq設(shè)計(jì)的工程框架,圖9-7為Vivado的工程界面,在第四章我們已經(jīng)對(duì)該界面進(jìn)行過介紹,如果還不熟悉的讀者再回到前面復(fù)習(xí)一下。下面我將使用Flow Navigator的 IP Integrator功能完成第二節(jié)的嵌入式系統(tǒng)設(shè)計(jì)。圖9- 7 Vivado工程界面9.1.2 在Vivado中創(chuàng)建Zynq嵌入式系統(tǒng) 這一節(jié)我們將創(chuàng)建一個(gè)簡單的Zynq嵌入式系統(tǒng),該系統(tǒng)使用Zynq PL部分實(shí)現(xiàn)一個(gè)通用I/O控制器 (GPIO),控制器同ZedBoard上的8個(gè)LED相連接,并且通過AXI總線連接到PS端,這樣我們就可以通過將要在第三小節(jié)中實(shí)現(xiàn)的ARM應(yīng)用程序來對(duì)LED進(jìn)行控制。系統(tǒng)結(jié)
7、構(gòu)圖如圖9-8所示。圖9- 8 系統(tǒng)結(jié)構(gòu)圖1) 創(chuàng)建一個(gè)Block Design。在Flow Navigator窗口中展開IP Intergrator,選擇Create Block Design,如圖9-9。圖9- 9 創(chuàng)建Block Design2) 在Block Design對(duì)話框中輸入zynq_system_1作為Design name,如圖9-10,點(diǎn)擊OK繼續(xù)。這時(shí),在workplace區(qū)域?qū)?huì)打開IP Integrator的圖表畫布,我們將在這個(gè)空白區(qū)域中像畫畫一樣的構(gòu)建自己的系統(tǒng)。這里操作的最小單位是IP核,Xilinx官方還有一些第三方機(jī)構(gòu)給我們提供了很多的免費(fèi)IP核,你可以直
8、接在這里添加使用,當(dāng)然,用戶也可以自定義自己的IP核,然后添加到工程中使用,或者提供給其他用戶使用,在13章第一節(jié)我們將會(huì)向大家介紹如何制作自己的IP核。圖9- 10 輸入設(shè)計(jì)名稱3) 在空白畫布中,右鍵空白區(qū)域,并選擇Add IP選項(xiàng),或者點(diǎn)擊畫布最上方的綠色提示信息中的Add IP鏈接,如圖9-11。4) 這時(shí)一個(gè)IP核列表將會(huì)彈出,在Search一欄輸入Zynq,在搜索結(jié)果列表中雙擊ZYNQ7 Processing System添加PS端的IP核到畫布中,如圖9-12所示。由于我們使用的是ZedBoard,這一步完成后Vivado會(huì)對(duì)Zynq處理器進(jìn)行相應(yīng)的配置。同時(shí)在IDE的下面,選擇
9、TCL Console你將看到如下的信息,其實(shí)我們?cè)赩ivado圖形化界面所做的所有操作都將轉(zhuǎn)化為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被以圖形化的方式添加進(jìn)來,當(dāng)前的IP模塊是一個(gè)初始化界面,如果要使這個(gè)模塊能在ZedBoard工作起來,首先對(duì)其進(jìn)行相應(yīng)的配置。5) 雙擊ZYNQ7 Processing System模塊,打開其配置界面,
10、如圖9-13所示,首先先來熟悉一下這個(gè)界面。· Documentation:提供該IP模塊相關(guān)的文檔幫助。· Page Navigator: 這里提供了該IP模塊的詳細(xì)配置列表。Zynq Block Design頁面顯示了ZYNQ7 Processing System的總體概貌,我們可以通過點(diǎn)擊綠色部分對(duì)相應(yīng)的模塊進(jìn)行查看或者配置;PS-PL Configuration頁面提供了PS到PL的相關(guān)接口配置信息以及PS部分一些配置信息;Peripheral I/O Pins頁面主要是對(duì)一些通過外設(shè)接口的配置;MIO Configuration頁面主要是對(duì)MIO以及EMIO的分配
11、控制。Clock Configuration頁面主要是對(duì)PS端時(shí)鐘資源的配置及管理。DDR Configuration頁面主要是對(duì)DDR控制器一些參數(shù)的配置。Interrupts頁面主要是對(duì)中斷進(jìn)行配置管理。· Presets:這里主要提供了一些開發(fā)板的預(yù)定義配置功能,Vivado將會(huì)按照已經(jīng)設(shè)置好的配置信息來對(duì)該IP核進(jìn)行配置,而不需要我手動(dòng)的來配。點(diǎn)擊該按鈕,我們可以看到Vivado現(xiàn)在已經(jīng)支持的開發(fā)板有Microzed、ZC702、ZC706、ZedBoard以及一個(gè)Default配置選項(xiàng)。· Import XPS Settings:這個(gè)功能主要是將XPS中的ZYNQ
12、7 Processing System的配置信息導(dǎo)入進(jìn)來,其實(shí)就是導(dǎo)入一個(gè)xml文件。由于我們使用的是ZedBoard開發(fā)板,且只用到Vivado提供的默認(rèn)配置,所以這里選擇Presets > Zedboard,點(diǎn)擊OK來完成對(duì)ZYNQ7 Processing System的配置。下一步我們將要連接PS端的DDR與FIXED_IO接口到頂層接口。6) 左建選擇ZYNQ7 Processing System模塊上的DDR接口,當(dāng)光標(biāo)變成筆裝的時(shí)候右鍵并選擇Make External,如圖9-14,對(duì)于FIXED_IO使用同樣的方法。 圖9- 13 ZYNQ7 Processing Syst
13、em界面注:5、6兩步更加簡單的方法是點(diǎn)擊Diagram頂端的Run Block Automation設(shè)計(jì)協(xié)助鏈接來完成對(duì)ZYNQ7 Processing System IP核的配置并將DDR與FIXED_IO Make External,如圖9-15所示。當(dāng)選擇/processing_system7_0的時(shí)候,相應(yīng)的IP核圖形界面會(huì)變成高亮顯示,表示其已被選中,并將會(huì)被自動(dòng)配置。在彈出的Run Block Automation對(duì)話框中確保Apply Board Preset被勾選,否則其只會(huì)將DDR與FIXED_IO 連接到頂層端口,而不會(huì)對(duì)ZYNQ7進(jìn)行默認(rèn)配置。如果你在手動(dòng)完成了ZYNQ
14、7的配置又要使用Run Block Automation這個(gè)功能,那么一定要確保Apply Board Preset選項(xiàng)沒有被選中, 否則它將會(huì)使用默認(rèn)配置來覆蓋你原來的配置。圖9- 14 Make External Interface 操作圖9- 15 Run Block Automation-ZYNQ當(dāng)完成了ZYNQ7 Processing System IP核的添加并對(duì)其進(jìn)行配置后,你的Block Design應(yīng)該如圖9-16所示。下面將添加AXI GPIO IPcore到系統(tǒng)中,該IP核被放在PL端,通過AXI總線同ARM相連接,并通過GPIO接口控制ZedBoard上的8個(gè)LED小燈
15、。我們將使用IP Integrator 的設(shè)計(jì)協(xié)助工具來將AXI GPIO連接到PS端。圖9- 16 ZYNQ7 Processing System 外部連接7) 右鍵Diagram窗口的空白區(qū)域,在彈出的菜單列表中選擇Add IP選項(xiàng),在搜索欄中輸入GPIO,并在搜索結(jié)果列表中雙擊AXI GPIO將該IP添加到系統(tǒng)中。8) 在Diagram窗口頂部點(diǎn)擊Run Connection Automation鏈接,并選擇/axi_gpio_0/S_AXI選項(xiàng),這時(shí)可以看到GPIO IPcore的S_AXI接口被高亮顯示,如圖9-17,點(diǎn)擊OK完成。圖9- 17 Run Connection Auto
16、mation-GPIO這時(shí)可以看到有兩個(gè)新的IP模塊自動(dòng)被添加了進(jìn)來:· Processor System Reset: 這個(gè)IP提供一個(gè)定制化的Reset功能,包括所有外設(shè),互聯(lián)以及處理器生。· AXI Interconnect:提供AXI 總線互聯(lián)控制,它將PL端外設(shè)同PS端連接起來。9) 同樣點(diǎn)擊Run Connection Automation鏈接,并選擇/axi_gpio_0/GPIO,Run Connection Automation對(duì)話框?qū)⒈淮蜷_,在Select Board Interface的下拉菜單中選擇leds_8bit選項(xiàng),點(diǎn)擊OK,如圖9-18所示。
17、圖9- 18 Run Connection Automation-GPIO注:當(dāng)使用如上的方式來對(duì)GPIO Make External時(shí),Vivado會(huì)自動(dòng)在系統(tǒng)中添加約束文件,將GPIO連接到ZedBoard的LED引腳上。10) 當(dāng)完成上面一步,在Diagram中應(yīng)該看到如圖9-19所示的畫面。圖9- 19 Module Connect System11) IP Integrator將會(huì)自動(dòng)為掛在AXI總線上的邏輯設(shè)備分配地址空間, 這樣ARM才可以尋址到PL端的邏輯設(shè)備。選擇Address Editor選項(xiàng),并展開Data,如圖9-20??梢钥吹絀P Integrator已經(jīng)為AXI G
18、PIO 分配了64K的地址空間,基地址為0x41200000。由于ARM是統(tǒng)一編址的,所以在編寫ARM程序的時(shí)候就可以像讀寫內(nèi)存一樣直接對(duì)該地址進(jìn)行讀寫,從而實(shí)現(xiàn)對(duì)該IP核的控制。圖9- 20 地址編輯器12) 保存工程:Ctrl + S13) 在Diagram窗口的左面工具欄中選擇Validate Design 按鈕檢測設(shè)計(jì)的有效性。這個(gè)操作將會(huì)調(diào)用一次DRC檢測,如果檢測正確,Validation successful對(duì)話框?qū)?huì)彈出, 否則根據(jù)錯(cuò)誤信息進(jìn)行改正。點(diǎn)擊OK完成設(shè)計(jì)有效性檢測。至此,一個(gè)簡單的IP子系統(tǒng)已經(jīng)設(shè)計(jì)完成,下面我們將設(shè)計(jì)完成Block Design生成可以綜合的HDL
19、設(shè)計(jì)文件。14) 在Source窗口中,選擇Sources選項(xiàng),右鍵Block設(shè)計(jì)zynq_system_1,選擇Generate Output Products,如圖9-21。圖9- 21生成HDL文件15) 在彈出的對(duì)話框中直接點(diǎn)擊Generate。這一步將會(huì)生成Diagram Block Design的HDL源文件以及相應(yīng)端口的約束文件。16) 繼續(xù)右鍵zynq_system_1,選擇Create HDL Wrapper,保持默認(rèn)選項(xiàng),點(diǎn)擊OK關(guān)閉Create HDL Wrapper對(duì)話框。這里,Vivado會(huì)為IP子系統(tǒng)生成一個(gè)頂層文件,這樣我們就可以對(duì)該系統(tǒng)進(jìn)行綜合、實(shí)現(xiàn)并生成bit
20、流了。17) 在Flow Navigator中,展開Program and Debug,點(diǎn)擊Generate Bitstream,這時(shí)No Implementation Result Available對(duì)話框被打開, 點(diǎn)擊YES,如圖9-22。18) 當(dāng)bit流生成完成,Bitstream Generation successful completed對(duì)話框被打開, 選擇Open Implementation Design對(duì)話框,點(diǎn)擊OK完成,如圖9-23所示。當(dāng)bit流生成完成后,在Vivado中最后的工作就是要將設(shè)計(jì)導(dǎo)入到SDK中,然后對(duì)ARM進(jìn)行編程,控制ZedBoard上的LED燈,實(shí)
21、現(xiàn)我們這次實(shí)驗(yàn)的目的。圖9- 22 生成bit流圖9- 23 打開實(shí)現(xiàn)設(shè)計(jì)19) 在IP Integrator下點(diǎn)擊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 對(duì)話框?qū)⒈淮蜷_,確保Include bitstream 和 Launch SDK兩個(gè)選項(xiàng)被選中,如圖9-25,點(diǎn)擊OK。注意:這里要導(dǎo)入的Source是Blo
22、ck Design,所以必須要先將zynq_system_1.bd打開,否則會(huì)出現(xiàn)錯(cuò)誤;要想將bitstream導(dǎo)入到SDK, 必須先打開implementation design,否則這里的Include Bitstream將會(huì)是disable的。21) 到此,在Vivado下的工作就算完成了,如果沒有出現(xiàn)錯(cuò)誤,說明我們的硬件工程總體上是沒有問題的。下面一節(jié)我們將在SDK中創(chuàng)建一個(gè)簡單的應(yīng)用程序,來完成軟硬件協(xié)同設(shè)計(jì)中的軟件部分。圖9- 25 將硬件設(shè)計(jì)導(dǎo)入到 SDK9.1.3 SDK應(yīng)用程序編寫這一節(jié)我們將講解如何使用SDK來創(chuàng)建一個(gè)簡單的軟件應(yīng)用程序,并使用該程序來對(duì)ZedBoard上的
23、LED進(jìn)行控制。從前面可以看到,系統(tǒng)已經(jīng)為AXI GPIO分配了一個(gè)地址空間,ARM處理器通過訪問該地址空間中的寄存器來對(duì)GPIO進(jìn)行控制寄存器,從而達(dá)到控制ZedBoard上的LED。如果你是接著9.1.2來做這一節(jié)實(shí)驗(yàn)的話,當(dāng)你完成9.1.2最后一步的時(shí)候,SDK就會(huì)自動(dòng)的啟動(dòng)了,否則我們可以通過瀏覽Start > All Programs > Xilinx Design Tools > Vivado 2013.4 > SDK > Xilinx SDK 2013.4來啟動(dòng)SDK,并將Workspace定位到: C:XUPZedfirst_zynq_design
24、first_zynq_design.sdkSDKSDK_Export當(dāng)SDK打開后我們就可以創(chuàng)建自己的應(yīng)用程序了。1) 選擇File > New > Application Project。2) 在Application Project對(duì)話框中輸入Marquee作為Project Name,其他的保持默認(rèn)設(shè)置,如圖9-26,點(diǎn)擊Next。圖9- 26 新建SDK工程3) 在Templates對(duì)話框中,選擇Empty Application,這里我們創(chuàng)建一個(gè)空工程,如圖9-27所示,點(diǎn)擊Finish完成工程創(chuàng)建。圖9- 27 創(chuàng)建一個(gè)空白模版4) 當(dāng)工程編譯完成,SDK會(huì)自動(dòng)打開Sy
25、stem.mss文件,該文件存在于板級(jí)支持包文件夾Marquee_bsp下。該文件提供了系統(tǒng)中所有的外設(shè)詳細(xì)信息。Documentation和Example提供了該外設(shè)很詳細(xì)的設(shè)計(jì)參考, 包括一些重要的數(shù)據(jù)結(jié)構(gòu)以及API,或一些可用的參考例程,如圖9-28。圖9- 28 System.mss文件5) 選擇File > New > Source File,在彈出的對(duì)話框中點(diǎn)擊Browse按鈕,選擇Marquee/src作為Source Folder,在Source File輸入框中輸入Marquee.c,點(diǎn)擊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) 保存工程,等待編譯結(jié)束。該程序以main函數(shù)開始,之后進(jìn)入一個(gè)無限循環(huán),不斷的調(diào)用GpioMarquee函數(shù)。Xgpio_Initialize函數(shù)在gpio.h中被定義,它的功能是對(duì)XGpio句柄進(jìn)行初始化,XPAR_AXI_GPIO_0_DEVICE_ID在xparameters.h文件中被定義,該文件是Vivado IDE自動(dòng)生成并導(dǎo)入到SDK中的,它包含了所
33、有的系統(tǒng)硬件設(shè)備參數(shù)。XGpio_SetDataDirection(&Gpio, LED_CHANNEL, 0xFF)函數(shù)設(shè)置GPIO指定通道的I/O方向。XGpio_DiscreteWrite(&GpioOutput, LED_CHANNEL, 0x0)函數(shù)將數(shù)據(jù)寫入到設(shè)置好的通道中。8) 將ZedBoard同PC機(jī)相連接,插上串口線與Jtag線,如果是第一次連接請(qǐng)等待一段時(shí)間,操作系統(tǒng)會(huì)自動(dòng)安裝所需的驅(qū)動(dòng)。單擊Xilinx Tools > Program FPGA將bit流寫入FGPA中。右鍵工程目錄中的Marquee目錄,選擇Run As > Run Conf
34、igurations,設(shè)置STDIO Connection為相應(yīng)的串口,如圖9-30。圖9- 30 設(shè)置串口,運(yùn)行程序9) 選擇Run As > Launch on Hardware將程序下載到ZedBoard上運(yùn)行,稍等片刻我們可以看到Console窗口中不斷的打印SUCCESS!此時(shí)ZedBoard上的跑馬燈已經(jīng)運(yùn)行了起來。圖9- 31 運(yùn)行程序, 查看結(jié)果10) 如果到了這一步, 恭喜你,你已經(jīng)掌握了ZYNQ軟硬件協(xié)同設(shè)計(jì)的基本流程。這對(duì)于一個(gè)入門者來說是至關(guān)重要的, 就像我們剛學(xué)C語言時(shí)候運(yùn)行出Hello World程序一樣,是多么的讓人振奮。ZYNQ軟硬件協(xié)同設(shè)計(jì)的基本流程如下
35、所示。圖9- 32 ZYNQ設(shè)計(jì)流程9.2 ZYNQ嵌入式系統(tǒng)調(diào)試方法在ZYNQ的軟硬件協(xié)同設(shè)計(jì)中肯定會(huì)遇到各種問題,這時(shí)需要我們有個(gè)很好的方法來對(duì)系統(tǒng)進(jìn)行Debug。在第四章中已經(jīng)介紹了Vivado環(huán)境下的一些常用Debug核以及Vivado自帶的邏輯分析器,現(xiàn)在我們將用一個(gè)簡單的事例來說明如何在Vivado下對(duì)系統(tǒng)進(jìn)行調(diào)試。接下來,我們將分兩個(gè)小節(jié)來對(duì)對(duì)這一問題進(jìn)行概述。· 第一節(jié)講述如何在Vivado下建立硬件調(diào)試環(huán)境· 第二節(jié)將會(huì)介紹SDK使用,并使用SDK+Vivado進(jìn)行系統(tǒng)調(diào)試9.2.1 Vivado硬件調(diào)試1) 這里,繼續(xù)9.1節(jié)所構(gòu)建的工程,使用插入Net
36、list的方法對(duì)系統(tǒng)進(jìn)行Debug。將C:XUPZed下的first_zynq_design文件夾復(fù)制到當(dāng)前目錄下并將其重命名為zynq_debug。如圖9-33所示。圖9- 33 新建工程2) 進(jìn)入zynq_debug目錄,雙擊first_zynq_design Vivado工程文件。打開first_zynq_design工程主界面。3) 點(diǎn)擊Open Block Design,選擇zynq_system_1.bd,打開Block Design,如圖9-34。圖9- 34 打開Block Design4) 選擇axi_gpio_0_GPIO接口連接,右鍵并選擇Make Debug,當(dāng)綜合完成
37、后,系統(tǒng)會(huì)自動(dòng)將被標(biāo)記的連接線的Netlist插入,如圖9-35。5) 此時(shí)我們可以看到該接口連接被打上了debug標(biāo)志。如圖9-36。6) 用同樣的方法將M00_AXI接口與S00_AXI接口之間的連接線也進(jìn)行Make Debug,如圖9-37。7) 保存工程。8) 點(diǎn)擊Run Synthesis重新對(duì)工程進(jìn)行綜合。9) 當(dāng)綜合結(jié)束后會(huì)彈出Synthesis successfully completed對(duì)話框,選擇Open Synthesized Design選項(xiàng)查看綜合結(jié)果,點(diǎn)擊OK,如圖9-38。圖9- 35 Make Debug圖9- 36 GPIO Debug圖9- 37 AXI 總
38、線Debug圖9- 38 Open Synthesized Design10) 如果Debug窗口沒有打開,點(diǎn)擊IDE工具欄中的Layout selector,并在下拉菜單中選擇Debug選項(xiàng)來打開Debug窗口,如圖3-39。圖9- 39 打開Debug窗口11) 在IDE下方可以看到打開后的Debug窗口,該窗口列出了在第四步到第六步中標(biāo)記的Debug Net。在Netlist窗口中我們也能看到相應(yīng)的Net也被標(biāo)記了,這里我們還可以對(duì)被標(biāo)記的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)在需要添加一個(gè)Debug IP 核來將這些Net連接上去。在Debug窗口的工具欄上, 選擇Set Up Debug,打開Set Up Debug向?qū)В鐖D9-42。圖9- 42 Set Up Debug13) 在Set Up Debug對(duì)話框中點(diǎn)擊Next。14) 在Specify Net to Debug對(duì)話框中,選擇Clock Domain undefined的3個(gè)選項(xiàng)并右鍵,選擇Select Clock Domain選項(xiàng),如圖9-43。圖9- 43 關(guān)聯(lián)Clock15)
40、在彈出的Select Clock Domain對(duì)話框中選擇zynq_system_1_i/processing_system7_0_ FCLK_CLK0,如圖9-44。圖9- 44 選擇Clock16) 在Trigger and Capture Modes對(duì)話框中, 選擇Enable advanced trigger mode 和Enable basic Capture mode選項(xiàng)。點(diǎn)擊Next。圖9- 45 選擇模式17) 在Setup Debug Summary對(duì)話框中, 確保所有的信息如圖9-46所示。點(diǎn)擊Finish。18) 保存工程,此時(shí)在Source窗口中的Constraints
41、文件夾下會(huì)自動(dòng)生成Debug相關(guān)的約束文件zynq_system_1_wrapper.xdc。19) 在Flow Navigator窗口中點(diǎn)擊Generate Bitstream,點(diǎn)擊Yes當(dāng)No Implemetation Results Available對(duì)話框彈出時(shí),等待Generate Bitstream完成。20) 當(dāng)Generate Bitstream completed 對(duì)話框彈出時(shí),保持默認(rèn)選項(xiàng),點(diǎn)擊OK打開Implementation Design,并在之后彈出的對(duì)話框中都點(diǎn)擊Yes。21) 按9.1節(jié)的方法將硬件設(shè)計(jì)導(dǎo)入到SDK中。不要關(guān)閉Vivado,我們將在后面繼續(xù)使用
42、。圖9- 46 Summary9.2.2 使用SDK進(jìn)行ZYNQ debug 。在SDK中對(duì)ZYNQ進(jìn)行Debug,其實(shí)是對(duì)ZYNQ的ARM處理器進(jìn)行Debug,在ZYNQ嵌入式系統(tǒng)中,一般PL端的邏輯設(shè)備都被看成是ARM處理器的外設(shè),兩者之間通過AXI總線接口進(jìn)行通信。這樣, 我們就可以通過軟件的方式,來實(shí)時(shí)對(duì)硬件流進(jìn)行調(diào)試。在SDK中已經(jīng)集成了GDB工具。我們可以很方便的對(duì)程序設(shè)置斷點(diǎn), 查看當(dāng)前內(nèi)存空間,ARM寄存器以及對(duì)ARM進(jìn)行單步調(diào)試。這里,我們將使用9.2.1節(jié)導(dǎo)入的SDK工程為基礎(chǔ)。1) 將PC機(jī)同ZedBoard連接起來。2) 選擇Xilinx Tools > Prog
43、ram FPGA將bit文件下載到ZedBoard。3) 在工程管理面板右鍵Marquee工程,依次選擇Debug As > Launch On Hardware,點(diǎn)擊Yes關(guān)閉Confirm Perspective Switch對(duì)話框,打開SDK Debug管理界面如圖9-46所示。4) 初始化狀態(tài),程序指針指向GpioMarquee函數(shù), 點(diǎn)擊工具欄圖標(biāo)或者按進(jìn)入F5鍵進(jìn)入到GpioMarquee函數(shù),現(xiàn)在程序指針指向了XGpio_Initialize函數(shù)。5) 點(diǎn)擊圖標(biāo)或者按下F6鍵執(zhí)行下一條命令。6) 選擇第一個(gè)delay for循環(huán),并在這一行前面的藍(lán)色豎條上雙擊或者按下Ctr
44、l+Shift+B設(shè)置斷點(diǎn)。如圖9-48所示。7) 單擊Resume按鈕或者按下F8使程序運(yùn)行到斷點(diǎn)處,此時(shí)我們的ZedBoard上的第一個(gè)小燈應(yīng)該亮了起來。繼續(xù)點(diǎn)擊Resume按鈕,可以依次點(diǎn)亮板子上的8個(gè)小燈。圖9- 47 SDK Debug界面圖9- 48 設(shè)置斷點(diǎn)8) 在Varibles窗口中可以查看當(dāng)前變量的值。如圖9-49。圖9- 49 查看變量9) 在Registers窗口中可以查看ARM處理器內(nèi)部寄存器的值。如圖9-50所示。圖9- 50 Register10) 在Memory窗口可以查看內(nèi)存空間的情況。如圖9-51。圖9- 51 Memory現(xiàn)在我們已經(jīng)知道了如何在SDK中進(jìn)
45、行一般的調(diào)試,而且能夠得到預(yù)期的效果,但是事情往往不是這樣的簡單,如果在第7步的時(shí)候我們沒有在ZedBoard上看到小燈被點(diǎn)亮,那該怎么辦呢?決解這一問題的最好辦法就是查看AXI總線是否有數(shù)據(jù)在流動(dòng), 所以前面所做的Vivado Debug工程就用到了。請(qǐng)不要關(guān)閉SDK,且斷點(diǎn)依然設(shè)置在相同的位置。11) 回到Vivado IDE 界面。在Program and Debug選項(xiàng)下點(diǎn)擊Open Hardware Manager。如圖9-52。圖9- 52 Open Hardware Manager12) 如果你的板子以此方式進(jìn)行連接過, 請(qǐng)選擇open recent target并選擇相應(yīng)的ta
46、rget即可,否則點(diǎn)擊open a new hardware target,并一直Next,最后Finish即可,如圖9-53。圖9- 53 open target13) 由于已經(jīng)在SDK中下載了FPGA bit流,所以在Hardware 面板中一個(gè)ILA debug核被系統(tǒng)檢測到了。如圖9-54。圖9- 54 ILA core檢測注意:雖然可以在Vivado中對(duì)FPGA下載Bitstream,但請(qǐng)不要這樣做, 經(jīng)過我們的多次測試, 這樣做會(huì)發(fā)生錯(cuò)誤,Xilixn官方的給出的決解方案是由于使用的PS端的時(shí)鐘來接入ILA,所以要先在SDK中將bit流進(jìn)行下載。14) 現(xiàn)在可以看到Integrat
47、ed Logic Analyzer的窗口被打開,如圖9-55。15) 點(diǎn)擊Run Trigger Immediate 按鈕 來觸發(fā)并捕捉Debug probe的數(shù)據(jù)。16) 在Waveform窗口中我們可以看到捕捉到的數(shù)據(jù)如圖9-56所示。這里我們注意到GPIO的值為0x01,說明第一個(gè)小燈是被點(diǎn)亮的,同時(shí)AXI總線的WDATA的值同GPIO的也是0x01,所以可以看出從ARM處理器寫到AXI GPIO的數(shù)據(jù)被正確接收到了,我們還可以看一下其他信號(hào)線的值,做一些分析。17) 轉(zhuǎn)到SDK界面中, 點(diǎn)擊Resume按鈕,繼續(xù)執(zhí)行程序,此時(shí)我們可以看到led2被點(diǎn)亮。圖9- 55Vivado集成邏輯
48、分析器窗口18) 轉(zhuǎn)到VIvado界面,點(diǎn)擊Run Trigger Immediate按鈕,查看狀態(tài)改變后GPIO的信號(hào)值,如圖9-57。我們發(fā)現(xiàn)0x01變成了0x02。19) 重復(fù)前面兩步,查看相應(yīng)狀態(tài)改變是否會(huì)引起相應(yīng)的波形的變化,并分析其原因。20) 至此, 在Vivado下對(duì)ZYNQ嵌入式系統(tǒng)的調(diào)試就講到這里,我們所講的只是其中一個(gè)方法, Vivado提供多種方法對(duì)ZYNQ進(jìn)行調(diào)試,在第四章中也進(jìn)行過簡單的介紹,詳細(xì)的方法請(qǐng)參考UG936以及UG908。圖9- 56 Waveform圖9- 57 狀態(tài)改變后的波形圖9.3 Booting Linux on ZedBoard在第一章中我們
49、帶領(lǐng)大家體驗(yàn)了運(yùn)行在ZedBoard上的Linaro Ubuntu,在第7章中我們介紹了FSBL引導(dǎo)程序,并描述了ZYNQ下的linux啟動(dòng)過程。大家也許會(huì)有很多疑問,比如FSBL是怎么生成的,如何來制作BOOT.BIN啟動(dòng)鏡像等等,這里將為大家解答這些問題。通過這一節(jié)的學(xué)習(xí),希望大家能夠?qū)YNQ下的linux啟動(dòng)過程有更深入的體會(huì)。在ZedBoard中啟動(dòng)Linux有兩種方式,一種是將ZedBoard作為主設(shè)備來引導(dǎo)Linux,另一種則是將其作為從設(shè)備。· Master Method:這種方式是將啟動(dòng)鏡像存儲(chǔ)在非易失性存儲(chǔ)器中,如QSPI、NAND、NOR flash、以及SD卡
50、等。ARM核從這些存儲(chǔ)器中將啟動(dòng)鏡像加載到PS端,并執(zhí)行boot程序引導(dǎo)linux啟動(dòng)。· Slave Method:這種方式是將PC機(jī)作為主機(jī),通過Jtag或者網(wǎng)絡(luò)將啟動(dòng)鏡像加載到內(nèi)存。下面我們分別對(duì)從SD卡啟動(dòng)和從QSPI啟動(dòng)linux進(jìn)行介紹。首先,得準(zhǔn)備以下幾個(gè)文件,你可以直接從本書網(wǎng)盤地址 上第九章相應(yīng)章節(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章進(jìn)行介紹· uImage: Linux 內(nèi)核鏡像,通過U-boot加載到內(nèi)存,將在13章進(jìn)行介紹· uramdisk.image.gz: linux文件系統(tǒng),通過U-Boot加載到內(nèi)存,將在13章進(jìn)行介紹· devicetree.dtb:linux 系統(tǒng)設(shè)備樹文件,通過U-boot加載到內(nèi)存,將在13章介紹9.3.1 創(chuàng)建FSBL.elf1) 瀏覽Start > All Programs > Xilinx Design Tools > Vivado 2013.4 > SDK >Xilinx SDK
52、2013.4啟動(dòng)SDK,設(shè)置Workspace為9.1節(jié)生成的SDK_Export目錄,如圖9-58所示。圖9- 58 導(dǎo)入SDK工程2) 在SDK中,依次選擇File > new > Application Project,在彈出的Application Project對(duì)話框中輸入fsbl_zynq作為Project Name,其他選項(xiàng)保持默認(rèn)設(shè)置,點(diǎn)擊Next。3) 在Templated對(duì)話框中選擇Zynq FSBL作為模版,點(diǎn)擊Finish完成工程創(chuàng)建,如圖9-58。SDK在工程瀏覽器中創(chuàng)建了fsbl_zynq應(yīng)用工程以及fsbl_zynq_bsp 板級(jí)支持包工程。SDK將會(huì)
53、自動(dòng)構(gòu)建工程,并生成fsbl_zynq.elf文件。圖9- 58 選擇fsbl模版9.3.2 從SD卡啟動(dòng)linux1) 將需要的3個(gè)文件拷貝到同一個(gè)文件夾中,在上面的鏈接中我們也給出了這3個(gè)文件,如圖9-59所示。圖9- 59 準(zhǔn)備需要的文件2) 在SDK的菜單欄中選擇Tools > Create Zynq Boot Image。在彈出來的Create Zynq Boot Image對(duì)話框中將Bit file path設(shè)置為第一步3個(gè)文件所在的文件夾路徑,并在Boot image partition面板中點(diǎn)擊Add按鈕相繼添加這3個(gè)文件,這里一定要注意,我們添加文件的順序必須按照fsbl_zynq.elf > zynq_system_1_wrapper.bi > u-boot.elf的順序,否則系統(tǒng)將不能夠正常啟動(dòng),添加的過程中保持默認(rèn)設(shè)置即可,同時(shí)Output path也保持默認(rèn)設(shè)置即可,點(diǎn)擊Create Image按鈕生成.bin文件,如圖9-60所示。圖9- 60 建立SD卡啟動(dòng)鏡像文件BOOT.bin3) 這時(shí)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 河南南陽地區(qū)2024~2025學(xué)年高二下冊(cè)期末適應(yīng)性考試數(shù)學(xué)試題學(xué)生卷
- 必修二綜合檢測提升卷人教A版2019必修第二冊(cè)學(xué)生卷
- 新睿CCBA體系說明
- 產(chǎn)品組合優(yōu)化模型構(gòu)建考核試卷
- 巡檢人員培訓(xùn)考核試卷
- 2025年中國LED節(jié)能臺(tái)燈數(shù)據(jù)監(jiān)測報(bào)告
- 2025年中國ASE光源數(shù)據(jù)監(jiān)測報(bào)告
- 2025年中國2.3-二氯苯甲醛數(shù)據(jù)監(jiān)測報(bào)告
- 兒童心臟病的早期篩查和治療
- 2025至2030年中國鐵盒撞批市場分析及競爭策略研究報(bào)告
- QBT 2155-2004 旅行箱包行業(yè)標(biāo)準(zhǔn)
- 免疫治療筆記
- (2024年)《甲亢病人的護(hù)理》ppt課件完整版
- 兒童發(fā)展心理學(xué)全套課件
- 2022水利工程生態(tài)護(hù)坡技術(shù)規(guī)范
- 《單片機(jī)C語言》課件
- 實(shí)驗(yàn)室搬遷方案
- 1、山東省專業(yè)技術(shù)職稱評(píng)審表(A3正反面手填)
- 光電子技術(shù)及應(yīng)用(第2版)章節(jié)習(xí)題及自測題參考答案
- 專業(yè)技術(shù)職稱晉升申請(qǐng)書
- 2023年莒縣小升初英語考試模擬試題及答案解析
評(píng)論
0/150
提交評(píng)論