PAXI + RC Link 建模行为分析
本文档从仿真建模的角度, 系统梳理 PAXI (事务层) 和 RC Link (传输层) 的传输流程、Buffer 资源、重传机制和流控行为。
基于: PAXI SUE2.0 Core UserGuide V2R0P5, RCLINK AFH SPEC v2.4
名词定义
协议栈与架构
| 术语 | 全称 | 定义 |
|---|---|---|
| PAXI | Protocol of Accelerated eXchange Interconnect | 合见工软的芯片间互联 IP, 事务层组件, 将 AXI 总线事务映射到以太网链路 |
| RC Link | Reliable Connection Link | SUE2.0 传输层, 提供可靠传输 (Go-Back-N)、流控 (CBFC)、速率控制 |
| CESOC | - | 以太网控制器子系统, 包含 CEMAC (MAC)、CEPCS (PCS)、CEFEC (FEC) |
| SUE | - | 合见工软完整智算互联协议 (SUE Protocol), PAXI+RC Link+CESOC 为其组成部分 |
| Flit | Flow Control Unit | PAXI 基本传输单元, AXI 信号经编码后的数据包 |
| RH | Routing Header | RC Link 报文路由头, 64-bit, 包含 QP/PSN/Opcode 等信息 |
| MPS | Maximum Packet Size | 单个数据包的最大尺寸 |
| MR | Memory Region | RDMA 内存区域 (旧版概念, SUE2.0 中由 AXI 地址空间替代) |
寻址与通道
| 术语 | 全称 | 定义 |
|---|---|---|
| DA | Destination Address | 目标芯片标识符, PAXI 通过 DA 寻址远端设备 |
| SA | Source Address | 源芯片标识符 |
| VC | Virtual Channel | 虚拟通道, SUE2.0 支持 8 个独立 VC (VC0~VC7) |
| QP | Queue Pair | 队列对, RC Link 的基本通信端点, 最多 1024 个 |
| QPID | Queue Pair Identifier | QP 序列号, 标识发送/接收队列 |
| Bank | - | TYPE1 REQ 按 QPID 低位分为最多 4 个 Bank, 用于独立流控和轮转仲裁 |
| P_key | Partition Key | 分区密钥, 只有相同 P_key 的 QP 才能通信 (隔离机制) |
传输与可靠性
| 术语 | 全称 | 定义 |
|---|---|---|
| PSN | Packet Sequence Number | 数据包序列号 (12-bit), 用于 Go-Back-N 重传的顺序检测 |
| OST | Outstanding | 已发出但未收到确认的请求数量 |
| Go-Back-N | - | 重传算法: 检测到 PSN 错误时, 从错误点开始重发所有后续包 |
| ACK/NAK | Acknowledge / Negative Acknowledge | 确认/否定确认报文 (RH Opcode=01) |
| FACK | Forced ACK | 强制 ACK 标记, 带此标记的请求要求对端尽快回复 ACK |
| CNP | Congestion Notification Packet | 拥塞通知报文 (RH Opcode=10), 检测到 ECN 标记时生成 |
| ECN | Explicit Congestion Notification | 显式拥塞通知, IP 头 ToS 字段低 2bit |
| RTT | Round-Trip Time | 往返延迟, 通过 RH 中 Timestamp 字段测量 |
| ICRC | Invariant CRC | 不变 CRC 校验, TYPE1 可选 (type1_remove_icrc_en 控制) |
流量控制
| 术语 | 全称 | 定义 |
|---|---|---|
| CBFC | Credit-Based Flow Control | 基于信用的端到端流控, 发送方跟踪接收方可用 Credit, 不足时阻塞 |
| PFC | Priority Flow Control | 优先级流控, 基于 RX Buffer 水位线触发暂停帧 |
| Credit | - | 信用单元, 代表接收方的可用缓冲空间 (单位由 credit_size 配置) |
| CL | Credit Limit | 单个 VC 的最大 Credit 数量 |
| credit_size | - | 单个 Credit 代表的字节数: 32/64/128/256/1024/2048 |
| credit_uf_limit | Credit Underflow Limit | Credit 下限 (1~7), 剩余 Credit 低于此值时阻塞 VC |
| Watermark | - | 水位线, RX Buffer 的高/低阈值, 用于触发/解除背压 |
数据类型与报文
| 术语 | 全称 | 定义 |
|---|---|---|
| TYPE1 | - | RC Link 可靠单播传输类型, 支持 Go-Back-N E2E 重传, 512 OST |
| TYPE2 | - | RC Link 不可靠多播传输类型, 无重传, 16 OST |
| TYPE3 | - | RC Link 原始以太网报文类型, 使用 MD 机制 |
| MD | Memory Descriptor | 128-bit 数据描述符, TYPE3 用于管理数据缓冲区 |
| REQ | Request | AXI 请求方向 Flit (AW+W, AR) |
| RSP | Response | AXI 响应方向 Flit (R, B) |
| MUL | Multicast | 多播 Flit |
| WSTRB | Write Strobe | AXI 写字节选通信号, 全 1 时可省略以节省带宽 |
报文格式
| 术语 | 全称 | 定义 |
|---|---|---|
| Standard | - | 标准报文格式, 含 MAC/IP/UDP/RH 完整头部 |
| AFH_GEN1 | - | 自定义 MAC 头格式, 可选 TC 域 |
| AFH_GEN2_16b | - | 16-bit 地址压缩格式, 缩减 DA/SA 域 |
| AFH_Lite | - | 精简格式, 通过 Traffic Class 区分 TYPE1/TYPE2, 无 CRC |
| TC | Traffic Class | 流量类别域 (8-bit), 使能 CBFC 时携带 VC 信息 |
| VLAN | Virtual LAN | 虚拟局域网标签, 可选插入 |
完整传输流程
单播写请求 (AXI Write) 端到端流程
这是最典型的传输路径, 涵盖从 AXI Master 发起写事务到远端完成写操作并返回 B 响应的全过程。

编辑源文件: drawio/2_transmission_flows.drawio · 页面: "2.1 AXI Write E2E"
B 响应返回路径 (反向, RSP 通道):

编辑源文件: drawio/2_transmission_flows.drawio · 页面: "2.1b B Response Return"
单播读请求 (AXI Read) 端到端流程

编辑源文件: drawio/2_transmission_flows.drawio · 页面: "2.2 AXI Read E2E"
关键差异: R 通道支持 interleaving, PAXI 为每个 OST 读请求分配独立 Buffer 空间, 按 Buffer 填满的顺序发送 (非严格 FIFO)。
多播写请求流程

编辑源文件: drawio/2_transmission_flows.drawio · 页面: "2.3 Multicast Write"
建模要点:
- TYPE2 无 Go-Back-N 重传, 可靠性依赖 FEC
- B 响应延迟 = max(所有组内设备的响应延迟)
- 超时阈值: 默认 ~64M cycles
传输流程中的关键延迟分解
从建模角度, 端到端延迟可分解为以下阶段:

编辑源文件: drawio/2_transmission_flows.drawio · 页面: "2.4 Latency Breakdown"
最低延迟: 150ns AXI-to-AXI @ 400G (C2C 直连, 无竞争)
Buffer 资源全景
PAXI TX 方向 (5 个 Buffer)
| Buffer | 容量 | 触发发出条件 | 建模影响 |
|---|---|---|---|
| AW+W | 1 个 MPS burst | 收到 AW 请求 + 当前 burst 的 WLAST | 写延迟受 burst 长度影响: 必须收齐整个 burst 才发出 |
| R | OST 个空间 | 按 Buffer 填满顺序发出 | 支持 interleaving; 多个并发读的 R 数据可交叉返回 |
| AR | 深度 16 | (1) 达到 TX_BUF_WM 水位<br>(2) DA/VC 切换<br>(3) TX_BUF_ACC_WT 超时 | 打包优化: 最多 16 个 AR 合并为 1 个 Flit, 减少帧头开销 |
| B | 深度 16 | 同 AR | 打包优化: 最多 16 个 B 合并为 1 个 Flit |
AR/B 打包行为详解:
- 三个触发条件中任一满足即发出
- 打包后帧长不能超过最大帧长 (由 Ethernet Frame Length Register 配置)
- DA 或 VC 发生切换时, 强制发出之前累积的数据 (不同目标不能混在同一 Flit)
PAXI RX 方向 (8 个 Buffer)
VC Buffer (3 个)
| Buffer | 总容量 | 默认高水位 | 预留吸收空间 | 触发背压 |
|---|---|---|---|---|
| REQ MEM | 32 帧 + 2 RTT | 32 帧 + 1 RTT | 1 RTT | 超过高水位 -> PFC/CBFC 背压 |
| RSP MEM | 32 帧 + 2 RTT | 32 帧 + 1 RTT | 1 RTT | 同上 |
| MUL MEM | 8 帧 + 2 RTT | 8 帧 + 1 RTT | 1 RTT | 同上 |
水位线行为: 数据量超过高水位时触发背压 (PFC/CBFC), 低于低水位时解除背压。预留 1 RTT 空间用于吸收在途数据。详见 3.4 节总结图。
AXI 通道 Buffer (5 个)
| Buffer | 容量 | 说明 |
|---|---|---|
| AW Buffer | 16 MPS | 写地址通道 |
| W Buffer | 16 MPS | 写数据通道 |
| B Buffer | 16 MPS | 写响应通道 |
| AR Buffer | 16 MPS | 读地址通道 |
| R Buffer | 16 MPS | 读数据通道 |
每个通道独立握手, 即使某通道被 AXI 背压, 其他通道仍可正常接收。
RC Link 资源
| 资源 | TYPE1 (可靠单播) | TYPE2 (不可靠多播) | TYPE3 (原始以太网) |
|---|---|---|---|
| Outstanding | 512 | 16 | N/A |
| 最大 Payload | 1344 字节 | 1344 字节 | TX: 4096B, RX: 8192B |
| QP 数量 | 最多 1024 | N/A | N/A |
| VC 通道 | 4 (4 Bank) | 1 | 1 |
| 重传 Buffer | 512 Slot (Go-Back-N) | 无 | 无 |
| ACK Buffer | 2^QP_AW (ACK MERGE) | N/A | N/A |
| CNP Buffer | 深度 8 (CNP MERGE) | N/A | N/A |
| 初始 Credit | 由 CBFC 配置 | 2048 | 由 CBFC 配置 |
Buffer 资源总结图
TX 方向:

页面: "3.1 TX Path Buffers"
RX 方向:

页面: "3.2 RX Path + Watermark"
重传机制 (Retry)
三层错误保护体系

编辑源文件: drawio/4_retry_mechanisms.drawio · 页面: "4.1 Three Error Levels"
L2: Go-Back-N E2E 重传详解
触发条件: 接收方检测到 PSN 不连续 (丢包或乱序)
重传行为:

编辑源文件: drawio/4_retry_mechanisms.drawio · 页面: "4.2 Go-Back-N State Machine"
Go-Back-N 行为:
- 接收方发现 PSN 缺口时, 发送 NAK (Opcode=01, NAK flag)
- 发送方收到 NAK 后, 将该 QP 所有 WAIT_ACK 状态的 Slot 回退到 WAIT_GRANT
- 从最早未确认的包开始重新发送
- 重传计数器递增, 超过阈值 (RETRY_TIMER_CFG) 则上报中断
ACK MERGE 机制: 接收方对多个连续 PSN 的 ACK 合并为一个批量 ACK 发送 (4 组/轮), 减少 ACK 报文开销。ACK MERGE 行为在上图的状态机中体现。
FACK (Forced ACK):
- 发送方在报文 RH 中设置 FACK=1
- 接收方收到后尽快回复 ACK, 不等待 ACK MERGE 合并
- 用于延迟敏感的事务
建模参数:
| 参数 | 值 | 影响 |
|---|---|---|
| PSN 宽度 | 12-bit (0~4095) | PSN 回绕周期 |
| 最大 OST | 512 (TYPE1) | 发送窗口大小, 影响吞吐 |
| 最大 QP | 1024 | 并发连接数 |
| 最大 Payload | 1344 字节 | 单包数据量 |
| 重传阈值 | 可配置 (RETRY_TIMER_CFG) | 超限后进入 fatal 状态 |
| ACK MERGE 轮询 | 4 组/轮 | ACK 延迟 |
L3: PAXI DA 级错误恢复
当 RC Link 重传超限时, PAXI 执行 DA 级隔离:

编辑源文件: drawio/4_retry_mechanisms.drawio · 页面: "4.3-4.4 DA Recovery + QP Fatal"
RC Link QP Fatal 处理 (重传超限后)
当某个 QP 重传次数达到阈值, 需要完整的 QP 重建 (流程图见 4.3 节):
- 上报 QP Fatal 中断
- 清除该 QP 的所有 Slot 状态
- 通知上层软件重新初始化 QP (包括 Credit 重新协商)
流控机制
流控体系全景

编辑源文件: drawio/5_flow_control.drawio · 页面: "5.1 Flow Control Overview"
CBFC 详细行为
CBFC 是 SUE2.0 主要的端到端流控机制。
初始化:
MAC 通过 MAC2TX_CBFC_RST_I[31:0] 配置各 VC:
- 低 8bit: 指示哪些 VC 需初始化 (可同时或逐个)
- 配置内容: credit_size, credit_limit (CL), pkt_ovhd
- 建议在 RC Link 工作前完成
稳态工作:

编辑源文件: drawio/5_flow_control.drawio · 页面: "5.2 CBFC Detail"
VC 到物理流量映射:
7 路物理流量 <-> 8 个 VC (一一映射, 不可共享)
TYPE1_REQ Bank0 (QPID[1:0]=00) -> type1_req_bank0_cbfc[2:0] -> VCx
TYPE1_REQ Bank1 (QPID[1:0]=01) -> type1_req_bank1_cbfc[2:0] -> VCy
TYPE1_REQ Bank2 (QPID[1:0]=10) -> type1_req_bank2_cbfc[2:0] -> VCz
TYPE1_REQ Bank3 (QPID[1:0]=11) -> type1_req_bank3_cbfc[2:0] -> VCw
TYPE1_ACK + CNP -> type1_ack_cbfc[2:0] -> VCa
TYPE2 -> type2_cbfc[2:0] -> VCb
TYPE3 -> type3_cbfc[2:0] -> VCc
高级特性:
| 特性 | 行为 | 适用范围 |
|---|---|---|
| 动态下限 (dyn_uf_limit_cbfc_en) | Credit 低于水线但仍大于最大包长时, 允许再发一个包 | 仅 TYPE1 REQ |
| 软件流控 (software_ctrl_cbfc_vc_status) | 对应 VC 位=0: 强制停止; 位=1: 允许 | 所有 VC |
| 全局禁用 (stop_cbfc_en) | 最高优先级, 禁用所有 CBFC | 全局 |
PFC 行为 (CBFC 的替代方案)

编辑源文件: drawio/5_flow_control.drawio · 页面: "5.3 PFC Behavior"
注意: 即使使用 CBFC 模式, RX 方向的反压信号 TX_PFC_REQ_O[7:0] 仍被复用 (CBFC 和 PFC 共用该接口)。
Per-QP 速率控制

编辑源文件: drawio/5_flow_control.drawio · 页面: "5.4 Rate Control + Arbitration"
TYPE2 也支持独立速率控制, 通过 SET_TYPE2_RATE_VLD_I 接口设置。
反馈信号给上游:
- CC_TYPE1_QP_EN_SET_O / CC_TYPE1_QP_EN_CLR_O: 通知上游 PAXI 某 QP 是否可发送
- 防止上游在 QP 被限速时持续灌入数据, 导致 RC Link 内部 Buffer 被占满而阻塞其他 QP
TYPE1 发送仲裁
TYPE1 发送仲裁流程与速率控制在上图 (5.4 节) 中统一展示。 arbitration 顺序: Slot FIFO -> Bank 轮转 -> Rate Gate -> CBFC Gate。
CNP MERGE (拥塞通知过滤)

编辑源文件: drawio/5_flow_control.drawio · 页面: "5.6-5.7 CNP Merge + Multicast FC"
多播双重流控
TYPE2 多播报文需同时满足两层流控 (流程图见 5.6 节):
- CBFC 端到端 Credit: 保证对端接收方 buffer 不溢出
- 多播 MAC TX Credit: 保证本地 MAC 多播复制 buffer 不溢出
- 两者均通过才允许发送; 多播 Credit 复用 CBFC 控制器模块
建模关键参数汇总
性能相关参数
| 参数 | 默认/典型值 | 影响 |
|---|---|---|
| MAC 带宽 | 400G / 200G | 链路峰值吞吐 |
| AXI-to-AXI 延迟 | 150ns @ 400G (C2C, Mode 0: P2P 直连无 NoC) | 最低端到端延迟基准 (含 NoC 时更高) |
| TYPE1 最大 Payload | 1344 字节 | 单包有效数据量, 影响帧效率 |
| TYPE1 OST | 512 | RC Link 发送窗口, 影响流水线吞吐 |
| TYPE1 Overcredit | 512 | OST 之外的额外缓冲, 影响吞吐上限 |
| TYPE2 OST | 16 | 多播并发度 |
| PAXI W/R OST | 256 | PAXI Core 层最大在途事务数 (< RC Link OST) |
| PAXI W/R MPS | 4096B | PAXI Core 层单次 burst 最大尺寸 |
| QP 数量 | 1024 | 并发通信端点数 |
| VC 数量 | 8 | 流量隔离通道数 |
| Bank 数量 | 4 (TYPE1 REQ) | REQ 仲裁公平性粒度 |
| 时钟频率 | 最大 1GHz (RC Link) | 处理吞吐上限 |
Buffer 容量参数
| 参数 | 值 | 公式/说明 |
|---|---|---|
| REQ/RSP MEM | 32 帧 + 2 RTT | RTT 取决于链路配置 |
| MUL MEM | 8 帧 + 2 RTT | 多播 Buffer 较小 |
| 高水位默认 | N 帧 + 1 RTT | N=32 (REQ/RSP) 或 8 (MUL) |
| AXI 通道 Buffer | 16 MPS/通道 | 5 个独立通道 |
| AR/B TX 打包深度 | 16 | 最多 16 事务合并 |
| TX_BUF_WM | 可配置 | AR/B 打包水位 |
| TX_BUF_ACC_WT | 可配置 | AR/B 打包超时 |
流控参数
| 参数 | 范围 | 说明 |
|---|---|---|
| credit_size | 32/64/128/256/1024/2048 字节 | Credit 粒度 |
| credit_limit (CL) | 可配置 | per-VC 最大 Credit 数 |
| CBFC_NUM 位宽 | 15 bit (最大 32767) | Credit 计数器上限 |
| credit_uf_limit | 1~7 | Credit 下限 (禁止配 0) |
| pkt_ovhd | signed 10-bit | 每包额外开销, 影响 credit 消耗: ceil((payload + pkt_ovhd) / credit_size) |
| CC_WINDOW | 4.096~65.536 us | 速率控制时间窗口 |
| length_thr | per-QP 配置 | 每窗口最大发送字节数 |
| Channel Weight REQ/RSP | 默认 0x0008 | 通道仲裁权重 |
| Channel Weight MUL | 默认 0x0100 | 多播权重 (较高) |
| PFC XON/XOFF (TYPE1/TYPE3) | depth/2, depth*3/4 | PFC 模式水位线公式 |
| PFC XON/XOFF (ACK) | 0x80, 0xC0 (固定) | ACK 通道固定阈值 |
重传参数
| 参数 | 值 | 说明 |
|---|---|---|
| PSN 宽度 | 12-bit | 序列号空间 0~4095 |
| retry_counter | 4-bit [3:0] | 常规 Go-Back-N 重传计数 |
| rnr_retry_counter | 4-bit [7:4] | RNR (Receiver Not Ready) 重传计数 |
| 重传次数阈值 | 可配置 (RETRY_TIMER_CFG) | 任一计数器超限进入 fatal |
| ACK MERGE 深度 | 2^QP_AW | ACK 合并 Buffer |
| ACK MERGE 轮询 | 4 组/轮 | 调度粒度; 最大额外延迟 = QP_NUM/4 个检查周期 |
| CNP MERGE 深度 | 8 | CNP 过滤 Buffer |
| CNP MERGE 时间窗口 | TIMER_THR_I (可配置) | 重复 CNP 过滤间隔 |
| 多播超时 | 默认 0x03d0_9000 cycles | ~64M cycles |
报头开销 (影响有效带宽)
| 格式 | 报头组成 | 估算开销 |
|---|---|---|
| Standard | MAC(14B) + IP(20B) + UDP(8B) + RH(8B) + 可选ICRC(4B) | ~50-54B |
| AFH_GEN1 | MAC(14B) + 可选TC + RH(8B) | ~22-30B |
| AFH_GEN2_16b | 压缩MAC + RH(8B) | ~16-20B |
| AFH_Lite | 压缩MAC + TC区分TYPE | 最小 |
有效带宽 = 链路带宽 x (Payload / (Payload + Header + FEC开销))
序列保证与限制
无顺序保证的场景
- 同一地址的读写: PAXI 不保证同地址读写事务的顺序
- 不同 DA 的事务: 发往不同目标的事务无顺序保证
- 不同 VC 的数据: 跨 VC 无序列保证
有顺序保证的场景
- 同 QP 的 TYPE1 报文: PSN 保证同一 QP 内的包顺序
- 同 VC 同 DA: 在同一 VC 通道内发往同一 DA 的事务保持顺序
- Go-Back-N 重传: 重传时从错误点严格按序重发
建模影响
上层软件/NoC 需要自行管理顺序依赖。建模时如果需要保序, 必须将相关事务映射到同一 QP 和同一 VC。