G5 CDMA msg 同步指令体系设计规格
版本:1.0.0 状态:Accepted 创建日期:2026-06-01 最后更新:2026-06-01 作者:xiang.li 前置:G5 CDMA 建模设计规格
变更历史
| 版本 | 日期 | 变更说明 |
|---|---|---|
| 1.0.0 | 2026-06-01 | 初版:从 G5 CDMA 建模设计规格拆出 msg 同步指令体系 |
@tbl-spec-cdma-msg-01 文档变更历史
概述
本 spec 定义 G5 仿真中 CDMA msg 同步指令体系:三条 msg 指令(MsgSend / MsgWait / RemoteMsgSend)的语义、msg_central 状态机、msg_id 命名空间分配规则、msg 信号 A4S 独立传输路径、以及与主 spec「跨 chip 数据到达依赖」约束的衔接。msg 体系是 CDMA 在 sendq/rcvq 双队列之间、sys_tx/sys_rx 两线程之间、跨 engine 之间、跨 chip 之间的显式同步原语,对应 SG2262 硬件「write + 显式 msg 指令」同步路径。
背景
主 spec(G5 CDMA 建模设计规格)定义了 CDMA 核心引擎:线程状态机、仲裁、CHS/CFS 一致性、Send/Receive 握手、事件驱动生命周期。其中「跨 chip 数据到达依赖」约束指出:Ring 类集合通信算法(Ring AllReduce/AllGather/ReduceScatter、Bruck AllToAll、Recursive Halving-Doubling 等)的 step k 发出的数据依赖 step k-1 从远端接收的数据,必须用显式跨 chip 同步路径表达——禁止依据「本 chip 上一 Transfer 完成」作为跨 chip 到达语义。
主 spec 给出该约束的两条 SG2262 硬件同步路径:
- send/receive 协议(CDMA_send + CDMA_receive,自带 write_done sideband)——已在主 spec 完整定义
- write + 显式 msg 指令(CDMA_write + CDMA_remote_msgsend + CDMA_msg_wait)——其完整设计即本 spec
为什么需要跨 chip / 跨 engine 显式同步:CDMA_write 本身不带自动同步(SG2262 硬件设计约束:"芯片间同步应由软件中断完成")。CHS 模式下 Transfer 的本地 retire(CdmaLocalComplete)仅表示本 chip datapath 释放,数据可能仍在 wire 上未到 receiver;即使 CFS 模式下 DataArrived 表示远端 ACK,receiver 上的后续指令也需要一个 receiver 侧可感知的到达信号。msg_central 提供该信号:sender 写完数据后向远端 msg_central 累计计数,receiver 的 MsgWait 阻塞到计数达阈值后放行后续指令。这是 Ring 类算法跨 step 数据到达依赖在「write + msg」路径下的物理实现。
名词定义
本表只钉死 msg 体系专属名词。通用名词(CDMAThread、Datapath、sendq/rcvq、cmd_id、sync_id、cmd_id_dep、Transfer、Send、Receive、Fence、跨 chip 数据到达依赖、write_done sideband 等)定义见主 spec G5 CDMA 建模设计规格 §名词定义,后文沿用主 spec 的统一语言。
| 名词 | 定义 | 与易混淆概念的区分 |
|---|---|---|
| msg_central | 维护 (msg_id → accumulated_count) 状态的硬件单元,每 chip 4 个 × 256 slot = 1024 | 与 tcredit CAM 区别:msg_central 是累计计数,tcredit 是配对许可 |
| msg_id | 同步语义中的标识符,由软件分配;absolute 形式(指令直接携带完整 ID)或 relative 形式(携带相对偏移,配合 base_id CSR 解析为 absolute) | 与 cmd_id 区别:cmd_id 是指令身份,msg_id 是同步计数器索引 |
| send_cnt | 一次 send 指令累计的计数增量(一般为 1) | 与 wait_cnt 区别:send 端累加量 |
| wait_cnt | 一次 wait 指令满足条件所需的累计阈值 | 满足后从 accumulated_count 减去 wait_cnt(消费语义) |
| central_idx | 选择 4 个 msg_central 中哪一个的 2-bit 索引(0..3) | 与 msg_id 共同构成 (central_idx, msg_id) 二维寻址 |
| base_id CSR | 线程级 16-bit 偏移基址,relative msg_id 经 absolute = base_id + relative 算出 absolute | 仅 MsgSend / MsgWait 用;RemoteMsgSend 直接用 absolute |
| sys_tx / sys_rx | 两条完全独立的硬件 msg 线程,分别绑定发送侧 / 接收侧同步方向 | 两线程 msg_central state 共享物理实例,但线程级阻塞条件互相独立 |
| A4S (AXI4 Stream) | c2c_sys 子系统中为 msg 提供的 32-bit AXI4 Stream 独立接口,与数据 PAXI 物理隔离 | msg 信号不复用数据 PAXI VC,数据拥塞不影响 msg 时延 |
| msg_en | 数据指令(Transfer / Scatter)的可选集成字段,尾 beat 触发 1 次等价 RemoteMsgSend | 与独立 RemoteMsgSend 数值等价,区别是不占独立指令仲裁槽位 |
目标与非目标
目标(承接主 spec G9):
- G9.1:定义 msg 三种指令(MsgSend / MsgWait / RemoteMsgSend,硬件别名 CDMA_msg_send / CDMA_msg_wait / CDMA_remote_msgsend)的完整语义——作用域、字段、执行行为、完成时机、阻塞条件
- G9.2:定义 msg_central 状态机——4 central × 256 slot 累计计数器、写入(MsgSend / RemoteMsgSend 累加)、读取与消费(MsgWait 检查后减去)
- G9.3:定义 msg_id 命名空间分配规则——absolute / relative 形式、base_id CSR 解析、(central_idx, msg_id) 二维寻址、冲突定义、多 channel 并发隔离的展开层职责
- G9.4:定义 sendq / rcvq 双队列模型与 sys_tx / sys_rx 两独立 msg 线程
- G9.5:定义 msg 信号 A4S 独立传输路径——本 chip 内 / 跨 chip 传输、packet 大小、路径独立性、保序对接
- G9.6:定义 msg 体系与主 spec「跨 chip 数据到达依赖」契约的衔接——「write + msg 三指令组合」如何表达跨 step 数据到达依赖
- G9.7:定义 write + 内嵌 msg_en 集成路径(数据指令尾 beat 触发隐式 RemoteMsgSend)
非目标:
- CDMA 核心引擎(线程状态机、仲裁、CHS/CFS、Send/Receive 握手、事件驱动生命周期)——定义见主 spec
- send/receive 协议的 tcredit 握手——主 spec §tcredit 机制 / §Send/Receive 配对规则
- 数据指令的其它可选集成字段(atm_en / reduce_en / compress_en / fence_bit)——主 spec §基础数据指令的可选集成字段
- 原子指令族(RemoteAtomic)——主 spec §原子指令族
- base_addr_region 保序窗口硬件配置——仿真层不建模(Non-Goal,主 spec)
用例说明
以 Ring AllReduce 4 chip 的一个跨 step 数据到达依赖为例,走一遍「write + msg 三指令组合」同步。设 chip 0 在 step k 把 reduce 结果发往 chip 1,chip 1 在 step k+1 必须等该数据到达后才能转发。
chip 0(sender)sendq 上的指令序列(step k):
Transfer(dst=chip 1, data=reduce_chunk):把本 chip step k 的 reduce 结果写入 chip 1。cmd_id_dep 链接到 step k-1 本 thread 上一条指令的 cmd_id(thread 顺序)。Transfer 本身不声明跨 chip 数据到达依赖RemoteMsgSend(start_pe=chip 1, pe_num=1, msg_id=k, central_idx=0, send_cnt=1):cmd_id_dep 链接到上一步 Transfer 的 cmd_id(保序:数据写完才发 msg)。经 A4S → c2c_sys 向 chip 1.msg_central[0][k] 累加 1
chip 1(receiver)rcvq 上的指令序列(step k+1 前):
MsgWait(msg_id=k, central_idx=0, wait_cnt=1):阻塞 chip 1 该 thread 直到 msg_central[0][k] ≥ 1。满足后减去 wait_cnt(消费),thread 放行- chip 1 step k+1 的
Transfer:cmd_id_dep_remote = (chip 0, step-k Transfer 的 cmd_id),由 MsgWait 放行后进入仲裁
走通的事件链:chip 0 Transfer 数据 ACK → chip 0 RemoteMsgSend 经 A4S 注入 c2c_sys(fire-and-forget)→ msg packet 到达 chip 1 c2c_sys → 解析为 msg_central[0][k] += 1 → 触发 chip 1 等待该 msg_id 的 MsgWait thread 重新检查依赖 → wait_cnt 满足 → chip 1 step k+1 Transfer 进入 Ready。
关键点:chip 1 step k+1 的数据依赖不靠 chip 0 的 sync_id 推进感知(sender 端 sync_id 无法触达 receiver),而靠 receiver 侧 msg_central 累计 + MsgWait 阻塞放行。Bruck AllToAll 的 step j+1 打包 step j 收到的 reroute chunks 同理。
详细设计
概念模型
msg 指令体系提供 CDMA 内 sendq / rcvq 双指令队列之间、sys_tx / sys_rx 两独立 msg 线程之间、跨 engine 之间、跨 chip 之间的显式同步原语,对应主 spec §跨 chip 数据到达依赖 定义的两条 SG2262 硬件同步路径中「write + 显式 msg 指令」路径。
核心抽象:
- msg_id:同步语义中的标识符,由软件分配。同 chip 内可同时按 absolute 形式(指令直接携带完整 ID)或 relative 形式(指令携带相对偏移,配合 base_id CSR 解析为 absolute)使用
- send_cnt:一次 send 指令累计的计数增量(一般为 1)
- wait_cnt:一次 wait 指令满足条件所需的累计阈值
- msg_central:维护 (msg_id → accumulated_count) 状态的硬件单元
sendq / rcvq 双队列模型
每个 CDMA 线程内部维护两条独立指令队列(队列物理实现——深度 64 × 4-bank SRAM 切片——见主 spec §指令队列深度):
| 队列 | 处理的指令 | 并发关系 |
|---|---|---|
| sendq | 发送侧数据指令(Send / Transfer / Scatter)+ MsgSend / RemoteMsgSend / Fence | 与 rcvq 并行执行 |
| rcvq | 接收侧数据指令(Receive / Gather)+ MsgWait | 与 sendq 并行执行 |
@tbl-spec-cdma-msg-02 sendq / rcvq 双队列模型:队列,处理的指令
sendq 和 rcvq 共享同一 datapath 但有各自的仲裁与状态机。两条队列通过 msg 指令进行显式同步:MsgSend / MsgWait 是 sendq 与 rcvq 之间唯一的契约化同步原语。
sys_tx / sys_rx 两独立 msg 线程
跨 chip msg 同步使用两条完全独立的硬件线程,分别绑定通信的两个方向:
| 线程 | 方向 | 配套指令 |
|---|---|---|
| sys_tx | 本 chip 主动发起 / 等待发送侧同步 | CDMA_sys_tx_send / CDMA_sys_tx_wait |
| sys_rx | 本 chip 接收远端 / 等待接收侧同步 | CDMA_sys_rx_send / CDMA_sys_rx_wait |
@tbl-spec-cdma-msg-03 sys_tx / sys_rx 两独立 msg 线程:线程,方向
sys_tx 和 sys_rx 互不干扰:sys_tx 的 msg state 不影响 sys_rx 的 wait 条件,反之亦然。
msg_send / msg_wait 双通道控制规则
每个 CDMA 线程同时只允许一组 active 的 (msg_send, msg_wait) 控制 tx & rx 双通道:即同一线程内 sendq 的 MsgSend 与 rcvq 的 MsgWait 必须配对使用同一 (central_idx, msg_id),禁止多组 send/wait 在同一 thread 上交错。
每个 chip 有 4 个独立的 msg_central 实例,每个 msg_central 维护 256 个 msg_id slot(每 slot 一个累加计数器),总计 1024 个可用 msg_id slot。
指令语义
字段位宽与命名空间规则
| 字段 | MsgSend / MsgWait | RemoteMsgSend |
|---|---|---|
| msg_id 形式 | relative (11-bit) + base_id CSR | absolute (16-bit) |
| msg_id 解析 | absolute = base_id + relative (由硬件按线程 CSR 自动算出) | 直接使用 (无 base 加法) |
| send_cnt / wait_cnt 位宽 | 7-bit(取值范围 0..127) | 16-bit(取值范围 0..65535) |
| central_idx | 2-bit (0..3) | 2-bit (0..3) |
@tbl-spec-cdma-msg-04 字段位宽与命名空间规则:字段,MsgSend / MsgWait
base_id CSR 是软件可配置的线程级偏移基址,主要用于让同一段 Ring 算法的代码生成模板在不同 thread 上自动落入不同命名空间,无需展开层重新编排 msg_id。
指令变体
每条 msg 指令在 sys_tx / sys_rx 两线程上有对称变体:
| 指令 | 线程 | 别名 |
|---|---|---|
| MsgSend (sendq, sys_tx) | sys_tx | CDMA_sys_tx_send |
| MsgSend (rcvq, sys_rx) | sys_rx | CDMA_sys_rx_send |
| MsgWait (sendq, sys_tx) | sys_tx | CDMA_sys_tx_wait |
| MsgWait (rcvq, sys_rx) | sys_rx | CDMA_sys_rx_wait |
@tbl-spec-cdma-msg-05 指令变体:指令,线程
两线程的 msg_central state 共享同一物理实例(同 (central_idx, msg_id) 在两线程间累计可见),但线程级阻塞条件互相独立:sys_tx 的 MsgWait 不被 sys_rx 的 cmd 推进,反之亦然。
MsgSend (Phase 1)
| 维度 | 语义 |
|---|---|
| 作用域 | 同 chip 本地 msg_central |
| 字段 | msg_id (relative, 11-bit), central_idx (2-bit), send_cnt (7-bit), thread (sys_tx / sys_rx) |
| 执行行为 | 算出 absolute msg_id 后将本 chip msg_central[central_idx][absolute_msg_id] 累计加 send_cnt |
| 完成时机 | 计数累加后立即完成(无 wire 传输延迟) |
| 阻塞条件 | 无(指令本身不阻塞) |
@tbl-spec-cdma-msg-06 MsgSend:维度,语义
MsgWait (Phase 1)
| 维度 | 语义 |
|---|---|
| 作用域 | 同 chip 本地 msg_central |
| 字段 | msg_id (relative, 11-bit), central_idx (2-bit), wait_cnt (7-bit), thread (sys_tx / sys_rx) |
| 执行行为 | 算出 absolute msg_id 后阻塞所属 thread 直到 msg_central[central_idx][absolute_msg_id] ≥ wait_cnt;满足后将 accumulated_count 减去 wait_cnt(消费语义),thread 退出阻塞 |
| 完成时机 | 计数减去 wait_cnt 后立即完成 |
| 阻塞条件 | accumulated_count < wait_cnt |
@tbl-spec-cdma-msg-07 MsgWait:维度,语义
RemoteMsgSend (Phase 1 单点 / Phase 2 群发)
| 维度 | 语义 |
|---|---|
| 作用域 | 跨 chip:向 pe_num 个远端 chip 的 msg_central 累计 |
| 字段 | start_pe, pe_step, pe_num, msg_id (absolute, 16-bit), central_idx (2-bit), send_cnt (16-bit) |
| 执行行为 | 对每个目标 chip chip[k] = (start_pe + k × pe_step) % num_chips(k ∈ [0, pe_num);% num_chips 为仿真层对 chip_id 越界的环绕约定,硬件伪代码无此取模),通过 A4S 接口向 chip[k] 发 msg packet,使 chip[k].msg_central[central_idx][msg_id] 累计加 send_cnt |
| 完成时机 | 本 chip 视角:所有 msg packet 通过 A4S 注入 c2c_sys 后即完成(fire-and-forget);远端视角:msg packet 到达对端 message_send 处理路径后触发远端 msg_central 累计 |
| 阻塞条件 | 无 |
| 退化情形 | pe_num == 1:等价于单点目标版的 RemoteMsgSend,仅向单个远端 chip msg_central 累计 |
@tbl-spec-cdma-msg-08 RemoteMsgSend:维度,语义
write + 内嵌 msg_en 集成路径
数据指令(CDMA_write / CDMA_scatter)可在指令字段中携带 msg_en 标志,使数据传输的最后一笔 beat 在 receiver 端 last 信号被触发的同时向远端 msg_central 累加 1 次 send_cnt(等价于一条隐式 RemoteMsgSend,但不消耗独立指令周期、不占用 sendq 仲裁槽位)。
| 维度 | 语义 |
|---|---|
| 触发条件 | 数据指令字段 msg_en = 1 且 last 标志同时为 1 |
| 字段 | msg_idx (16-bit absolute), msg_val (16-bit,即 send_cnt) |
| 与独立 RemoteMsgSend 关系 | 等价语义;唯一区别是不占独立指令仲裁开销 |
| 互斥约束 | 同一数据指令不能同时启用 msg_en 和 atomic 触发(硬件二选一) |
@tbl-spec-cdma-msg-09 write + 内嵌 msg_en 集成路径:维度,语义
集成路径与独立 RemoteMsgSend 在数值上等价(counter 累加一次),但建模时序时 msg 信号触发紧贴最后一笔数据 beat,没有独立指令的仲裁与 startup 开销。msg_en 字段位宽与互斥关系(与 atm_en 互斥)见主 spec §基础数据指令的可选集成字段。
msg_central 状态机
每个 chip 包含 4 个 msg_central(central_idx 0..3)。每个 msg_central 维护:
- 累计计数器表:256 个 msg_id slot(msg_id ∈ [0, 256)),每 slot 一个非负整数计数器
- 计数器初始值为 0
- 写入:MsgSend / RemoteMsgSend 累加 send_cnt
- 读取与消费:MsgWait 检查 ≥ wait_cnt 后减去 wait_cnt
msg_id 跨 4 个 central 的命名空间:总 1024 个 msg_id slot 通过 (central_idx, local_msg_id) 二维寻址。msg_id 到 central_idx 的映射规则由软件配置(指令字段直接携带 central_idx),不依赖 msg_id 数值自动路由。
msg_id 命名空间分配规则
位宽:
- RemoteMsgSend 指令字段
msg_id为 16-bit 无符号整数 absolute 形式(直接寻址) - MsgSend / MsgWait 指令字段
msg_id为 11-bit 无符号整数 relative 形式,配合线程级base_idCSR(16-bit 基址)经硬件加法算出 absolute 形式 - 同 chip 内
central_idx为 2-bit(0..3 范围,共 4 个 central) - 单 msg_central 物理 slot 数 = 256(msg_id 的低 8-bit 寻址;高 8-bit 由 base_id 偏移产生但不增加物理 slot 数量)
- 完整命名空间容量 = 4 × 256 = 1024 个独立累计计数器(per chip)
硬件 spec 未冻结:SG2262 CDMA spec 在 msg_id 位宽与 base 累加机制上跨版本不一致(v2.2 为 absolute 11-bit 不累加 base;v2.3 为 relative 7-bit + base、cnt 9-bit;指令集 doc 为 absolute、msg_id 最大 8192(13-bit)、cnt 16-bit)。本 spec 选定的 (relative 11-bit, cnt 7-bit) 为项目假设值,Phase 2 实现 relative+base 机制前须与硬件确认;§字段位宽与命名空间规则 表与附录 A 同此假设值。
硬件字段命名映射:SG2262 硬件
CDMA_msg_send/CDMA_msg_wait的 cnt 字段命名与本 spec 相反——硬件 SEND 指令字段名为wait_cnt、WAIT 指令字段名为send_cnt(反直觉)。本 spec 按语义统一命名:send_cnt= 累加增量(send 端)、wait_cnt= 满足阈值(wait 端)。数值语义一致,仅字段名映射;实现对接硬件寄存器时按此映射换名。
absolute 与 relative msg_id 的使用约束:
- relative 形式的命名空间由 base_id CSR 配置,允许在不同线程上复用相同 relative 模板而落到不同物理 slot
- 软件需保证 (base_id + relative_msg_id) 落入 0..255 区间(同 central 内,对应单 central 物理 slot 数 256);超出范围属于配置错误
- absolute 形式无 base 加法,必须直接落入 0..255 区间
冲突的定义:
- 同一 chip 内,两条逻辑上独立的 MsgSend/RemoteMsgSend 使用相同 (central_idx, msg_id),被 msg_central 视为"对同一计数器累加"。后续 MsgWait 在错误的累计上提前满足
- 冲突后果是仿真错误(virtual pipeline 重新出现)而非崩溃,必须在展开层规避
强制约束:当 chip 上同时存在多个并发的集合通信实例(例如 multi-channel 拆分产生 C 个独立 channel,见主 spec §CDMA Unit 资源分配),展开层必须为不同实例分配不重叠的 (central_idx, msg_id) 命名空间。常见隔离维度:
| 隔离维度 | 隔离手段(任选其一) | 说明 |
|---|---|---|
| 集合通信实例(channel) | 不同 central_idx,或 msg_id 高位偏移 | 同 chip 多 channel 并发场景必须隔离 |
| 算法方向(如 2-port Ring 的 CW / CCW) | 不同 central_idx | 同 channel 内双方向独立 dep chain |
| step 序号 | msg_id 低位编码 | 同方向同 channel 跨 step 区分 |
@tbl-spec-cdma-msg-10 msg_id 命名空间隔离维度:隔离维度,隔离手段
展开层职责:
- 集合通信展开函数为每条 MsgSend / MsgWait / RemoteMsgSend 显式赋值 (central_idx, msg_id),不依赖默认值
- multi-channel 拆分时,每 channel 独立分配命名空间起始基址
- 展开函数需附带断言或文档说明命名空间策略,避免下游 channel 数变化时静默冲突
单元测试要求:
- 当 multi-channel 配置 C > 1 时,必须验证 chip 上同时活跃的 (central_idx, msg_id) 在 C 个 channel 之间无重叠
- 反馈环必须包含 C > 1 用例
与「跨 chip 数据到达依赖」契约的衔接
主 spec §跨 chip 数据到达依赖 定义了核心约束:Ring 类(跨 step 数据依赖型)集合通信必须采用两条 SG2262 硬件同步路径之一表达跨 chip 数据到达依赖,禁止依据「本 chip 上一 Transfer 完成」作为跨 chip 到达语义。本 spec 定义其中「write + msg 三指令组合」路径的实现。
三指令组合(CDMA_write + CDMA_remote_msgsend + CDMA_msg_wait)表达一次跨 step 数据到达依赖:
- sender 侧 sendq:
Transfer(不声明跨 chip 数据到达依赖)+RemoteMsgSend(cmd_id_dep 链接到前序 Transfer 的 cmd_id,保证数据写完才发 msg) - receiver 侧 rcvq:
MsgWait(阻塞到 msg_central 累计达 wait_cnt),其后的数据指令在 Transfer 字段中声明跨 chip 数据到达依赖元组 (remote_chip_id, remote_cmd_id)
保序约束
SG2262 硬件原语级要求:数据传输完成后才能触发对应的 msg 同步信号("写完数据后再触发发送 message 的操作")。这一保序契约在两条路径上有不同的物理实现:
独立指令路径 (Transfer / Send + 独立 MsgSend / RemoteMsgSend):
- expand 层生成的 cmd 序列中,MsgSend / RemoteMsgSend 的 cmd_id_dep 链接到前序数据传输指令(Transfer / Send)的 cmd_id
- MsgWait 的 cmd_id_dep 链接到本 thread 上一条指令的 cmd_id(保证 thread 顺序执行)
- 保序约束不依赖 PAXI 内部的指令重排
集成路径 (write + 内嵌 msg_en):
- 数据指令尾 beat 携带
last = 1信号到达 receiver - receiver 收到 last 后通过 write_done sideband 通知本端 CDMA,CDMA 完成第二次到对端 message center 的写(触发 msg_central 累加)
- write_done sideband 与数据 ACK 是两个独立信号:数据 ACK 表示 wire 写完成,write_done 表示 receiver 端已确认 last beat 并允许触发 msg(write_done sideband 时序模型见主 spec §write_done sideband 时序模型)
- 时序上 msg 同步信号比数据 ACK 多一个 sideband round(实际硬件 RTT/2 量级)
保序前提:数据指令必须将 message center 的内存地址纳入"保序窗口"(base_addr_region,见主 spec §地址保序窗口),否则 receiver 可能在数据真正写入之前就处理 msg。仿真层假定软件正确配置保序窗口,不显式建模该配置错误。
msg 信号传输路径 (A4S 独立接口)
msg 同步信号不复用数据 PAXI 通道。SG2262 在 c2c_sys 子系统中为 msg 提供一条 32-bit AXI4 Stream (A4S) 独立接口,与数据 PAXI 物理隔离:
- 本 chip 内传输:CDMA 通过 A4S 接口直接与片内 message center / msg_central 通信。MsgSend / MsgWait 不出片,无 wire 延迟(仅经过 A4S 握手周期)
- 跨 chip 传输(RemoteMsgSend):本 chip CDMA 经 A4S 接口写入 c2c_sys 的 AXItoA4S 模块,由 c2c_sys 触发对端 chip 的 message_send 路径;远端 c2c_sys 解析后写入对端 msg_central
- packet 大小:msg packet payload ≤ 8 字节(含 central_idx + msg_id + send_cnt + 路由元数据),单包传输无分段
- 路径独立性:msg 路径与数据 PAXI VC 完全分离,数据流的拥塞与重传不影响 msg 信号到达时延
- 保序对接:CDMA 内部保证"数据指令 retire → msg 信号 issue"的本地保序(见保序约束);A4S 通道自身保证 in-order delivery
- 到达 receiver 后处理:msg packet 到达远端 c2c_sys 后解析为 msg_central 累加操作 → 触发 receiver chip 上等待该 msg_id 的 MsgWait thread 重新检查依赖
与同 chip cmd_id_dep / sync_id 的关系
msg 指令的依赖语义与主 spec §指令依赖模型 中的 cmd_id_dep / sync_id 是正交机制:
| 机制 | 作用范围 | 同步对象 |
|---|---|---|
| cmd_id_dep / sync_id | 同 chip 同 thread 同队列(sendq 或 rcvq 各自维护一份 sync_id) | 指令间顺序依赖("等本队列上一条 cmd 完成") |
| msg_central / MsgWait | 跨 sendq / rcvq(同线程内)、跨 thread、跨 engine、跨 chip(通过 RemoteMsgSend) | 累计计数语义("等 N 次同 (central_idx, msg_id) 的 send") |
@tbl-spec-cdma-msg-11 msg 依赖与 cmd_id_dep 的关系:机制,作用范围
sendq 和 rcvq 各自独立推进 sync_id,彼此不相互推动。跨 sendq / rcvq 的同步必须通过 msg_central 进行。
MsgWait 在 thread 状态机中作为独立的阻塞条件存在,与 FenceWait / TCreditWait 类似但触发条件不同;MsgWait 只阻塞所属队列(sendq 的 MsgWait 不阻塞 rcvq,反之亦然)。
集成点
- CDMA 内部:msg 指令分发到 sendq(MsgSend / RemoteMsgSend / 数据指令的内嵌 msg)或 rcvq(MsgWait)队列,两队列内独立仲裁、并行执行;sys_tx / sys_rx 各持有自己的 sendq + rcvq 实例
- A4S 接口:MsgSend / MsgWait 直接通过本 chip 内 A4S 完成;RemoteMsgSend 经 A4S → c2c_sys AXItoA4S 触发对端 message_send;该路径与数据 PAXI 物理隔离
- 集合通信展开层:Ring 算法在每 step 的 Transfer 后插入 MsgSend / RemoteMsgSend,下 step 前插入 MsgWait(详见 互联通信G5仿真建模设计规格 §集合通信展开 / Ring 跨 step 数据依赖)
- 主 spec 核心约束:本 spec 是主 spec §跨 chip 数据到达依赖 中「write + 显式 msg 指令」路径的完整实现,核心引擎对该体系的依赖见主 spec §详细设计 msg 同步指令体系接口引用段
引用
- G5 CDMA 建模设计规格 — CDMA 核心引擎:线程状态机 / 仲裁 / CHS-CFS / Send-Receive 握手 / 跨 chip 数据到达依赖约束
- 互联通信G5仿真建模设计规格 — 集合通信展开层、Ring 跨 step 数据依赖
备选方案
本 spec 范围内无额外备选——msg 体系是主 spec §跨 chip 数据到达依赖 两条硬件同步路径之一(「write + 显式 msg 指令」)的实现,路径本身的选型(send/receive 协议 vs write+msg)见主 spec。msg 体系内部的设计点(relative vs absolute msg_id 位宽、cnt 位宽)因 SG2262 spec 跨版本未冻结而采用项目假设值,见 §msg_id 命名空间分配规则 的「硬件 spec 未冻结」注与附录 A。
fence 同步原语(fence_bit vs 独立 Fence cmd)的备选对比见主 spec §备选方案,不属本 spec 范围。
非功能性需求
| 维度 | 本 spec 的考虑 |
|---|---|
| 性能 (Performance) | msg 信号走 A4S 32-bit 独立接口,与数据 PAXI VC 物理隔离,数据流拥塞与重传不影响 msg 信号到达时延;MsgSend / MsgWait 不出片,无 wire 延迟(仅 A4S 握手周期);集成路径 msg_en 不占独立指令仲裁与 startup 开销,时序紧贴数据尾 beat |
| 可靠性 (Reliability) | msg packet payload ≤ 8 字节单包无分段;A4S 通道保证 in-order delivery;msg_central 计数器初值 0、MsgWait 消费语义(减 wait_cnt)防止重复触发;msg_id 命名空间冲突导致仿真错误(非崩溃),由展开层显式分配 (central_idx, msg_id) + C>1 单测规避 |
| 兼容性 (Compatibility) | Phase 1 已实现 MsgSend / MsgWait / RemoteMsgSend(pe_num=1) / msg_central 全状态机 / sendq-rcvq 双队列 / sys_tx-sys_rx / A4S / relative+base_id;Phase 2 增量加 write+msg_en 集成路径与 RemoteMsgSend pe_num>1 群发,向后兼容(pe_num=1 退化为单点) |
Security / Privacy / Observability 维度省略:本 spec 是仿真内部建模,msg 信号不暴露公网、不收集用户数据、不对外暴露 metrics。
局限与后续工作
局限 (本设计的代价)
| 风险 / 局限 | 影响 | 缓解措施 |
|---|---|---|
| msg_id 位宽 / cnt 位宽未冻结 | (relative 11-bit, cnt 7-bit) 为项目假设值,SG2262 spec 跨版本不一致 | 入口 assert 校验位宽;Phase 2 实现 relative+base 机制前与硬件确认 |
| msg_id 命名空间冲突由展开层规避 | 多 channel 并发下 (central_idx, msg_id) 重叠导致仿真错误(非崩溃) | 展开层显式分配 + 断言;C>1 单测验证无重叠 |
| OQ-1: write + 内嵌 msg_en 集成路径 Phase 1 未建模 | msg_en 集成与独立 RemoteMsgSend 数值等价但时序略偏慢(多一次仲裁/startup) | Phase 1 用独立 RemoteMsgSend 近似;Phase 2 加入集成路径 |
| OQ-2: sys_rx 完成回调路径 Phase 1 未完整建模 | Phase 2 collective 层不触发 sys_rx 路径 | 当前 collective 全走 sys_tx 路径,sys_rx 路径建模列入后续 |
@tbl-spec-cdma-msg-12 风险与缓解措施
后续工作 (后续扩展方向)
| 方向 | 优先级 | 前置条件 |
|---|---|---|
| RemoteMsgSend pe 范围群发(pe_num > 1) | 中 | 单条指令向 pe_num 个远端 chip 分发,覆盖 Broadcast / Multicast / pe 范围 atomic 类原语需求 |
| write + 内嵌 msg_en 集成路径 | 中 | 需 write_done sideband 独立事件建模(主 spec §write_done sideband 时序模型 Phase 2 项) |
| sys_rx 完成回调路径完整建模 | 低 | collective 层出现 sys_rx 同步场景 |
| relative msg_id + base_id 机制硬件确认 | 中 | SG2262 CDMA spec msg_id 位宽段冻结 |
@tbl-spec-cdma-msg-13 后续方向
验收标准
| 场景 | 指标 | 目标值 | 测试方法 |
|---|---|---|---|
| MsgSend 累计语义 | msg_central 计数 | MsgSend(send_cnt=k) 后 accumulated_count += k | 执行 MsgSend 前后检查 msg_central[central_idx][msg_id] |
| MsgWait 消费语义 | msg_central 计数 | MsgWait(wait_cnt=k) 满足后 accumulated_count -= k | 累计达阈值后检查计数器被减去 wait_cnt |
| MsgWait 阻塞条件 | thread 状态 | accumulated_count < wait_cnt 时 thread 阻塞 | 计数不足时检查 MsgWait thread 不放行后续 cmd |
| RemoteMsgSend 跨 chip 累计 | 远端 msg_central 计数 | pe_num=1 时远端 chip msg_central 累加 send_cnt | 端到端仿真检查目标 chip 计数器 |
| RemoteMsgSend fire-and-forget | 本 chip 完成时机 | 所有 msg packet 注入 c2c_sys 后即完成 | 检查本 chip RemoteMsgSend 不等远端 ACK |
| sys_tx / sys_rx 独立阻塞 | MsgWait 推进 | sys_tx 的 MsgWait 不被 sys_rx 的 cmd 推进 | 在 sys_rx 累加同 (central_idx, msg_id),检查 sys_tx MsgWait 不放行 |
| collective 反例检测:Bruck AllToAll | 跨 chip 数据到达依赖声明 | 每 step Transfer 必须由后续 RemoteMsgSend 携带 (remote_chip_id, remote_cmd_id) 元组,或与 MsgWait 配对 | 静态检查 Bruck 展开输出指令序列,断言每 Transfer 后跟随声明 cmd_id_dep_remote 的 RemoteMsgSend |
| msg_id 命名空间无重叠 (C>1) | (central_idx, msg_id) 重叠 | multi-channel C 个 channel 间无重叠 | 验证 chip 上同时活跃的 (central_idx, msg_id) 在 C 个 channel 之间无重叠 |
| A4S 路径独立性 | msg 时延 vs 数据拥塞 | 数据 PAXI 拥塞不影响 msg 信号到达时延 | 数据流拥塞场景下检查 msg packet 到达时延不变 |
@tbl-spec-cdma-msg-14 验收标准
附录
附录 A:完整接口签名 / 数据结构 / 字段位宽表
msg 指令字段位宽
| 字段 | MsgSend / MsgWait | RemoteMsgSend |
|---|---|---|
| msg_id 形式 | relative (11-bit) + base_id CSR | absolute (16-bit) |
| msg_id 解析 | absolute = base_id + relative(硬件按线程 CSR 自动算出) | 直接使用(无 base 加法) |
| send_cnt / wait_cnt 位宽 | 7-bit(0..127) | 16-bit(0..65535) |
| central_idx | 2-bit (0..3) | 2-bit (0..3) |
| base_id CSR | 16-bit 线程级偏移基址 | N/A |
| 单 msg_central 物理 slot 数 | 256(msg_id 低 8-bit 寻址) | 256 |
| 完整命名空间容量 | 4 × 256 = 1024 计数器 (per chip) | 同左 |
@tbl-spec-cdma-msg-15 msg 指令字段位宽:字段,MsgSend / MsgWait
msg_en 集成字段定义
| 字段 | 位宽 / 取值 | 互斥关系 |
|---|---|---|
msg_en | 1-bit;触发 msg_idx (16-bit absolute) + msg_val (16-bit send_cnt) | 与 atm_en 互斥 |
@tbl-spec-cdma-msg-16 msg_en 集成字段定义:字段,位宽
atm_en / reduce_en / compress_en / fence_bit 的完整定义见主 spec 附录 C「可选集成字段完整定义」。
simulation 层 msg 数据结构
| 结构 | 说明 |
|---|---|
| msg_central | 每 chip 4 个 central × 256 slot 累计计数器表,(central_idx, msg_id) 二维寻址 |
| base_id CSR | 线程级 16-bit 偏移基址,relative msg_id 经 absolute = base_id + relative 解析 |
| sys_tx / sys_rx | 各持有独立 sendq + rcvq 实例,msg_central state 共享物理实例但阻塞条件独立 |
@tbl-spec-cdma-msg-17 simulation 层 msg 数据结构:结构,说明
附录 B:实现说明
实现完成后补充,记录 spec 与实际实现的偏差。
- [2026-05-14] 集合通信展开层 (Ring AR / HD AR / RD AG / RH RS / DBT) 的跨 chip pair 同步采用 write+msg 显式同步路径:每个跨 chip pair 由 (前序 MsgWait,仅 round_idx>0 时) + Transfer + RemoteMsgSend 三条指令组成,对应硬件
CDMA_write + CDMA_remote_msgsend + CDMA_msg_wait组合。Transfer 不声明跨 chip 数据到达依赖,由后续 RemoteMsgSend 声明 (remote_chip_id, remote_cmd_id) 元组显式向对端 msg_central 累加。msg_id 复用 round_idx (8-bit slot,限制 round_idx<128)。 - Phase 1 已实现项:MsgSend + MsgWait(同 chip 本地同步);RemoteMsgSend 单点目标(pe_num=1);msg_central 完整状态机(4 central × 256 slot,共 1024);sendq / rcvq 双队列模型;sys_tx / sys_rx 两独立 msg 线程;msg 信号走 A4S 32-bit 独立接口(不复用数据 PAXI VC);relative msg_id + base_id 偏移机制;字段位宽对齐硬件 spec(msg_send / msg_wait 7-bit cnt,RemoteMsgSend 16-bit)。
- Phase 1 未实现项:write + 内嵌 msg_en 集成路径(用独立 RemoteMsgSend 近似,数值等价时序略偏慢);RemoteMsgSend pe 范围群发(pe_num > 1);sys_rx 完成回调路径完整建模。