RISC-V Sstc 扩展内容总结
Sstc(Supervisor Software Timer Extension)扩展为 RISC-V 特权架构引入了 S-mode 和 VS-mode 的直接定时器中断管理机制,减少对 M-mode 的依赖。以下是其核心新增内容及修改:
一、新增 CSR 寄存器
-
stimecmp
(Supervisor Timer Compare)
• 功能:64 位寄存器,用于 S-mode 定时器中断比较。当time
≥stimecmp
时触发 STIP 中断。
• RV32 支持:通过stimecmp
(低 32 位,CSR 编号0x14D
)和stimecmph
(高 32 位,0x15D
)分两次访问。
• 中断行为:
◦ STIP 中断在mip
和sip
中为只读,由硬件自动设置。
◦ 写入stimecmp
大于当前time
可清除中断。 -
vstimecmp
(Virtual Supervisor Timer Compare)
• 功能:用于 VS-mode(Hypervisor 扩展)的定时器比较,触发 VSTIP 中断。条件为(time + htimedelta)
≥vstimecmp
。
• RV32 支持:通过vstimecmp
(低 32 位,0x24D
)和vstimecmph
(高 32 位,0x25D
)分两次访问。
• 中断行为:VSTIP 中断在hip
中为只读,由硬件设置,写入vstimecmp
大于(time + htimedelta)
可清除。
二、对现有寄存器的修改
-
mip
和mie
寄存器
• STIP/STIE 位:若stimecmp
存在,mip.STIP
变为只读(硬件驱动),原 M-mode 写入功能失效。 -
sip
和sie
寄存器
• STIP/STIE 位:直接反映stimecmp
触发的中断状态,由硬件控制。 -
hip
和hie
寄存器
• VSTIP/VSTIE 位:若vstimecmp
存在,hip.VSTIP
是hvip.VSTIP
和vstimecmp
信号的逻辑或。
三、权限控制与访问规则
-
mcounteren
寄存器
• TM 位:控制 S/VS-mode 对stimecmp
和vstimecmp
的访问权限。若TM=0
,非 M-mode 访问会触发非法指令异常。 -
hcounteren
寄存器
• TM 位:控制 VS-mode 对vstimecmp
的访问权限。若TM=0
,VS-mode 访问会触发虚拟指令异常(需mcounteren.TM=1
)。
四、环境配置寄存器支持
menvcfg
和henvcfg
• STCE 位(位 63 或 31):
◦menvcfg.STCE
:启用 S-mode 的stimecmp
和 VS-mode 的vstimecmp
。
◦henvcfg.STCE
:启用 VS-mode 的vstimecmp
。
• 默认行为:若 STCE=0,访问stimecmp
/vstimecmp
会触发异常,中断逻辑回退到无 Sstc 扩展的状态。
五、Hypervisor 扩展补充
- VS-mode 定时器中断
• 使用vstimecmp
比较(time + htimedelta)
触发 VSTIP 中断。
• Hypervisor 可通过 SBI 调用兼容旧 VS-mode 软件,同时新软件可直接操作vstimecmp
。
六、关键机制与注意事项
-
中断清除方式:
• 写入stimecmp
或vstimecmp
使其大于当前时间值以清除中断。 -
虚假中断处理:
• 若中断处理程序快速修改stimecmp
,可能因延迟导致虚假中断,需软件容忍。 -
兼容性:
• 保留 SBI 调用支持,确保旧 S/VS-mode 代码正常运行。
• 新软件可直接操作stimecmp
/vstimecmp
提升性能。
七、总结
Sstc 扩展通过 硬件级定时器中断委托,显著降低 S/VS-mode 对 M-mode 的依赖,减少上下文切换开销。其核心新增内容包括:
• 专用定时器比较寄存器(stimecmp
/vstimecmp
)。
• 中断状态与权限控制的硬件自动化。
• 环境配置寄存器(menvcfg
/henvcfg
)的启用机制。
• 对 Hypervisor 扩展的深度适配,支持虚拟化场景。
该扩展为实时系统和多任务环境提供了更高效的中断处理能力,同时保持向后兼容性。