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并行处理实战之如何使用ProcessPoolExecutor加速计算

《Python并行处理实战之如何使用ProcessPoolExecutor加速计算》Python提供了多种并行处理的方式,其中concurrent.futures模块的ProcessPoolExecu... 目录简介完整代码示例代码解释1. 导入必要的模块2. 定义处理函数3. 主函数4. 生成数字列表5.

Python中help()和dir()函数的使用

《Python中help()和dir()函数的使用》我们经常需要查看某个对象(如模块、类、函数等)的属性和方法,Python提供了两个内置函数help()和dir(),它们可以帮助我们快速了解代... 目录1. 引言2. help() 函数2.1 作用2.2 使用方法2.3 示例(1) 查看内置函数的帮助(

Linux脚本(shell)的使用方式

《Linux脚本(shell)的使用方式》:本文主要介绍Linux脚本(shell)的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录概述语法详解数学运算表达式Shell变量变量分类环境变量Shell内部变量自定义变量:定义、赋值自定义变量:引用、修改、删

Java使用HttpClient实现图片下载与本地保存功能

《Java使用HttpClient实现图片下载与本地保存功能》在当今数字化时代,网络资源的获取与处理已成为软件开发中的常见需求,其中,图片作为网络上最常见的资源之一,其下载与保存功能在许多应用场景中都... 目录引言一、Apache HttpClient简介二、技术栈与环境准备三、实现图片下载与保存功能1.

Python中使用uv创建环境及原理举例详解

《Python中使用uv创建环境及原理举例详解》uv是Astral团队开发的高性能Python工具,整合包管理、虚拟环境、Python版本控制等功能,:本文主要介绍Python中使用uv创建环境及... 目录一、uv工具简介核心特点:二、安装uv1. 通过pip安装2. 通过脚本安装验证安装:配置镜像源(可

LiteFlow轻量级工作流引擎使用示例详解

《LiteFlow轻量级工作流引擎使用示例详解》:本文主要介绍LiteFlow是一个灵活、简洁且轻量的工作流引擎,适合用于中小型项目和微服务架构中的流程编排,本文给大家介绍LiteFlow轻量级工... 目录1. LiteFlow 主要特点2. 工作流定义方式3. LiteFlow 流程示例4. LiteF

使用Python开发一个现代化屏幕取色器

《使用Python开发一个现代化屏幕取色器》在UI设计、网页开发等场景中,颜色拾取是高频需求,:本文主要介绍如何使用Python开发一个现代化屏幕取色器,有需要的小伙伴可以参考一下... 目录一、项目概述二、核心功能解析2.1 实时颜色追踪2.2 智能颜色显示三、效果展示四、实现步骤详解4.1 环境配置4.

使用jenv工具管理多个JDK版本的方法步骤

《使用jenv工具管理多个JDK版本的方法步骤》jenv是一个开源的Java环境管理工具,旨在帮助开发者在同一台机器上轻松管理和切换多个Java版本,:本文主要介绍使用jenv工具管理多个JD... 目录一、jenv到底是干啥的?二、jenv的核心功能(一)管理多个Java版本(二)支持插件扩展(三)环境隔

SQL中JOIN操作的条件使用总结与实践

《SQL中JOIN操作的条件使用总结与实践》在SQL查询中,JOIN操作是多表关联的核心工具,本文将从原理,场景和最佳实践三个方面总结JOIN条件的使用规则,希望可以帮助开发者精准控制查询逻辑... 目录一、ON与WHERE的本质区别二、场景化条件使用规则三、最佳实践建议1.优先使用ON条件2.WHERE用

SpringBoot服务获取Pod当前IP的两种方案

《SpringBoot服务获取Pod当前IP的两种方案》在Kubernetes集群中,SpringBoot服务获取Pod当前IP的方案主要有两种,通过环境变量注入或通过Java代码动态获取网络接口IP... 目录方案一:通过 Kubernetes Downward API 注入环境变量原理步骤方案二:通过