FPGA 流式实战 · 06 ILA 流控排障与采集窗口计数
按本域握手解释写满、读空、反压和包尾,并把局部采样转换为可复核指标。
先修知识完成 FPGA AXI / CDC 进阶课程;掌握同步 FIFO、握手、Gray 编码和时序报告基础。
适用环境Basys 3 / Artix-7;板上写 100 MHz、读 50 MHz;Python 3、Icarus Verilog;Vivado 2024.1 命令参考。
验证状态六场景 RTL 测试、两类故障检出及顶层软件模型已验证;性能表为仿真测量,Vivado 与板上 ILA 尚需实测。
给两个时钟域安排不同观察任务
写域 ILA 观察本地写指针、同步后的读指针、满状态和输入握手,用来判断上游何时被阻塞。读域 ILA 观察输出记录、读指针、同步写指针、RAM 空状态和预取动作,用来判断数据是否保持与何时真正消费。两核独立触发,不能把相同采样序号直接对齐,应该结合本域序号和数据模式解释因果。
探针布局与实际触发
每个核都带 BUILD_ID,用于先确认下载的位流和 LTX 来自同次构建。写满触发适合观察输入停止推进,读端反压触发适合观察输出槽保持,包尾触发则必须同时限定真实握手。RAM 空并不等于输出无效,不能只根据 empty 信号判断是否还有最后一拍;这一点可以在波形里直接验证。
| 项目 | 工程含义 |
|---|---|
| write probe0[23:19] / [18:14] / [13:9] | wbin / wgray / rgray_sync |
| write probe0[8:0] | full / valid / ready / last / keep[3:0] / reset |
| read probe0[61] / [60:57] / [56:25] | last / keep / data |
| read probe0[24:20] / [19:15] / [14:10] | rbin / rgray / wgray_sync |
| read probe0[9:5] | empty / valid / ready / fetch / reset |
| 其他探针 | 写核 sent 与 BUILD_ID;读核 received、fail/done/cycles 与 BUILD_ID |
在解压后的 fpga-stream 目录执行;软件测试需要 Python 3、iverilog 和 vvp。
python3 decode.py write 0x0
python3 decode.py read 0x0
# 用实际 probe0 的 64 位采样替换 0x0
# 写满触发:write[8]=1
# 读反压触发:read[8]=1 且 read[7]=0
# 包尾握手:read[61]=1 且 read[8:7]=0b11下载、布置触发和窗口计数
按前章完成审查和位流生成后,枚举并确认准确的 JTAG 目标。按住复位,设置两个核各自的触发条件并分别启动,再释放按钮。正常完成后应看到完成灯亮且失败灯灭,但仍需保存实际波形;导出读域数据后映射为标准列,才能用随包工具计算局部吞吐,不能把人工示例 CSV 当作板卡采集。
- 核对版本
预期与判定:两个 BUILD_ID 和同次 bit/ltx 对应。
- 采集反压
预期与判定:保持复位时 Arm,释放后检查等待期间字段不变。
- 分析窗口
预期与判定:只使用连续且无复位的本域样本,按 TKEEP 累加字节。
- 故障与回归
预期与判定:独立 fault 构建复现首拍错误,恢复 baseline 后重新采集验收。
在解压后的 fpga-stream 目录执行;软件测试需要 Python 3、iverilog 和 vvp。
python3 flow.py program baseline \
--target "<实际完整 JTAG URI>" --device "<实际器件名>"
# 硬件预期,尚待实测:正常 LED=01
python3 capture_metrics.py fixtures/capture-example.csv --period-ns 20
# 人工示例:8周期、4次接受、14有效字节、1个握手TLAST、87.5 MB/s
# 实际导出需映射为 cycle,data,keep,last,valid,ready 六列典型故障:局部窗口被当作完整传输
ILA 深度只能覆盖有限时间,窗口起点可能落在包中间,窗口末尾也可能留下尚未消费的有效拍。局部计数因此不能直接证明整个四千多拍传输没有丢包。采集工具把结果标记为窗口指标,并检查周期连续及反压稳定性;全程正确性仍需结合自检器计数、故障标志和完整测试结果。
完成检查
- 能用本域握手解释满、空和反压。
- 窗口指标可由原始采样复算。
- 故障定位后恢复正常版本并保存证据。
延伸阅读与来源
本文为黄河电子原创教学说明。产品命令与支持范围请以实际安装版本的官方文档为准。
- Arm IHI0051A · AXI4-Stream Protocol
握手、字节限定与包尾;本文工程与测试为原创实现。
- AMD UG903 · CDC Constraints
跨域最大延时与总线偏斜约束。
- AMD UG474 · Distributed RAM Timing
分布式 RAM 的写入与异步读取时序特性。
- AMD UG908 · Programming and Debugging
ILA、探针文件与采集流程。
继续阅读
FPGA从 RTL 到板上运行的完整流程
建立约束、实现、下载与观测的最小工程闭环。
第一个工程的引脚与时钟约束
区分电气连接与时间要求,避免“能生成位流就算正确”。
如何读懂时序报告
从起点、终点、时钟和裕量找出失败路径的原因。
黄河电子