首页/指令库/向量 AES-256 前向密钥调度
VAESKF2.VI

RISC-V VAESKF2.VI 指令详解

指令手册OP-VE (32-bit)

AES-256 向量前向 key schedule,按 uimm 选择轮数;SEW=32,无 vm 操作数。

指令语法

vaeskf2.vi vd, vs2, uimm

vd、vs2 选择向量寄存器 v0–v31;uimm 是 0–31 的 5 位无符号立即数。没有 v0.t 掩码操作数,v0 作为普通数据寄存器可写。

32 位 OP-VE:funct6=101010,vm=1,vs2[24:20],uimm[4:0][19:15],funct3=010,vd[11:7],opcode=1110111。

要求启用 Zvkned 与向量状态,SEW=32、EGW=128、EGS=4。vs2 提供当前密钥,旧 vd 提供前一密钥,vd 接收下一密钥;有效轮号 2–14。忽略 uimm[4],低 4 位 0/1/15 分别映射为 8/9/7。

从组 vstart/4 处理至 vl/4−1;vl 或 vstart 不是 4 的倍数、或 SEW≠32 时编码保留。LMUL*VLEN<128 时即使 vl=0 也引发非法指令异常。寄存器组须满足 V 扩展对齐规则;执行延迟必须与操作数据无关。

Zvkned向量密码AES

指令编码

31..26
funct6=101010
25
vm=1
24..20
vs2
19..15
uimm[4:0]
14..12
010
11..7
vd
6..0
1110111

VAESKF2.VI 使用 opcode 1110111(0x77)、funct3 010。32 位 OP-VE:funct6=101010,vm=1,vs2[24:20],uimm[4:0][19:15],funct3=010,vd[11:7],opcode=1110111。

格式: OP-VE(funct6=101010,vm=1,uimm[4:0])
opcode: 1110111 (0x77)
funct3: 010 (0x2)

指令行为说明

vaeskf2.vi 是 Zvkned 的 AES-256 前向 key schedule 指令。它读取 vs2 中的当前 AES-256 round-key element group,并结合 vd 中的前一轮密钥状态与 uimm 指定的轮数生成下一轮 round key,结果写回 vd。SEW 必须为 32。它只用于 AES-256 前向 key schedule。

快速理解与检索要点

AES-256 向量前向 key schedule,按 uimm 选择轮数;SEW=32,无 vm 操作数。

生成 AES-256 前向密钥调度的下一轮 key material,使用 vs2 和旧 vd 状态。
该 element-group 密码指令没有 vm 掩码操作数,按 element group 粒度执行。
SEW=32,EGW=128,EGS=4;vl 和 vstart 必须是 4 的倍数,且 LMUL*VLEN 必须容纳至少一个 element group。
执行延迟必须与操作数据无关;保留编码不承诺正常写回或固定异常行为。
有效轮号为奇数时,对 vs2 最高 32 位字仅作 SubWord;偶数时作 RotWord、SubWord 并异或 Rcon[(rnd>>1)−1]。与旧 vd 的最低字异或产生 w0,再逐字异或旧 vd 的其余字。

向量执行上下文

vd、vs2 选择向量寄存器 v0–v31;uimm 是 0–31 的 5 位无符号立即数。没有 v0.t 掩码操作数,v0 作为普通数据寄存器可写。

32 位 OP-VE:funct6=101010,vm=1,vs2[24:20],uimm[4:0][19:15],funct3=010,vd[11:7],opcode=1110111。

要求启用 Zvkned 与向量状态,SEW=32、EGW=128、EGS=4。vs2 提供当前密钥,旧 vd 提供前一密钥,vd 接收下一密钥;有效轮号 2–14。忽略 uimm[4],低 4 位 0/1/15 分别映射为 8/9/7。

从组 vstart/4 处理至 vl/4−1;vl 或 vstart 不是 4 的倍数、或 SEW≠32 时编码保留。LMUL*VLEN<128 时即使 vl=0 也引发非法指令异常。寄存器组须满足 V 扩展对齐规则;执行延迟必须与操作数据无关。

The RISC-V Instruction Set Manual, Volume I: Unprivileged Architecture — Version 20260120, Chapter 33

常见使用场景

加密与密码

启用 Zvkned 与向量状态,VLEN=128、LMUL=1、SEW=32、vl=4、vstart=0;v8 与 v16 的输入元素组均为零。按基础示例的轮号与本页规则计算,得到 v8=0x63636362636363626363636263636362。

向量化加速

启用 Zvkned 与向量状态,VLEN=128、LMUL=1、SEW=32、vl=4、vstart=0;v8 与 v16 的输入元素组均为零。按基础示例的轮号与本页规则计算,得到 v8=0x63636362636363626363636263636362。

使用前检查清单

语法检查
  • vd、vs2 选择向量寄存器 v0–v31;uimm 是 0–31 的 5 位无符号立即数。没有 v0.t 掩码操作数,v0 作为普通数据寄存器可写。
  • 32 位 OP-VE:funct6=101010,vm=1,vs2[24:20],uimm[4:0][19:15],funct3=010,vd[11:7],opcode=1110111。
语义检查
  • 要求启用 Zvkned 与向量状态,SEW=32、EGW=128、EGS=4。vs2 提供当前密钥,旧 vd 提供前一密钥,vd 接收下一密钥;有效轮号 2–14。忽略 uimm[4],低 4 位 0/1/15 分别映射为 8/9/7。
  • 从组 vstart/4 处理至 vl/4−1;vl 或 vstart 不是 4 的倍数、或 SEW≠32 时编码保留。LMUL*VLEN<128 时即使 vl=0 也引发非法指令异常。寄存器组须满足 V 扩展对齐规则;执行延迟必须与操作数据无关。

容易混淆 / 常见误区

无 vm 操作数;该 key-schedule 指令不可掩码执行。
SEW 必须为 32,element group 为 128 位。
用于 AES-256 前向 key schedule;不要把它描述成其它 AES round 变换。
SEW=32、EGW=128、EGS=4;vl 和 vstart 必须是 4 的整数倍,且 LMUL*VLEN 至少覆盖 128 位 element group。
uimm 是 0–31 的 5 位无符号立即数;忽略 uimm[4]。低 4 位为 0、1、15 时翻转 bit3:0→8,1→9,15→7;有效轮号为 2–14。

常见问题

VAESKF2.VI 是否总能带 v0.t 掩码?

不能。该类 element-group 密码指令没有 vm 操作数;不要把普通 RVV 掩码语法套到页面示例中。

VAESKF2.VI 的元素宽度由什么决定?

仅定义 SEW=32,以 EGW=128、EGS=4 的元素组执行。其它 SEW、非 4 倍数的 vl 或 vstart 均为保留编码;LMUL*VLEN<128 时,即使 vl=0 也引发非法指令异常。

uimm 的所有 5 位值都有定义吗?

uimm 是 0–31 的 5 位无符号立即数;忽略 uimm[4]。低 4 位为 0、1、15 时翻转 bit3:0→8,1→9,15→7;有效轮号为 2–14。