首页/指令库/VFWCVT-RTZ-XU-F-V
VFWCVT.RTZ.XU.F.V

RISC-V VFWCVT.RTZ.XU.F.V 指令详解

指令手册OPFVV

VFWCVT.RTZ.XU.F.V 将活动 vs2[i] 从 SEW 宽浮点值扩宽转换为 2*SEW 宽无符号整数结果并写入 vd[i]。

指令语法

vfwcvt.rtz.xu.f.v vd, vs2, vm
操作数说明
语法 vfwcvt.rtz.xu.f.v vd, vs2[, v0.t];32 位 OP-V:opcode=1010111、funct3=001、funct6=010010。vs1=01110 是固定 VFUNARY0 选择字段,不读取第二向量源。
窄向量源 EEW=SEW、EMUL=LMUL;vd 的 EEW=2×SEW、EMUL=2×LMUL。EMUL=2/4/8 的组起点按组大小对齐,EMUL>8 保留。窄源与宽目标重叠仅在源 EMUL≥1 且最高编号寄存器相同时合法;不同 EEW 的合法重叠强制 mask/tail agnostic。
浮点源转换为双宽无符号整数,固定向零舍入,按舍入后结果检查整数范围。NaN、无穷或越界按标量转换规则置 NV 并裁剪;不精确且未置 NV 时置 NX。
省略 v0.t 为 vm=1;写出为 vm=0。活动元素满足 vstart≤i<vl 且掩码允许,仅活动元素异常累积到 fflags。masked 目标不得含 v0;同一寄存器不能同时作为不同 EEW 的数据源和掩码源读取。
prestart 不更新也不产生异常;vl=0 或 vstart≥vl 时所有目标元素包括 tail 均不更新。其余 inactive/tail 按 vma/vta 处理,ta/ma 不保证清零;成功执行复位 vstart=0。
V 1.0 可用于 RV32/RV64,依赖 F/D;须支持所需格式、合法 vtype、VS/FS 已启用。H 且虚拟化 V=1 时 vsstatus.VS/FS 也须启用。所有向量浮点指令要求有效 frm,即使不按其舍入或 vl=0;无效 frm 使用保留,vxrm 不参与。动画固定 SEW=32、LMUL=m1、VLEN=4096、vstart=0、ta/ma 和有限输入,非完整浮点模拟器。
V向量类型转换/扩展浮点

指令行为说明

VFWCVT.RTZ.XU.F.V 是 RISC-V V 扩展的 VFWCVT 扩宽浮点/整数转换指令,语法为 vfwcvt.rtz.xu.f.v vd, vs2, vm。它只对 vl 范围内的活动元素执行,源元素宽度为当前 SEW,目标元素宽度为 2*SEW;在基础 V 的 FP32/FP64 路径中,本页动画演示 SEW=32 输入生成 64-bit 目标结果。编码使用 OP-V、funct6=010010、funct3=001,VFUNARY0 的 vs1 选择字段为 01110。该 RTZ 形式固定向零舍入;但所有向量浮点指令仍要求 frm 为有效值,使用无效 frm 是保留行为。vm=0 使用 v0.t 作为执行掩码,vm=1 表示不使用掩码。

VFWCVT.RTZ.XU.F.V 指令解析与执行动画

从 OP-V 编码解码到 VFUNARY0 宽化类型转换:每个活动元素把 vs2[i] 浮点值转换为双倍宽度无符号整数。

输入的指令
vfwcvt.rtz.xu.f.v
执行环境
LMULm1本动画固定的寄存器组倍数
VLEN4096固定向量寄存器长度(bits)
VLMAX128m1 下的最大元素数
vstart0本动画不展示 prestart 元素
FP stateFS enabledFS=Off 会触发非法指令;本动画固定展示 FS 已启用的架构路径
dest EEW64目标元素宽度
vta/vmata, ma尾部/非活动元素策略
opcode1010111OP-V 主操作码
vs101110VFUNARY0 转换选择字段
编码字段
0x48871257
31..26
25
24..20
19..15
14..12
11..7
6..0
010010
funct6
0
vm
01000
vs2
01110
vs1/sel
001
funct3
00100
vd
1010111
OP-V
执行数据路径

lane 0: widen_trunc_unsigned(0.25) -> 0

显示的 lane 与当前步骤高亮同步;其余逐元素结果位于下方。

步骤 1 / 15
读取 OP-V 编码字段

V 扩展浮点指令使用 OP-V 主操作码,字段包含 funct6、源寄存器、vm、funct3、vd 和 opcode。

逐元素结果
长向量在模块内部横向滚动,不造成页面溢出。
i=0活动
widen_trunc_unsigned(0.25)
0
i=1活动
widen_trunc_unsigned(1.5)
1
i=2跳过
v0.t=0,不执行
--
i=3活动
widen_trunc_unsigned(3.75)
3
i=4活动
widen_trunc_unsigned(7.125)
7
i=5活动
widen_trunc_unsigned(8.5)
8
i=6跳过
v0.t=0,不执行
--
i=7活动
widen_trunc_unsigned(31.25)
31
本模型固定 SEW=32、LMUL=m1、VLEN=4096、vstart=0、合法 vtype、VS/FS 已启用及 ta/ma。源先表示为 binary32,再按固定 RTZ舍入;64 位整数演示仅显示 ±(2^53−1) 范围内的结果(无符号形式下限为 0)。非活动与尾部元素不显示确定值;VL=0 不更新任何目标元素。NaN、无穷、fflags 和微架构周期不在模型范围;真实指令仍按官方浮点规则处理这些条件。

快速理解与检索要点

VFWCVT.RTZ.XU.F.V 的关键是 VFUNARY0 扩宽转换:解码 vs1=01110 后,只对活动元素把 vs2[i] 从 SEW 宽浮点值转换为 2*SEW 宽无符号整数结果。

OP-V 编码中 funct6=010010、funct3=001 选择向量浮点/整数转换组,VFUNARY0 的 vs1=01110 选择 VFWCVT.RTZ.XU.F.V。
语法操作数为 vd、vs2 和可选的 v0.t 掩码操作数(vm);VL、SEW、frm、v0 掩码位和源元素值属于执行环境。
这是扩宽转换,源元素为当前 SEW,目标元素为 2*SEW;基础 V 的常见路径是 SEW=32 输入生成 64-bit 目标结果。
该 RTZ 形式固定向零舍入;但所有向量浮点指令仍要求 frm 为有效值,使用无效 frm 是保留行为。
只对 vl 范围内的活动元素执行;vm=0 使用 v0.t,vm=1 不使用执行掩码。
扩宽指令遵守官方 widening register overlap 约束;本页动画按 LMUL=1 用偶数 vd 表示 vd..vd+1 目标组。
浮点到整数转换的有效输入范围按舍入后的结果判断;NaN、无穷、越界、inexact/invalid 标志遵循官方 RVV 与标量浮点转换规则。
动画先按 binary32 表示输入,再进行整数舍入;超出演示范围时不显示编码或结果。

向量执行上下文

语法 vfwcvt.rtz.xu.f.v vd, vs2[, v0.t];32 位 OP-V:opcode=1010111、funct3=001、funct6=010010。vs1=01110 是固定 VFUNARY0 选择字段,不读取第二向量源。

窄向量源 EEW=SEW、EMUL=LMUL;vd 的 EEW=2×SEW、EMUL=2×LMUL。EMUL=2/4/8 的组起点按组大小对齐,EMUL>8 保留。窄源与宽目标重叠仅在源 EMUL≥1 且最高编号寄存器相同时合法;不同 EEW 的合法重叠强制 mask/tail agnostic。

浮点源转换为双宽无符号整数,固定向零舍入,按舍入后结果检查整数范围。NaN、无穷或越界按标量转换规则置 NV 并裁剪;不精确且未置 NV 时置 NX。

省略 v0.t 为 vm=1;写出为 vm=0。活动元素满足 vstart≤i<vl 且掩码允许,仅活动元素异常累积到 fflags。masked 目标不得含 v0;同一寄存器不能同时作为不同 EEW 的数据源和掩码源读取。

prestart 不更新也不产生异常;vl=0 或 vstart≥vl 时所有目标元素包括 tail 均不更新。其余 inactive/tail 按 vma/vta 处理,ta/ma 不保证清零;成功执行复位 vstart=0。

V 1.0 可用于 RV32/RV64,依赖 F/D;须支持所需格式、合法 vtype、VS/FS 已启用。H 且虚拟化 V=1 时 vsstatus.VS/FS 也须启用。所有向量浮点指令要求有效 frm,即使不按其舍入或 vl=0;无效 frm 使用保留,vxrm 不参与。动画固定 SEW=32、LMUL=m1、VLEN=4096、vstart=0、ta/ma 和有限输入,非完整浮点模拟器。

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

常见使用场景

SEW 浮点到 2*SEW 整数

假定 V/VS/FS 已启用、合法 e32,m1、所需格式受支持、frm=RNE、VLMAX≥4、a0=4;vsetvli 后 vl=4、vstart=0。省略 v0.t,未掩码:v4(binary32)=[2.5,3.5,0,1.75] → v2/v3(uint64)=[2,3,0,1]。tail 按 ta 处理,不保证清零。

活动元素类型转换

假定 V/VS/FS 已启用、合法 e32,m1、所需格式受支持、frm=RNE、VLMAX≥4、a0=4;vsetvli 后 vl=4、vstart=0。省略 v0.t,未掩码:v4(binary32)=[2.5,3.5,0,1.75] → v2/v3(uint64)=[2,3,0,1]。tail 按 ta 处理,不保证清零。

使用前检查清单

语法检查
  • 语法 vfwcvt.rtz.xu.f.v vd, vs2[, v0.t];32 位 OP-V:opcode=1010111、funct3=001、funct6=010010。vs1=01110 是固定 VFUNARY0 选择字段,不读取第二向量源。
  • 窄向量源 EEW=SEW、EMUL=LMUL;vd 的 EEW=2×SEW、EMUL=2×LMUL。EMUL=2/4/8 的组起点按组大小对齐,EMUL>8 保留。窄源与宽目标重叠仅在源 EMUL≥1 且最高编号寄存器相同时合法;不同 EEW 的合法重叠强制 mask/tail agnostic。
语义检查
  • 浮点源转换为双宽无符号整数,固定向零舍入,按舍入后结果检查整数范围。NaN、无穷或越界按标量转换规则置 NV 并裁剪;不精确且未置 NV 时置 NX。
  • 省略 v0.t 为 vm=1;写出为 vm=0。活动元素满足 vstart≤i<vl 且掩码允许,仅活动元素异常累积到 fflags。masked 目标不得含 v0;同一寄存器不能同时作为不同 EEW 的数据源和掩码源读取。
  • prestart 不更新也不产生异常;vl=0 或 vstart≥vl 时所有目标元素包括 tail 均不更新。其余 inactive/tail 按 vma/vta 处理,ta/ma 不保证清零;成功执行复位 vstart=0。
  • V 1.0 可用于 RV32/RV64,依赖 F/D;须支持所需格式、合法 vtype、VS/FS 已启用。H 且虚拟化 V=1 时 vsstatus.VS/FS 也须启用。所有向量浮点指令要求有效 frm,即使不按其舍入或 vl=0;无效 frm 使用保留,vxrm 不参与。动画固定 SEW=32、LMUL=m1、VLEN=4096、vstart=0、ta/ma 和有限输入,非完整浮点模拟器。

容易混淆 / 常见误区

这是扩宽 VFWCVT:源为 SEW,目标为 2*SEW;不要把它当作单宽 VFCVT 或窄化 VFNCVT。
LMUL=m1 时,目标组 EMUL=2,vd 必须为偶数;窄源若与目标组重叠,只能使用其最高编号寄存器。
vm=0 时 v0.t 只选择活动元素;被掩码关闭的元素不会产生本页动画展示的转换结果。
浮点到整数的有效域按舍入后的整数结果判断;NaN、无穷、越界、invalid/inexact 仍按官方浮点转换规则处理。
本页动画固定 SEW=32,将 binary32 源转换为 64 位整数;演示结果限制在安全整数范围内。

常见问题

VFWCVT.RTZ.XU.F.V 和 VFCVT 有什么区别?

VFWCVT.RTZ.XU.F.V 是 VFWCVT 扩宽形式,源为 SEW、目标为 2*SEW;VFCVT 单宽形式的源和目标都使用当前 SEW。

VFWCVT.RTZ.XU.F.V 的舍入来源是什么?

RTZ 形式固定向零舍入;但所有向量浮点指令仍要求 frm 为有效值,使用无效 frm 是保留行为。

VFWCVT.RTZ.XU.F.V 如何使用掩码?

vm=0 时只转换活动且 v0[i]=1 的元素;vm=1 不使用执行掩码。非活动/尾部遵循 vma/vta;合法不同 EEW 重叠强制 agnostic。vl=0 或 vstart≥vl 时所有目标元素均不更新。

为什么本页动画只开放 SEW=32?

本模型固定 SEW=32,展示 binary32 浮点到 64 位整数的扩宽转换;不模拟所有可选浮点格式。