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

Vivado 中使用 ILA 进行在线调试实战

Vivado ILA 集成逻辑分析仪支持板级实时波形抓取。通过例化 IP 核并设置触发条件,可替代部分仿真工作直接定位硬件逻辑错误。步骤涵盖 IP 配置、顶层例化及触发模式设置,适用于状态机及计数器调试场景。

Stephaine Walsh发布于 2026/4/7更新于 2026/7/2439 浏览
Vivado 中使用 ILA 进行在线调试实战

Vivado 中使用 ILA 进行在线调试实战

在 FPGA 开发中,ILA(Integrated Logic Analyzer)是 Vivado 自带的集成逻辑分析仪。它允许我们在芯片内部实时抓取数字信号的波形,直接定位硬件逻辑错误。相比传统的 Testbench 仿真,ILA 无需编写复杂的仿真文件,支持上板后直接观察信号变化,效率更高。

设计准备与例化

假设我们需要调试一个通过状态机控制 4 个 LED 循环点亮的工程,时间间隔为 0.5 秒。首先准备好基础的设计模块 LED_ILA。

`timescale 1ns / 1ps
module LED_ILA(
    input wire clk,      // 100MHz 时钟
    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'd50_000_000; // 约 0.5 秒计数值
    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
        if(!rst_n)
            state <= 3'b000;
        else if(count == count_max)
            state <= next_state;
    end

    always@(*) begin
        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
        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

接下来在顶层模块中例化该设计,并调用 ILA IP 核。ILA 可以读取模块内部的寄存器信号,因此连接时直接使用层级路径即可。

`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(
        .clk(clk),
        .probe0(rst_n),
        .probe1(led),
        .probe2(u_LED_ILA.count),
        .probe3(u_LED_ILA.state)
    );
endmodule

注意:不同探针的位宽必须与待检测信号严格匹配。如果不确定,可以双击生成的 IP 核查看配置详情。

配置与生成 IP 核

在 Vivado 的 IP Catalog 中搜索 "ILA",双击打开配置界面。这里主要关注三个参数:名称、探针数量(Probe Count)和样本数据深度(Sample Depth)。

以本例为例,我们需要监控复位信号、LED 输出、计数器和状态机,共 4 个探针。样本深度默认 1024 通常足够,表示每个有效时钟采样一次,记录 1024 个点。设置完成后点击 OK,选择默认选项生成 IP 核。生成完毕后,工程中会多出一个 模块,将其加入顶层连接即可。

ila_0

在线调试流程

程序烧录到开发板后,Vivado 会自动弹出 ILA 波形窗口。此时窗口为空,因为 ILA 是触发式采样的,不会一直占用存储资源。

手动运行

点击运行按钮,ILA 会以当前光标位置为中心,向前向后各采集一部分数据。红色光标代表触发时刻,默认为中点。你可以在左下角调整触发点的位置,比如设置为第 100 个采样点,这样就能更聚焦于特定时刻的信号状态。

设置触发条件

手动触发适合快速验证,但如果想捕捉特定事件(如复位瞬间或特定计数值),需要设置自动触发条件。

例如,我想看复位时的信号情况。由于 rst_n 是低电平有效,触发条件应设置为从 1 变 0 的跳变。在右下角添加触发信号并设定条件,界面会提示'等待触发'。此时按下开发板复位键,一旦满足条件,波形立即刷新。将黄色光标移至触发点附近放大,即可清晰观察复位过程中其他信号是否同步复位。

同样,也可以设置数值触发。比如当计数器 count 达到 666 时触发,这样就能精准捕获特定逻辑状态下的波形。

连续触发模式

开启连续触发按钮后,ILA 不再是一次性采样。只要满足设定的触发条件,每次都会刷新显示最近一次采集的数据。这对于观察周期性错误或反复出现的异常非常有用,无需重复点击运行,系统会自动更新最新的状态快照。

目录

  1. Vivado 中使用 ILA 进行在线调试实战
  2. 设计准备与例化
  3. 配置与生成 IP 核
  4. 在线调试流程
  5. 手动运行
  6. 设置触发条件
  7. 连续触发模式
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

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

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

更多推荐文章

查看全部
  • DeepSeek 深度使用指南:提示词工程与本地知识库搭建
  • 2025 年主流 ChatGPT 桌面客户端对比与配置指南
  • SiameseAOE 中文-base 模型 ABSA 结果转为 Neo4j 知识图谱
  • 微信小程序 AR 开发:5 步实现增强现实应用
  • 前端数据可视化工具对比与选型指南
  • 基于 Spring Cloud Alibaba 与 Nacos 的微服务负载均衡实践
  • GitHub Copilot 在 VS Code 中的深度使用指南:配置与实战
  • Z-Image-Turbo AI 绘画工具使用指南
  • 双指针算法实战:移动零与复写零详解
  • ToDesk、顺网云与海马云部署 DeepSeek 性能横向评测
  • JavaScript Headers 对象特性与 Request 使用指南
  • PaperZZ 论文查重与 AIGC 检测双引擎功能详解
  • Windows 10/11 部署 OpenClaw 指南:环境搭建与机器人互联
  • Vue3 Capacitor Android 虚拟导航栏遮挡问题与解决
  • Redis 多数据结构平台的演进与实践
  • SensioFrameworkExtraBundle 路由注解使用指南:从基础到高级
  • STM32 调试 Internal command error 错误修复方案
  • C++ 二叉搜索树(BST)原理及核心操作实现
  • 千寻运动助手 V3.1 小程序开源版:会员积分与自动化任务
  • OpenClaw 视觉自动化:无需接口,让 AI 直接操作软件界面

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • 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