当前位置: 首页 > news >正文

全文 -- Chapter 5. “Smcsrind/Sscsrind“ Indirect CSR Access, Version 1.0 -- The RISC-V Inst Set Vol II

第5章 "Smcsrind/Sscsrind" 间接CSR访问,版本1.0

5.1. 引言

Smcsrind/Sscsrind是一个ISA扩展,它扩展了最初作为Smaia/Ssaia扩展一部分定义的间接CSR访问机制,旨在使其可供其他扩展使用,而不必对Smaia/Ssaia产生不必要的依赖。

此扩展带来两个好处:

  1. 提供了一种通过CSR访问寄存器数组的方式,无需在有限的CSR地址空间中分配大块区域。

  2. 使软件能够通过索引访问寄存器数组中的每一个寄存器,而无需为每个寄存器编写switch-case语句。

通过此扩展间接访问CSR时使用"选择值"(select values),这与使用标准CSR编号直接访问的方式不同。可通过一种方法访问的CSR,不一定能通过另一种方法访问。选择值构成一个独立的地址空间,与CSR编号不同,也与Sdtrig扩展中的tselect值不同。如果一个CSR既可直接访问又可间接访问,则该CSR的选择值与其CSR编号无关。

此外,机器级( Machine-level )和监管级( Supervisor-level )的选择值彼此是独立的地址空间;但是,一个扩展可以定义具有相同选择值的机器级和监管级CSR彼此为部分或完全别名关系。这通常用于可以被从机器级委托到监管级的CSR。

机器级扩展Smcsrind包含了Hart在所有特权级别下新增的所有CSR以及所有行为修改。对于监管级环境,扩展Sscsrind本质上与Smcsrind相同,只是不包括机器级CSR以及监管级无法直接看到的行为。

5.2. 机器级CSR

编号特权级宽度名称描述
0x350MRWXLENmiselect机器间接寄存器选择器
0x351MRWXLENmireg机器间接寄存器别名
0x352MRWXLENmireg2机器间接寄存器别名2
0x353MRWXLENmireg3机器间接寄存器别名3
0x355MRWXLENmireg4机器间接寄存器别名4
0x356MRWXLENmireg5机器间接寄存器别名5
0x357MRWXLENmireg6机器间接寄存器别名6

注:miregCSR编号不连续,因为miph是CSR编号0x354。*

上表中列出的CSR提供了一个间接访问寄存器状态的窗口。miselect的值决定了在读取或写入每个机器间接别名CSR(mireg*)时访问哪个寄存器。miselect值的范围被分配给相关的扩展,这些扩展针对每个miselect值,规定可通过每个miregi寄存器访问的寄存器状态。miselect是一个WARL寄存器。

miselect寄存器实现的位数至少足以支持所有已实现的miselect值(对应已实现的使用miselect/mireg*间接访问寄存器状态的扩展)。如果没有已实现的扩展使用miselect,该寄存器可能为只读零。

最高有效位(第XLEN-1位)为1的miselect值仅用于自定义用途,可能是为了通过别名CSR访问自定义寄存器。最高有效位为0的miselect值仅用于标准用途,并在被分配给标准架构扩展之前处于保留状态。如果XLEN改变,miselect的最高有效位将移动到新的位置,并保留其之前的值。

实现不需要支持任何自定义的miselect值。

miselect保存一个值,而该值在机器模式下未实现时(从M模式访问mireg*),其行为是未指定的(UNSPECIFIED)。

预计实现通常会对此类访问引发非法指令异常,以便将其识别为软件错误。平台规范、配置文件规范和/或特权ISA规范可能对此类访问的行为施加更多限制。

miselect保存一个在已分配且已实现范围内的数字时,尝试访问mireg*会导致特定行为,该行为对于每个miselectmiregi的组合,由分配了该miselect值的扩展定义。

通常,每个miregi将访问寄存器状态、访问只读0状态或引发非法指令异常。

对于RV32,如果一个扩展将一个间接访问的寄存器定义为64位宽,建议通过miregmireg2mireg3之一访问寄存器的低32位,同时分别通过mireg4mireg5mireg6访问高32位。

定义了六个*ireg*寄存器,以确保涵盖开发中扩展的需求,并留有一定的增长空间。例如,对于与计数器X相关联的siselect值,sireg/sireg2可用于访问mhpmcounterX/mhpmeventX,而sireg4/sireg5可访问mhpmcounterXh/mhpmeventXh。六个*ireg*寄存器允许每个索引值(*iselect)最多访问3个仅用于RV32的CSR数组,或者在不限于RV32的CSR时最多访问6个CSR数组。

5.3. 监管级CSR

编号特权级宽度名称描述
0x150SRWXLENsiselect监管间接寄存器选择器
0x151SRWXLENsireg监管间接寄存器别名
0x152SRWXLENsireg2监管间接寄存器别名2
0x153SRWXLENsireg3监管间接寄存器别名3
0x155SRWXLENsireg4监管间接寄存器别名4
0x156SRWXLENsireg5监管间接寄存器别名5
0x157SRWXLENsireg6监管间接寄存器别名6

如果实现了S模式,则需要上表中的CSR。

siselect寄存器至少支持0..0xFFF的值范围。未来的扩展可能定义超出此最小范围的值范围。只有当实现了这样的扩展时,才要求siselect支持更大的值。

要求siselect具有0–0xFFF的范围,即使该空间的大部分或全部可能被保留或不可访问,这允许M模式在此已实现范围内模拟间接访问的寄存器,包括未来可能标准化的寄存器。

最高有效位(第XLEN-1位)为1的siselect值仅用于自定义用途,可能是为了通过别名CSR访问自定义寄存器。最高有效位为0的siselect值仅用于标准用途,并在被分配给标准架构扩展之前处于保留状态。如果XLEN改变,siselect的最高有效位将移动到新的位置,并保留其之前的值。

siselect保存一个在监管级未实现的值时,从M模式或S模式访问sireg*的行为是未指定的

建议实现对此类访问引发非法指令异常,以便于(由M模式)对这些访问进行可能的模拟。

如果机器级已为S模式禁用了某个扩展,例如通过CSRmenvcfg中某些字段的设置,则认为该扩展在监管级未实现。

否则,当siselect保存一个在标准定义且已实现的范围内的数字时,从M模式或S模式尝试访问sireg*会导致特定行为,该行为对于每个siselectsiregi的组合,由分配了该siselect值的扩展定义。

通常,每个siregi将访问寄存器状态、访问只读0状态,或者(除非在虚拟机中执行,下一节将介绍)引发非法指令异常。

请注意,siselectsireg*的宽度始终是当前的XLEN,而不是SXLEN。因此,例如,如果MXLEN = 64 且 SXLEN = 32,则这些寄存器在当前特权模式为M(运行RV64代码)时是64位,但在特权模式为S(RV32代码)时是32位。

5.4. 虚拟监管级CSR

编号特权级宽度名称描述
0x250HRWXLENvsiselect虚拟监管间接寄存器选择器
0x251HRWXLENvsireg虚拟监管间接寄存器别名
0x252HRWXLENvsireg2虚拟监管间接寄存器别名2
0x253HRWXLENvsireg3虚拟监管间接寄存器别名3
0x255HRWXLENvsireg4虚拟监管间接寄存器别名4
0x256HRWXLENvsireg5虚拟监管间接寄存器别名5
0x257HRWXLENvsireg6虚拟监管间接寄存器别名6

如果实现了hypervisor扩展,则需要上表中的CSR。这些VS CSR都与监管级CSR相对应,并在虚拟机中(在VS模式或VU模式下)执行时替代那些监管级CSR。

vsiselect寄存器至少支持0..0xFFF的值范围。未来的扩展可能定义超出此最小范围的值范围。只有当实现了这样的扩展时,才要求vsiselect支持更大的值。

要求vsiselect具有0–0xFFF的范围,即使该空间的大部分或全部可能被保留或不可访问,这允许hypervisor在此已实现范围内模拟间接访问的寄存器,包括未来可能标准化的寄存器。

更一般地,建议vsiselectsiselect以相同的位数实现。这也避免了因vsiselectsiselect宽度之间的可观察差异而产生虚拟化漏洞。

最高有效位(第XLEN-1位)为1的vsiselect值仅用于自定义用途,可能是为了通过别名CSR访问自定义寄存器。最高有效位为0的vsiselect值仅用于标准用途,并在被分配给标准架构扩展之前处于保留状态。如果XLEN改变,vsiselect的最高有效位将移动到新的位置,并保留其之前的值。

对于别名CSRsireg*vsireg*,hypervisor扩展中关于何时引发虚拟指令异常的常规规则(基于指令是否是HS限定的)不适用。取而代之的是本节中为siregvsireg给出的规则,除非被下一节中指定的要求所覆盖。当也实现了扩展Smstateen时,下一节的要求优先于本节。

对于从VS模式或VU模式尝试直接访问vsiselectvsireg*,或从VU模式尝试访问siselectsireg*,会引发虚拟指令异常。

vsiselect保存一个在HS级未实现的值时,从M模式或HS模式访问vsireg*,或从VS模式访问sireg*(实际上是vsireg*),其行为是未指定的

建议实现对此类访问引发非法指令异常,以便于(由M模式)对这些访问进行可能的模拟。

否则,当vsiselect保存一个在标准定义且已实现范围内的数字时,尝试从一个足够特权的模式访问vsireg*,或从VS模式访问sireg*(实际上是vsireg*),会导致特定行为,该行为对于每个vsiselectvsiregi的组合,由分配了该vsiselect值的扩展定义。

通常,每个vsiregi将访问寄存器状态、访问只读0状态,或引发异常(非法指令异常,或者对于来自VS模式的特定访问,引发虚拟指令异常)。当vsiselect保存一个在HS级已实现但在VS级未实现的值时,从VS模式尝试访问sireg*(实际上是vsireg*)通常会引发虚拟指令异常。但可能存在特定于扩展的情况,不同的行为更合适。

siselectsireg*类似,vsiselectvsireg*的宽度始终是当前的XLEN,而不是VSXLEN。因此,例如,如果HSXLEN = 64 且 VSXLEN = 32,则这些寄存器在HS模式下的hypervisor访问时(运行RV64代码)是64位,但对于VS模式下的客户操作系统(RV32代码)是32位。

5.5. 通过状态启用CSR进行访问控制

如果扩展Smstateen与Smcsrind一起实现,状态启用寄存器mstateen0的第60位控制对siselectsireg*vsiselectvsireg*的访问。当mstateen0[60] = 0时,尝试从比特权低于M模式的模式访问这些CSR之一会导致非法指令异常。与往常一样,状态启用CSR不影响在M模式下对任何状态的访问性,只影响更低特权的模式。更多解释请参阅扩展Smstateen的文档。

其他扩展可能规定某些mstateen位控制通过siselect + sireg*和/或vsiselect + vsireg*间接访问的寄存器的访问。但是,无论任何其他mstateen位如何,如果mstateen0[60] = 1,则如上节所述,对于所有来自VS模式或VU模式直接访问vsiselectvsireg*的尝试,以及所有来自VU模式访问siselectsireg*的尝试,都会引发虚拟指令异常。

如果实现了hypervisor扩展,相同的位也在hypervisor CSRhstateen0中定义,但只控制对siselectsireg*(实际上是vsiselectvsireg*)的访问,这些是可能在VS或VU模式下执行的虚拟机可以访问的状态。当hstateen0[60]=0mstateen0[60]=1时,无论vsiselect的值或任何其他mstateen位的值如何,所有来自VS或VU模式访问siselectsireg*的尝试都会引发虚拟指令异常,而不是非法指令异常。

扩展Ssstateen被定义为Smstateen的监管级视图。因此,Sscsrind和Ssstateen的组合包含了上面为hstateen0定义的位,但不包括为mstateen0定义的位,因为机器级CSR对监管级不可见。

为未来可能的"Uscsrind"扩展保留了CSR地址空间,该扩展将间接CSR访问扩展到用户模式。

http://www.jsqmd.com/news/313608/

相关文章:

  • TestOps实战:如何让测试成为‘质量文化的载体’
  • 大数据领域数据分片:实现数据均衡的秘诀
  • ‌从手动脚本到声明式自治:Kubernetes Operator如何重塑测试环境管理
  • CI/CD中测试结果对比的价值与挑战
  • 从测试用例到自动化数据生成:JSON Schema的实战指南
  • 保姆级教程:用嘎嘎降AI把论文AI率从90%降到10%
  • LLM在AI Agent中的文本风格迁移应用
  • DeepSeek写的论文AI率太高?这5款工具一键搞定
  • 2026年养老巡检机器人关键技术解析与主流解决方案综述
  • 2026年8款降AI率工具实测推荐,亲测有效
  • DeepSeek写的论文AI率90%?实测这个方法降到15%以内
  • 知产代理必看:用AI工具批量生成软著材料,成本直降60%
  • SCI论文降AI率:5款学术级工具深度推荐
  • 2026软著申请攻略:30分钟搞定全套材料的AI工具实测
  • 毕业论文AI率太高被退回?这款工具实测降到10%
  • 知网AIGC检测不通过?这7款工具帮你稳过
  • SpringMVC运行流 从请求发起到底层执行
  • 全网热议!2026年二次元测量仪工厂TOP5推荐榜单,探寻最佳选择
  • 【零基础学MySQL】第二章:SQL类型 - 详解
  • 临床执医通关秘籍,我们选择哪一个医考机构?
  • 2026主管护师相关专业知识怎么备考?从基础到体系,一站式夯实备考功底
  • 微客云外卖霸王餐系统怎么样?有用过的吗
  • webpack - 常用的 CSS 加载器(webpack与其常见loader加载器使用方式)
  • 中医执助考试备考难?全网深度测评,帮你锁定最强机构!
  • 嘎嘎降AI vs 比话降AI:知网/维普/万方实测对比,选哪个更划算
  • 2026主管护师相关专业知识怎么备考?应试技巧+高频考点,快速提分通关攻略
  • 论文降AI不想被收录?这款工具承诺不公开不入库
  • 2026执业药师考试备考平台推荐:从口碑排行到性价比,这篇测评全说清
  • DeepSeek写的论文AI率太高?5分钟降到知网合格线以下
  • 2026执业药师考试备考平台推荐:考生真实实测对比,这份推荐清单很靠谱!