Skip to content

vsetvli

vsetvli 使用整数寄存器给出的应用向量长度(AVL)和立即数 vtypei 配置 vlvtype,并把硬件选出的新 vl 写入整数寄存器 rd

操作码
OP-V · funct3=111
指令集
RISC-V V 1.0
英文全称
Vector Set Vector Length Immediate
参考资料
RISC-V V 1.0
页码
314
01vsetvli02rd03rs104vtypei
01
指令助记符vsetvlimnemonic

用整数寄存器中的 AVL 配置 vl 与 vtype。

02
新 vlrddestination

接收硬件选出的 vl;写 x0 可丢弃结果。

03
AVLrs1source

整数寄存器提供应用向量长度;x0 的特殊组合见下文。

04
向量类型立即数vtypeiimmediate

编码 SEW、LMUL、尾部策略与掩码策略。

VSETVLI · VECTOR CONFIGURATION32-BIT INSTRUCTION · XLEN-WIDE VTYPE
vsetvli x5, x10, e32, m4, tu, mu # VLEN=128
vtype[7:0]当前低 8 位结果0b00010010 · 0x12
VLMAXLMUL × VLEN ÷ SEW(示例 VLEN=128)16 个元素
32 位指令编码每个框说明相应位段的来源与作用
bit 31固定0

区分 vsetvli 与另外两种配置指令

bit 30:20vtypei[10:0]00000010010

位 10:8 必须为 0;位 7:0 按下表写入 vtype

bit 19:15rs101010

整数寄存器 x10 提供 AVL

bit 14:12funct3111

向量配置指令的固定功能码

bit 11:7rd00101

x5 接收新的 vl;rd=x0 时只更新 CSR

bit 6:0opcode1010111

OP-V 主操作码

写入 vtype 的每一位RV32 布局;RV64 仅将 vill 移到 bit 63
bit XLEN−1vill0

硬件接受配置时为 0;不支持任一位组合时置 1,并把其余位及 vl 清零。

bit XLEN−2:8reserved全 0

每一位都必须写 0;任一位非零都是不支持的 vtype。vsetvl 会检查 rs2 的全部 XLEN 位。

bit 7vma0

mu:被掩码元素保持旧值

bit 6vta0

tu:尾部元素保持旧值

bit 5vsew[2]0

与位 4、3 组成 vsew=010,选择 SEW=32

bit 4vsew[1]1

与位 5、3 共同编码元素宽度 SEW=32

bit 3vsew[0]0

与位 5、4 共同编码元素宽度 SEW=32

bit 2vlmul[2]0

与位 1、0 组成 vlmul=010,选择 m4 · 4

bit 1vlmul[1]1

与位 2、0 共同编码 m4 · 4

bit 0vlmul[0]0

与位 2、1 共同编码 m4 · 4

修改选项后,编码位与含义同步更新vl 由 AVL、VLMAX 与规范约束共同确定,并写入 rd配置指令不读写向量寄存器元素

指令形式

语法说明
vsetvli rd, rs1, vtypeix[rs1] 提供 AVL,vtypei 提供新向量类型

配置语义

VLMAX = LMUL × VLEN / SEW。软件给出 AVL,硬件依据 AVL、VLMAX 和规范约束选择新 vl;成功执行后 x[rd] = vl。若 rs1=x0, rd≠x0,AVL 按全 1 处理并将 vl 设为 VLMAX;若二者均为 x0,则以当前 vl 为 AVL,且只有不改变 VLMAX 比率的配置才是保留语义之外的合法用法。

vtypevill 位于 XLEN-1XLEN-2:8 为必须写零的保留位,位 7 是 vma,位 6 是 vta,位 5:3 是 vsew,位 2:0 是 vlmul。上方演示会逐位显示当前设置及其含义。

语义伪代码

VSETVLIRISC-V V 1.0 · PSEUDOCODE
AVL = (rs1 == x0) ? special_AVL_rule(rd, old_vl) : x[rs1]
requested_vtype = zero_extend(vtypei)
(vl, vtype) = select_vl_and_validate_vtype(AVL, requested_vtype)
x[rd] = vl                 # rd=x0 discards this write
vstart = 0
agnostic 表示规范允许保留旧值或写全 1;辅助函数名称直接表达其规范动作。

注意点

修改的寄存器与状态

指令写入 vlvtype 和整数目标 rd,并在成功结束时把 vstart 清零;rs1、向量寄存器、fflagsvxrmvxsat 保持不变。配置指令不使用执行掩码,也不直接改写任何尾部或被掩码的向量元素;vtavma 只规定后续向量指令的写入策略。

若实现不支持给出的 vtype 任一位组合,硬件令 vtype.vill=1、其余 vtype 位为零,并令 vl=0

内存对齐

不访问数据内存,因此没有内存对齐要求。

示例

asm
vsetvli t0, a0, e32, m1, tu, mu  # AVL=a0,配置 e32/m1,t0 得到新 vl

参考

SIGNAL MAINTAINED · BUILT FROM MARKDOWN