跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
编程语言

Vivado 中 ILA 集成逻辑分析仪在线调试方法

Vivado 中的 ILA(集成逻辑分析仪)是一种在线调试工具,允许在 FPGA 上实时抓取内部数字信号波形以分析逻辑错误。相比编写 Testbench 仿真,ILA 可直接上板调试节省时间。使用步骤包括调用 IP 核配置探针深度与位宽、在顶层模块例化连接信号、编译综合及烧录。在线调试支持手动运行触发、设置特定条件自动触发(如复位或计数值)以及连续触发模式,方便开发者查看特定时刻信号变化,快速定位硬件逻辑问题。

道系青年发布于 2026/4/5更新于 2026/7/2052 浏览
Vivado 中 ILA 集成逻辑分析仪在线调试方法

一、ILA 介绍

Vivado 中的 ILA(Integrated Logic Analyzer)即集成逻辑分析仪,是一种在线调试工具。ILA 允许用户在 FPGA 上执行系统内的调试,通过实时抓取 FPGA 内部数字信号的波形,帮助我们分析逻辑错误的原因,从而更有效地进行 debug。类似于 Quartus 中的 SignalTap II,也类似于片上的逻辑分析仪。

相较于编写 testbench 仿真文件仿真 debug 的方式,使用 ILA 调试的方法不写 tb 仿真文件从而节省时间,可直接上板调试并查看波形。

二、ILA 使用步骤

ILA 常以 IP 核的方式调用,可以在 IP Catalog 中搜索 ILA,找到该 IP 核后进行配置。配置选项包括:样本数据深度、探针数量、探针位宽等等。配置完成后,在顶层模块 RTL 代码中例化 ILA IP 核,接着正常烧录程序上板调试。

(1)设计部分

假设已有一个编译成功的工程需要 debug 调试,这里给出一个案例。

工程实现的功能为:通过状态机来实现 4 个 led 灯循环点亮,时间间隔 0.5 秒。

`timescale 1ns /1ps
module LED_ILA( //状态机实现 4 个 led 灯循环点亮,时间间隔 0.5 秒
 input wire clk, //100MHz,10ns
 input wire rst_n,
 output reg [3:0]led
);
 reg [25:0]count = 26'd1;
 reg [2:0]state = 3'b000;
 reg [2:0]next_state = 3'b000;
 parameter count_max = 26'd5000_0000;
 parameter IDLE = 3'b000;
 parameter s1 = 3'b001;
 parameter s2 = 3'b010;
 parameter s3 = 3'b011;
 parameter s4 = 3'b100;
 always@(posedge clk or negedge rst_n)begin//计数器
  if(!rst_n) count <= 26'd1;
  else if(count == count_max) count <= 26'd1;
  else count <= count + 26'd1;
 end
 always@(posedge clk or negedge rst_n)begin//state 状态转换
  if(!rst_n) state <= 3'b000;
  else if(count == count_max) state <= next_state;
 end
 always@(*)begin//next_state 状态转换
  if(!rst_n) next_state <= 3'b000;
  else begin
   case(state)
    IDLE: next_state <= s1;
    s1: next_state <= s2;
    s2: next_state <= s3;
    s3: next_state <= s4;
    s4: next_state <= s1;
    default: next_state <= IDLE;
   endcase
  end
 end
 always@(*)begin//led 输出信号
  if(!rst_n) led <= 4'b0000;
  else begin
   case(state)
    IDLE: led <= 4'b0000;
    s1: led <= 4'b0001;
    s2: led <= 4'b0010;
    s3: led <= 4'b0100;
    s4: led <= 4'b1000;
    default: led <= 4'b0000;
   endcase
  end
 end
endmodule

接着 TOP.v 顶层模块文件,把上面这个模块例化进去即可。不过之后还要例化 IP 核,所以代码在后半部分写完后再给出。

(2)调用 ILA IP 核

  1. 按照如下步骤搜索 ILA 调用 IP 核,双击"ILA(Integrated Logic Analyzer)"

  2. 进入 ILA 配置界面,完成基本设置:设置名称、探针数、样本数据深度。其他参数一般用不到保持默认。(我要看波形的信号有:rst_n、led、count、state 所以有 4 个探针,样本数据深度够用默认 1024,即每个有效 clk 采样一次,采样 1024 个 clk 时的数据)

  3. 接着再当前界面继续设置探针宽度:(根据 rst_n、led、count、state4 个信号宽度,依次设置好位宽即可)

  4. 再点击 OK 之后,会弹出该界面,选项保存默认点击'generate'生成 IP 核

  5. 这个时候要等一段时间等 ip 核生成完毕(转圈即正在生成),完毕之后可以看到文件多了一个 IP 核即 ila_0 模块。

(3)例化 ILA IP 核

接着在 TOP.v 顶层模块文件内例化 ILA IP 核。并完成连接端口信号:

`timescale 1ns / 1ps
module TOP(
 input wire clk,
 input wire rst_n,
 output wire [3:0]led
);
 LED_ILA u_LED_ILA( //例化设计的模块
  .clk (clk),
  .rst_n (rst_n),
  .led (led)
 );
 ila_0 u_ila_0( //例化 ILA IP 核
  .clk (clk),
  .probe0 (rst_n),
  .probe1 (led),
  .probe2 (u_LED_ILA.count),
  .probe3 (u_LED_ILA.state)
 );
endmodule

途中会发现 count 和 state 是设计模块内定义的寄存器,无法直接连接,此时只需要以"u_LED_ILA.count"的方式连接,因为 ILA 可以读取模块寄存器内容。

此外不同探针位宽可能不同,注意匹配待检测信号位宽,可以双击 IP 核查看探针位宽情况

(4)编译综合

接着按照常规流程走:编译、综合、配置管脚、生成比特流文件、烧录开发板。准备进行 ILA 在线调试。

三、ILA 在线调试

程序烧录到开发板后,Vivado 界面会自动弹出 ILA 的波形窗口如图所示:不过此时这个窗口是空的,是因为还没有触发采样。

因为 ILA 是数据采样,不可能一直不停采,只能采有限个数据,即有信号触发或手动时开始对探测的信号进行数据采样。下面将介绍如何使用 ILA 在线调试:

(1)手动运行

如图所示:点击运行按钮波形会立刻更新,此时红色光标的位置就是你点击运行按钮时的时刻(默认中点),它会在触发点周围进行 1024 次采样(对应前面设置的采样深度)。

当然你也可以在左下角设置触发点的位置:比如我设置触发点为第 100 个,再运行一次,在波形里可以看到触发点位置改变了。(此外还可以设置波形显示的数据个数等等)

(2)运行触发条件

如果我想看特定时刻附近的信号变化情况,手动触发就不适用了,我需要将该特定时刻作为触发点位置,因此需要添加触发条件实现自动触发:

假如我想查看复位时刻其他信号的情况,就需要将复位时刻设置为触发条件,右下角位置添加触发信号并设置条件,我的模块中 rst_n 是低电平有效,因此触发条件为'1 到 0 转变'。

设置完成后再运行一次,会发现界面提示'等待触发':

这个时候只要你按下开发板的复位按钮(让 rst_n 产生一个 1 到 0 的转换的触发条件),波形界面就会刷新数据,如图所示:

将黄色光标设置移动到触发点附近的位置将波形放大,就可以清楚看到其他信号变化情况了,可以看出复位时所有信号都成功复位:

此外触发条件设置多种多样可以根据你的需求进行设置,这样 debug 起来更加方便快捷,比如要设置某信号到特定值时触发,我可以设置 count 计数到 666 的时候触发,运行效果如图所示:

(3)连续触发

这个按钮就是连续触发,当选中这个按钮后不需要手动运行,只要满足触发条件他就会自动触发(每次触发都会刷新一次采集到的数据,显示的是最近一次的数据情况),比如当你设置 count 计数到 666 时触发,并选中'连续触发',count 计数每次到 666 时,波形界面就会刷新一次波形。

目录

  1. 一、ILA 介绍
  2. 二、ILA 使用步骤
  3. (1)设计部分
  4. (2)调用 ILA IP 核
  5. (3)例化 ILA IP 核
  6. (4)编译综合
  7. 三、ILA 在线调试
  8. (1)手动运行
  9. (2)运行触发条件
  10. (3)连续触发
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 7 种大模型微调方法详解:LoRA、QLoRA 及适配器技术
  • gpt-oss-20b-WEBUI 本地部署与使用指南
  • C++ 继承机制:同名成员隐藏规则与默认函数详解
  • C++ 异常处理机制详解:从基础到实践
  • OpenClaw 框架 30+ 真实应用场景深度解析
  • Rust 与 WebAssembly 深度实战:在浏览器与 Node.js 中运行高性能代码
  • CentOS 7 忘记 root 密码的重置方法
  • Open WebUI:自托管 AI 平台功能特性与部署指南
  • Linux 进程替换详解:从 fork 到 exec 的完整链路
  • 从 Bitcoin 到 Ethereum:智能合约的出现
  • 自然语言处理在医疗领域的应用与实战
  • AIGC 在元宇宙与虚拟世界中的应用及技术实现
  • 给 Webots 配好 Python 环境:一份踩坑记录
  • Android 经典百大框架源码解析:Retrofit、OkHttp、Glide 等核心库详解
  • FPGA 内部资源详解:LUT、FF、BRAM、DSP 及 PLL 原理与综合报告解读
  • RustFS 高性能对象存储三种部署方式指南
  • Spring Boot 分组校验、自定义注解与 Redis 登录验证实战
  • AI 重复率检测方法:AIGC 检测工具使用指南
  • 天马 G 前端在安卓掌机上的实战
  • OpenClaw 安装配置与多平台接入实战

相关免费在线工具

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online

  • JSON美化和格式化

    将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online