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的内存流量冒充应用吞吐。

保留原始 ticks 与计时频率,避免只留下不可复算的 MB/s准备数据不计入本指标clean + 启动所有权窗口开始DMA 往返DMA 窗口invalidate所有权窗口结束一次软件命令对应一个流式包;仅 VALID && READY 时接受数据
保留原始 ticks 与计时频率,避免只留下不可复算的 MB/s(原创示意,非器件引脚图;窄屏可横向滑动)

理论上限、模型结果和实测分开

75 MHz、32位、每拍四个有效字节时,变换器的理论上限是300 MB/s。真实结果还受 FIFO、DMA 突发、HP0 共享、DDR 调度和软件启动影响。本机报告只提供 RTL 拍数/停顿以及主机模型正确性;主机 tick 是人为步进值,绝对不能代入真实性能表。硬件数字应来自目标板原始日志,不在此预填看似精确的速度。

配置与验收依据
项目设置 / 预期 / 处理
有效载荷 MB/sn × timer_hz ÷ dma_ticks ÷ 1e6
所有权 MB/sn × timer_hz ÷ ownership_ticks ÷ 1e6
DDR流量至少读n+写n;cache写回、协议与竞争另算
时钟来源XTime 的 COUNTS_PER_SECOND,不直接等于 CPU Hz
验收规则先逐字节正确且无状态错误,再纳入性能统计

换算公式;输入必须来自 HARDWARE 日志的原始字段。

python
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 配置,应视为新的构建重新测试。

  1. 冻结 bit/elf/XSA 和计时频率

    预期与判定:保存构建摘要与原始日志;只使用通过校验的数据。

  2. 测64、4094、4096、65536字节

    预期与判定:每个长度至少31轮,排除首轮预热后保留30个样本。

  3. 抓取窗口中的 valid/ready/keep

    预期与判定:统计接受拍、有效字节与停顿周期;窗口截断需注明。

  4. 每次只改变一项配置

    预期与判定:比较大包摊薄软件开销、HP0竞争或FIFO反压;重复功能校验。

下载包内可运行统计工具;原始 HARDWARE 串口日志留待板上采集。

bash
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 只允许每个通道一个正在执行的命令,不能直接循环覆盖同一缓冲区来宣称连续满速。

完成检查

  • 已记录本章配置、版本及预期结果。
  • 能区分本地模型验证与实际板上证据。
  • 能复现典型故障并说明修复后的复测标准。

延伸阅读与来源

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

继续阅读

FPGA

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

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

10 分钟
FPGA

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

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

11 分钟
FPGA

如何读懂时序报告

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

10 分钟