HSV.H

RISC-V HSV.H 指令详解

指令手册SYSTEM R-type fields

Hypervisor 虚拟机存储:按 VS/VU 有效特权和两阶段转换存储半字。

指令语法

hsv.h rs2, (rs1)
操作数说明
H 1.0;RV32/RV64;32 位 SYSTEM R-type 字段,funct7=0110011、funct3=100、opcode=1110011。
rs2=[24:20] 提供低 16 位数据,rs1=[19:15] 直接提供地址,rd=[11:7] 固定为 00000;无偏移立即数。
M/HS 或 V=0 的 U-mode 且 HU=1 可执行;V=1 为 virtual-instruction,V=0 的 U-mode 且 HU=0 为 illegal-instruction。SPVP=0/1 选择 VU/VS 访问;HS SUM 被忽略,MPRV 不影响访问。
rs2=x0 存储零;rs1=rs2 时源数据取同一地址寄存器的低位。存储宽度以外的内存不由该示例更新。
本页示例假定 H 可用、相关模式 XLEN 相同、pointer masking 关闭,且转换和保护检查成功;非自然对齐访问由执行环境决定,不保证完成。
H系统与特权

指令行为说明

HSV.H 是 H 扩展虚拟机存储指令。它可在 M-mode 或 HS-mode 执行,也可在 hstatus.HU=1 时从 U-mode 执行。显式内存访问在 hstatus.SPVP=0 时按 VU 有效特权、在 hstatus.SPVP=1 时按 VS 有效特权执行,并经过 VS-stage 与 G-stage 两阶段地址转换。

HSV.H 指令解析与执行动画

展示 HSV.H 的 SYSTEM 编码、特权检查、两阶段转换与 16 位存储提交;不模拟页表遍历或 TLB 实现。

rs2
rs1
hsv.h
,(
)

演示假定 H 扩展已实现、相关特权模式使用相同 XLEN、pointer masking 关闭;输入表示源寄存器低位;访问结果由下拉框指定,不验证真实页表。rs1=x0 时地址固定为 0。步骤是教学顺序,不代表处理器周期。

rs2=x0 时源低位固定为零;rs1=rs2 时源低位从同一地址寄存器派生,不能独立编辑。源与地址均为执行前的值。存储数值表示整个访问宽度,不模拟逐字节端序。

31..25
24..20
19..15
14..12
11..7
6..0
0110011
funct7
01100
rs2/source
01011
rs1/address
100
PRIVM
00000
rd=00000
1110011
SYSTEM
架构数据路径
instruction
0x66C5C073
decode
funct7=0110011, rs2=01100, funct3=100, rd=00000 -> HSV.H
address
a1(x11) -> 0x0000000040001000 (no immediate offset)
privilege
HS:允许执行
translation
VU effective privilege -> VS-stage -> G-stage; HS SUM ignored; MPRV is not used
store
a2(x12) low 16 bits = 0x8001 -> memory[0x0000000040001000]
state
尚未提交架构状态;最终内存状态只在提交步骤显示。
尚未提交架构状态;最终内存状态只在提交步骤显示。

该动画仅展示官方定义的架构条件与结果;页表遍历、TLB、缓存和平台异常处理未建模。

快速理解与检索要点

HSV.H 是 H 扩展的 虚拟机半字存储,以内存访问的 VS/VU 有效特权经过 VS-stage 与 G-stage 两阶段转换存储数据。

需要 H 1.0,适用于 RV32/RV64;rs1 直接给出地址,rs2 提供低 16 位,无偏移立即数,rd 固定为 x0。
SPVP=0/1 选择 VU/VS 有效特权;HS-level SUM 被忽略,MPRV 不改变 HSV 访问。
V=1 引发 virtual-instruction;V=0 的 U-mode 仅在 HU=1 时允许执行。

常见使用场景

Hypervisor设备仿真

假定 RV64 H、HS-mode、SPVP=0、pointer masking 关闭、转换/保护成功;a0=0x1000、a1=0x123456789ABCDEF0。hsv.h a1, (a0) 将低 16 位 0xDEF0(2 字节) 存入该地址;寄存器不写回。

Guest内存访问

假定 RV64 H、HS-mode、SPVP=0、pointer masking 关闭、转换/保护成功;a0=0x1000、a1=0x123456789ABCDEF0。hsv.h a1, (a0) 将低 16 位 0xDEF0(2 字节) 存入该地址;寄存器不写回。

虚拟化指令模拟

假定 RV64 H、HS-mode、SPVP=0、pointer masking 关闭、转换/保护成功;a0=0x1000、a1=0x123456789ABCDEF0。hsv.h a1, (a0) 将低 16 位 0xDEF0(2 字节) 存入该地址;寄存器不写回。

使用前检查清单

语法检查
  • H 1.0;RV32/RV64;32 位 SYSTEM R-type 字段,funct7=0110011、funct3=100、opcode=1110011。
  • rs2=[24:20] 提供低 16 位数据,rs1=[19:15] 直接提供地址,rd=[11:7] 固定为 00000;无偏移立即数。
语义检查
  • M/HS 或 V=0 的 U-mode 且 HU=1 可执行;V=1 为 virtual-instruction,V=0 的 U-mode 且 HU=0 为 illegal-instruction。SPVP=0/1 选择 VU/VS 访问;HS SUM 被忽略,MPRV 不影响访问。
  • rs2=x0 存储零;rs1=rs2 时源数据取同一地址寄存器的低位。存储宽度以外的内存不由该示例更新。
  • 本页示例假定 H 可用、相关模式 XLEN 相同、pointer masking 关闭,且转换和保护检查成功;非自然对齐访问由执行环境决定,不保证完成。

容易混淆 / 常见误区

当虚拟化模式 V=1 时执行 HLV/HLVX/HSV 会触发 virtual-instruction 异常。
U-mode 只有在 hstatus.HU=1 时可执行,否则触发 illegal-instruction 异常。
仍可能因 VS-stage/G-stage 转换产生访问错误、页错误或 guest-page fault。

常见问题

rs2=x0 或 rs1=rs2 时存储什么?

rs2=x0 存储 16 位零;rs1=rs2 时使用同一个执行前寄存器值,低 16 位作为数据、完整值作为地址。