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调试环境的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:https://blog.csdn.net/qq_47215080/article/details/135771569
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/724025

相关文章

使用Python自建轻量级的HTTP调试工具

《使用Python自建轻量级的HTTP调试工具》这篇文章主要为大家详细介绍了如何使用Python自建一个轻量级的HTTP调试工具,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下... 目录一、为什么需要自建工具二、核心功能设计三、技术选型四、分步实现五、进阶优化技巧六、使用示例七、性能对比八、扩展方向建

使用Python实现一键隐藏屏幕并锁定输入

《使用Python实现一键隐藏屏幕并锁定输入》本文主要介绍了使用Python编写一个一键隐藏屏幕并锁定输入的黑科技程序,能够在指定热键触发后立即遮挡屏幕,并禁止一切键盘鼠标输入,这样就再也不用担心自己... 目录1. 概述2. 功能亮点3.代码实现4.使用方法5. 展示效果6. 代码优化与拓展7. 总结1.

使用Python开发一个简单的本地图片服务器

《使用Python开发一个简单的本地图片服务器》本文介绍了如何结合wxPython构建的图形用户界面GUI和Python内建的Web服务器功能,在本地网络中搭建一个私人的,即开即用的网页相册,文中的示... 目录项目目标核心技术栈代码深度解析完整代码工作流程主要功能与优势潜在改进与思考运行结果总结你是否曾经

Linux中的计划任务(crontab)使用方式

《Linux中的计划任务(crontab)使用方式》:本文主要介绍Linux中的计划任务(crontab)使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、前言1、linux的起源与发展2、什么是计划任务(crontab)二、crontab基础1、cro

kotlin中const 和val的区别及使用场景分析

《kotlin中const和val的区别及使用场景分析》在Kotlin中,const和val都是用来声明常量的,但它们的使用场景和功能有所不同,下面给大家介绍kotlin中const和val的区别,... 目录kotlin中const 和val的区别1. val:2. const:二 代码示例1 Java

C++变换迭代器使用方法小结

《C++变换迭代器使用方法小结》本文主要介绍了C++变换迭代器使用方法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1、源码2、代码解析代码解析:transform_iterator1. transform_iterat

C++中std::distance使用方法示例

《C++中std::distance使用方法示例》std::distance是C++标准库中的一个函数,用于计算两个迭代器之间的距离,本文主要介绍了C++中std::distance使用方法示例,具... 目录语法使用方式解释示例输出:其他说明:总结std::distance&n编程bsp;是 C++ 标准

vue使用docxtemplater导出word

《vue使用docxtemplater导出word》docxtemplater是一种邮件合并工具,以编程方式使用并处理条件、循环,并且可以扩展以插入任何内容,下面我们来看看如何使用docxtempl... 目录docxtemplatervue使用docxtemplater导出word安装常用语法 封装导出方

Linux换行符的使用方法详解

《Linux换行符的使用方法详解》本文介绍了Linux中常用的换行符LF及其在文件中的表示,展示了如何使用sed命令替换换行符,并列举了与换行符处理相关的Linux命令,通过代码讲解的非常详细,需要的... 目录简介检测文件中的换行符使用 cat -A 查看换行符使用 od -c 检查字符换行符格式转换将

使用Jackson进行JSON生成与解析的新手指南

《使用Jackson进行JSON生成与解析的新手指南》这篇文章主要为大家详细介绍了如何使用Jackson进行JSON生成与解析处理,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 核心依赖2. 基础用法2.1 对象转 jsON(序列化)2.2 JSON 转对象(反序列化)3.