《ZYNQ开发入门基础.doc》由会员分享,可在线阅读,更多相关《ZYNQ开发入门基础.doc(37页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
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 Vivado 2013.4 Vivado 2013.
3、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 subdirectory被勾选上,如图9-3,点击Next。图9- 3 Project Na
4、me对话框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 directory进行添加,由于我们没有任何的源文件, 所以这里我们直接点击Next即可
5、,如图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创建了一个Zynq设计的工程框架,图9-7为Vivado的工程界面,在第
6、四章我们已经对该界面进行过介绍,如果还不熟悉的读者再回到前面复习一下。下面我将使用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进行控制。系统结构图如图9-8所示。图9- 8 系统结构图1) 创建一个Block De
7、sign。在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核,你可以直接在这里添加使用,当然,用户也可以自定义自己的IP核,然后添加到工程中使
8、用,或者提供给其他用户使用,在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的下面,选择TCL Console你将看到如下的信息,其实我们在Vivado图形化界
9、面所做的所有操作都将转化为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模块,打开其配置界面, 如图9-13所示,首先先来熟悉一下这个界面。 Documentation
10、:提供该IP模块相关的文档帮助。 Page Navigator: 这里提供了该IP模块的详细配置列表。Zynq Block Design页面显示了ZYNQ7 Processing System的总体概貌,我们可以通过点击绿色部分对相应的模块进行查看或者配置;PS-PL Configuration页面提供了PS到PL的相关接口配置信息以及PS部分一些配置信息;Peripheral I/O Pins页面主要是对一些通过外设接口的配置;MIO Configuration页面主要是对MIO以及EMIO的分配控制。Clock Configuration页面主要是对PS端时钟资源的配置及管理。DDR Co
11、nfiguration页面主要是对DDR控制器一些参数的配置。Interrupts页面主要是对中断进行配置管理。 Presets:这里主要提供了一些开发板的预定义配置功能,Vivado将会按照已经设置好的配置信息来对该IP核进行配置,而不需要我手动的来配。点击该按钮,我们可以看到Vivado现在已经支持的开发板有Microzed、ZC702、ZC706、ZedBoard以及一个Default配置选项。 Import XPS Settings:这个功能主要是将XPS中的ZYNQ7 Processing System的配置信息导入进来,其实就是导入一个xml文件。由于我们使用的是ZedBoard开
12、发板,且只用到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 System界面注:5、6两步更加简单的方法是点击Diagram顶端的Run Block Automation设计协助链接来完成对ZYNQ
13、7 Processing System IP核的配置并将DDR与FIXED_IO Make External,如图9-15所示。当选择/processing_system7_0的时候,相应的IP核图形界面会变成高亮显示,表示其已被选中,并将会被自动配置。在弹出的Run Block Automation对话框中确保Apply Board Preset被勾选,否则其只会将DDR与FIXED_IO 连接到顶层端口,而不会对ZYNQ7进行默认配置。如果你在手动完成了ZYNQ7的配置又要使用Run Block Automation这个功能,那么一定要确保Apply Board Preset选项没有被选中
14、, 否则它将会使用默认配置来覆盖你原来的配置。图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小灯。我们将使用IP Integrator 的设计协助工具来将AXI GPIO连接到PS端。图9- 16 ZYNQ7 Processi
15、ng 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 Automation-GPIO这时可以看到有两个新的IP模块自动被添加了进来: Processor System Reset: 这个IP提
16、供一个定制化的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所示。图9- 18 Run Connection Automation-GPIO注:当使用如上的方式来对GPIO Make External时,Vivado会自
17、动在系统中添加约束文件,将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 GPIO 分配了64K的地址空间,基地址为0x41200000。由于ARM是统一编址的,所以在编写ARM程序的时候就可以像读写内存一样直接对该地址进行读写,
18、从而实现对该IP核的控制。图9- 20 地址编辑器12) 保存工程:Ctrl + S13) 在Diagram窗口的左面工具栏中选择Validate Design 按钮检测设计的有效性。这个操作将会调用一次DRC检测,如果检测正确,Validation successful对话框将会弹出, 否则根据错误信息进行改正。点击OK完成设计有效性检测。至此,一个简单的IP子系统已经设计完成,下面我们将设计完成Block Design生成可以综合的HDL设计文件。14) 在Source窗口中,选择Sources选项,右键Block设计zynq_system_1,选择Generate Output Prod
19、ucts,如图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流了。17) 在Flow Navigator中,展开Program and Debug,点击Generate Bitstream,这时No Impleme
20、ntation Result Available对话框被打开, 点击YES,如图9-22。18) 当bit流生成完成,Bitstream Generation successful completed对话框被打开, 选择Open Implementation Design对话框,点击OK完成,如图9-23所示。当bit流生成完成后,在Vivado中最后的工作就是要将设计导入到SDK中,然后对ARM进行编程,控制ZedBoard上的LED灯,实现我们这次实验的目的。图9- 22 生成bit流图9- 23 打开实现设计19) 在IP Integrator下点击Open Block Design,选
21、择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是Block Design,所以必须要先将zynq_system_1.bd打开,否则会出现错误;要想将bitstream导入到SDK, 必须先打开implementation des
22、ign,否则这里的Include Bitstream将会是disable的。21) 到此,在Vivado下的工作就算完成了,如果没有出现错误,说明我们的硬件工程总体上是没有问题的。下面一节我们将在SDK中创建一个简单的应用程序,来完成软硬件协同设计中的软件部分。图9- 25 将硬件设计导入到 SDK9.1.3 SDK应用程序编写这一节我们将讲解如何使用SDK来创建一个简单的软件应用程序,并使用该程序来对ZedBoard上的LED进行控制。从前面可以看到,系统已经为AXI GPIO分配了一个地址空间,ARM处理器通过访问该地址空间中的寄存器来对GPIO进行控制寄存器,从而达到控制ZedBoard
23、上的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_designfirst_zynq_design.sdkSDKSDK_Export当SDK打开后我们就可以创建自己的应用程序了。1) 选择File New Application Project。2) 在Application Proje
24、ct对话框中输入Marquee作为Project Name,其他的保持默认设置,如图9-26,点击Next。图9- 26 新建SDK工程3) 在Templates对话框中,选择Empty Application,这里我们创建一个空工程,如图9-27所示,点击Finish完成工程创建。图9- 27 创建一个空白模版4) 当工程编译完成,SDK会自动打开System.mss文件,该文件存在于板级支持包文件夹Marquee_bsp下。该文件提供了系统中所有的外设详细信息。Documentation和Example提供了该外设很详细的设计参考, 包括一些重要的数据结构以及API,或一些可用的参考例程,
25、如图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 新建Source File6) 下面来编写Marquee.c,具体代码如下所示。#include xparameters.h /* Peripheral parameters */#include xgpio.h /* GPIO data struct and AP
26、Is */#include xil_printf.h #include xil_cache.h#define GPIO_BITWIDTH8/* This is the width of the GPIO */#define GPIO_DEVICE_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 chan
27、nel*/#define printf xil_printf/* A smaller footprint printf */XGpio Gpio; /* The Instance of the GPIO Driver */XGpio GpioOutput; /* 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;/* * Initializ
28、e the GPIO driver so that its ready to use, * specify the device ID that is generated in xparameters.h */ Status = 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,
29、 0x0); / Set the GPIO outputs to low XGpio_DiscreteWrite(&GpioOutput, LED_CHANNEL, 0x0); for (LedBit = 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
30、 the LED is visible for (Delay = 0; Delay LED_DELAY; Delay+);/Clear the GPIO OutputXGpio_DiscreteClear(&GpioOutput, LED_CHANNEL,1 LedBit);/ Wait a small amount of time so the LED is visiblefor (Delay = 0; Delay Program FPGA将bit流写入FGPA中。右键工程目录中的Marquee目录,选择Run As Run Configurations,设置STDIO Connection
31、为相应的串口,如图9-30。图9- 30 设置串口,运行程序9) 选择Run As Launch on Hardware将程序下载到ZedBoard上运行,稍等片刻我们可以看到Console窗口中不断的打印SUCCESS!此时ZedBoard上的跑马灯已经运行了起来。图9- 31 运行程序, 查看结果10) 如果到了这一步, 恭喜你,你已经掌握了ZYNQ软硬件协同设计的基本流程。这对于一个入门者来说是至关重要的, 就像我们刚学C语言时候运行出Hello World程序一样,是多么的让人振奋。ZYNQ软硬件协同设计的基本流程如下所示。图9- 32 ZYNQ设计流程9.2 ZYNQ嵌入式系统调试方
32、法在ZYNQ的软硬件协同设计中肯定会遇到各种问题,这时需要我们有个很好的方法来对系统进行Debug。在第四章中已经介绍了Vivado环境下的一些常用Debug核以及Vivado自带的逻辑分析器,现在我们将用一个简单的事例来说明如何在Vivado下对系统进行调试。接下来,我们将分两个小节来对对这一问题进行概述。 第一节讲述如何在Vivado下建立硬件调试环境 第二节将会介绍SDK使用,并使用SDK+Vivado进行系统调试9.2.1 Vivado硬件调试1) 这里,继续9.1节所构建的工程,使用插入Netlist的方法对系统进行Debug。将C:XUPZed下的first_zynq_design
33、文件夹复制到当前目录下并将其重命名为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,当综合完成后,系统会自动将被标记的连接线的Netlist插入,如图9-35。5) 此时我们可以看到该接
34、口连接被打上了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 总线Debug图9- 38 Open Synthesized Design10) 如果Debu
35、g窗口没有打开,点击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 Netlist Make Debug12) 在Debug窗口中的Net现在的状态仍然是una
36、ssigned, 所以现在需要添加一个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) 在弹出的Select Clock Domain对话框中选择zynq_system_1_i/p
37、rocessing_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文件夹下会自动生成Debug相关的约束文件zynq_system_1_wrapper.xdc
38、。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,我们将在后面继续使用。图9- 46 Summary9.2.2 使用SDK进行ZYNQ debug 。在SDK中对
39、ZYNQ进行Debug,其实是对ZYNQ的ARM处理器进行Debug,在ZYNQ嵌入式系统中,一般PL端的逻辑设备都被看成是ARM处理器的外设,两者之间通过AXI总线接口进行通信。这样, 我们就可以通过软件的方式,来实时对硬件流进行调试。在SDK中已经集成了GDB工具。我们可以很方便的对程序设置断点, 查看当前内存空间,ARM寄存器以及对ARM进行单步调试。这里,我们将使用9.2.1节导入的SDK工程为基础。1) 将PC机同ZedBoard连接起来。2) 选择Xilinx Tools Program FPGA将bit文件下载到ZedBoard。3) 在工程管理面板右键Marquee工程,依次选
40、择Debug As Launch On Hardware,点击Yes关闭Confirm Perspective Switch对话框,打开SDK Debug管理界面如图9-46所示。4) 初始化状态,程序指针指向GpioMarquee函数, 点击工具栏图标或者按进入F5键进入到GpioMarquee函数,现在程序指针指向了XGpio_Initialize函数。5) 点击图标或者按下F6键执行下一条命令。6) 选择第一个delay for循环,并在这一行前面的蓝色竖条上双击或者按下Ctrl+Shift+B设置断点。如图9-48所示。7) 单击Resume按钮或者按下F8使程序运行到断点处,此时我们
41、的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中进行一般的调试,而且能够得到预期的效果,但是事情往往不是这样的简单,如果在第7步的时候我们没有在ZedBoard上
42、看到小灯被点亮,那该怎么办呢?决解这一问题的最好办法就是查看AXI总线是否有数据在流动, 所以前面所做的Vivado Debug工程就用到了。请不要关闭SDK,且断点依然设置在相同的位置。11) 回到Vivado IDE 界面。在Program and Debug选项下点击Open Hardware Manager。如图9-52。图9- 52 Open Hardware Manager12) 如果你的板子以此方式进行连接过, 请选择open recent target并选择相应的target即可,否则点击open a new hardware target,并一直Next,最后Finish即可
43、,如图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) 现在可以看到Integrated Logic Analyzer的窗口被打开,如图9-55。15) 点击Run Trigger Immedia
44、te 按钮 来触发并捕捉Debug probe的数据。16) 在Waveform窗口中我们可以看到捕捉到的数据如图9-56所示。这里我们注意到GPIO的值为0x01,说明第一个小灯是被点亮的,同时AXI总线的WDATA的值同GPIO的也是0x01,所以可以看出从ARM处理器写到AXI GPIO的数据被正确接收到了,我们还可以看一下其他信号线的值,做一些分析。17) 转到SDK界面中, 点击Resume按钮,继续执行程序,此时我们可以看到led2被点亮。图9- 55Vivado集成逻辑分析器窗口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在第一章中我们带领大家体验了运行在ZedBoard上的Linaro U