从 AMBA 协议看 Valid-Ready 到 Credit-based 流控机制
. 引言AXI 协议基于valid-ready 信号进行流控只有 valid-ready 同时有效时表示数据有效时序如下CHI 协议基于 credit 进行流控下游输出 LCRDV 给上游上游维护一个信用计数器基于信用计数器的数量向下游分发请求个数2. 两种流控的本质差异2.1 Valid-Ready 分析Valid-Ready 握手本质上是一种即时反压机制如果发送方 Sender 和接收方 Receiver 间没有插入寄存器那么接收方反压会被发送方即时看见但是这不利于时序收敛在高频系统下一般会在 Sender 和 Receiver 间插入多级寄存器。2.1.1 真实传输场景考虑一个真实的流水线互联Valid/Ready 信号之间插入了 3 级 register slice 以切断组合路径这里引入一个概念 ——反压信息往返周期数TRRT对应上文的场景TRRTTforward_stagesTbackward_stages__这时对于 Receiverbuffer 深度必须设定为大于等于 TRRT 也就是 6 因为反压信号 3 个 cycles 后才传递到 Sender而在这 3 个周期中在途的请求是 3 个对应前向 后向的 slices 数量。2.1.2 维持满带宽的条件BminBW×TRRT×上面给出的公式设是使得发送方与接收方维持满带宽的条件设 B 为接收方 Buffer 深度对于每 cycle 1beat 的链路 BW 为 1TRRT 为 N 的场景下Receiver 必须有至少 N-entry 的 FIFO 才能保证无气泡流水这个 FIFO 承担了一个职责——即反压还在路上必须承载上游 Outstanding 的数据所以一般也称之为 skid-buffer 或者 elastic buffer。基于 AXI 的 register slice 一般是2-entry 的 skid-buffer用来打破组合路径同时维持满吞吐。2.1.3 吞吐效率如果 Receiver 深度是下述公式的场景设 B 为 Receiver buffer 深度BminBW×TRRT×每次 FIFO 填满后反压建立 解除的时间就会引入 bubble导致有效带宽下降具体的效率公式如下η有效传输cycle总cycleBBTRRT有效传输总这里 B 代表 Receiver FIFO 深度。注意这里每一级 register slice 的 slice 都有上下游的 Valid-Ready否则下游 FIFO 会丢包效率分析就不成立。2.2 Credit-Based 分析基于信用的流控本质上是一种解耦的哲学核心思想是将能否发送的决策权前置到发送端。Sender 可发送条件 Creditavailable002.2.1 真实传输场景上图与 Valid-Ready 系统一个很明显的区别Credit 系统中数据通路上只需要简单的 flop pipeline每级1个 FF 就够因为信号是单向的没有握手。2.2.2 Credit 流控的完整数学模型设 Receiver buffer 深度为 B往返延迟为 TRRTcredit return延迟 data forward 延迟则初始 credit 发放CinitB维持满吞吐的充要条件 B≥BW×TRRT≥×有效带宽利用率 ηmin(1,BBW×TRRT)(1,×)看起来公式与 Valid-Ready 系统的完全一致但是基于 2.2.1 的描述实际上反压往返时间是大大减少了的因此 Receiver 的 buffer 深度也减少了。2.2.3 Credit 流控的其他优势2.2.3.1 时序友好Credit return 只是一个单 bit 脉冲信号可以插入任意级数的 flop对比下 Valid-Ready 系统插入 register slice 需要配对的 skid-buffer面积和复杂度显著减少。2.2.3.2 支持虚通道 VC 和避免死锁Credit 天然支持 per-VC 独立流控是构建无死锁 NOC 的基础。每条虚通道独立的 Credit 池可以防止Head-of-Line Blocking 和协议级死锁在 CHI, UCIe 等协议中是标配。本文暂不对此展开介绍。3. 实际应用3.1 ARMCMN 系列RN-I (Request Node - I/O) 和 RN-D (Request Node - DMA) 的存在本质上是一个协议桥会进行基于 Valid-Ready 握手的 AXI 协议到基于 Credit 的 CHI 协议间的转换。这里的选择逻辑是外侧 AXI因为绝大多数第三方 IP、历史 IP、以及 ARM 自家的大部分非一致性 IP 都是 AXI 接口内侧 CHI因为 Mesh 规模大RTT 大、需要 VC 支持一致性协议。这种方案并不是技术最优但确保了生态最优。 ARM 自己在新的 Neoverse 核心如 Neoverse V2/V3上使用 CHI 的 RN-FFully coherent直接接入 Mesh避免了这个转换开销。有意思的是 CCIX 和 CXL 的设计选择CCIX 基于 PCIe 物理层但上层协议采用信用流控的事务层。CXL.cache/CXL.mem 完全是 credit-based 的因为要跨 socket、跨 die 保证一致性。涉及跨越物理边界 一致性语义选择 credit 机制。3.2 NVIDIAHopper/Blackwell 架构的多级互联Level 2-3 之间是流控机制切换的分界点。切换原因是 XBar 规模扩大TRRT 增大且需要 fair arbitration。L2 Cache controller 内部使用多端口 Credit-based 调度器。3.3 Google TPUTPU Systolic Array 与互联的耦合设计脉动阵列内部没有流控的原因数据流动是编译时确定的不存在动态拥塞每个 PE 的输入时序由编译器精确调度相当于把流控问题前移到编译器这是最激进的优化软件定义硬件编译器硬件协同设计彻底消除运行时流控开销。3.4 网络芯片DPU/Switch ASICBroadcom Tomahawk、NVIDIA Spectrum、Marvell Teralynx 等交换芯片Ingress → Packet Buffer严格credit-based因为要防止PFCPriority Flow Control下的buffer溢出Buffer → EgressVOQVirtual Output Queue credit调度跨芯片FabricCell-based credit把大包切成固定cell每cell一个credit这里 Credit 的使用是功能性需求防丢包是网络芯片的生命线不是基于性能优化的考量3.5 HBM/DDR 控制器HBM/DDR控制器内部Command Queue → SchedulerValid-Ready 为主队列深度可控