zoukankan      html  css  js  c++  java
  • 【第二季】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的联合调试。

  • 相关阅读:
    (Good Bye 2019) Codeforces 1270B Interesting Subarray
    (Good Bye 2019) Codeforces 1270A Card Game
    Codeforces 1283D Christmas Trees(BFS)
    Codeforces 1283C Friends and Gifts
    Codeforces 1283B Candies Division
    1095 Cars on Campus (30)
    1080 Graduate Admission (30)
    1099 Build A Binary Search Tree (30)
    1018 Public Bike Management (30)
    1087 All Roads Lead to Rome (30)
  • 原文地址:https://www.cnblogs.com/milinker/p/6474692.html
Copyright © 2011-2022 走看看