vivado ILA在线逻辑仪使用

目录:

    • 1、在线逻辑分析仪简介
    • 2、HDL 实例化调试探针流程(实验-闪烁灯)
    • 3、Hardware Manager中观察调试信号
    • 4、网表插入调试探针流程(实验-闪烁灯)

1、在线逻辑分析仪简介

在线逻辑分析仪借用了传统逻辑分析仪的理念以及大部分的功能,并利用 FPGA 中的逻辑资源,将这些功能植入到 FPGA 的设计当中。一般地,在线逻辑分析仪的应用原理框图如下图所示:
vivado ILA在线逻辑仪使用_第1张图片
​ 待测设计(Design Under Test,DUT)就是用户逻辑,它和片内的在线逻辑分析仪都位于 FPGA中。在线逻辑分析仪通过一个或多个探针(Probe)来采集希望观察的信号,然后通过片内的 JTAG 硬核组件,来将捕获到的数据传送给下载器,进而上传到 Vivado IDE 以供用户查看。Vivado IDE 也能够按照上述数据路径,反向地向 FPGA 中的在线逻辑分析仪传送一些控制信息。

​ 在 Vivado 中,在线逻辑分析仪的功能被称为“集成逻辑分析器(Integrated Logic Analyzer,ILA)”,它以 IP 核的形式来加入到用户设计中。。Vivado 提供了三种具有不同集成层次的插入 ILA 方法,主要为以下两种:

​ 第一种方法是直接在 HDL 代码中例化一个 ILA IP 核,也被称为“HDL 实例化调试探针流程”,这是集成层次最高的方法。ILA IP 核可以在 IP Catalog(IP 目录)中找到,并对其进行配置,以符合所需的调试需求。这是最直接的方法,但其灵活性也较差。在调试工作完毕之后,还需要在 HDL 源代码中删除 ILA IP核,然后重新综合并实现,以生成最终的比特流。

​ 第二种方法是在综合后的网表中,分别标记要进行调试观察的各个信号,然后通过一个简单的“Setup Debug”向导来设置各个探针和 ILA IP 核的工作参数,然后工具会根据用户设置的参数,自动地生成各个ILA IP 核。这个方法也被称为“网表插入调试探针流程”。在此流程中,用户不需要修改 HDL 源代码,并且能够单独控制每个 ILA IP 核以及每个探针,这样就提供了很大的灵活性。用户设置的调试信息会以 Tcl XDC 调试命令的形式保存到 XDC 约束文件中,在实现阶段,Vivado 会读取这些 XDC 调试命令,并在布局布线时加入这些 ILA IP 核。在调试工作完毕之后,用户就可以在综合后的网表中删除 ILA IP 核,或者在XDC 文件中删除调试命令,然后再对设计进行实现,以生成最终的比特流。

2、HDL 实例化调试探针流程(实验-闪烁灯)

“HDL 实例化调试探针流程”需要在 HDL 源代码中实例化 ILA IP 核,点击“IP Catalog”按钮,搜索栏中输入“ILA”,这时 Vivado 会自动根据关键词搜索出相应的结果,我们双击“ILA(Integrated Logic Analyzer)”,如下图所示:
vivado ILA在线逻辑仪使用_第2张图片
下来会弹出“ILA IP”核的配置页面,如下图所示:

vivado ILA在线逻辑仪使用_第3张图片
vivado ILA在线逻辑仪使用_第4张图片

​ IP 核的配置包含两个子页面,分别是“General Options”和“Probe_Ports(0…0)”, “General Options” 页面用于设置 ILA IP 核的总体设置,“Probe_Ports(0…0)”页面用于对每个探针的参数进行设置。

​ 在“General Options”页面中,“Number of Probes”一栏用于设置所需的探针数量,一般地,一个探针用于连接一个待测信号。“Sample Data Depth”用于设置采样深度,在每个采样时钟下,ILA 都会将捕获到的探针信号的值送入RAM 中。

​ 在“Probe_Ports(0…0)”页面中,用于设置每个探针的参数,一般我们只需设置探针宽度“Probe Width [1…4096]”一栏即可。
vivado ILA在线逻辑仪使用_第5张图片
​ 点击“Generate”即可,此时Vivado 就开始对该 ILA IP 核进行 OOC 综合了。

​ Vivado 的 OOC(Out-of-Context)综合,它们独立于顶层设计而单独综合,OOC 模块只会在综合顶层之前被综合一次,这样在顶层的设计迭代过程中,OOC 模块就不必跟随顶层模块,而一次次的产生相同结果的多余综合了。所以,OOC 流程减少了设计的周期,并消除了设计迭代,使您可以保存和重用综合结果。
vivado ILA在线逻辑仪使用_第6张图片
将图中的红色方框中的模板代码复制并粘贴到 led_twinkle.v 顶层 HDL 代码中,并将 ILA 的时钟和探针信号连接到顶层设计中,例化 ILA IP 核的代码如下:

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


	.probe0(sys_rst_n), // input wire [0:0]  probe0  
	.probe1(led), // input wire [1:0]  probe1 
	.probe2(cnt) // input wire [25:0]  probe2
);

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

3、Hardware Manager中观察调试信号

vivado ILA在线逻辑仪使用_第7张图片
生成比特流之后,我们打开 Hardware Manager,连接到开发板,并下载比特流。在弹出的窗口中,Vivado 会自动识别比特流文件和具有调试探针信息的.ltx 文件。

​ .ltx 文件存储了调试探针的信息,用来传递给 Vivado IDE,它是从我们的设计中被提取出来的。若实现后的设计中包含了ILA IP 核,则在下载比特流时,Vivado 会自动识别出.ltx 文件。

​ 直接点击“Program”,此时 Vivado 会自动打开 ILA 的调试窗口,如下图所示:
vivado ILA在线逻辑仪使用_第8张图片
下面开始触发条件的设置,在这里简要介绍一个触发的概念。前面我们介绍过,ILA 会将所采集到的探针数据存放在 RAM 中,然后通过 JTAG 和下载器上传到 Vivado。那么触发就是决定 ILA 会在什么时候将 RAM 中的探针值数据上传到 Vivado,当 ILA 检测到触发条件得到满足时,就会把 RAM 中的探针值数据上载到 Vivado,然后 Vivado 将探针数据的波形显示出来。
vivado ILA在线逻辑仪使用_第9张图片
然后我们就可以开始进行触发动作了。在波形窗口中有 4 个触发动作,如下图所示
在这里插入图片描述
从左至右依次是:(1)自动触发开关、(2)开始触发、(3)立即触发、(4)停止触发。

​ 我们这里直接点击“开始触发”按钮,而不打开“自动触发”开关。然后由于 cnt 计数器每隔 500ms就会计数到 25_000_000,所以我们几乎马上就可以看到波形窗口中出现了波形,如下图所示:
vivado ILA在线逻辑仪使用_第10张图片
添加复位信号,设置为下降沿触发,等待复位信号
vivado ILA在线逻辑仪使用_第11张图片
复位键按下,立即更新窗口信息
vivado ILA在线逻辑仪使用_第12张图片

4、网表插入调试探针流程(实验-闪烁灯)

网表插入调试探针流程需要在综合后的网表中,将要进行调试观察的各个信号标记“mark_debug”属性,然后通过“Setup Debug”向导来设置 ILA IP 核的参数,最后工具会根据参数来自动创建 ILA IP 核。

可以在综合之后的网表中手动选择网络并点击“mark_debug”按钮;也可以在综合之前在 HDL 代码中为想要观察的 reg 或 wire 信号添加“Mark Debug”综合属性,例如:

(* mark_debug = “true” *)reg [25:0] cnt ;

(* mark_debug = “true” )” 必须紧挨在变量声明的前面。这样,在综合完成之后并打开综合后的设计时,cnt 信号就自动被标记了“Mark Debug”属性。此外,被添加了(mark_debug = “true” )属性的 reg或 wire 信号不会被工具优化掉。

vivado ILA在线逻辑仪使用_第13张图片
vivado ILA在线逻辑仪使用_第14张图片

在“Debug”子窗口中的“Debug Cores”选项卡中,可以看到 Vivado已经添加了 ILA IP 核。
vivado ILA在线逻辑仪使用_第15张图片
在“网表插入调试探针流程”中,用户设置的调试信息最终会以 Tcl XDC 调试命令的形式保存到 XDC 约束文件中。Vivado 会从 XDC 约束文件中读取这些 XDC 调试命令,并在布局布线时加入这些 ILA IP 核。
vivado ILA在线逻辑仪使用_第16张图片
至此,我们就成功地使用“网表插入调试探针流程”将 ILA IP 核添加到了设计中。接下来就可以实现设计并生成比特流,最后将比特流下载到 FPGA 中,以对信号进行在线观察。
操作方法和“HDL 实例化调试探针”的观察波形信号一样,没有任何区别.

你可能感兴趣的:(FPGA)