[X]关闭

1-2-04程序的固化和下载

文档创建者:uisrc
浏览次数:804
最后更新:2023-09-11
文档课程分类
AMD: FPGA部分(2024样板资料) » 1_START(适配所有型号) » 2-快速入门
03使用ILA IP、直接添加信号法和VIO进行调试
软件版本:vitis2021.1(vivado2021.1)
操作系统:WIN10 64bit
硬件平台:适用AMD-XILINX A7/K7/Z7/ZU/KU系列FPGA
登录"米联客"SOC|SOC社区-www.uisrc.com视频课程、答疑解惑!
1 概述
在开发工程中,我们需要对一些信号进行debug调试,如果对于CPU的软件开发一般可以设置断点,但是对于FPGA来说,FPGA是无法设置断电的,但是FPGA可以通过内嵌的逻辑分析仪(ILA)IP以及虚拟(VIO)IO IP实现在线调试。
本教程内容是我们快速入口课程,目的是尽量通过一个demo教大家熟悉我们软件的一个基础的操作,所以我们本节课基于我们前面已经完成的demo内容,进一步扩展一些简单的功能,然后学习使用我们的ILA以及VIO来对我们的代码进行调试。
2通过ILA IP核观察信号
ILA(Integrated Logic Analyzer)集成逻辑分析器:即Vivado的在线逻辑分析仪,其借用了传统逻辑分析仪的理念以及大部分的功能,并利用FPGA 中的逻辑资源,将这些功能植入到FPGA 的设计当中。ILA是用IP核的形式实现的。
在线逻辑分析仪通过一个或多个探针(Probe)来采集希望观察的信号,然后通过片内的JTAG 硬核组件,来将捕获到的数据传送给下载器,进而上传到Vivado IDE 以供用户查看。Vivado IDE 也能够按照上述数据路径,反向地向FPGA 中的在线逻辑分析仪传送一些控制信号。
2.1添加ILA IP核
Step1:打开IP Catalog,也就是IP库
2504661-20230911151141758-1063847003.jpg
Step2:输入关键词ila,双击打开ILA IP核
2504661-20230911151142301-715481014.jpg
2504661-20230911151142765-940174370.jpg
Step3:这边我们简单的捕捉一下LED灯的变化,所以我们使用一个探针,采样深度选择2048,并不要使用Capture模式。Capture模式如果选择了,我们可以选择一个条件信号,仅条件信号满足设置要求时,才会进行采样或者触发操作,我们后续课程中会使用到这个模式,这边入门阶段不要求掌握。
2504661-20230911151143320-1907146878.jpg
Step4:点击Probe_Ports,我们在这个页面下选择探针的位宽,我们本次打算捕捉2个LED灯信号,所以设置位宽为2。然后点击OK,IP核配置完成。
2504661-20230911151144090-1956929570.jpg
Step5:例化PLL IP核,将IP核添加进工程。
2504661-20230911151144604-810043845.jpg
在工程中添加如下代码,点击保存。这边我们要注意,ILA IP核需要添加一个时钟,该时钟信号应该为观察信号的同步时钟。
    ila_0 ila_led (
    .clk(clk0), // input wire clk
    .probe0(O_up_led) // input wire [1:0] probe0
);


到这里,我们的ILA IP核(在线逻辑分析仪)添加完成。
3学习使用VIO IP
Vivado中的VIO(Virtual Input/Output) IP核是一种用于调试和测试FPGA设计的IP核。它允许设计者通过使用JTAG接口读取和写入FPGA内部的寄存器,从而检查设计的运行状态并修改其行为。VIO IP核提供了一个简单易用的接口,使得用户可以轻松地与FPGA内部寄存器进行交互。通过使用VIO IP核,用户可以实时监视和修改设计中的信号,以便进行调试和验证。此外,VIO IP核还可以与其他IP核和设计组件配合使用,从而帮助设计者更好地理解和调试整个系统。
3.1添加VIO IP核
Step1:打开IP Catalog,也就是我们的IP库
2504661-20230911151145407-1960928595.jpg
Step2:输入关键词vio,即可找到我们需要使用的VIO IP核,双击对IP核进行配置。
2504661-20230911151145818-1037851219.jpg
Step3:首先是对VIO的虚拟输入/输出引脚的个数的配置。
Input Probe Count:VIO输入探头个数,即输入到VIO,需要查看实时数据值的信号个数;
Output Probe Count:VIO输出探头个数,即输出给其他模块的信号个数;
Enable Input Probe Activity Detectors:输入探头变化检测。若勾选,则在后续调试过程中,某个输入信号发生变化时,则会出现数据变化的提示;若不勾选,则无输入数据变化提示(注意,这里输入数据是指输入到VIO模块中的数据);
另外,在这里有一点值得注意:输入/输出探头的最大个数为256,而在该界面下,最多可以生成64个输入/输出探头的VIO IP核,如果要生成大于64的VIO IP核,则需要通过Tcl脚本进行生成。

2504661-20230911151146420-528822107.jpg
Step4:点击PROBE_IN_Ports,对输入探头的位宽进行设置,即我们需要观察的信号的位宽。我们需要观察的信号为2路LED灯的变化,所以位宽我们选择2。
2504661-20230911151146888-1043846264.jpg
Step5:点击PROBE_OUT_Ports,对输出探头的位宽进行设置,即输出到其他模块,用于计算或者控制的信号的位宽。我们这边打算输出的控制信号是控制LED转换的复位信号,所以需要将LED计数以及LED转换模块的复位信号修改成"restn"由于我们复位低电平有效,所以默认我们默认设置为0x1,我们可以通过手动修改这个值为0,来触发复位。
2504661-20230911151147303-322502805.jpg
对VIO IP核配置完成后,点击OK,生成IP核。
Step6:例化PLL IP核,将IP核添加进工程。
2504661-20230911151148288-1445727087.jpg
添加后我们工程代码如下,点击保存,到这里,我们的VIO IP核添加完成。
使用"restn"可以操控VIO来进行复位操作,但是因为LED寄存器无法正常初始化,所以会影响仿真的正常状态,如果想正常使用仿真,还需要将"restn"改回"pll_lock"

`timescale 1ns / 1ps

module pll_test(
input I_sysclk_p,//系统时钟输入
output [1:0]O_up_led//LED输出
  );

wire        clk0;
wire        pll_lock;
reg [25:0]  cnt;

//例化PLL模块
mypll mypll_u(
.reset(1'b0),         //PLL复位
.clk_out1(clk0),  //PLL输出时钟
.locked(pll_lock),      //PLL锁住
.clk_in1(I_sysclk_p)     //PLL输入时钟
);      

assign O_up_led = {cnt[25:24]};//输出计数器的高位用于驱动LED

//计数器
always @ (posedge clk0 or negedge restn)begin
    if(restn==1'b0)
      cnt <= 26'd0;
    else
      cnt <= cnt + 1'b1; //cnt power on initial value is all 1
end

    ila_0 ila_led (
    .clk(clk0), // input wire clk
    .probe0(O_up_led) // input wire [3:0] probe0
);
//VIO IP例化
vio_0 vio_led (
  .clk(clk0),                // input wire clk
  .probe_in0(O_up_led),    // input wire [1 : 0] probe_in0
  .probe_out0(restn)  // output wire [0 : 0] probe_out0
);
endmodule


4直接添加信号法
我们除了添加ILA IP去观察信号,我们还可以直接添加观察信号。下面我们就介绍一下这种方式。
Step1:打开RTL原理图,如果你的Schematic选项是灰色的,说明你没有综合,你需要先综合,再打开RTL原理图。
2504661-20230911151148706-1848985539.jpg
Step2:完成后,点击展开Nets,我们可以看到很多信号,有的信号上面有一个Debug的标志,是因为我们之前已经设置过ILA IP ,综合后认为该信号已经Debug,而且右键也无法重复设置Mark Debug
2504661-20230911151149081-2012842654.jpg
Step3:找到我们需要添加的信号寄存器信号,右键,Maek Debug。
2504661-20230911151149505-1951194296.jpg
Step4:设置完成后,寄存器信号前多了一个Debug标志,表示该信号设置成功,点击保存。
2504661-20230911151149916-2079912386.jpg
Step5:提示我们有更新,点击OK。

2504661-20230911151150322-1946351217.jpg
Step6:由于这种Debug方式是将Debug信息写入XDC文件的方式,所以提示我们需要更新XDC文件,我们可以选择覆盖现有的XDC文件,该选项并不会删除我们现有的XDC文件约束,而是将Debug信息添加在XDC约束后面,所以我们选择Overwrite。(如果没有该选项,说明你之前已经设置了默认添加的xdc文件)
2504661-20230911151150753-79313619.jpg
Step7:点击Set Up Debug,对我们刚才添加的BUG信号进行采样配置。
2504661-20230911151151110-1126510068.jpg
Step8:点击Next。
2504661-20230911151151535-475914934.jpg
Step9:出现我们添加的信号,我们保持默认,点击Next。
2504661-20230911151152118-2006959723.jpg
Step10:将采样深度设置为2048,其他保持默认,点击Next。
2504661-20230911151152531-1797039134.jpg
Step11:点击Finish,配置结束。
2504661-20230911151152957-937702978.jpg
Step12:等待配置完成后,点击xdc文件可以看到我们信号的配置信息。
2504661-20230911151153380-2044843704.jpg
到此我们直接添加信号法完成。
5编译测试
保存,点击开始编译,点击OK,开始编译,等待编译完成。
2504661-20230911151153760-1841686805.jpg
2504661-20230911151154118-2086642874.jpg
6下载程序
Step1:给开发板通电,并且连接下载器
Step2:单击OpenTarget 然后单击Auto Connect
2504661-20230911151154530-1087333132.jpg
Step3:连接成功后如下图所示:
2504661-20230911151155025-1997915314.jpg
Step4:单击Program Device
2504661-20230911151155364-273658075.jpg
Step5:单击选择上图的 FPGA,再单击Program Device,并且选择bit文件
2504661-20230911151155879-1260886856.jpg
Step6:下载过程
2504661-20230911151156267-67059139.jpg
6.1 ILA 使用
点击RUN就能观察到信号,但是我们的LED变换非常慢,加上我们设置的ILA深度比较小,所以我们仅仅只能观察到LED的某个时间的状态。
但是本教程主要是教会大家如何使用ILA,所以大家学会如何操作即可。
2504661-20230911151156635-1658403369.jpg
6.2 VIO 使用
Step1:双击VIO模块,添加进入VIO调试
2504661-20230911151157018-327635772.jpg
Step2:选择VIO模块窗口的名称,然后点击OK即可,这边我们保持默认
2504661-20230911151157961-96054765.jpg
Step3:添加信号进入观察窗口
2504661-20230911151158569-209635346.jpg
Step4:我们可以看到,LED信号随着时间不断的变化,同时我们的复位信号可以手动调节

2504661-20230911151158997-583966483.jpg
Step5:手动调节restn信号为0,进行复位,观察到开发板所有的LED全部熄灭,LED信号全部为0。
2504661-20230911151159394-923930189.jpg
Step5:手动调节restn信号为1,完成复位,开发板上LED灯闪烁恢复正常。
6.3 手动添加信号法使用
我们观察到我们手动添加的ila也正常产生。
2504661-20230911151159820-1586781951.jpg

Step1:设置触发条件为0时触发。
2504661-20230911151200297-608064839.jpg
Step2:点击RUN信号触发。
2504661-20230911151200755-1054348770.jpg
7本章小结
本章节主要学习了两种方法添加ILA以及ILA IP、VIO IP等调试工具的使用方法。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则