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


    【第二季】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。

    wpsA506.tmp

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

    wpsA507.tmp

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

    wpsA518.tmp

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

    wpsA519.tmp

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

    wpsA51A.tmp

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

    wpsA52B.tmp

    Step8:单击Click on Run Connection Automation。

    wpsA52C.tmp

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

    wpsA53D.tmp

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

    wpsA53E.tmp

    Step10:单击IP icon wpsA53F.tmp 添加 ila CORE

    wpsA550.tmp

    Step11:双击打开ILA CORE

    wpsA551.tmp

    Step12:双击打开ILA CORE

    General Options设置如下

    wpsA552.tmp

    Probe_Ports设置如下,之后单击OK

    wpsA562.tmp

    Step13:连接Probe0到GPIO_LED。

    Step14:连接CLK接口到FCLK_CLK0接口

    Step15:连接TRIGG_IN 和 TRIGGER_OUT_0、TRIG_OUT和TRIGGER_IN_0

    Step16:添加 IP icon wpsA563.tmp 添加vio。

    wpsA564.tmp

    Step17:双击 VIO core修改参数

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

    wpsA575.tmp

    Probe_in设置位宽为9

    wpsA576.tmp

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

    wpsA577.tmp

    Step18:连接

    PROBE_IN -> result

    PROBE_OUT0 -> sel

    PROBE_OUT1 -> ain_vio

    PROBE_OUT2 -> bin_vio

    CLK-> FCLK_CKL0

    wpsA587.tmp

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

    wpsA588.tmp

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

    Step21:右击选择Mark Debug

    wpsA589.tmp

    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)

    wpsA59A.tmp

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

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

    wpsA59B.tmp

    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,双击创建一个系统调试。

    wpsA59C.tmp

    Step6:设置系统调试。

    wpsA5AD.tmp

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

    wpsA5AE.tmp

    Step8:加载完成后的界面

    wpsA5AF.tmp

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

    wpsA5BF.tmp

    Step10:设置触发条件为1

    wpsA5C0.tmp

    Step11:设置触发位置为512

    wpsA5C1.tmp

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

    wpsA5D2.tmp

    Step13:进入等待触发状态

    wpsA5D3.tmp

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

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

    wpsA5D4.tmp

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

    wpsA5E5.tmp

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

    wpsA5E6.tmp

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

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

    wpsA5F8.tmp

    11.4 本章小结

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

  • 相关阅读:
    HeadFirst设计模式C++实现-AbstractFactory模式
    Head First设计模式C++实现Singleton模式
    系统程序员成长计划动态数组(三)(上)
    一种OPENSSL_Uplink(100F2010,05): no OPENSSL_Applink解决方法
    系统程序员成长计划动态数组(四)
    Head First设计模式C++实现Command模式
    EJB>事务管理服务 小强斋
    EJB>事务管理服务 小强斋
    EJB>实体继承 小强斋
    EJB>事务管理服务 小强斋
  • 原文地址:https://www.cnblogs.com/milinker/p/6474692.html
Copyright © 2020-2023  润新知