10 在线逻辑分析仪的使用

在线逻辑分析仪简介

传统的 FPGA 板级调试是将逻辑分析仪连接到 FPGA 的 IO 引脚上 ,然后将内部信号引出至 IO 引脚,再进行板级调试,这种方法的缺点是我们需要一个逻辑分析仪,且还要在 PCB 中预留测试点。在线逻辑分析仪克服了以上所有的缺点,其借用了传统逻辑分析仪的理念以及大部分的功能,并利用 FPGA 中的逻辑资源,将这些功能植入到 FPGA 的设计当中,在线逻辑分析仪的应用原理框图如下图所示:
在这里插入图片描述
其中,待测设计(Design Under Test,DUT)就是用户逻辑,它和片内的在线逻辑分析仪都位于 FPGA中。在线逻辑分析仪通过一个或多个探针(Probe)来采集希望被观察的信号,然后通过片内的 JTAG 硬核组件,将捕获到的数据传送给下载器,进而上传到 Vivado 供用户查看。Vivado 也能够按照上述数据路径,反向地向 FPGA 中的在线逻辑分析仪传送一些控制信息。
在 Vivado 中,在线逻辑分析仪的功能被称为“集成逻辑分析器(Integrated Logic Analyzer,ILA)”,它以 IP 核的形式来加入到用户设计中。Vivado 提供了三种具有不同集成层次的插入 ILA 方法:

  1. 直接在 HDL 代码中例化一个 ILA IP 核,也被称为“HDL 实例化调试探针流程”,这是集成层次最高的方法。ILA IP 核可以在 IP Catalog(IP 目录)中找到,并对其进行配置,以符合所需的调试需求,这是最直接的方法,但其灵活性也较差。在调试工作完毕之后,还需要在 HDL 源代码中删除 ILA IP 核,然后重新综合以生成最终的比特流。
  2. 在 HDL 代码中为要观察的 reg 或 wire 信号添加“mark debug”属性,然后通过“Setup Debug”向导来设置各个探针和 ILA IP 核的工作参数,工具会根据用户设置的参数,自动地生成各个 ILA IP 核,这个方法也被称为“使用 Debug 标记创建 ILA 调试环境”。用户设置的调试信息会以 Tcl XDC 调试命令的形式保存到 XDC 约束文件中,在实现阶段,Vivado 会读取这些 XDC 调试命令,并在布局布线时加入这些 ILA IP 核。在调试工作完毕之后,用户可以在 HLD 代码中删除之前添加的“Mark Debug”综合属性,并且在 XDC 文件中删除调试命令,然后再对设计进行重新编译,以生成最终的比特流。
  3. 在综合后的网表中标记要观察的信号,然后通过“Setup Debug”向导来设置各个探针和 ILA IP 核的工作参数,工具会根据用户设置的参数,自动地生成各个 ILA IP 核。这个方法也被称为“网表插入调试探针流程”。在此流程中,用户不需要修改 HDL 源代码,并且能够单独控制每个 ILA IP 核以及每个探针,这样就提供了很大的灵活性。用户设置的调试信息会以 Tcl XDC 调试命令的形式保存到 XDC 约束文件中,在实现阶段,Vivado 会读取这些 XDC 调试命令,并在布局布线时加入这些 ILA IP 核。在调试工作完毕之后,用户就可以在 XDC 文件中删除调试命令,然后再对设计进行重新编译,以生成最终的比特流。第3种方法与第二种方法的使用区别很小,只是标记信号的方式不同,第2种是在综合前标记,第三种是在综合后标记

HDL 实例化调试探针流程

  1. 点击“Flow Navigator”窗口中的“IP Catalog”按钮
    在这里插入图片描述
    这时“IP Catalog”窗口就被打开了,如下图所示:
    在这里插入图片描述
  2. 搜索栏中输入“ILA”,这时 Vivado 会自动根据关键词搜索出相应的结果,然后双击“ILA(Integrated Logic Analyzer)”
    在这里插入图片描述
    双击“ILA(Integrated Logic Analyzer)”会弹出“ILA IP”核的配置页面,ILA IP 核的默认配置页面如下图所示:
    在这里插入图片描述
  • 工具栏介绍
    在这里插入图片描述
    左上角工具栏主要有 Documentation、IP Location、Switch to Defaults 三个设置。
    (1)Documentation:IP 相关文档入口,点击后会展开相应的菜单。其中”Product Guide IP“手册查看入口,点击可自动跳转到 Xilinx 官方文档 DocNav 软件;”Change Log“是 IP 版本更新记录,点击可显示 IP 更新记录;”Product Webpage“是 IP 的介绍网页版,点击可跳转到 Xilinx 官方有关该 IP 介绍的网站; ”Answer Records“是与 IP 相关的 Xilinx 官方疑问解答记录网页。
    (2)IP Location:设置 IP 的存放路径,点击后再弹出的对话框中可以选择 IP 的存放路径
    (3)Switch to Default:点击后会将所有设置恢复到默认值。
  • ILA IP 核命名
    在这里插入图片描述
    在”Component Name“中可以设置 IP 核的名称。
  • 配置参数介绍
    在这里插入图片描述
    General Options(常规选项)主要有两部分。
    (1)Monitor Type:ILA 探针接口类型设置,ILA 探针接口有两种类型,Native 与 AXI,Native 是普通接口模式;AXI 是 AXI 接口模式。Native 通常是用来测量电平或一定位宽信号,AXI 用来测量 AXI 总线的信号。这里以 Native 模式为例进行讲解。
        Number of Probes:探针数量设置,在 GUI 界面最大可设置 64 个,如果需要调试的内部信号超过 64 个,可以通过 TCL 脚本去生成 IP Core,或者可以通过生成多个 ILA IP Core 去调试更多信号。
        Sample Data Depth:采样数据深度,设置的数值越大,采样的数据越多,看到的波形数据越多,但是最终占用的资源也会越多,并不是设置的越大越好。
        Same Number of Comparators for All Probe Ports:这里是设置相同探针接口的 Comparators 的个数,如果该选项不被勾选,接下来的 Number of Comparators 选项就会消失。
        Trigger Out Port:触发输出端口,可用于 ILA 模块的级联或一些高级功能
        Trigger In Port:触发输入端口,可用于手工设置添加触发信号或进行 ILA 模块的级联或一些高级功能
        Input Pipe Stages:设置待探测信号打拍次数
    (2)Trigger And Storage settings:触发器和存储设置。
        Capture Control:捕获控制,支持基本触发(时间点捕获)外的捕获类型,比如信号变化的间歇捕获。这里如果勾选,可在调试查看波形窗口进行对 Capture mode 的设置;如果不勾选,后面有关 Capture mode 就不可修改,会保持常用捕获模式,基本捕获模式满足大部分调试需求。
        Advanced Trigger:高级触发,该模式下可以创建和使用复杂的触发序列。如果这里勾选,可在调试查看波形窗口进行对 Trigger mode 的设置;如果不勾选,后面有关 Trigger mode 就不可修改。
  1. 此处对09 呼吸灯中的代码进行调试,使用在线逻辑分析仪抓取顶层模块中的sys_rst_n、led、duty_cycle这3个信号,因此 ILA IP 核的配置如下:
    在这里插入图片描述
    在这里插入图片描述
  2. ILA IP 核配置完成,接下来点击右下角的“OK”退出配置界面,接下来就会弹出“Generate Output Products”对话框,保持默认设置,直接点击“Generate”即可,此时 Vivado 就开始对该 ILA IP 核进行 OOC(Out-of-Context)综合了
    在这里插入图片描述
    Vivado 使用自顶向下的全局(Global)综合方式,将顶层之下的所有逻辑模块都进行综合,但是设置为 OOC 方式的模块除外,它们独立于顶层设计而单独综合。通常在整个设计周期中,顶层设计会被多次修改并综合,但有些子模块在创建完毕之后不会因为顶层设计的修改而被修改,如 IP,它们可设置为 OOC 综合方式。OOC 模块只会在综合顶层之前被综合一次,这样在顶层的设计迭代过程中,OOC 模块就不必跟随顶层模块而一次次产生相同结果的多余综合了。
  3. 综合完成后在“Source”窗口中看到已经出现了 ILA IP 核。由于还没有把它例化到顶层的 HDL 代码中,所以在层次结构上它与顶层并排。
    在这里插入图片描述
  4. 例化ILA IP核,在顶层设计中加入如下代码:
//例化ILA IP核
ila_0 u_ila_inst0(.clk(sys_clk),					//input wire clk.probe0(sys_rst_n),				//input wire [0:0] Probe0.probe1(led),					//input wire [0:0] Probe1.probe2(duty_cycle)				//input wire [31:0] Probe2
);
  1. 至此完成了在设计中添加ILA IP核的工作。

“mark_debug”标记要调试的信号

  1. 在综合代码之前,需要在代码中对要调试的信号添加"mark_debug"属性(其中“(* mark_debug = “true” *)”必须紧挨在变量声明的前面)。
    在这里插入图片描述
  2. 点击“Flow Navigator”→“SYNTHESIS”窗口中的“Run Synthesis”进行综合
    在这里插入图片描述
    在这里插入图片描述
  3. 综合完成后,需要将 Debug 信号与探针关联,接下来点击“Flow Navigator”→“SYNTHESIS”窗口中的“Open Synthesized Design”按钮
    在这里插入图片描述
  4. 选择“Debug”窗口布局
    在这里插入图片描述
    此时,Vivado 打开了“Netlist”子窗口、“Schematic”子窗口、“Debug”子窗口,其中“Netlist”子窗口和“Schematic”子窗口都可以用于标记要进行观察的信号,“Debug”子窗口用于显示并设置 ILA IP 核的各个参数
    在这里插入图片描述
  5. 将 Debug 信号与探针关联,接下来点击“Flow Navigator”→“SYNTHESIS”→“Open Synthesized Design”窗口中“Set Up Debug”的按钮
    在这里插入图片描述
    点击“Set Up Debug”按钮后进入 Debug 信号与探针关联引导页面面,如下图所示,直接点击“Next”。
    在这里插入图片描述
    点击“Next”后进入未关联引脚配置页面,如下图所示。
    在这里插入图片描述
       Name:会列出所有需要进项调试的信号,即在 HDL 代码中添加“(* mark_debug = “true” *)”综合属性的信号且未关联的调试信号
       Clock Domain:是选择用于采样待测信号的时钟域,一般情况下 Vivado 会自动识别出各个待测信号所属的时钟域并将其自动设定为其采样时钟,若 Vivado 未识别出来,或者需要修改时钟域可以点击待测信号,在弹出的菜单中选择“Select Clock
       Domain”,打开“Select Clock Domain”窗口重新选择时钟域。
       Driver Cell:驱动单元
       Probe Type:对探针设置触发器或数据类型。有 3 种可选,(Data and Trigger)既是数据又可作为触发条件,(Data)仅作为数据,不可作为触发条件,(Trigger)仅可作为触发条件。
       Find Nets toAdd…按钮:点击可打开添加网络的窗口,对于多余的端口可以选中后点击“—”删除
    接下来点击“Next”
    在这里插入图片描述
    对 ILA IP 核的全局设置,设置完成点击“Next"
    在这里插入图片描述
    最后点击点击“Finish”按钮即可
    在这里插入图片描述
  6. 点击保存或者按ctrl+s进行保存操作
  7. 此时可见xdc文件中增加了如下内容
    在这里插入图片描述
  8. 接下来就可以编译工程并生成比特流,在这个过程中 Vivado 会自动添加相应的 ILA IP 核

网表插入调试探针流程

  1. 点击“Flow Navigator”→“SYNTHESIS”窗口中的“Run Synthesis”进行综合
    在这里插入图片描述
  2. 来点击“Flow Navigator”→“SYNTHESIS”窗口中的“Open Synthesized Design”按钮
    在这里插入图片描述
  3. 选择“Debug”窗口布局
    在这里插入图片描述
    此时,Vivado 打开了“Netlist”子窗口、“Schematic”子窗口、“Debug”子窗口,其中“Netlist”子窗口和“Schematic”子窗口都可以用于标记要进行观察的信号,“Debug”子窗口用于显示并设置 ILA IP 核的各个参数
    在这里插入图片描述
  4. 在“Netlist”子窗口中的“Nets”目录下找到需要调试的信号,右击该网络在弹出的菜单中心选择“Mark Debug”命令
    在这里插入图片描述
    同样也可以在“Schematic”子窗口中选择需要调试的网络,然后右键选择“Mark Debug”命令
    在这里插入图片描述
  5. 为信号记了“Mark Debug”之后,就可以进行 ILA IP 核的配置了,对可以参考**“mark_debug”标记要调试的信号**中的第5步。
  6. 完成后进行保存,同样会在xdc文件中追加debug 的约束命令。
    注意
    Vivado在综合是会对代码进行优化,可能会进行多余的信号删除、变量位宽缩小、设置对信号进行重命名的操作,此时可能会导致无法找到需要调试的信号(可能被优化掉了,可能重命名了)

在 Hardware Manager 中观察调试信号

  1. 生成比特流之后,我们打开 Hardware Manager,连接到开发板并下载比特流。

在这里插入图片描述
在这里插入图片描述
其中的.ltx 文件存储了调试探针的信息,用来传递给 Vivado IDE,它是从我们的设计中被提取出来的。通常,调试探测文件是在实现过程中自动创建的,并位于和比特流文件相同的目录下。若实现后的设计中包含了 ILA IP 核,则在下载比特流时,Vivado 会自动识别出.ltx 文件。
2. 下载完成后 Vivado 会自动打开 ILA 的调试窗口
在这里插入图片描述
3. 有时候 ILA 的采样波形窗口界面没有自动弹出,可以双击左侧 hardware 窗口中带 ila 特征的硬件选择按钮打开波形窗口。
在这里插入图片描述
在这里插入图片描述
4. 波形窗口中显示的信号不全,可以点击“Waveform – hw_ila_1”窗口中的加号,将所有的探针信号添加到波形窗口中
在这里插入图片描述

当然对于多余的信号也可以点击”—“删除

  1. 信号添加完成后,就可以开始进行触发动作了。在波形窗口中有 4 个触发动作,如下图所示
    在这里插入图片描述
    从左至右依次是:(1)循环触发、(2)开始触发、(3)立即触发、(4)停止触发
    (1)循环触发:它和“开始触发”按钮联合在一起使用。若打开了此选项,在点击了“开始触发”按钮后,会不断地对触发条件进行检测,每次触发条件被满足时,都会将RAM中存储的探针值数据上传到Vivado,Vivado上显示的波形也会随之不断更新,直到用户点击了“停止触发”按钮,波形将不再更新。如果探针一直没有检测到触发条件,那么触发操作一直在进行,直到点击停止触发按钮,这次触发操作才会结束。
    (2)开始触发:点击之后 ILA 就会开始进行触发操作。点击该按钮后,ila 探针自动寻找触发条件,当探针检测到触发条件后,会将 RAM 中存储的探针值数据上传到 Vivado,Vivado 上显示的波形发生改变,一次触发操作完成;如果探针一直没有检测到触发条件,那么触发操作一直在进行,直到点击停止触发按钮,这次触发操作才会结束。
    (3)立即触发:立即将当前 RAM 中的数据上传到 Vivado,而不管触发条件是否得到满足
    (4)停止触发:停止当前正在进行的触发活动。
    另外在 ILA 的状态控制窗口也有这几个操作按钮,同时还会再状态窗口中显示 ILA 状态
    在这里插入图片描述

  2. 采集到信号后,可以点击上图中的放大和缩小的图标,来对波形数据进行放大和缩小
    在这里插入图片描述
    当然也可以通过鼠标滚轮调节大小

  3. 波形默认以十六进制显示的,可以选择信号单击鼠标右键选择“Radix”→“Unsigned Decimal”设置显示的进制数。
    在这里插入图片描述

  4. 可以在“Trigger Setup”窗口中添加触发条件,点击“+”号选择需要触发的信号
    在这里插入图片描述
    如下设置再LED信号跳变时进行触发
    在这里插入图片描述
    当存在多个触发时可以选择他们之间的逻辑关系
    在这里插入图片描述

设置触发条件后点击触发,但触发信号满足时会将当前 RAM 中的数据上传到 Vivado,并进行显示,触发条件不满足时会进行等待。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/702278.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

博途PLC PID仿真(单容水箱液位高度控制含变积分变增益测试)

单容水箱和双荣水箱的微分方程和数值求解,可以参考下面文章链接: https://rxxw-control.blog.csdn.net/article/details/131139432https://rxxw-control.blog.csdn.net/article/details/131139432这篇博客我们利用欧拉求解器在PLC里完成单容水箱的数学建模。PLC也可以和MATL…

Python习题详解

练习&#xff1a; 1&#xff0c;计算100以内奇数的和 #计算100以内所有奇数的和 sum 0 # n 1 # while n < 100: # # sum sum n # sum n # # n n 2 # n 2 # print(sum) n 99 #求偶数时n 100 while n > 0:sum n# n n - 2n - 2 print(sum)2&#xff0c;打印直…

【办公类-22-08】周计划系列(4)“育儿知识(家园小报)“ (2024年调整版本)

作品展示 背景需求&#xff1a; 制作“育儿知识&#xff08;家园小报&#xff09;”&#xff0c;查询发现去年就没有做 因为“家园小报”基本没有段落文字&#xff0c;都是“文本框文字、艺术字“&#xff0c;很难用python提取文字。 由于只有6篇&#xff0c;因此去年采用的就…

【线程池项目(四)】项目的死锁问题分析和资源回收机制的改善

在上一篇 【线程池项目&#xff08;三&#xff09;】线程池CACHED模式的实现中我们大概说了说cached模式的基本实现&#xff0c;对于多线程编程&#xff0c;我们需要考虑的问题也较于单线程更多、更复杂&#xff0c;经常存在线程同步、资源竞争等复杂的并发控制问题&#xff0c…

【Java程序设计】【C00276】基于Springboot的就业信息管理系统(有论文)

基于Springboot的就业信息管理系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的就业信息管理系统 本系统分为前台功能模块、管理员功能模块、学生功能模块、企业功能模块以及导师功能模块。 前台功能模块&…

微服务知识02

1、九大高并发解决方案 2、系统架构图​​​​​​​ 3、分布式事务 本地事务、分布式事务 操作不同服务器的数据库&#xff08;垂直分库&#xff09; 4、分布式事务解决方案&#xff08;没有seata之前&#xff09; &#xff08;1&#xff09;XA协议&#xff08;强一致性&a…

PixPin:一键搞定截图、长截图、贴图、GIF

名人说&#xff1a;莫道桑榆晚&#xff0c;为霞尚满天。——刘禹锡&#xff08;刘梦得&#xff0c;诗豪&#xff09; 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 一、什么是PixPin&#xff1f;①PixPin②核心功…

readproc.h

Ubuntu22.04系统中 编译自己写的程序的时候&#xff0c;报错&#xff0c;显示找不到readproc.h文件&#xff0c;通过安装libprocps-dev解决 sudo apt install libprocps-dev

项目解决方案:街道社区视频监控接入、汇聚和联网设计方案

目 录 一、客户需求 二、网络拓扑图 三、方案描述 四、系统配置 1、服务器配置 2、带宽配置 五、方案优势 1. 平台可堆叠使用 2. 支持主流接入协议 4. 多种终端显示 5. 客户端功能强大 6. 一机一档 一、客户需求 1&#xff0c;一个街道有十个社…

消息中间件篇之RabbitMQ-高可用机制

一、怎么保证高可用性 在生产环境下&#xff0c;使用集群来保证高可用性&#xff0c;一般我们采用普通集群、镜像集群、仲裁队列。 二、普通集群 普通集群&#xff0c;或者叫标准集群&#xff08;classic cluster&#xff09;&#xff0c;具备下列特征&#xff1a; 1. 会在集…

蓝桥杯DP算法——区间DP(C++)

根据题意要求的是将石子合并的最小权值&#xff0c;我们可以根据DP思想使用二维数组f[i,j]来存放所有从第i堆石子到第j堆石子合并成一堆石子的合并方式。 然后由第二个图所示&#xff0c;我们可以将i到j区间分成两个区间&#xff0c;因为将i到j合并成一个区间的前一步一定是合…

SpringBoot自动装配的原理

废话不多说&#xff0c;直接上干货 SpringBoot 是如何实现自动装配的&#xff1f; 以我这个2.6.13的版本为例 第一步&#xff0c;我们先从SpringBootApplication这个入口注解看起 在springBootApplication这个注解当中有三个关键性的注解&#xff0c;大概可以看作是&#xff1a…

Java面试:Spring Cloud Alibaba

文章目录 引言I Spring Cloud Alibaba1.1 配置文件加载的优先级(由高到低)1.2 注册中心1.3 rpcII 高并发场景:缓存穿透/缓存失效/雪崩如何解决2.1 缓存穿透2.2 缓存击穿(失效)2.3 缓存雪崩引言 微服务涉及的中间件分布式事务事务的传播方式事务的隔离级别缓存穿透/缓存失效…

Matlab/simulink基于vsg的风光储调频系统建模仿真(持续更新)

​ 1.Matlab/simulink基于vsg的风光储调频系统建模仿真&#xff08;持续更新&#xff09;

C/C++暴力/枚举/穷举题目持续更新(刷蓝桥杯基础题的进!)

目录 前言 一、百钱买百鸡 二、百元兑钞 三、门牌号码&#xff08;蓝桥杯真题&#xff09; 四、相乘&#xff08;蓝桥杯真题&#xff09; 五、卡片拼数字&#xff08;蓝桥杯真题&#xff09; 六、货物摆放&#xff08;蓝桥杯真题&#xff09; 七、最短路径&#xff08;蓝…

图解目标检测 之 【YOLOv9】 算法 最全原理详解

YOLOv9与SOTA模型对比 什么是 YOLOv9&#xff1f;YOLOv9是YOLO系列中的最新产品&#xff0c;是一种实时目标检测模型。它通过先进的深度学习技术和架构设计&#xff0c;包括通用 ELAN (GELAN) 和可编程梯度信息 (PGI)&#xff0c;展现出更好的性能。 YOLO 系列通过引入计算机视…

Java/Python/Go不同开发语言基础数据结构和相关操作总结-GC篇

Java/Python/Go不同开发语言基础数据结构和相关操作总结 1. 常见gc方式1.1 gc判断对象是否存活1.2 引用计数法1.2 标记-清除算法1.3 复制算法1.4 标记-压缩算法1.5 分代收集算法 2. java的gc方式以及垃圾回收器2.1 gc方式2.1 gc回收器2.1.1 Serial收集器2.1.2 ParNew收集器2.1.…

Socket、UDP、TCP协议和简单实现基于UDP的客户端服务端

目录 Socket TCP和UDP区别 UDP&#xff1a;无连接&#xff0c;不可靠传输&#xff0c;面向数据报&#xff0c;全双工 TCP&#xff1a;有连接&#xff0c;可靠传输&#xff0c;面向字节流&#xff0c;全双工 无连接和有连接 可靠传输和不可靠传输 面向数据报和面向字节流…

学习或从事鸿蒙开发工作,有学历要求吗?

目前安卓有2,000万的开发者。本科及以上学历占比为35%&#xff1b;iOS有2,400万开发者&#xff0c;本科及以上学历占比为40% 绝大多数的前端开发者都是大专及以下学历&#xff0c;在2023年华为开发者大会上余承东透露华为的开发者目前有200万&#xff0c;但鸿蒙开发者统计的数据…

C#,数组数据波形排序(Sort in Wave Form)的朴素算法与源代码

1 波形排序 所谓“波形排序”就是一大一小。 将n个身高互不相同的人排成一行 ,对于每个人 ,要求他要么比相邻的人均高 ,要么比相邻的人均矮 ,问共有多少种排法 ,这一问题称为波形排列问题。 2 源程序 using System; using System.Collections; using System.Collections.Gen…