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

2024-02-19 07:59

本文主要是介绍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。
在这里插入图片描述

2)Sample Data Depth:采样数据深度,设置的数值越大,采样的数据越多,看到的波形数据越多,但是最终占用的资源也会越多,并不是设置的越大越好。这里选择设置 4096。
pic=400x在这里插入图片描述
3)Same Number of Comparators for All Probe Ports:这里是设置相同探针接口的 Comparators 的个数,如果该选项不被勾选,接下来的 Number of Comparators 选项就会消失。LED实验默认勾选,后面的参数也保持默认。
在这里插入图片描述
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 综合:
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 核的代码如下:

module LED(input 	clk,input   rst_n,output 	led);reg [26:0] count;  //zedboard的时钟频率是100Mhz,也就是计数100 000000为1s
reg led;
always @ (posedge clk or negedge rst_n)beginif(!rst_n) //低电平复位	count <= 27'd0;else if(count < 27'd100_000000)count <=count + 1'd1;elsecount <= 27'd0;
endalways@(posedge clk or negedge rst_n)beginif(!rst_n)led <= 1'b0;else if(count == 27'd99_999999)led <= !led;
endila_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(count) // 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 的代码修改后需要重新保存:
在这里插入图片描述
至此,整个流程结束。

这篇关于Vivado使用IP核创建ILA调试环境的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/724025

相关文章

Python使用Tenacity一行代码实现自动重试详解

《Python使用Tenacity一行代码实现自动重试详解》tenacity是一个专为Python设计的通用重试库,它的核心理念就是用简单、清晰的方式,为任何可能失败的操作添加重试能力,下面我们就来看... 目录一切始于一个简单的 API 调用Tenacity 入门:一行代码实现优雅重试精细控制:让重试按我

MySQL中EXISTS与IN用法使用与对比分析

《MySQL中EXISTS与IN用法使用与对比分析》在MySQL中,EXISTS和IN都用于子查询中根据另一个查询的结果来过滤主查询的记录,本文将基于工作原理、效率和应用场景进行全面对比... 目录一、基本用法详解1. IN 运算符2. EXISTS 运算符二、EXISTS 与 IN 的选择策略三、性能对比

SpringBoot多环境配置数据读取方式

《SpringBoot多环境配置数据读取方式》SpringBoot通过环境隔离机制,支持properties/yaml/yml多格式配置,结合@Value、Environment和@Configura... 目录一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式(传统格式)1.

使用Python构建智能BAT文件生成器的完美解决方案

《使用Python构建智能BAT文件生成器的完美解决方案》这篇文章主要为大家详细介绍了如何使用wxPython构建一个智能的BAT文件生成器,它不仅能够为Python脚本生成启动脚本,还提供了完整的文... 目录引言运行效果图项目背景与需求分析核心需求技术选型核心功能实现1. 数据库设计2. 界面布局设计3

使用IDEA部署Docker应用指南分享

《使用IDEA部署Docker应用指南分享》本文介绍了使用IDEA部署Docker应用的四步流程:创建Dockerfile、配置IDEADocker连接、设置运行调试环境、构建运行镜像,并强调需准备本... 目录一、创建 dockerfile 配置文件二、配置 IDEA 的 Docker 连接三、配置 Do

Android Paging 分页加载库使用实践

《AndroidPaging分页加载库使用实践》AndroidPaging库是Jetpack组件的一部分,它提供了一套完整的解决方案来处理大型数据集的分页加载,本文将深入探讨Paging库... 目录前言一、Paging 库概述二、Paging 3 核心组件1. PagingSource2. Pager3.

python使用try函数详解

《python使用try函数详解》Pythontry语句用于异常处理,支持捕获特定/多种异常、else/final子句确保资源释放,结合with语句自动清理,可自定义异常及嵌套结构,灵活应对错误场景... 目录try 函数的基本语法捕获特定异常捕获多个异常使用 else 子句使用 finally 子句捕获所

C++11右值引用与Lambda表达式的使用

《C++11右值引用与Lambda表达式的使用》C++11引入右值引用,实现移动语义提升性能,支持资源转移与完美转发;同时引入Lambda表达式,简化匿名函数定义,通过捕获列表和参数列表灵活处理变量... 目录C++11新特性右值引用和移动语义左值 / 右值常见的左值和右值移动语义移动构造函数移动复制运算符

Python对接支付宝支付之使用AliPay实现的详细操作指南

《Python对接支付宝支付之使用AliPay实现的详细操作指南》支付宝没有提供PythonSDK,但是强大的github就有提供python-alipay-sdk,封装里很多复杂操作,使用这个我们就... 目录一、引言二、准备工作2.1 支付宝开放平台入驻与应用创建2.2 密钥生成与配置2.3 安装ali

C#中lock关键字的使用小结

《C#中lock关键字的使用小结》在C#中,lock关键字用于确保当一个线程位于给定实例的代码块中时,其他线程无法访问同一实例的该代码块,下面就来介绍一下lock关键字的使用... 目录使用方式工作原理注意事项示例代码为什么不能lock值类型在C#中,lock关键字用于确保当一个线程位于给定实例的代码块中时