CSR 位字段

RISC-V mvien CSR 寄存器详解

地址 0x308特权级 Machine 模式访问 机器模式读写(MRW) / 64 位逻辑 CSR;RV32 低 32 位在 mvien,高 32 位在 mvienhMachine AIA、定时器与间接中断 CSR

`mvien`(0x308)是 Smaia 在实现 S 模式时提供的 64 位 MRW CSR;它决定哪些 `mvip` 虚拟挂起位在 Supervisor 级激活和可见,而不是像 `mie` 那样简单屏蔽中断。

字段映射

按 bit 字段理解 mvien

7 个关键字段
63:14

Interrupt 63:14 virtual-enable bits

实现选择:可写、只读 0 或只读 1

每一位对应同编号中断。实现可为每位选择可写、只读 0 或只读 1;平台标准或其他扩展可进一步约束。

这个字段控制什么

  • - 每一位对应同编号中断。实现可为每位选择可写、只读 0 或只读 1;平台标准或其他扩展可进一步约束。

常见取值

这个字段更适合结合上下文字段解释,不用按固定枚举背诵。

13

LCOFI virtual enable

实现相关;满足 Smcdeleg+Sscofpmf+Smaia 时必须可写

对应本地计数器溢出中断 LCOFI(中断 13)。同时实现 Smcdeleg、Sscofpmf 和 Smaia 时,该位必须实现且可写。

这个字段控制什么

  • - 对应本地计数器溢出中断 LCOFI(中断 13)。同时实现 Smcdeleg、Sscofpmf 和 Smaia 时,该位必须实现且可写。

常见取值

mvien[13]
0不激活

当该位可写时,0 不通过 mvien 激活中断 13。

1激活

当该位可写时,1 可使 mvip[13] 对 Supervisor 级可见,但仍受 mideleg[13] 的组合规则约束。

12:10

Reserved

只读 0

AIA 保留,必须读为 0。

这个字段控制什么

  • - AIA 保留,必须读为 0。

常见取值

这个字段更适合结合上下文字段解释,不用按固定枚举背诵。

9

SEI virtual enable

可写或只读 0

对应 Supervisor external interrupt(SEI)。该位不能只读为 1;规范强烈建议实现为可写。mideleg[9]=0 且本位为 1 时,sip[9] 别名到 mvip[9],sie[9] 可写。

这个字段控制什么

  • - 对应 Supervisor external interrupt(SEI)。该位不能只读为 1;规范强烈建议实现为可写。mideleg[9]=0 且本位为 1 时,sip[9] 别名到 mvip[9],sie[9] 可写。

常见取值

这个字段更适合结合上下文字段解释,不用按固定枚举背诵。

8:2

Reserved

只读 0

中断 2-8 的 mvien 位由 AIA 保留,必须读为 0;其中包括中断 5。

这个字段控制什么

  • - 中断 2-8 的 mvien 位由 AIA 保留,必须读为 0;其中包括中断 5。

常见取值

这个字段更适合结合上下文字段解释,不用按固定枚举背诵。

1

SSI virtual enable

可写或只读 0

对应 Supervisor software interrupt(SSI)。该位不能只读为 1;若 mip.SSIP 可由中断控制器自动置位,规范强烈建议本位可写。

这个字段控制什么

  • - 对应 Supervisor software interrupt(SSI)。该位不能只读为 1;若 mip.SSIP 可由中断控制器自动置位,规范强烈建议本位可写。

常见取值

这个字段更适合结合上下文字段解释,不用按固定枚举背诵。

0

Reserved

只读 0

AIA 保留,必须读为 0。

这个字段控制什么

  • - AIA 保留,必须读为 0。

常见取值

这个字段更适合结合上下文字段解释,不用按固定枚举背诵。

官方依据与检索要点

mvien 选择哪些 mvip 位可作为 Supervisor 级虚拟中断源;它与 mideleg 共同决定 sip/sie 的别名和可写性。

只有位 1、9、13-63 可能置 1;其余位只读为 0。
13-63 位通常由实现选择可写/只读值;Smcdeleg+Sscofpmf+Smaia 强制 LCOFI 位 13 可写。
mvien 不是 mie 风格的中断屏蔽器。

读这个 CSR 时先看什么

  • - 每一位对应中断号 0-63;只有 1、9、13-63 可能被置 1。
  • - 未实现 S 模式时 mvien 不存在;S 模式下允许的最小实现可让全部 mvien 位只读为 0。
  • - 读取 13-63 位时必须区分实现选择的可写、只读 0 和只读 1。

写入前的风险检查

  • - mideleg[n]=0 时把 mvien[n] 从 0 改为 1,会使对应 sie[n] 的值变为 UNSPECIFIED。
  • - mvien[n]=1 时把 mideleg[n] 从 1 改为 0,也会使对应 sie[n] 的值变为 UNSPECIFIED。
  • - 只写规范允许的位;0、2-8、10-12 必须保持为 0。

放回真实流程里理解

1

确认实现 S 模式和 Smaia;RV32 同时通过 mvienh 访问高 32 位。

2

按目标中断号检查 mideleg、mvien 和 mvip 的同一位。

3

改变委托/虚拟使能后,按规范重新建立对应 sie 位,不依赖 UNSPECIFIED 的旧值。

常见问题

mvien[n]=1 会直接递送中断吗?

不会。它在 mideleg[n]=0 时使 mvip[n] 通过 sip[n] 可见并使 sie[n] 可写;实际 trap 仍取决于挂起、使能和特权级中断规则。