ZYNQ开发入门_第1页
ZYNQ开发入门_第2页
ZYNQ开发入门_第3页
ZYNQ开发入门_第4页
ZYNQ开发入门_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第9章 ZedBoard入门前面大家已经对ZYNQ架构以及相应的开发工具有一定的认识,接下来我们将带领大家来一起体验ZYNQ,体验软硬件协同设计的魅力。由于时间的关系,下面的一些实验(本章及后续章节的实验)可能有不完善的地方,欢迎读者向我们反馈。9.1 跑马灯本实验将指导大家使用Vivado 集成设计环境创建本书的第一个Zynq设计。这里,我们使用跑马灯这个入门实验来向大家介绍Vivado IDE的IP Integrator环境,并在Zedboard上实现这个简单的Zynq嵌入式系统。之后,我们将会使用SDK创建一个简单的软件应用程序,并下载到Zynq的ARM处理器中,对在PL端实现的硬件进行

2、控制。本实验分为三个小节来向大家进行介绍:· 第一节我们将使用Vivado IDE创建一个工程。· 在第一节的基础上,第二节我们将继续构建一个Zynq嵌入式处理系统,并将完成后的硬件导入到SDK中进行软件设计。· 最后一节我们将使用SDK编写ARM测试应用程序, 并下载到ZedBoard上进行调试。实验环境:Windows 7 x64操作系统, Vivado2013.4,SDK 2013.49.1.1 Vivado工程创建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,如果这里你忘记了选择,在工程创建完成后,也可以在工程设置中选择你熟悉的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完成工程创建,至此,我们已经使用Vivado

6、创建了一个Zynq设计的工程框架,图9-7为Vivado的工程界面,在第四章我们已经对该界面进行过介绍,如果还不熟悉的读者再回到前面复习一下。下面我将使用Flow Navigator的 IP Integrator功能完成第二节的嵌入式系统设计。图9- 7 Vivado工程界面9.1.2 在Vivado中创建Zynq嵌入式系统 这一节我们将创建一个简单的Zynq嵌入式系统,该系统使用Zynq PL部分实现一个通用I/O控制器 (GPIO),控制器同ZedBoard上的8个LED相连接,并且通过AXI总线连接到PS端,这样我们就可以通过将要在第三小节中实现的ARM应用程序来对LED进行控制。系统结

7、构图如图9-8所示。图9- 8 系统结构图1) 创建一个Block Design。在Flow Navigator窗口中展开IP Intergrator,选择Create Block Design,如图9-9。图9- 9 创建Block Design2) 在Block Design对话框中输入zynq_system_1作为Design name,如图9-10,点击OK继续。这时,在workplace区域将会打开IP Integrator的图表画布,我们将在这个空白区域中像画画一样的构建自己的系统。这里操作的最小单位是IP核,Xilinx官方还有一些第三方机构给我们提供了很多的免费IP核,你可以直

8、接在这里添加使用,当然,用户也可以自定义自己的IP核,然后添加到工程中使用,或者提供给其他用户使用,在13章第一节我们将会向大家介绍如何制作自己的IP核。图9- 10 输入设计名称3) 在空白画布中,右键空白区域,并选择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命令来执行。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控制器一些参数的配置。Interrupts页面主要是对中断进行配置管理。· Presets:这里主要提供了一些开发板的预定义配置功能,Vivado将会按照已经设置好的配置信息来对该IP核进行配置,而不需要我手动的来配。点击该按钮,我们可以看到Vivado现在已经支持的开发板有Microzed、ZC702、ZC706、ZedBoard以及一个Default配置选项。· Import XPS Settings:这个功能主要是将XPS中的ZYNQ

12、7 Processing System的配置信息导入进来,其实就是导入一个xml文件。由于我们使用的是ZedBoard开发板,且只用到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设计协助链接来完成对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到系统中,该IP核被放在PL端,通过AXI总线同ARM相连接,并通过GPIO接口控制ZedBoard上的8个LED小灯

15、。我们将使用IP Integrator 的设计协助工具来将AXI GPIO连接到PS端。图9- 16 ZYNQ7 Processing System 外部连接7) 右键Diagram窗口的空白区域,在弹出的菜单列表中选择Add IP选项,在搜索栏中输入GPIO,并在搜索结果列表中双击AXI GPIO将该IP添加到系统中。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功能,包括所有外设,互联以及处理器生。· AXI Interconnect:提供AXI 总线互联控制,它将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会自动在系统中添加约束文件,将GPIO连接到ZedBoard的LED引脚上。10) 当完成上面一步,在Diagram中应该看到如图9-19所示的画面。图9- 19 Module Connect System11) IP Integrator将会自动为挂在AXI总线上的逻辑设备分配地址空间, 这样ARM才可以寻址到PL端的逻辑设备。选择Address Editor选项,并展开Data,如图9-20。可以看到IP Integrator已经为AXI G

18、PIO 分配了64K的地址空间,基地址为0x41200000。由于ARM是统一编址的,所以在编写ARM程序的时候就可以像读写内存一样直接对该地址进行读写,从而实现对该IP核的控制。图9- 20 地址编辑器12) 保存工程:Ctrl + S13) 在Diagram窗口的左面工具栏中选择Validate Design 按钮检测设计的有效性。这个操作将会调用一次DRC检测,如果检测正确,Validation successful对话框将会弹出, 否则根据错误信息进行改正。点击OK完成设计有效性检测。至此,一个简单的IP子系统已经设计完成,下面我们将设计完成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) 继续右键zynq_system_1,选择Create HDL Wrapper,保持默认选项,点击OK关闭Create HDL Wrapper对话框。这里,Vivado会为IP子系统生成一个顶层文件,这样我们就可以对该系统进行综合、实现并生成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、现我们这次实验的目的。图9- 22 生成bit流图9- 23 打开实现设计19) 在IP Integrator下点击Open Block Design,选择zynq_system_1.bd,重新打开前面创建的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打开,否则会出现错误;要想将bitstream导入到SDK, 必须先打开implementation design,否则这里的Include Bitstream将会是disable的。21) 到此,在Vivado下的工作就算完成了,如果没有出现错误,说明我们的硬件工程总体上是没有问题的。下面一节我们将在SDK中创建一个简单的应用程序,来完成软硬件协同设计中的软件部分。图9- 25 将硬件设计导入到 SDK9.1.3 SDK应用程序编写这一节我们将讲解如何使用SDK来创建一个简单的软件应用程序,并使用该程序来对ZedBoard上的

23、LED进行控制。从前面可以看到,系统已经为AXI GPIO分配了一个地址空间,ARM处理器通过访问该地址空间中的寄存器来对GPIO进行控制寄存器,从而达到控制ZedBoard上的LED。如果你是接着9.1.2来做这一节实验的话,当你完成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打开后我们就可以创建自己的应用程序了。1) 选择File > New > Application Project。2) 在Application Project对话框中输入Marquee作为Project Name,其他的保持默认设置,如图9-26,点击Next。图9- 26 新建SDK工程3) 在Templates对话框中,选择Empty Application,这里我们创建一个空工程,如图9-27所示,点击Finish完成工程创建。图9- 27 创建一个空白模版4) 当工程编译完成,SDK会自动打开Sy

25、stem.mss文件,该文件存在于板级支持包文件夹Marquee_bsp下。该文件提供了系统中所有的外设详细信息。Documentation和Example提供了该外设很详细的设计参考, 包括一些重要的数据结构以及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函数开始,之后进入一个无限循环,不断的调用GpioMarquee函数。Xgpio_Initialize函数在gpio.h中被定义,它的功能是对XGpio句柄进行初始化,XPAR_AXI_GPIO_0_DEVICE_ID在xparameters.h文件中被定义,该文件是Vivado IDE自动生成并导入到SDK中的,它包含了所

33、有的系统硬件设备参数。XGpio_SetDataDirection(&Gpio, LED_CHANNEL, 0xFF)函数设置GPIO指定通道的I/O方向。XGpio_DiscreteWrite(&GpioOutput, LED_CHANNEL, 0x0)函数将数据写入到设置好的通道中。8) 将ZedBoard同PC机相连接,插上串口线与Jtag线,如果是第一次连接请等待一段时间,操作系统会自动安装所需的驱动。单击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软硬件协同设计的基本流程。这对于一个入门者来说是至关重要的, 就像我们刚学C语言时候运行出Hello World程序一样,是多么的让人振奋。ZYNQ软硬件协同设计的基本流程如下

35、所示。图9- 32 ZYNQ设计流程9.2 ZYNQ嵌入式系统调试方法在ZYNQ的软硬件协同设计中肯定会遇到各种问题,这时需要我们有个很好的方法来对系统进行Debug。在第四章中已经介绍了Vivado环境下的一些常用Debug核以及Vivado自带的逻辑分析器,现在我们将用一个简单的事例来说明如何在Vivado下对系统进行调试。接下来,我们将分两个小节来对对这一问题进行概述。· 第一节讲述如何在Vivado下建立硬件调试环境· 第二节将会介绍SDK使用,并使用SDK+Vivado进行系统调试9.2.1 Vivado硬件调试1) 这里,继续9.1节所构建的工程,使用插入Net

36、list的方法对系统进行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、后,系统会自动将被标记的连接线的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现在的状态仍然是unassigned, 所以现在需要添加一个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 关联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节的方法将硬件设计导入到SDK中。不要关闭Vivado,我们将在后面继续使用

42、。图9- 46 Summary9.2.2 使用SDK进行ZYNQ debug 。在SDK中对ZYNQ进行Debug,其实是对ZYNQ的ARM处理器进行Debug,在ZYNQ嵌入式系统中,一般PL端的逻辑设备都被看成是ARM处理器的外设,两者之间通过AXI总线接口进行通信。这样, 我们就可以通过软件的方式,来实时对硬件流进行调试。在SDK中已经集成了GDB工具。我们可以很方便的对程序设置断点, 查看当前内存空间,ARM寄存器以及对ARM进行单步调试。这里,我们将使用9.2.1节导入的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) 初始化状态,程序指针指向GpioMarquee函数, 点击工具栏图标或者按进入F5键进入到GpioMarquee函数,现在程序指针指向了XGpio_Initialize函数。5) 点击图标或者按下F6键执行下一条命令。6) 选择第一个delay for循环,并在这一行前面的蓝色竖条上双击或者按下Ctr

44、l+Shift+B设置断点。如图9-48所示。7) 单击Resume按钮或者按下F8使程序运行到断点处,此时我们的ZedBoard上的第一个小灯应该亮了起来。继续点击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现在我们已经知道了如何在SDK中进

45、行一般的调试,而且能够得到预期的效果,但是事情往往不是这样的简单,如果在第7步的时候我们没有在ZedBoard上看到小灯被点亮,那该怎么办呢?决解这一问题的最好办法就是查看AXI总线是否有数据在流动, 所以前面所做的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核被系统检测到了。如图9-54。图9- 54 ILA core检测注意:虽然可以在Vivado中对FPGA下载Bitstream,但请不要这样做, 经过我们的多次测试, 这样做会发生错误,Xilixn官方的给出的决解方案是由于使用的PS端的时钟来接入ILA,所以要先在SDK中将bit流进行下载。14) 现在可以看到Integrat

47、ed Logic Analyzer的窗口被打开,如图9-55。15) 点击Run Trigger Immediate 按钮 来触发并捕捉Debug probe的数据。16) 在Waveform窗口中我们可以看到捕捉到的数据如图9-56所示。这里我们注意到GPIO的值为0x01,说明第一个小灯是被点亮的,同时AXI总线的WDATA的值同GPIO的也是0x01,所以可以看出从ARM处理器写到AXI GPIO的数据被正确接收到了,我们还可以看一下其他信号线的值,做一些分析。17) 转到SDK界面中, 点击Resume按钮,继续执行程序,此时我们可以看到led2被点亮。图9- 55Vivado集成逻辑

48、分析器窗口18) 转到VIvado界面,点击Run Trigger Immediate按钮,查看状态改变后GPIO的信号值,如图9-57。我们发现0x01变成了0x02。19) 重复前面两步,查看相应状态改变是否会引起相应的波形的变化,并分析其原因。20) 至此, 在Vivado下对ZYNQ嵌入式系统的调试就讲到这里,我们所讲的只是其中一个方法, Vivado提供多种方法对ZYNQ进行调试,在第四章中也进行过简单的介绍,详细的方法请参考UG936以及UG908。图9- 56 Waveform图9- 57 状态改变后的波形图9.3 Booting Linux on ZedBoard在第一章中我们

49、带领大家体验了运行在ZedBoard上的Linaro Ubuntu,在第7章中我们介绍了FSBL引导程序,并描述了ZYNQ下的linux启动过程。大家也许会有很多疑问,比如FSBL是怎么生成的,如何来制作BOOT.BIN启动镜像等等,这里将为大家解答这些问题。通过这一节的学习,希望大家能够对ZYNQ下的linux启动过程有更深入的体会。在ZedBoard中启动Linux有两种方式,一种是将ZedBoard作为主设备来引导Linux,另一种则是将其作为从设备。· Master Method:这种方式是将启动镜像存储在非易失性存储器中,如QSPI、NAND、NOR flash、以及SD卡

50、等。ARM核从这些存储器中将启动镜像加载到PS端,并执行boot程序引导linux启动。· Slave Method:这种方式是将PC机作为主机,通过Jtag或者网络将启动镜像加载到内存。下面我们分别对从SD卡启动和从QSPI启动linux进行介绍。首先,得准备以下几个文件,你可以直接从本书网盘地址 上第九章相应章节下载使用。· fsbl_zynq.elf: FSBL镜像文件,用于创建BOOT.BIN。· zynq_system_wrapper.bit:硬件工程文件, 用于创建BOOT.BIN· u-boot.elf: linux BootLoader,

51、用于创建BOOT.BIN,将在13章进行介绍· uImage: Linux 内核镜像,通过U-boot加载到内存,将在13章进行介绍· uramdisk.image.gz: linux文件系统,通过U-Boot加载到内存,将在13章进行介绍· devicetree.dtb:linux 系统设备树文件,通过U-boot加载到内存,将在13章介绍9.3.1 创建FSBL.elf1) 浏览Start > All Programs > Xilinx Design Tools > Vivado 2013.4 > SDK >Xilinx SDK

52、2013.4启动SDK,设置Workspace为9.1节生成的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完成工程创建,如图9-58。SDK在工程浏览器中创建了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的顺序,否则系统将不能够正常启动,添加的过程中保持默认设置即可,同时Output path也保持默认设置即可,点击Create Image按钮生成.bin文件,如图9-60所示。图9- 60 建立SD卡启动镜像文件BOOT.bin3) 这时

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论