首先介绍一下我的硬件平台:使用的开发板为米联客出的MIZ702,这个开发板与ZedBoard是兼容的。

Vivado硬件调试有几种手段:ILA(集成逻辑分析器Integrated Logic Analyzer)、VIO(虚拟I/O Virtual Input/Output)、Jtag-to-AXI等,本方法主要使用了ILA 。

本实验系统使用了两种调试手段:ILA和VIO,ILA的引入方式又用了两种,一种是标记Debug mark,一种是添加ILA_IP两种方式我认为是一致的。其中ILA-IP抓取的LED的寄存器的波形,而Debug mark标记的是接到一个自主IP的AXI总线系统的Block Design如下图

联调步骤:
STEP1:在block design设计完系统硬件后,点击想要抓取波形的网络,右击选择mark debug,此时网络两端会显示一个Debug标识如下图,保存。

还有另外一种方法:直接添加ILA ip,设置好抓取波形的个数与每组波形的位宽,连接自己想要观测的总线,在这里我抓取的波形是一组8位的寄存器,所控制的是8个LED灯。如下两图

我认为这两种方法没有区别
STEP2:对工程进行综合,综合完成后查看综合结果,可以看到下面的debug窗口中有未连接的Debug nets,点击Set up Debug并进行相关配置完成Debug nets的连接。完成后如下图所示:

STEP3:保存工程,此时系统会重新生成约束文件,对现有的约束文件进行填充,打开约束文件进行Reload即可,然后生成bitstream并将硬件导入SDK,运行SDK。

STEP4:在SDK中新建自己的调试应用程序,我的演示程序为流水灯主函数代码如下:
#include "xparameters.h" /* Peripheral parameters */
#include "xgpio.h" /* GPIO data struct and APIs */
#include "xil_printf.h"
#include "xil_cache.h"

#define GPIO_BITWIDTH 8 /* 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_BLINK 0x1 /* 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 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;
/*
* Initialize the GPIO driver so that it's 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, 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 High
XGpio_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 GPIO Output
XGpio_DiscreteClear(&GpioOutput, LED_CHANNEL,
1 << LedBit);
// Wait a small amount of time so the LED is visible
for (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,GPIO_BITWIDTH);
if (status == 0)
print("SUCESS!.\r\n");
else print("FAILED.\r\n");
}
return XST_SUCCESS;
}

然后常规方法进入软件调试界面,设置断点。(这里提醒一下,联合调试一定要在SDK下将比特流下载到FPGA中,而不要在vivado中下载比特流。Xilinx官方给出的解释是:由于使用PS端的时钟来接入ILA,所以要现在SDK中将比特流进行下载)

STEP5:在Vivado中连接目标板,此时进入硬件调试界面如图

左边栏hardware会显示系统添加的硬件调试IP,我的硬件中手动加入了一个ila ip和vio ip也将一段总线标记了mark debug,标记了mark debug的总线,在进行set up debug的操作时系统会自动添加一个ila ip,左边栏显示了三个调试ip。

这里面大大小小有好多窗口一一介绍一下:
1、设置窗口,window data depth其实就是波形的分辨率,trigger position in window就是数据的触发在波形中显示的起始位置,设置了触发后才会有作用。

2、触发设置窗口,可以设置触发信号,以及触发方式(上升沿、下降沿)等等。若在SDK中的命令执行一句的过程中FPGA有时序变化,且时序是相关的,比如说我的写操作,当write有上升沿的时候执行,对目标地址写操作数。这时候如果设置了触发信号为write,系统的时序显示就会随着write进行动作,且在触发位置处进行改变。这个功能我们可以进行一些总线的时序分析。ILA2中检测了AXI总线,我们就可以看到相关时序图。ILA1只是对一个寄存器进行了监视,只能看到他的值的变化而已。

3、状态窗口:显示当前调试状态
4、调试波形窗口

大家调试不必按照此硬件系统和软件来调试,完全可以在自己的系统中添加ILA-IP来对自己的系统进行调试

欢迎大家批评指正,也希望能与大家交流ZYNQ的学习经验。

参考文献:
1、嵌入式系统软硬件协同设计实战指南-基于Xilinx ZYNQ
2、ug936-vivado-tutorial-programming-debugging

本文转载自:qq_34322603的博客

转载:http://xilinx.eetrend.com/blog/11982

Vivado与SDK的联合调试方法-使用ILA的更多相关文章

  1. 痞子衡嵌入式:大话双核i.MXRT1170之在线联合调试双核工程的三种方法(IAR篇)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是i.MXRT1170下在线联合调试双核工程的方法(基于IAR). 前段时间痞子衡写过一篇<双核i.MXRT1170之单独在线调试从 ...

  2. vivado和modelsim联合调试仿真

    vivado和modelsim联合调试仿真 0赞 发表于 2017/5/10 19:10:59 阅读(881) 评论(0) 使用vivado和modelsim联合调试仿真时,在破解完modelsim后 ...

  3. LeanCloud SDK 中秒杀70%问题的调试方法

    非常多同学在LeanCloud上遇到的不少问题,事实上能够自我解决的,如今介绍一下LeanCloud上的调试方法. LeanCloud 是通过 REST API来进行前后端分离的.这意味着当出现故障的 ...

  4. NDK开发历程(一):android native code的调试方法

    引用:http://www.cnblogs.com/ychellboy/archive/2013/02/22/2922683.html 使用NDK在android上做开发是一件“痛并快乐着”的差事,之 ...

  5. Jni 调试 : eclipse + Vs 联合调试

    摘要: 本文原创,转载请注明地址 http://www.cnblogs.com/baokang/p/4982640.html 1.在Eclipse 中,Java 类中链接库引用到vs的debug目录下 ...

  6. Linux内核调试方法总结【转】

    转自:http://my.oschina.net/fgq611/blog/113249 内核开发比用户空间开发更难的一个因素就是内核调试艰难.内核错误往往会导致系统宕机,很难保留出错时的现场.调试内核 ...

  7. 【转】Linux内核调试方法总结

    目录[-] 一  调试前的准备 二  内核中的bug 三  内核调试配置选项 1  内核配置 2  调试原子操作 四  引发bug并打印信息 1  BUG()和BUG_ON() 2  dump_sta ...

  8. 工具使用——MATLAB基本调试方法

    作者:桂. 时间:2017-02-28  07:06:30 链接:http://www.cnblogs.com/xingshansi/articles/6477185.html 声明:转载请注明出处, ...

  9. Linux内核调试方法总结

    Linux内核调试方法总结 一  调试前的准备 二  内核中的bug 三  内核调试配置选项 1  内核配置 2  调试原子操作 四  引发bug并打印信息 1  BUG()和BUG_ON() 2   ...

随机推荐

  1. 源代码解析Android中View的layout布局过程

    Android中的Veiw从内存中到呈如今UI界面上须要依次经历三个阶段:量算 -> 布局 -> 画图,关于View的量算.布局.画图的整体机制可參见博文 < Android中Vie ...

  2. word2vec训练中文模型

    --  这篇文章是一个学习.分析的博客 --- 1.准备数据与预处理 首先需要一份比较大的中文语料数据,可以考虑中文的维基百科(也可以试试搜狗的新闻语料库).中文维基百科的打包文件地址为 https: ...

  3. 批处理转exe工具(Quick Batch File Compiler )|bat格式化exe

    看到的,就是回忆.历史总是那么漫不经心,走完一生.留下可以记忆的脚本.... 对于window编写的bat脚本,想加密吗? 你所想的,前辈们基本上都有产出成果.所以在这个开源.共享.进步的互联网时代. ...

  4. blktrace + blkparse + btt 分析IO

    blktrace是一款block层的trace工具,block层在IO路径上的位置: 一个IO的生命周期大约是: ● I/O enters block layer – it can be: – Rem ...

  5. Indy Changed from Indy10

    Indy Changed from Indy10 http://stackoverflow.com/questions/16339656/delphi-xe4-indy-compatibility-i ...

  6. DMA直接内存存取原理

    DMA是指外部设备不通过CPU而直接与系统内存交换数据的接口技术. 要把外设的数据读入内存或把内存的数据传送到外设,一般都要通过CPU控制完成,如CPU程序查询或中断方式.利用中断进行数据传送,可以大 ...

  7. linux之间文件传输(之scp)

    linux的scp命令 linux 的 scp 命令 可以 在 linux 之间复制 文件 和 目录: ==================scp 命令==================scp 可以 ...

  8. 如何在Android Studio项目中导入开源库?

    前两天,谷歌发布了Android Studio 1.0的正式版,也有更多的人开始迁移到Android Studio进行开发.然而,网上很多的开源库,控件等还是以前的基于Eclipse进行开发,很多人不 ...

  9. Win10企业版转专业版

    原文地址:https://jingyan.baidu.com/article/86112f136624322737978797.html 转换ISO镜像下载地址: ed2k://|file|cn_wi ...

  10. PreparedStatement的用法及优点

    jdbc(java database connectivity,java数据库连接)的api中的主要的四个类之一的java.sql.statement要求开发者付出大量的时间和精力.在使用statem ...