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

Vivado 集成逻辑分析仪 ILA 在线调试指南

Vivado 中的 ILA(集成逻辑分析仪)是一种用于 FPGA 在线调试的工具,可实时抓取内部数字信号波形以分析逻辑错误。相比编写 Testbench 仿真,ILA 允许直接上板调试并查看波形,节省时间。 ILA IP 核的配置、例化步骤以及在线调试方法,包括手动运行、设置触发条件及连续触发功能,帮助开发者高效定位硬件逻辑问题。

NodeJser发布于 2026/4/6更新于 2026/7/2159 浏览
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_o 模块。

(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

更多推荐文章

查看全部
  • Python 中 GraphQL 的实战指南:从 Schema 设计到性能优化
  • Python GIL 深度解析:原理、实现与优化策略
  • NativeScript-Vue 跨平台原生应用开发指南
  • 在 Cursor 中使用 MCP 服务
  • 自然语言处理在金融领域的应用与实战
  • 二分查找专题:山峰数组的峰顶索引与寻找峰值
  • 零基础网络安全入门指南:学习路线与实战建议
  • 基于 AI Agent 的通用米家智能家居控制方案
  • Ubuntu 22.04 桌面版安装与 LVM 配置
  • 写给C程序员的C++笔记:类型、输入与运算符
  • IDEA 与 Git 实现 Cherry Pick 拣选部分变更到新分支
  • OpenClaw ACP 协议深度解析:IDE 直接驱动 AI Agent
  • MongoDB 数据备份与恢复实战指南
  • 利用 Claude Code 和 Skills 自动组装 AI 工作流
  • MaxBot 抢票机器人部署指南:从环境配置到实战策略
  • Codex 代码生成模型简介
  • LangChain 框架深度解析:LLM 大模型可观测性最佳实践
  • AI 安全:Stable Diffusion 视觉提示词注入攻击原理与实现
  • AI 大模型:核心原理、发展历程与关键技术解析
  • 基于 Rokid AR 眼镜的会议纪要助手开发实录

相关免费在线工具

  • 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