3、AXI互联架构设计:单主单从、多主多从、AXI Interconnect与AXI Crossbar的选择

做原型验证这几年,我接触最多的就是AXI互联结构。说白了,就是怎么把各个IP核通过AXI总线高效地连起来。很多刚入行的朋友一上来就问:“我用Interconnect还是Crossbar?” 嗯,这个问题其实没有标准答案,得看你的场景。

今天我们就从最简单的单主单从开始,一步步聊到多主多从,最后再掰扯清楚Interconnect和Crossbar到底该怎么选。

3.1 单主单从:最基础的连接

单主单从,就是一个Master(比如CPU)连一个Slave(比如DDR控制器)。这种结构最简单,不需要任何仲裁逻辑。

核心要点: 单主单从模式下,地址映射是1:1的,不存在访问冲突。你只需要关注时序收敛和带宽匹配。

我在项目中遇到过这样的情况:有人觉得单主单从太简单,随便连一下就行。结果原型验证时发现,Master的读请求和Slave的响应之间插了太多寄存器,导致延迟超标。嗯,这里要注意——即使是一对一连接,也要仔细算好每一拍的延迟。

参数 单主单从 注意事项
地址映射 1:1 无需地址译码
仲裁 不需要 无竞争
数据通道 直连 注意时序
适用场景 简单系统 CPU+本地SRAM

3.2 多主多从:真正的挑战来了

当系统里有多个Master(比如CPU、GPU、DMA)和多个Slave(DDR、SRAM、外设)时,事情就变得复杂了。你想想看,多个Master同时访问同一个Slave怎么办?谁先谁后?

这就引出了两个核心问题:仲裁和地址译码。

3.2.1 仲裁策略

我个人习惯把仲裁策略分成三类:

  • 固定优先级:谁优先级高谁先上。简单,但低优先级可能饿死。
  • 轮询(Round-Robin):大家轮流来。公平,但延迟不确定。
  • 加权轮询:给高带宽Master更多机会。灵活,但实现复杂。

我的经验: 在原型验证中,我建议先用轮询。为什么?因为调试方便。固定优先级容易掩盖问题,加权轮询又太复杂。轮询是最容易定位bug的。

3.2.2 地址译码

多从设备时,每个Master发出来的地址需要被译码,才能知道它要访问哪个Slave。这个译码逻辑通常放在Interconnect或Crossbar里。

我曾经踩过一个坑:地址译码的边界条件没写对,导致某个Slave的地址区间被另一个Slave“吃掉”了。原型验证时,CPU写DDR的数据莫名其妙写到了SRAM里。嗯,从那以后,我每次都会写一个地址映射检查脚本,跑仿真时自动验证。

3.3 AXI Interconnect vs AXI Crossbar

好,到了最核心的部分。Interconnect和Crossbar到底有什么区别?我直接说结论:

AXI Interconnect:共享总线结构,所有Master共享一套数据通道。
AXI Crossbar:全交叉结构,每个Master到每个Slave都有独立通道。

你想想看,Interconnect就像一条单车道,所有车(Master)都挤在这条道上。Crossbar呢,就像多条独立车道,每辆车都有自己的路。

特性 AXI Interconnect AXI Crossbar
资源消耗 低 高
并发能力 低(一次只能处理一个事务) 高(可同时处理多个事务)
延迟 中等(有仲裁开销) 低(直连路径)
实现复杂度 简单 复杂
适用场景 低带宽、少Master 高带宽、多Master

3.3.1 什么时候用Interconnect?

我个人建议:当你的系统里Master数量不超过3个,且带宽要求不高时,用Interconnect就够了。比如一个CPU加一个DMA,访问几个低速外设。

注意: Interconnect虽然省资源,但它的瓶颈很明显。如果两个Master同时发起长burst传输,后面的Master会被堵死。我在一个项目里就吃过这个亏——CPU和GPU同时访问DDR,结果GPU的带宽被CPU的cache line fill占满了,帧率直接掉了一半。

3.3.2 什么时候用Crossbar?

当你有多个高带宽Master(比如CPU、GPU、NPU)时,Crossbar几乎是必须的。它能提供真正的并行访问。

我记得有一次做AI芯片的原型验证,系统里有4个Master和6个Slave。一开始图省事用了Interconnect,结果性能死活上不去。换成Crossbar后,带宽直接翻了3倍。嗯,资源消耗确实大了,但FPGA上资源够用的话,Crossbar是更稳妥的选择。

3.4 知识结构图

下面这张图总结了AXI互联架构的核心选择逻辑:

AXI互联架构选择流程图 AXI互联架构选择流程 系统互联需求 Master数量 ≤ 3? 是 否 带宽需求低? 高带宽需求 AXI Interconnect AXI Crossbar 说明:Master数量少且带宽低 → Interconnect;Master多或带宽高 → Crossbar 实际项目中,建议先评估资源预算,再决定是否使用Crossbar

3.5 实战建议

最后,我总结几条实战中的建议:

  • 先评估资源:FPGA的LUT和BRAM是有限的。Crossbar虽然好,但资源消耗大。我一般会先算一下每个Slave需要的带宽,再决定。
  • 考虑可扩展性:如果未来可能要加Master,建议一开始就用Crossbar。不然改起来很痛苦。
  • 注意时钟域:多主多从系统里,时钟域交叉是常见问题。我习惯在Interconnect/Crossbar的边界处加异步FIFO。
  • 验证要全面:多主并发访问的case一定要覆盖到。我曾经漏了一个“所有Master同时写同一个Slave”的场景,结果原型验证时死机了。

小技巧: 在原型验证阶段,可以用AXI Monitor来抓取总线上的事务。这样能快速定位是哪个Master出了问题。我每次都会在Interconnect/Crossbar的每个端口上挂一个Monitor,调试效率高很多。

好了,关于AXI互联架构的选择,今天就聊到这里。记住一句话:没有最好的互联结构,只有最合适的。根据你的系统需求、资源预算和验证复杂度,做出合理的选择就行。