FPGA 系统实战 · 05 测量有效吞吐与定位系统瓶颈
分开 DMA 窗口、缓存所有权窗口和 DDR 流量,建立可复算性能记录。
先修知识完成 FPGA AXI4-Stream / 异步 FIFO 实战;会读 AXI 时序、C 指针和链接 map。
适用环境ZedBoard Zynq-7020 / PS DDR;Vivado、Vitis 2024.1 参考;本地 Python 3 + cc + Icarus Verilog。
验证状态13 项本地用例通过:C 主机后端与教学 FIFO / RTL 组合;Vivado、Vitis BSP、厂商 IP、DDR 和板上 ILA 尚未实测。
先说明每个时间窗口包含什么
dma_ticks 从提交前开始,到两通道确认完成为止,包含软件提交与轮询开销;ownership_ticks 从缓存清理前到接收失效后,包含缓存维护但不包含生成测试数据与最终校验。两者都不是纯 PL 稳态带宽。有效载荷只计一次 n 字节,DDR 至少有一次读取和一次写入,不能把约2n的内存流量冒充应用吞吐。
理论上限、模型结果和实测分开
75 MHz、32位、每拍四个有效字节时,变换器的理论上限是300 MB/s。真实结果还受 FIFO、DMA 突发、HP0 共享、DDR 调度和软件启动影响。本机报告只提供 RTL 拍数/停顿以及主机模型正确性;主机 tick 是人为步进值,绝对不能代入真实性能表。硬件数字应来自目标板原始日志,不在此预填看似精确的速度。
| 项目 | 设置 / 预期 / 处理 |
|---|---|
| 有效载荷 MB/s | n × timer_hz ÷ dma_ticks ÷ 1e6 |
| 所有权 MB/s | n × timer_hz ÷ ownership_ticks ÷ 1e6 |
| DDR流量 | 至少读n+写n;cache写回、协议与竞争另算 |
| 时钟来源 | XTime 的 COUNTS_PER_SECOND,不直接等于 CPU Hz |
| 验收规则 | 先逐字节正确且无状态错误,再纳入性能统计 |
换算公式;输入必须来自 HARDWARE 日志的原始字段。
def payload_mbps(n, ticks, timer_hz):
if ticks <= 0 or timer_hz <= 0:
raise ValueError("invalid timer")
return n * timer_hz / ticks / 1_000_000
# 仅换算实际板上日志;HOST_MODEL 数据禁止作为硬件指标。从短包到长包做对照
先完成默认12次功能矩阵,再把重复次数从3改为30或更多,并记录修改后的源码摘要。保留预热轮并明确标记是否排除,不删除不理想的有效结果。每个长度比较耗时中位数与P95,随后结合 ILA 的 READY 空洞判断是软件成本还是流式通路瓶颈;如果改了时钟、FIFO 或 ILA 配置,应视为新的构建重新测试。
- 冻结 bit/elf/XSA 和计时频率
预期与判定:保存构建摘要与原始日志;只使用通过校验的数据。
- 测64、4094、4096、65536字节
预期与判定:每个长度至少31轮,排除首轮预热后保留30个样本。
- 抓取窗口中的 valid/ready/keep
预期与判定:统计接受拍、有效字节与停顿周期;窗口截断需注明。
- 每次只改变一项配置
预期与判定:比较大包摊薄软件开销、HP0竞争或FIFO反压;重复功能校验。
下载包内可运行统计工具;原始 HARDWARE 串口日志留待板上采集。
python3 tests/metrics.py hardware.log --warmup 1
# 输出 retained、median_dma_us、p95_dma_us 与 payload_MBps_at_median
# 拒绝 HOST_MODEL 或含 FAIL 的日志;同一日志只放同一构建和工况。典型故障:小包速度很低却没有时序违例
64字节的有效传输时间很短,启动命令、轮询以及整块缓存维护可能主导观测值。提高 PL 时钟未必改善这种情况,应先用更长包对照。进一步使用 SG、双缓冲或中断需要新的队列所有权协议和描述符管理;本课程 Simple mode 只允许每个通道一个正在执行的命令,不能直接循环覆盖同一缓冲区来宣称连续满速。
完成检查
- 已记录本章配置、版本及预期结果。
- 能区分本地模型验证与实际板上证据。
- 能复现典型故障并说明修复后的复测标准。
延伸阅读与来源
本文为黄河电子原创教学说明。产品命令与支持范围请以实际安装版本的官方文档为准。
- AMD PG021 · AXI DMA 7.1
Direct Register Mode、S2MM_LENGTH、DMA 状态位及 DRE。
- AMD embeddedsw 2024.1 · Simple Poll Example
对照先接收后发送、cache maintenance 与驱动 API;本站示例为原创实现。
- AMD PG085 · AXI4-Stream Infrastructure
AXI4-Stream Data FIFO、独立时钟与复位配置。
- AMD UG908 · Programming and Debugging 2024.1
Hardware Manager、ILA 触发、探针文件与位流匹配。
继续阅读
FPGA从 RTL 到板上运行的完整流程
建立约束、实现、下载与观测的最小工程闭环。
第一个工程的引脚与时钟约束
区分电气连接与时间要求,避免“能生成位流就算正确”。
如何读懂时序报告
从起点、终点、时钟和裕量找出失败路径的原因。
黄河电子