FPGA 连续实战 · 06 ILA 调试与首错闭环
配对探针文件、设置采集窗口,复现确定性错误并完成修复回归。
先修知识掌握同步 RTL、非阻塞赋值与 FIFO;按六章顺序完成前置交付。
适用环境Basys 3 / xc7a35tcpg236-1 / 100 MHz;Vivado Tcl 参考 2024.1;Python 3、Icarus Verilog。
验证状态RTL 正常与故障仿真已验证;Vivado 综合、实现、下载和 ILA 采集须在目标环境验证。
让采集窗口覆盖发生过的事件
自检只需要约九十五个周期,远短于人手启动采集的反应时间,因此必须先按住复位、布置触发并启动采集,再释放按钮。采样时钟始终运行,一千零二十四点窗口覆盖约十点二四微秒,足够观察整个测试但无法覆盖约十点四九毫秒的复位稳定等待。触发点应靠近完成或首错,不能要求一个短窗口记录全过程。
探针布局与数据解码
探针零包含周期、接受计数和对齐后的检查数据,探针一到四分别是复位、完成、失败及构建编号。必须以本次生成的 LTX 和 Hardware Manager 实际显示为准,不猜测自动生成的层级名称。只有 checked_valid 为一的采样点才代表一次比较,连续重复的静态数据不构成重复事务。
| probe0 位段 / 其他探针 | 含义 |
|---|---|
| 63:48 / 47:41 / 40:34 | cycles / sent / received |
| 33:31 / 30 / 29 / 28 / 27 | count / wr_en / rd_en / full / empty |
| 26:19 / 18:11 / 10:3 / 2 | din / checked_data / checked_expected / checked_valid |
| probe1 / probe2 / probe3 / probe4 | rst / done / fail / BUILD_ID |
在解压后的 fpga-course 目录执行;Vivado 步骤需本机安装并配置 PATH。
python3 decode.py 0x<从 probe0 复制的十六进制值>
# 实际执行前替换整个占位值
# 输出 cycles、sent、received、checked_valid、
# checked_data、checked_expected 等 JSON 字段捕获正常版与确定性故障版
正常版先检查 BUILD_ID 与 manifest 一致,在复位已有效时设置 done 等于一触发,采集位置取中间附近,启动后释放按钮。检查有效样本应满足数据公式,最终 received 为六十四。随后创建独立故障构建,重复综合、实现和审查流程,触发改为 fail;首次有效比较应出现预期三、实际二,便于验证定位方法。
- 核对探针
预期与判定:加载同次构建 LTX,probe4 对应 manifest BUILD_ID。
- 准备正常采集
预期与判定:按住复位,确认 rst=1,再以 done=1 为触发条件并 Arm。
- 释放并读取
预期与判定:检查 valid 样本、完成状态和 received=64,导出波形证据。
- 复现与回归
预期与判定:故障版触发 fail,定位 3 对 2;恢复 baseline 后 fail 保持 0。
在解压后的 fpga-course 目录执行;Vivado 步骤需本机安装并配置 PATH。
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 灯。
- 恢复正常构建并记录版本、波形和回归结果。
延伸阅读与来源
本文为黄河电子原创教学说明。产品命令与支持范围请以实际安装版本的官方文档为准。
- Digilent Basys 3 Master XDC
板卡引脚参考;使用前核对实物版本。
- AMD UG906 · Check Timing
区分内部未约束路径与异步外部端口。
- AMD UG908 · Programming and Debugging
Hardware Manager、ILA 与采集窗口。
继续阅读
FPGA从 RTL 到板上运行的完整流程
建立约束、实现、下载与观测的最小工程闭环。
第一个工程的引脚与时钟约束
区分电气连接与时间要求,避免“能生成位流就算正确”。
如何读懂时序报告
从起点、终点、时钟和裕量找出失败路径的原因。
黄河电子