FPGA 连续实战 · 06 ILA 调试与首错闭环

配对探针文件、设置采集窗口,复现确定性错误并完成修复回归。

先修知识掌握同步 RTL、非阻塞赋值与 FIFO;按六章顺序完成前置交付。

适用环境Basys 3 / xc7a35tcpg236-1 / 100 MHz;Vivado Tcl 参考 2024.1;Python 3、Icarus Verilog。

验证状态RTL 正常与故障仿真已验证;Vivado 综合、实现、下载和 ILA 采集须在目标环境验证。

本文目录让采集窗口覆盖发生过的事件探针布局与数据解码捕获正常版与确定性故障版典型故障:有波形却没有事务

让采集窗口覆盖发生过的事件

自检只需要约九十五个周期,远短于人手启动采集的反应时间,因此必须先按住复位、布置触发并启动采集,再释放按钮。采样时钟始终运行,一千零二十四点窗口覆盖约十点二四微秒,足够观察整个测试但无法覆盖约十点四九毫秒的复位稳定等待。触发点应靠近完成或首错,不能要求一个短窗口记录全过程。

正常版触发 done,故障版触发 fail;构建编号确认加载版本。按住按钮done / fail 清零Arm ILA触发 done 或 fail释放复位记录前后样本首错对齐valid / data / expected先等待复位有效,再 Arm;避免已经为 1 的状态立即触发
正常版触发 done,故障版触发 fail;构建编号确认加载版本。(原创示意,非器件引脚图;窄屏可横向滑动)

探针布局与数据解码

探针零包含周期、接受计数和对齐后的检查数据,探针一到四分别是复位、完成、失败及构建编号。必须以本次生成的 LTX 和 Hardware Manager 实际显示为准,不猜测自动生成的层级名称。只有 checked_valid 为一的采样点才代表一次比较,连续重复的静态数据不构成重复事务。

工程检查与预期结果
probe0 位段 / 其他探针含义
63:48 / 47:41 / 40:34cycles / sent / received
33:31 / 30 / 29 / 28 / 27count / wr_en / rd_en / full / empty
26:19 / 18:11 / 10:3 / 2din / checked_data / checked_expected / checked_valid
probe1 / probe2 / probe3 / probe4rst / done / fail / BUILD_ID

在解压后的 fpga-course 目录执行;Vivado 步骤需本机安装并配置 PATH。

bash
python3 decode.py 0x<从 probe0 复制的十六进制值>
# 实际执行前替换整个占位值
# 输出 cycles、sent、received、checked_valid、
# checked_data、checked_expected 等 JSON 字段

捕获正常版与确定性故障版

正常版先检查 BUILD_ID 与 manifest 一致,在复位已有效时设置 done 等于一触发,采集位置取中间附近,启动后释放按钮。检查有效样本应满足数据公式,最终 received 为六十四。随后创建独立故障构建,重复综合、实现和审查流程,触发改为 fail;首次有效比较应出现预期三、实际二,便于验证定位方法。

  1. 核对探针

    预期与判定:加载同次构建 LTX,probe4 对应 manifest BUILD_ID。

  2. 准备正常采集

    预期与判定:按住复位,确认 rst=1,再以 done=1 为触发条件并 Arm。

  3. 释放并读取

    预期与判定:检查 valid 样本、完成状态和 received=64,导出波形证据。

  4. 复现与回归

    预期与判定:故障版触发 fail,定位 3 对 2;恢复 baseline 后 fail 保持 0。

在解压后的 fpga-course 目录执行;Vivado 步骤需本机安装并配置 PATH。

bash
python3 flow.py prepare fault --ila --fault
python3 flow.py vivado fault synth
python3 flow.py vivado fault impl
# 重新审查 fault 的报告并填写其 review.txt
python3 flow.py vivado fault bit
# 按第五章用实际 target/device 下载 fault
# 硬件预期(待实测):首次检查 expected=3 actual=2,最终 LED=11
# 修复回归:重新下载已核验的 baseline 发布物

典型故障:有波形却没有事务

已经完成时再以 done 等于一触发,窗口可能只有静止的最终状态,这并不是 ILA 失效。另一个常见问题是 LTX 来自不同构建,探针名称或宽度与实际核不一致。先确认版本与采样时钟,再检查触发时机,最后才扩大采集深度;无目的增加深度会消耗资源并可能改变时序表现。

完成检查

  • 保存覆盖有效事务的正常 ILA 窗口。
  • 故障版定位第一笔 3 对 2,而非只看 fail 灯。
  • 恢复正常构建并记录版本、波形和回归结果。

延伸阅读与来源

本文为黄河电子原创教学说明。产品命令与支持范围请以实际安装版本的官方文档为准。

继续阅读

FPGA

从 RTL 到板上运行的完整流程

建立约束、实现、下载与观测的最小工程闭环。

10 分钟
FPGA

第一个工程的引脚与时钟约束

区分电气连接与时间要求,避免“能生成位流就算正确”。

11 分钟
FPGA

如何读懂时序报告

从起点、终点、时钟和裕量找出失败路径的原因。

10 分钟