Vivado使用IP核创建ILA调试环境

创建ILA核

1.在IP核中找到ILA
在这里插入图片描述
2.在这里插入图片描述

General Options(常规选项)主要有如下三部分:
1.Monitor Type:ILA 探针接口类型设置,ILA 探针接口有两种类型,Native 与 AXI。Native 是普通接口模式;AXI 是 AXI 接口模式,用于调试 AXI 接口信号。Native 通常是用来测量电平或一定位宽信号,AXI 就比较明显了直接测量 AXI 总线的信号。这里主要测试 led 信号,所以只需要用 Native 模式。

1)Number of Probes:探针数量最大可设置 64 个。根据led实验的需求,对 rst_n、led、count信号抓取后进行线调试,这里设置探针数量为 3。
pic=300x100在这里插入图片描述

2)Sample Data Depth:采样数据深度,设置的数值越大,采样的数据越多,看到的波形数据越多,但是最终占用的资源也会越多,并不是设置的越大越好。这里选择设置 4096。
pic=400x在这里插入图片描述
3)Same Number of Comparators for All Probe Ports:这里是设置相同探针接口的 Comparators 的个数,如果该选项不被勾选,接下来的 Number of Comparators 选项就会消失。LED实验默认勾选,后面的参数也保持默认。
pic=400x在这里插入图片描述
4)Trigger Out Port:触发输出端口,可用于 ILA 模块的级联或一些高级功能,具体使用参考 IP 手册。LED实验的在线调试数据只需要基本功能,这里保持默认不勾选。
5)Trigger In Port:触发输入端口,可用于手工设置添加触发信号或进行 ILA 模块的级联或一些高级功能,具体使用参考 IP 手册。LED实验的在线调试数据只需要基本功能,这里保持默认不勾选。
6)Input Pipe Stages:设置待探测信号打拍次数,如下图所示,可设置数值 0~6,一般情况下,采样时钟和探测信号是一个时钟域下,这里可以默认设置为 0 即可。
在这里插入图片描述

2.Trigger And Storage settings:触发器和存储设置。
1)Capture Control:捕获控制,支持基本触发(时间点捕获)外的捕获类型,比如信号变化的间歇捕获。如果勾选,可在调试查看波形窗口进行对 Capture mode 的设置;如果不勾选,后面有关Capture mode 就不可修改,会保持常用捕获模式。常用捕获模式满足大部分调试需求,所以LED实验我们这里不勾选,使用默认的常用捕获模式。
2)Advanced Trigger:高级触发,该模式下可以创建和使用复杂的触发序列。如果这里勾选,可在调试查看波形窗口进行对 Trigger mode 的设置;如果不勾选,后面有关 Trigger mode 就不可修改。LED的调试不需要使用高级触发,所以这里不勾选。如果有需要高级触发调试需求的可以详细阅读 Xilinx 官方的文档 UG936《Vivado Design Suite TutorialProgramming and Debugging》与 UG908《Vivado Design Suite User Guide Programming and Debugging》。
在这里插入图片描述

综上,最终配置如下:
在这里插入图片描述

接下来对 Probe_Ports(探针端口)进行配置:
在这里插入图片描述

1)Probe Port:探针。因为呼吸灯我们抓取了rst_n、led、count 信号 3个信号,探针数设置的个数为 3,对应上图最左边一列的 PEOBE0 ~PEOBE2。
2)Probe Width:设置探针信号的位宽。rst_n、led 信号位宽为 1,计数[26:0]count位宽为27。
3)Number of Comparators:如果已经勾选,这里就不可设置,如果没有勾选,这里就可以设置。保持默认即可。
4)Probe Trigger or Data:对探针设置触发器或数据。
DATA AND TRIGGER:既是数据又可作为触发条件;
DATA:仅作为数据,不可作为触发条件;
TRIGGER:仅可作为触发条件

最终设置如下:
在这里插入图片描述

以上LED实验的 ILA IP 核配置完成,接下来点击右下角的“OK”退出配置界面,如下图所示:
在这里插入图片描述

接下来会弹出下图对话框,直接点击“Generate”即可,此时 Vivado 就开始对该 ILA IP 核进行 OOC(Out-of-Context)综合:
pic=400x在这里插入图片描述
1)图中 Synthesis Options 选择的是 Out of context per IP,简称 OOC。
Vivado OOC 综合的概念:对于顶层设计,Vivado 使用自顶向下的全(Global)综合方式,将顶层之下的所有逻辑模块都进行综合,但是设置为 OOC 方式的模块除外,它们独立于顶层设计而单独综合。通常在整个设计周期中,顶层设计会被多次修改并综合,但有些子模块在创建完毕之后不会因为顶层设计的修改而被修改,如 IP,它们被设置为 OOC 综合方式。OOC 模块只会在综合顶层之前被综合一次,这样在顶层的设计迭代过程中,OOC 模块就不必跟随顶层模块而一次次产生相同结果的多余综合了,所以 OOC 流程减少了设计的周期,并消除了设计迭代,使可以保存和重用综合结果。
2)Number of jobs 和计算机编译时调用的 CPU 核的数量相关,利用较多的资源能够获得较快的编译速度。

OOC综合完毕后如图所示:
在这里插入图片描述
这时在"Source"窗口可以看到LIA IP核:
pic=400x在这里插入图片描述
由于还没有把它例化到顶层的 HDL 代码中,所以在层次结构上它与顶层并排。下面将其例化到顶层的 HDL 代码中。在“Source”窗口中的“IP Sources”选项卡中双击 ILA IP 核的例化模板文本文件,找到例化模板的内容,如下图所示:
在这里插入图片描述

将上图红色方框中的模板代码复制并粘贴到 led.v 顶层 HDL 代码中,并将 ILA 的时钟和探针信号连接到顶层设计中,例化 ILA IP 核的代码如下:

ila_0 u_ila_0 (
	.clk(clk), // input wire clk


	.probe0(rst_n), // input wire [0:0]  probe0  
	.probe1(led), // input wire [0:0]  probe1 
	.probe2(cunt) // input wire [26:0]  probe2
);

将顶层时钟 clk 连接到 ILA 的采样时钟上,probe0 探针连接到了rst_n信号;probe1 探针连接到了led信号;probe2 探针连接到了 count信号。代码修改完成后如下图所示:
在这里插入图片描述

保存源文件之后就可以直接综合并实现设计,最后生成比特流,然后将比特流下载到FPGA中,并对信号进行在线观察。至此,我们就成功地使用“HDL实例化调试探针”方法将ILA IP核添加到了设计中。

观察调试信号

生成比特流之后,我们打开 Hardware Manager,连接到开发板并下载比特流,如下图所示:
在这里插入图片描述
在弹出的窗口中,Vivado 会自动识别比特流文件和具有调试探针信息的.ltx 文件,如下图所示:
pic=400x在这里插入图片描述
.ltx 文件存储了调试探针的信息,用来传递给 Vivado IDE,它是从我们的设计中被提取出来的。调试探测文件是在实现过程中自动创建的,并位于和比特流文件相同的目录下。若实现后的设计中包含了 ILA IP 核,则在下载比特流时,Vivado 会自动识别出.ltx 文件。直接点击“Program”,此时 Vivado 会自动打开 ILA 的调试窗口:
在这里插入图片描述
如果有时候 ILA 的采样波形窗口界面没有自动弹出,可以点击左侧 hardware 窗口中带 ila 特征的硬件选择按钮,如本例中点击 hw_ila_1 以重新启动 ILA 采样波形。
pic=400x在这里插入图片描述
如果窗口中显示的信号不全,点击加号,将所有的探针信号添加到波形窗口中:
在这里插入图片描述

信号添加完成后,开始进行触发动作。在波形窗口中有 4 个触发动作,如下图所示:在这里插入图片描述
从左至右依次是:循环触发、开始触发、立即触发、停止触发。

(1)循环触发,它和“开始触发”按钮联合在一起使用。若打开了此选项,再点击了“开始触发”按钮后,会不断地对触发条件进行检测,直到用户点击了“停止触发”按钮,波形将不再更新。如果探针一直没有检测到触发条件,那么触发操作一直在进行,直到点击停止触发按钮,这次触发操作才会结束。
(2)开始触发,点击之后 ILA 就会开始进行触发操作。点击该按钮后,ila 探针自动寻找触发条件,当探针检测到触发条件后,会将 RAM 中存储的探针值数据上传到 Vivado,Vivado 上显示的波形发生改变,一次触发操作完成;如果探针一直没有检测到触发条件,那么触发操作一直在进行,直到点击停止触发按钮,这次触发操作才会结束。
(3)立即触发,立即将当前 RAM 中的数据上传到 Vivado,而不管触发条件是否得到满足。
(4)停止触发,停止当前正在进行的触发活动。

点击开始触发采集信号的按钮,可以观察到此时信号的波形:
在这里插入图片描述
采集到信号后,可以点击上图中的放大和缩小的图标:在这里插入图片描述
波形默认十六进制,右击信号选择“Radix”→“UnsignedDecimal”,即可切换到无符号的十进制:在这里插入图片描述
接下来介绍 ILA Croe 的状态控制和显示窗口:pic=400x在这里插入图片描述
1)Core status:由 5 个空心圆表示,实心绿色点在第一个,表示 ILA 开始运行;实心绿色点在最后,表示 ILA 运行结束;实心绿色点在中间的三个圆,表示 ILA 正在运行中。
2)indow sample 0 of 4096:已采集的点数占总采集点数的关系,与设置的采样深度一致;由图可知采样结束时我们已采集的点数是 4096个。

在“Trigger Setup”窗口中添加触发条件,点击“+”号,将信号添加进来,触发方式有很多种选择,选择好一种触发方式后点击“开始触发”。
在这里插入图片描述

调试结束

在线调试操作完成后需要删除在线调试的 ILA IP 核,可以进行如下图操作,首先删除在线调试的 ILA IP 核:
pic=400x在这里插入图片描述
需要勾选此选项,从磁盘中删除该 IP 核,然后点击“OK”,删除 ILA IP 完成。
pic=400x在这里插入图片描述

接下来再删除或者注释掉代码中的 ILA IP 核例化部分的代码,LED.v 的代码修改后需要重新保存:
在这里插入图片描述
至此,整个流程结束。