3. NoC 架构总览

在 Versal ACAP 中,NoC(Network-on-Chip)不是一条简单的总线,而是一张覆盖整个芯片的可编程片上网络。它把 PL、PS、DDR 控制器、AI Engine、PCIe、以太网等异构资源连接起来,让数据以“包”的形式在片上高速路由。理解 NoC,核心是抓住五件事:拓扑结构决定“路怎么走”,主从端口决定“谁发起、谁响应”,AXI 接口类型决定“用什么协议说话”,QoS 机制决定“谁优先”,带宽与延迟决定“跑得多快、等多久”。

Versal NoC 拓扑与端口连接示意 NoC 交换网络(可编程路由) PL Master AXI4 / AXI4-Stream PS Master AXI4 事务 AI Engine AXI4-Stream DDR MC AXI4 Slave PL Slave AXI4 Slave PCIe / ETH DMA 通道 QoS:优先级 / 带宽配额 / 延迟敏感通道 读通道与写通道独立仲裁 主端口(发起) 从端口(响应) NoC 交换与路由

一、拓扑结构:从“总线”到“网格”

传统 AXI 总线是共享介质,主设备一多就出现仲裁瓶颈。Versal NoC 采用二维网格(2D Mesh)式拓扑:水平与垂直的链路在交换节点处交汇,每个节点可同时转发多个方向的数据包。这种结构的关键优势是并发性——PL 访问 DDR 的流量与 AI Engine 访问 PL 的流量可以走不同路径,互不阻塞。

拓扑决定了“跳数”。源端口到目的端口经过的交换节点越少,延迟越低。因此在高性能设计中,应尽量让高带宽主设备靠近目标从设备,减少跨网格穿越。

二、主从端口与 AXI 接口类型

NoC 的端口分为主端口(Master Port)和从端口(Slave Port)。主端口发起读写请求,从端口接收并响应。Versal 中常见的连接关系如下:

  • PL Master → NoC → DDR Slave:PL 逻辑通过 AXI4 读写 DDR,是数据搬运最常见的路径。
  • PS Master → NoC → PL Slave:PS 配置或读取 PL 中的寄存器与 BRAM。
  • AI Engine → NoC → DDR / PL:AI Engine 以 AXI4-Stream 方式流式搬运数据。

接口类型上,NoC 主要承载三类 AXI:AXI4(带地址的读写事务,适合内存映射访问)、AXI4-Stream(无地址、连续流,适合高吞吐数据管道)、AXI4-Lite(低带宽寄存器访问)。选错接口类型是常见误区:用 AXI4-Lite 搬大块数据,带宽会被协议开销严重拖累。

三、QoS 机制:让关键流量先走

当多个主端口同时竞争同一个从端口时,NoC 需要仲裁。Versal NoC 提供 QoS(Quality of Service)机制,核心手段包括:

  1. 优先级:为不同主端口或不同流量类别设置优先级,高优先级包优先转发。
  2. 带宽配额:限制某条路径的最大带宽,防止单一主设备“饿死”其他设备。
  3. 延迟敏感通道:对实时性要求高的流量(如视频帧同步)给予更低延迟保障。
QoS 配置通常通过 NoC 编译器或 Vivado 的 NoC 视图完成,读通道与写通道独立仲裁,因此读写 QoS 需要分别设置。

四、带宽与延迟:两个必须分开看的指标

带宽是单位时间能搬运的数据量,取决于链路位宽、时钟频率和协议效率。例如一条 128 位、500 MHz 的链路,理论峰值带宽为 128 × 500M = 64 Gbps,但实际有效带宽会因包头开销、仲裁等待而下降。延迟是单个请求从发出到收到响应的时间,由跳数、交换节点处理时间和从设备响应时间共同决定。

关键认知:带宽和延迟不是一回事。高带宽设计可能延迟很高(如大包流水),低延迟设计可能带宽有限(如小包频繁交互)。数据搬运架构必须根据场景取舍。

指标含义主要影响因素优化方向
峰值带宽链路理论最大吞吐位宽 × 频率加宽位宽、提高时钟
有效带宽实际可达吞吐协议开销、仲裁、突发长度增大突发、减少小包
单跳延迟经过一个交换节点的时间节点处理能力减少跳数
端到端延迟请求到响应的总时间跳数、从设备响应就近连接、QoS 优先

五、案例与复盘:一次 DDR 带宽不达标的排查

某设计中 PL 通过 NoC 向 DDR 写入数据,实测带宽只有理论值的 40%。排查发现:主端口使用了 AXI4-Lite 接口,突发长度仅为 1,每次传输都产生完整的地址与握手开销。改为 AXI4 接口并将突发长度提升到 256 后,有效带宽恢复到理论值的 85% 以上。

常见误区:只关注“峰值带宽”数字,忽略协议开销与 QoS 仲裁。实际设计中,突发长度、接口类型和 QoS 配置对有效带宽的影响,往往比链路位宽更大。

复盘要点:先确认接口类型是否匹配数据量级,再检查突发长度与 QoS 优先级,最后用 NoC 性能监视器观察各通道的实际吞吐与延迟,定位瓶颈在源端、网络还是从端。

# 典型 NoC 连接配置片段(示意)
Master: PL_AXI4_MASTER
  Interface: AXI4
  Burst: 256
  QoS: Priority=High, Bandwidth=4GB/s
Slave: DDR_MC_SLAVE
  Interface: AXI4
  Read/Write Channel: Independent Arbitration