跳到主要内容

G5 CDMA msg 同步指令体系设计规格

版本:1.0.0 状态:Accepted 创建日期:2026-06-01 最后更新:2026-06-01 作者:xiang.li 前置G5 CDMA 建模设计规格

变更历史

版本日期变更说明
1.0.02026-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):

  1. 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 数据到达依赖
  2. 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 前):

  1. MsgWait(msg_id=k, central_idx=0, wait_cnt=1):阻塞 chip 1 该 thread 直到 msg_central[0][k] ≥ 1。满足后减去 wait_cnt(消费),thread 放行
  2. 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 / MsgWaitRemoteMsgSend
msg_id 形式relative (11-bit) + base_id CSRabsolute (16-bit)
msg_id 解析absolute = base_id + relative (由硬件按线程 CSR 自动算出)直接使用 (无 base 加法)
send_cnt / wait_cnt 位宽7-bit(取值范围 0..127)16-bit(取值范围 0..65535)
central_idx2-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_txCDMA_sys_tx_send
MsgSend (rcvq, sys_rx)sys_rxCDMA_sys_rx_send
MsgWait (sendq, sys_tx)sys_txCDMA_sys_tx_wait
MsgWait (rcvq, sys_rx)sys_rxCDMA_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 = 1last 标志同时为 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_id CSR(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 同步指令体系接口引用段

引用

备选方案

本 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 / MsgWaitRemoteMsgSend
msg_id 形式relative (11-bit) + base_id CSRabsolute (16-bit)
msg_id 解析absolute = base_id + relative(硬件按线程 CSR 自动算出)直接使用(无 base 加法)
send_cnt / wait_cnt 位宽7-bit(0..127)16-bit(0..65535)
central_idx2-bit (0..3)2-bit (0..3)
base_id CSR16-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_en1-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 完成回调路径完整建模。