【第二季】CH11_ ZYNQ软硬调试高级技巧

软件和硬件的完美结合才是SOC的优势和长处,那么开发ZYNQ就需要掌握软件和硬件开发的调试技巧,这样才能同时分析软件或者硬件的运行情况,找到问题,最终解决。那么本章将通过一个简单的例子带大家使用vivado+SDK进行系统的调试。

11.1 方案框架

这个实验中,我们将在上一章工程的基础上添加一个名为MATH_IP的 Custom IP.并且添加Mark Debug观察AXI4-Lite总线上的工作情况,添加VIO CORE观察MATH_IP的工作情况,添加ILA CORE观察LED的PIN脚输出情况。

11.2 硬件工程搭建

Step1:做好备份后,直接打开上一章节的硬件工程。

Step2:在Project manager区中单击Project settings。

Step3:选择IP设置区中的repository manager。

Step:4:单击+号图标,将math_ip_0的路径添加进去(math_ip可在我们附带的第十一章程序文件夹中的Miz_ip_lib文件夹中找到),单击OK。

Step5:双击ZYNQ processing System图标,配置IP。

Step6:展开PS-PL Cross Trigger interface >Input Cross Trigger, Cross Trigger Input 0设置为:CPU0 DBG REQ、Output Cross Trigger设置为CPU0 DBG ACK,单击OK完成修改。

Step7:单击 IP icon 搜索单词“math ”之后双击添加IPCORE。

Step8:单击Click on Run Connection Automation。

Step9:勾选math_ip_0 and S_AX之后单击OK。

这个mathi_ip实际上是一个简单的硬件加法器。虽然这个简单的加法器在这里没有实用意义,但是如果换成了硬件算法,那么就具备实用价值了。红色的方框内ain_vio和bin_vio是我们准备通过逻辑分析抓去的观察信号。

Step10:单击IP icon 添加 ila CORE

Step11:双击打开ILA CORE

Step12:双击打开ILA CORE

General Options设置如下

Probe_Ports设置如下,之后单击OK

Step13:连接Probe0到GPIO_LED。

Step14:连接CLK接口到FCLK_CLK0接口

Step15:连接TRIGG_IN 和 TRIGGER_OUT_0、TRIG_OUT和TRIGGER_IN_0

Step16:添加 IP icon 添加vio。

Step17:双击 VIO core修改参数

General Options 设置如下,输入proble为1 输出为3

Probe_in设置位宽为9

Probe_out0设置位宽:1;Probe_out1设置位宽:8;Probe_out2设置位宽:8;

Step18:连接

PROBE_IN -> result

PROBE_OUT0 -> sel

PROBE_OUT1 -> ain_vio

PROBE_OUT2 -> bin_vio

CLK-> FCLK_CKL0

Step19:连接好的系统整体电路。

Step20:选中AXI Interconnect 和math_0 CORE之间的S_AXI总线

Step21:右击选择Mark Debug

Setp22:接下来依然是,右键单击Block文件,文件选择Generate the Output Products。

Step23:继续右键单击Block文件,选择Create a HDL wrapper,根据Block文件内容产生一个HDL 的顶层文件,并选择让vivado自动完成。

Setp24:单击Run Synthesis,如果有 Save 对话框弹出选择保存。

Setp25:综合结束后选择Synthesized Design option单击 OK。

Step26:在如下对话框中找到Unassigned debug nets(如果对话框没有出现选择 菜单->Window > Debug)

Step27:右击 Unassigned Debug Nets 选择Set up Debug… 之后单击 Next

Step28:删除红色错误的信号然后单击Next 到结束

Step29:生成Bit文件。

11.3 加载到SDK

Step1:导出硬件。

Step2:新建一个空SDK工程,并添加一个main.c的文件。

Step3:在main.c文件中添加以下程序,按Ctrl+S保存后自动开始编译。

/*

* main.c

*

*  Created on: 2016年11月8日

*      Author: Administrator

*/

#include <stdio.h>

#include "xparameters.h"

#include "xil_io.h"

#include "sleep.h"

#include "xil_types.h"

#define XGpio_axi_WriteReg(BaseAddr, RegOffset, Data) \

Xil_Out32((BaseAddr) + (u32)(RegOffset), (u32)(Data))

#define XPAR_GPIO_LITE_ML_0 XPAR_GPIO_LITE_ML_0_BASEADDR

#define GPIO_LITE_ML_REG0 0

#define MATH_IP_BASE XPAR_MATH_IP_0_BASEADDR

#define MATH_REG0 0

#define MATH_REG1 4

#define MATH_REG2 0

int main()

{

u8 i=0;

u8 val=0;

Xil_Out32(MATH_IP_BASE+MATH_REG0,0X42);

Xil_Out32(MATH_IP_BASE+MATH_REG1,0X12);

val = Xil_In32(MATH_IP_BASE+MATH_REG2);

xil_printf("val=%x",val);

XGpio_axi_WriteReg(XPAR_GPIO_LITE_ML_0,GPIO_LITE_ML_REG0,0X00);

while(1)

{

for(i=0;i<=3;i++)

{

XGpio_axi_WriteReg(XPAR_GPIO_LITE_ML_0,GPIO_LITE_ML_REG0,1<<i);

usleep(500000);

}

i=0;

}

}

Step4:右击工程,选择Debug as ->Debug configuration。

Step5:选中system Debugger,双击创建一个系统调试。

Step6:设置系统调试。

Step7:回到VIVADO单击Open Target->Auto Connect

Step8:加载完成后的界面

Step9:选择菜单->window->Debugprobes 选择AXI_WVALID做为触发信号

Step10:设置触发条件为1

Step11:设置触发位置为512

Step12:单击箭头所指向启动触发

Step13:进入等待触发状态

Step14:打开系统自带的串口调试软件。

Step15:在以下位置加入断点(在图中位置双击即可加入断点),方便调试。

Step16:单击运行后VIVADO  HW_ILA2 窗口采集到波形输出,可以看到AXI总线的工作时序。

Step17:同时可以观察到VIO核采集到的数据

Step18:当再次单击后控制台输出0X54

Step19:HW_ILA1 窗口采集到的数据是GPIO_LED的值为0x02,同时可观察到开发板上的LED2亮起。


11.4 本章小结

在这个实验中,笔者添加了一个用户自定义的IP CORE 并且通过使用VIO CORE观察其数据。通过ILA CORE观察 AXI总线的通信时序情况,以及EMIO 的输出情况。其中难点就是SDK 和VIVAOD的联合调试。

【第二季】CH11_ ZYNQ软硬调试高级技巧的更多相关文章

  1. 第八章 ZYNQ-MIZ701 软硬调试高级技巧

      软件和硬件的完美结合才是SOC的优势和长处,那么开发ZYNQ就需要掌握软件和硬件开发的调试技巧,这样才能同时分析软件或者硬件的运行情况,找到问题,最终解决.那么本章将通过一个简单的例子带大家使用v ...

  2. [转][南京米联ZYNQ深入浅出]第二季更新完毕课程共计16节课

    [南京米联]ZYNQ第二季更新完毕课程共计16节课 [第二季ZYNQ]                                                                  ...

  3. [第二季ZYNQ] [南京米联]ZYNQ第二季更新完毕课程共计16节课

    ZYNQ第二季更新完毕课程共计16节课全部免费 [第二季ZYNQ]                                                                    ...

  4. 一起做RGB-D SLAM 第二季 (一)

    小萝卜:师兄!过年啦!是不是很无聊啊!普通人的生活就是赚钱花钱,实在是很没意思啊! 师兄:是啊…… 小萝卜:他们都不懂搞科研和码代码的乐趣呀! 师兄:可不是嘛…… 小萝卜:所以今年过年,我们再做一个S ...

  5. 再造轮子之网易彩票-第二季(IOS 篇 by sixleaves)

    02-彩票项目第二季 2.封装SWPTabBar方式一 接着我们思考如何进行封装.前面已经将过了为什么要封装, 和封装达到的效果.这里我们主要有两种封装方式,分别是站在不同的角度上看待问题.虽然角度不 ...

  6. 《舌尖上的中国》第二季今日首播了,天猫食品也跟着首发,借力使力[bubuko.com]

    天猫旗下的天猫食品与央视CCTV-1栏目<舌尖上的中国>第二季(以下简称“舌尖2”)达成合作,天猫食品成为舌尖2独家合作平台,同步首发每期 节目中的食材和美食菜谱,舌尖2摄制组还将为同步上 ...

  7. JAVA入门第二季(mooc-笔记)

    相关信息 /** * @subject <学习与创业>作业1 * @author 信管1142班 201411671210 赖俊杰 * @className <JAVA入门第二季&g ...

  8. Big Data 應用:第二季(4~6月)台湾地区Game APP 变动分布趋势图

    图表简介: 该示意图表示了台湾地区第二季内所有Game APP类别的分布情形,经由该图表我们可以快速的了解到在这三个月内,哪类型的APP是很稳定:抑或者哪类型的APP是非常不稳定的. 名词解释: 类别 ...

  9. QQ聊天界面的布局和设计(IOS篇)-第二季

    QQChat Layout - 第二季 本来第二季是快写好了, 也花了点功夫, 结果gitbook出了点问题, 给没掉了.有些细节可能会一带而过, 如有疑问, 相互交流进步~. 在第一季中我们完成了Q ...

随机推荐

  1. 5.3.3 自定义writable和RawComparatorWritable

    5.3.3 自定义writable (1)构造员工writable Hadoop虽然已经实现了一些非常有用的Writable,而且你可以使用他们的组合做很多事情,但是如果你想构造一些更加复杂的结果,你 ...

  2. pwn学习日记Day17 《程序员的自我修养》读书笔记

    静态链接章小结 本章首先学习了静态链接的第一步骤,即目标文件在被链接成最终可执行文件时,输入目标文件中的各段是如何被合并到输出文件中的,链接器如何为它们分配在输出文件中的空间和地址.一旦输入段中的最终 ...

  3. 攻防世界Hello,CTF writeup

    解题过程 首先在ida中进行反汇编,查看main函数的代码: 代码的的36行处进行了一个字符串比较,如果v10的值等于v13的值会反馈一个success的输出.v13的值在第15行给出,因此需要知道v ...

  4. 使用vagrant一键部署本地php开发环境(一)

    一:我们为什么需要用这玩意 我们在开发中经常会面临的问题:环境不一致,有人用Mac有人用Windos还有几个用linux的,而我们的服务器都是linux.    在我本地是可以的啊,我测了都,没有问题 ...

  5. Maven-Profile 环境隔离

    作用 快速切换不同的配置环境,比如开发时是连接的本地数据库,发布线上时是另外的数据库,每次编译打包时都要修该配置文件比较麻烦,这时就可以使用环境隔离了. 配置 本地(Local), 开发(Dev), ...

  6. poj1734

    Sightseeing trip Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9078   Accepted: 3380 ...

  7. C#问答题与附解收集(三)

    post.get的区别 答: GET把参数包含在URL中,POST通过request body传递参数.GET请求在URL中传送的参数是有长度限制的,而POST没有.使用post提交的页面在点击[刷新 ...

  8. vsCode多选多个元素进行统一修改

    如果你没有修改过vsCode的快捷键那么你可以按住"ctrl+d",然后逐个选中你要修改的元素,选完之后松开,你就可以敲击键盘愉快的修改了...如果你使用了ecliplse快捷键插 ...

  9. python小白之字典使用笔记

    Python 字典(Dictionary)   字典是一种可变容器模型,且可存储任意类型对象. 每个键值 key=>value 对,用冒号 : 分割 每个键值对之间用逗号 , 分割 整个字典包括 ...

  10. 按下F2编辑dxDBTreeView的节点

    在TdxDBTreeView控件的OnKeyDown事件中写入if Key = VK_F2 thenbegin  if DBTreeMain.DBSelected = nil then    Exit ...