首页/指令库/立即数设置向量长度
VSETIVLI

RISC-V VSETIVLI 指令详解

指令手册OP-V vector configuration (immediate AVL)

使用 5 位立即数 AVL 和 vtypei 配置 vl/vtype,并把新 vl 写入 rd

指令语法

vsetivli rd, uimm, vtypei
操作数说明
rd 为整数寄存器;uimm 是零扩展 5 位 AVL(0–31),包括合法的 0;vtypei 指定 SEW、LMUL、ta/tu 和 ma/mu。
32 位 OP-V:bits[31:30]=11,bits[29:20]=vtypei[9:0]、bits[19:15]=uimm,funct3=111、opcode=1010111;无符号立即数不能按普通 I 型符号扩展。
VLMAX=LMUL×VLEN/SEW。AVL≤VLMAX 时 vl=AVL;VLMAX<AVL<2×VLMAX 时 ceil(AVL/2)≤vl≤VLMAX;AVL≥2×VLMAX 时 vl=VLMAX。同一实现对相同 AVL/VLMAX 确定。
rd=x0 只丢弃 GPR 写回;uimm 仍提供 AVL,不存在 rs1=x0 特殊形式。
要求 V 1.0 和所需向量状态已启用;vset 不依赖旧 vtype。成功完成更新 vl/vtype 并清 vstart。不支持的 vtype 设置 vill、其他 vtype 位及 vl 为 0;实现也可选择陷入以模拟非法配置。
V向量配置vset指令

指令行为说明

VSETIVLI 是 VSETVLI 的立即数 AVL 形式。它使用 5 位零扩展 uimm 作为 AVL,并用 vtypei 编码 SEW、LMUL、vta 和 vma。硬件按 AVL 与 VLMAX 选择新 vl,更新 vl/vtype,并把新 vl 写入 rd;rd=x0 时只丢弃整数寄存器写回。成功执行会把 vstart 归零。

VSETIVLI 指令解析与执行动画

从 vset 编码字段解析 AVL 来源和 vtype 设置,再展示 vl/vtype/rd 的架构可见更新。

步骤 1 / 6

编码

VSETIVLI 属于 OP-V 配置指令。本步先看 opcode、funct3 以及承载 AVL/vtype 的字段。

输入的指令
vsetivli
执行环境
范围提示:此动画只展示 V 扩展定义的 ISA 可见 vl/vtype 选择关系。示例 VLMAX 与中间区间 vl 选择都是教学输入,不代表具体处理器的 VLEN、ELEN、支持矩阵或操作系统处理。
编码字段vsetivli / OP-V
31..30
fixed
11
29..20
vtypei
0011010000
19..15
uimm
01000
14..12
funct3
111
11..7
rd
00101
6..0
opcode
1010111
asm
form
VSETIVLI
配置数据路径
AVL source
uimm[4:0]
AVL
8
VLMAX
16
selected vl
8
vtype
e32, m1, ta, ma
x5
尚未写回
vstart
3
当前配置摘要
vl result
8
policy
ta/ma
vl 选择结果
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
示例按 AVL=8 和 VLMAX=16 得到 vl=8。绿色格表示本次配置后 body 元素范围。

假定 V 和所需向量状态已启用。本动画只演示成功完成路径(不支持配置采用 vill 路径);实现也可对非法 vtype 选择陷入以支持模拟。AVL 数值输入限于可精确表示的非负安全整数,按 RV64 教学环境解释。各步骤用于讲解,不代表硬件周期。

快速理解与检索要点

VSETIVLI 把 AVL 直接放在指令的 5 位立即数字段中,适合小常量元素数。它仍然通过 vtypei 配置 SEW、LMUL、vta 和 vma,最终更新 vl/vtype 并可把新 vl 保存到 rd。

uimm 是 5 位零扩展 AVL,范围为 0 到 31。
编码以 bit[31:30]=11 固定,vtypei[9:0] 位于 bit[29:20];它编码 vma、vta、vsew 和 vlmul。
rd=x0 不保存新 vl,但 vl/vtype 仍按该指令更新。
不支持配置设置 vill=1、其他 vtype 位及 vl=0;实现也可对非法 vtype 选择陷入以支持模拟。

向量执行上下文

rd 为整数寄存器;uimm 是零扩展 5 位 AVL(0–31),包括合法的 0;vtypei 指定 SEW、LMUL、ta/tu 和 ma/mu。

32 位 OP-V:bits[31:30]=11,bits[29:20]=vtypei[9:0]、bits[19:15]=uimm,funct3=111、opcode=1010111;无符号立即数不能按普通 I 型符号扩展。

VLMAX=LMUL×VLEN/SEW。AVL≤VLMAX 时 vl=AVL;VLMAX<AVL<2×VLMAX 时 ceil(AVL/2)≤vl≤VLMAX;AVL≥2×VLMAX 时 vl=VLMAX。同一实现对相同 AVL/VLMAX 确定。

rd=x0 只丢弃 GPR 写回;uimm 仍提供 AVL,不存在 rs1=x0 特殊形式。

要求 V 1.0 和所需向量状态已启用;vset 不依赖旧 vtype。成功完成更新 vl/vtype 并清 vstart。不支持的 vtype 设置 vill、其他 vtype 位及 vl 为 0;实现也可选择陷入以模拟非法配置。

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

常见使用场景

循环stripmining

假定 RV32/RV64 V、向量状态已启用、e32,m1,ta,ma 可用、VLEN=256,故 VLMAX=8。uimm=8:成功执行示例后 vl=t0=8、vstart=0。没有逐元素 mask 操作。

向量长度配置

假定 RV32/RV64 V、向量状态已启用、e32,m1,ta,ma 可用、VLEN=256,故 VLMAX=8。uimm=8:成功执行示例后 vl=t0=8、vstart=0。没有逐元素 mask 操作。

使用前检查清单

语法检查
  • rd 为整数寄存器;uimm 是零扩展 5 位 AVL(0–31),包括合法的 0;vtypei 指定 SEW、LMUL、ta/tu 和 ma/mu。
  • 32 位 OP-V:bits[31:30]=11,bits[29:20]=vtypei[9:0]、bits[19:15]=uimm,funct3=111、opcode=1010111;无符号立即数不能按普通 I 型符号扩展。
语义检查
  • VLMAX=LMUL×VLEN/SEW。AVL≤VLMAX 时 vl=AVL;VLMAX<AVL<2×VLMAX 时 ceil(AVL/2)≤vl≤VLMAX;AVL≥2×VLMAX 时 vl=VLMAX。同一实现对相同 AVL/VLMAX 确定。
  • rd=x0 只丢弃 GPR 写回;uimm 仍提供 AVL,不存在 rs1=x0 特殊形式。
  • 要求 V 1.0 和所需向量状态已启用;vset 不依赖旧 vtype。成功完成更新 vl/vtype 并清 vstart。不支持的 vtype 设置 vill、其他 vtype 位及 vl 为 0;实现也可选择陷入以模拟非法配置。

容易混淆 / 常见误区

AVL 是 5 位零扩展立即数,范围 0-31。
不支持的 vtype 按官方规则设置 vill 并令 vl=0;软件应检查 vill。
vsetivli/vsetvli 汇编应显式写出 ta/tu 和 ma/mu。

常见问题

VSETIVLI 和 VSETVLI 的区别是什么?

VSETIVLI 的 AVL 来自 5 位 uimm;VSETVLI 的 AVL 通常来自 rs1,并有 rs1=x0 的特殊形式。二者都用 vtypei 配置 vtype。

uimm=0 是否非法?

不是。uimm=0 表示 AVL=0,按官方向量长度选择规则得到 vl=0。