Cube 与 Fixpipe 指令
每个条目给出完整 32 位固定/可变布局、c220 后端实际接受的文本形式、立即数约束和架构周期模型。
没有“c220 汇编器接受”标记的条目不能把目录占位符直接复制进源码。
目录速览
| ID |
解码名 |
助记符 |
格式 |
作用 |
状态 |
| 228 |
MMAD |
MMAD |
C-MMAD |
矩阵乘加:L0A×L0B 累加到 L0C;形状/累加控制由 Xs 打包。 |
c220 汇编器接受 |
| 229 |
MMAD_SP |
MMAD_SP |
C-MMAD |
稀疏矩阵乘加;额外稀疏元数据语义由配置寄存器决定。 |
c220 汇编器接受 |
| 230 |
MOV_SRC_TO_FB |
MOV_SRC_TO_FB |
X-FIX |
把源缓冲搬到 Fixpipe FB;仅用于识别内部编码。 |
仅机器格式;无 c220 公共语法 |
| 231 |
FIX_L0C_TO_DST |
FIX_L0C_TO_DST |
X-FIX |
通过 Fixpipe 把 L0C 结果定点化/转换并写到目标;仅用于识别内部编码。 |
仅机器格式;无 c220 公共语法 |
逐指令说明
ID 228 — MMAD
| 项目 |
内容 |
| 指令域/执行位置 |
cube / Cube(pipe 2) |
| 格式类 |
C-MMAD |
| 参数角色 |
dst=L0C;src0=L0A;src1=L0B;Xs=shape 与控制 |
| 作用 |
矩阵乘加:L0A×L0B 累加到 L0C;形状/累加控制由 Xs 打包。 |
| 文本语法状态 |
c220 汇编器接受 |
32 位编码布局
- 位 31→0 模式:
111.000.........................(0/1 为固定值,. 为该解码项的可变位)。
- 完整分段:
[31:29]=111(fixed); [28]=cube mode; [27:25]=000(fixed); [24:22]=dtype/mode; [21:17]=L0C dst; [16:12]=L0A src; [11:7]=L0B src; [6:2]=shape Xs; [1:0]=mode
- 解码条件:
(word & 0xee000000) == 0xe0000000。
X 寄存器操作数位域
下表通过逐个改变该 X 操作数的 5 个编号位得到;word bits 是机器字中的精确承载位。
| 操作数序号 |
样例 token |
编码掩码 |
word bits |
输入位→机器位 |
| 0 |
X0 |
0x003e0000 |
17,18,19,20,21 |
r0->word[17]; r1->word[18]; r2->word[19]; r3->word[20]; r4->word[21] |
| 1 |
X1 |
0x0001f000 |
12,13,14,15,16 |
r0->word[12]; r1->word[13]; r2->word[14]; r3->word[15]; r4->word[16] |
| 2 |
X2 |
0x00000f80 |
7,8,9,10,11 |
r0->word[7]; r1->word[8]; r2->word[9]; r3->word[10]; r4->word[11] |
| 3 |
X3 |
0x0000007c |
2,3,4,5,6 |
r0->word[2]; r1->word[3]; r2->word[4]; r3->word[5]; r4->word[6] |
c220 接受的后缀与操作数组合
| CPU |
后缀 |
操作数形状 |
可复制语法 |
编码 |
dav-c220-cube |
bf162f32 |
[Xn], [Xn], [Xn], Xn |
MMAD.bf162f32 [X0], [X1], [X2], X3 |
0xf040110d |
dav-c220-cube |
f162f32 |
[Xn], [Xn], [Xn], Xn |
MMAD.f162f32 [X0], [X1], [X2], X3 |
0xf0c0110c |
dav-c220-cube |
f322f32 |
[Xn], [Xn], [Xn], Xn |
MMAD.f322f32 [X0], [X1], [X2], X3 |
0xf080110d |
dav-c220-cube |
s4 |
[Xn], [Xn], [Xn], Xn |
MMAD.s4 [X0], [X1], [X2], X3 |
0xf180110c |
dav-c220-cube |
s8 |
[Xn], [Xn], [Xn], Xn |
MMAD.s8 [X0], [X1], [X2], X3 |
0xf040110c |
dav-c220-cube |
tf322f32 |
[Xn], [Xn], [Xn], Xn |
MMAD.tf322f32 [X0], [X1], [X2], X3 |
0xf0c0110d |
汇编器级最小示例:
.text
.a64
MMAD.bf162f32 [X0], [X1], [X2], X3
周期与冲突
| 项目 |
架构周期模型 |
| 路径 |
CCU Cube issue→get_mmad_iter→CubeUop queue→FSM→L0A/L0B read→PE/systolic stages→L0C accumulate/write→unit flag→retire |
| 延迟/公式 |
\(U=G\!\cdot\!\left\lceil\frac{M}{P}\right\rceil\!\cdot\!\left\lceil\frac{N}{P}\right\rceil\!\cdot\!R_k,\quad T=F(N_{\mathrm{cube\,stage}})+\operatorname{schedule}(U,\mathrm{FSM},\mathrm{NPE})+S_{\mathrm{L0A/L0B/L0C}}+T_{\mathrm{retire}}\) |
| 发射间隔 |
由 cube_uop_iss_que、FSM、NPE/PE 组和 L0 端口决定 |
| uop 展开 |
P=cube_pe_num,G=P²/cube_spec_npe;Rk=ceil(K/4P)@class0,ceil(K/2P)@class⅔/23/24,ceil(K/(P/2))@class27,其余 ceil(K/P):L0A/L0B 请求、bank/port 与 unit flag 动态决定/由 cube_stage_num、fsm_ver、cube_spec_npe、U 和数据类共同决定/L0C 请求/累加/端口仲裁与 unit flag 动态决定 |
| 退休 |
全部 CubeUop 完成,L0C/unit flag 条件满足并进入 cube_retire_q |
| 动态停顿 |
Cube queue/FSM、L0A/L0B 数据未就绪、L0C 端口、unit flag、前序 MMAD 相关 |
这些数值是架构周期模型,不是 910B 芯片的实测吞吐率。设备结果状态:待目标设备执行。
数值异常、掩码、描述字和访存副作用分别见数值语义、MASK/VA 与访存和配置字。
ID 229 — MMAD_SP
| 项目 |
内容 |
| 指令域/执行位置 |
cube / Cube(pipe 2) |
| 格式类 |
C-MMAD |
| 参数角色 |
dst=L0C;src0=L0A;src1=L0B;Xs=shape 与控制 |
| 作用 |
稀疏矩阵乘加;额外稀疏元数据语义由配置寄存器决定。 |
| 文本语法状态 |
c220 汇编器接受 |
32 位编码布局
- 位 31→0 模式:
111.101.........................(0/1 为固定值,. 为该解码项的可变位)。
- 完整分段:
[31:29]=111(fixed); [28]=cube mode; [27:25]=101(fixed); [24:22]=dtype/mode; [21:17]=L0C dst; [16:12]=L0A src; [11:7]=L0B src; [6:2]=shape Xs; [1:0]=mode
- 解码条件:
(word & 0xee000000) == 0xea000000。
X 寄存器操作数位域
下表通过逐个改变该 X 操作数的 5 个编号位得到;word bits 是机器字中的精确承载位。
| 操作数序号 |
样例 token |
编码掩码 |
word bits |
输入位→机器位 |
| 0 |
X0 |
0x003e0000 |
17,18,19,20,21 |
r0->word[17]; r1->word[18]; r2->word[19]; r3->word[20]; r4->word[21] |
| 1 |
X1 |
0x0001f000 |
12,13,14,15,16 |
r0->word[12]; r1->word[13]; r2->word[14]; r3->word[15]; r4->word[16] |
| 2 |
X2 |
0x00000f80 |
7,8,9,10,11 |
r0->word[7]; r1->word[8]; r2->word[9]; r3->word[10]; r4->word[11] |
| 3 |
X3 |
0x0000007c |
2,3,4,5,6 |
r0->word[2]; r1->word[3]; r2->word[4]; r3->word[5]; r4->word[6] |
c220 接受的后缀与操作数组合
| CPU |
后缀 |
操作数形状 |
可复制语法 |
编码 |
dav-c220-cube |
s8 |
[Xn], [Xn], [Xn], Xn |
MMAD_SP.s8 [X0], [X1], [X2], X3 |
0xfa40110c |
汇编器级最小示例:
.text
.a64
MMAD_SP.s8 [X0], [X1], [X2], X3
周期与冲突
| 项目 |
架构周期模型 |
| 路径 |
CCU Cube issue→get_mmad_iter→CubeUop queue→FSM→L0A/L0B read→PE/systolic stages→L0C accumulate/write→unit flag→retire |
| 延迟/公式 |
\(U=G\!\cdot\!\left\lceil\frac{M}{P}\right\rceil\!\cdot\!\left\lceil\frac{N}{P}\right\rceil\!\cdot\!R_k,\quad T=F(N_{\mathrm{cube\,stage}})+\operatorname{schedule}(U,\mathrm{FSM},\mathrm{NPE})+S_{\mathrm{L0A/L0B/L0C}}+T_{\mathrm{retire}}\) |
| 发射间隔 |
由 cube_uop_iss_que、FSM、NPE/PE 组和 L0 端口决定 |
| uop 展开 |
P=cube_pe_num,G=P²/cube_spec_npe;Rk=ceil(K/4P)@class0,ceil(K/2P)@class⅔/23/24,ceil(K/(P/2))@class27,其余 ceil(K/P):L0A/L0B 请求、bank/port 与 unit flag 动态决定;另含稀疏元数据/由 cube_stage_num、fsm_ver、cube_spec_npe、U 和数据类共同决定/L0C 请求/累加/端口仲裁与 unit flag 动态决定 |
| 退休 |
全部 CubeUop 完成,L0C/unit flag 条件满足并进入 cube_retire_q |
| 动态停顿 |
Cube queue/FSM、L0A/L0B 数据未就绪、L0C 端口、unit flag、前序 MMAD 相关、稀疏索引/元数据 |
这些数值是架构周期模型,不是 910B 芯片的实测吞吐率。设备结果状态:待目标设备执行。
数值异常、掩码、描述字和访存副作用分别见数值语义、MASK/VA 与访存和配置字。
ID 230 — MOV_SRC_TO_FB
| 项目 |
内容 |
| 指令域/执行位置 |
fixpipe / Fixpipe(pipe 10) |
| 格式类 |
X-FIX |
| 参数角色 |
L0C 源、目标、转换和搬出控制;无 c220 公共文本形式 |
| 作用 |
把源缓冲搬到 Fixpipe FB;仅用于识别内部编码。 |
| 文本语法状态 |
仅机器格式;无 c220 公共语法 |
32 位编码布局
- 位 31→0 模式:
11000000........................(0/1 为固定值,. 为该解码项的可变位)。
- 完整分段:
[31:24]=11000000(fixed); [23:22]=route/mode; [21:17]=dst; [16:12]=src; [11:7]=descriptor; [6:0]=conversion/control
- 解码条件:
(word & 0xff000000) == 0xc0000000。
公共文本形式
当前 c220 后端没有接受该目录项的完整文本形式。OP、<dtype>、<mode> 等占位符不是汇编语法;目录样例字只用于机器格式识别,不能作为可运行内核。
周期与冲突
| 项目 |
架构周期模型 |
| 路径 |
CCU Fixpipe issue→Fixpipe command→源接口读取→FB 写入→退休 |
| 延迟/公式 |
\(T=\max_{i}\!\left(t_{\mathrm{read},i}+\left\lceil\frac{\mathrm{bytes}_{i}}{B_{\mathrm{L0C\,read}}}\right\rceil+T_{\mathrm{convert},i}+\left\lceil\frac{\mathrm{out}_{i}}{B_{\mathrm{dst}}}\right\rceil+L_{\mathrm{rsp},i}\right)+S\) |
| 发射间隔 |
受 fixp FIFO、read/write queue、write_otsd 和目标接口限制 |
| uop 展开 |
按源块、FB 目标块和接口粒度展开读/写 uop:MTE.l0c_read_bandwidth 或所选源接口带宽/转换/量化/布局模式动态决定/目标 L1/UB/BIU/FB 接口和 outstanding 动态决定 |
| 退休 |
最后写 uop/ACK 完成,所有临时转换数据排空 |
| 动态停顿 |
L0C unit flag/端口、Fixpipe FIFO、nz2nd trans buffer、store buffer、write outstanding、目标回压 |
这些数值是架构周期模型,不是 910B 芯片的实测吞吐率。设备结果状态:待目标设备执行。
数值异常、掩码、描述字和访存副作用分别见数值语义、MASK/VA 与访存和配置字。
ID 231 — FIX_L0C_TO_DST
| 项目 |
内容 |
| 指令域/执行位置 |
fixpipe / Fixpipe(pipe 10) |
| 格式类 |
X-FIX |
| 参数角色 |
L0C 源、目标、转换和搬出控制;无 c220 公共文本形式 |
| 作用 |
通过 Fixpipe 把 L0C 结果定点化/转换并写到目标;仅用于识别内部编码。 |
| 文本语法状态 |
仅机器格式;无 c220 公共语法 |
32 位编码布局
- 位 31→0 模式:
1100001.........................(0/1 为固定值,. 为该解码项的可变位)。
- 完整分段:
[31:25]=1100001(fixed); [24:22]=route/mode; [21:17]=dst; [16:12]=src; [11:7]=descriptor; [6:0]=conversion/control
- 解码条件:
(word & 0xfe000000) == 0xc2000000。
公共文本形式
当前 c220 后端没有接受该目录项的完整文本形式。OP、<dtype>、<mode> 等占位符不是汇编语法;目录样例字只用于机器格式识别,不能作为可运行内核。
周期与冲突
| 项目 |
架构周期模型 |
| 路径 |
CCU Fixpipe issue→L0C read→转换/量化/NZ2ND→L1/UB/OUT 写出→退休 |
| 延迟/公式 |
\(T=\max_{i}\!\left(t_{\mathrm{read},i}+\left\lceil\frac{\mathrm{bytes}_{i}}{B_{\mathrm{L0C\,read}}}\right\rceil+T_{\mathrm{convert},i}+\left\lceil\frac{\mathrm{out}_{i}}{B_{\mathrm{dst}}}\right\rceil+L_{\mathrm{rsp},i}\right)+S\) |
| 发射间隔 |
受 fixp FIFO、read/write queue、write_otsd 和目标接口限制 |
| uop 展开 |
普通模式按 L0C slice/目标块展开;NZ2ND 按转换 tile、临时缓存和写出块继续拆分:MTE.l0c_read_bandwidth 或所选源接口带宽/转换/量化/布局模式动态决定/目标 L1/UB/BIU/FB 接口和 outstanding 动态决定 |
| 退休 |
最后写 uop/ACK 完成,所有临时转换数据排空 |
| 动态停顿 |
L0C unit flag/端口、Fixpipe FIFO、nz2nd trans buffer、store buffer、write outstanding、目标回压 |
这些数值是架构周期模型,不是 910B 芯片的实测吞吐率。设备结果状态:待目标设备执行。
数值异常、掩码、描述字和访存副作用分别见数值语义、MASK/VA 与访存和配置字。