F
AXI 总线带宽跑不满是 FPGA/SoC 设计中的常见问题。理论带宽 = 数据位宽 × 时钟频率,例如 128 位、250MHz 的 AXI 理论带宽为 4GB/s,但实测往往只有 50%~70%。
一、影响因素
1. 突发长度:AXI4 支持最长 256 拍突发(INCR)。每次突发都有地址握手和 DDR 行切换开销,突发太短效率低。实测中把突发长度从 4 提高到 16,DDR 访问效率可从约 60% 提升到 90% 以上;
2. 未完成事务数(outstanding):主机只能等前一笔响应返回再发下一笔,延迟无法隐藏。建议支持 8~16 个以上未完成事务;
3. 位宽转换:主从位宽不一致时,互连插入的宽度转换器会降低效率;
4. 仲裁:多主设备共享一个从设备时,仲裁策略与 QoS 设置决定各自带宽;
5. 读写竞争:DDR 读写切换有总线转向开销,读写交替频繁会大幅降低效率;
6. 跨 4KB 边界:AXI 规定突发不能跨越 4KB 地址边界,地址未对齐时会被拆分。
二、优化方法
1. 数据按突发长度对齐,起始地址对齐到 4KB 或至少 64 字节;
2. DMA 引擎使用更长突发与更多 outstanding;
3. 读写分开批量处理,减少切换;
4. 关键主设备设置更高的 QoS;
5. 使用 ILA 或 AXI 性能监视器统计实际握手情况。
三、常见坑
1. 从设备 READY 信号依赖 VALID 的组合逻辑,产生死锁或时序问题;
2. 互连配置为 SAMD 低面积模式,吞吐受限;
3. 忽略 WLAST、RLAST 处理,突发错位。
讨论:
1. 你们项目中 DDR 的 AXI 实际效率一般能做到多少?
2. 多主设备场景下,你们如何配置 QoS?
一、影响因素
1. 突发长度:AXI4 支持最长 256 拍突发(INCR)。每次突发都有地址握手和 DDR 行切换开销,突发太短效率低。实测中把突发长度从 4 提高到 16,DDR 访问效率可从约 60% 提升到 90% 以上;
2. 未完成事务数(outstanding):主机只能等前一笔响应返回再发下一笔,延迟无法隐藏。建议支持 8~16 个以上未完成事务;
3. 位宽转换:主从位宽不一致时,互连插入的宽度转换器会降低效率;
4. 仲裁:多主设备共享一个从设备时,仲裁策略与 QoS 设置决定各自带宽;
5. 读写竞争:DDR 读写切换有总线转向开销,读写交替频繁会大幅降低效率;
6. 跨 4KB 边界:AXI 规定突发不能跨越 4KB 地址边界,地址未对齐时会被拆分。
二、优化方法
1. 数据按突发长度对齐,起始地址对齐到 4KB 或至少 64 字节;
2. DMA 引擎使用更长突发与更多 outstanding;
3. 读写分开批量处理,减少切换;
4. 关键主设备设置更高的 QoS;
5. 使用 ILA 或 AXI 性能监视器统计实际握手情况。
三、常见坑
1. 从设备 READY 信号依赖 VALID 的组合逻辑,产生死锁或时序问题;
2. 互连配置为 SAMD 低面积模式,吞吐受限;
3. 忽略 WLAST、RLAST 处理,突发错位。
讨论:
1. 你们项目中 DDR 的 AXI 实际效率一般能做到多少?
2. 多主设备场景下,你们如何配置 QoS?

