LTspice仿真报错Timestep too small?5种实测有效的解决方法(附详细参数配置)

核心内容摘要

Qwen3-ASR-0.6B在教育领域的语音识别应用
单PWM加移相控制谐振型双有源桥变换器(DAB SRC)闭环仿真模型探索

HY-MT1.5-1.8B翻译模型部署避坑指南:常见问题与解决方案

Smcsrind/Sscsrind 间接CSR访问版本

1.

05.

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

此扩展带来两个好处提供了一种通过CSR访问寄存器数组的方式无需在有限的CSR地址空间中分配大块区域。

使软件能够通过索引访问寄存器数组中的每一个寄存器而无需为每个寄存器编写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.

机器级CSR编号特权级宽度名称描述0x350MRWXLENmiselect机器间接寄存器选择器0x351MRWXLENmireg机器间接寄存器别名0x352MRWXLENmir

机器间接寄存器别名20x353MRWXLENmir

机器间接寄存器别名30x355MRWXLENmir

机器间接寄存器别名40x356MRWXLENmir

机器间接寄存器别名50x357MRWXLENmir

机器间接寄存器别名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*会导致特定行为该行为对于每个miselect和miregi的组合由分配了该miselect值的扩展定义。

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

对于RV32如果一个扩展将一个间接访问的寄存器定义为64位宽建议通过mireg、mir

或mir

之一访问寄存器的低32位同时分别通过mireg

mir

或mir

访问高32位。

定义了六个*ireg*寄存器以确保涵盖开发中扩展的需求并留有一定的增长空间。

例如对于与计数器X相关联的siselect值sireg/sir

可用于访问mhpmcounterX/mhpmeventX而sir

/sir

可访问mhpmcounterXh/mhpmeventXh。

六个*ireg*寄存器允许每个索引值(*iselect)最多访问3个仅用于RV32的CSR数组或者在不限于RV32的CSR时最多访问6个CSR数组。

5.

监管级CSR编号特权级宽度名称描述0x150SRWXLENsiselect监管间接寄存器选择器0x151SRWXLENsireg监管间接寄存器别名0x152SRWXLENsir

监管间接寄存器别名20x153SRWXLENsir

监管间接寄存器别名30x155SRWXLENsir

监管间接寄存器别名40x156SRWXLENsir

监管间接寄存器别名50x157SRWXLENsir

监管间接寄存器别名6如果实现了S模式则需要上表中的CSR。

siselect寄存器至少支持

.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*会导致特定行为该行为对于每个siselect和siregi的组合由分配了该siselect值的扩展定义。

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

请注意siselect和sireg*的宽度始终是当前的XLEN而不是SXLEN。

因此例如如果MXLEN 64 且 SXLEN 32则这些寄存器在当前特权模式为M运行RV64代码时是64位但在特权模式为SRV32代码时是32位。

5.

虚拟监管级CSR编号特权级宽度名称描述0x250HRWXLENvsiselect虚拟监管间接寄存器选择器0x251HRWXLENvsireg虚拟监管间接寄存器别名0x252HRWXLENvsir

虚拟监管间接寄存器别名20x253HRWXLENvsir

虚拟监管间接寄存器别名30x255HRWXLENvsir

虚拟监管间接寄存器别名40x256HRWXLENvsir

虚拟监管间接寄存器别名50x257HRWXLENvsir

虚拟监管间接寄存器别名6如果实现了hypervisor扩展则需要上表中的CSR。

这些VS CSR都与监管级CSR相对应并在虚拟机中在VS模式或VU模式下执行时替代那些监管级CSR。

vsiselect寄存器至少支持

.0xFFF的值范围。

未来的扩展可能定义超出此最小范围的值范围。

只有当实现了这样的扩展时才要求vsiselect支持更大的值。

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

更一般地建议vsiselect和siselect以相同的位数实现。

这也避免了因vsiselect和siselect宽度之间的可观察差异而产生虚拟化漏洞。

最高有效位第XLEN-1位为1的vsiselect值仅用于自定义用途可能是为了通过别名CSR访问自定义寄存器。

最高有效位为0的vsiselect值仅用于标准用途并在被分配给标准架构扩展之前处于保留状态。

如果XLEN改变vsiselect的最高有效位将移动到新的位置并保留其之前的值。

对于别名CSRsireg*和vsireg*hypervisor扩展中关于何时引发虚拟指令异常的常规规则基于指令是否是HS限定的不适用。

取而代之的是本节中为sireg和vsireg给出的规则除非被下一节中指定的要求所覆盖。

当也实现了扩展Smstateen时下一节的要求优先于本节。

对于从VS模式或VU模式尝试直接访问vsiselect或vsireg*或从VU模式尝试访问siselect或sireg*会引发虚拟指令异常。

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

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

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

通常每个vsiregi将访问寄存器状态、访问只读0状态或引发异常非法指令异常或者对于来自VS模式的特定访问引发虚拟指令异常。

当vsiselect保存一个在HS级已实现但在VS级未实现的值时从VS模式尝试访问sireg*实际上是vsireg*通常会引发虚拟指令异常。

但可能存在特定于扩展的情况不同的行为更合适。

与siselect和sireg*类似vsiselect和vsireg*的宽度始终是当前的XLEN而不是VSXLEN。

因此例如如果HSXLEN 64 且 VSXLEN 32则这些寄存器在HS模式下的hypervisor访问时运行RV64代码是64位但对于VS模式下的客户操作系统RV32代码是32位。

5.

通过状态启用CSR进行访问控制如果扩展Smstateen与Smcsrind一起实现状态启用寄存器mstateen0的第60位控制对siselect、sireg*、vsiselect和vsireg*的访问。

当mstateen0[60] 0时尝试从比特权低于M模式的模式访问这些CSR之一会导致非法指令异常。

与往常一样状态启用CSR不影响在M模式下对任何状态的访问性只影响更低特权的模式。

更多解释请参阅扩展Smstateen的文档。

其他扩展可能规定某些mstateen位控制通过siselect sireg*和/或vsiselect vsireg*间接访问的寄存器的访问。

但是无论任何其他mstateen位如何如果mstateen0[60] 1则如上节所述对于所有来自VS模式或VU模式直接访问vsiselect或vsireg*的尝试以及所有来自VU模式访问siselect或sireg*的尝试都会引发虚拟指令异常。

如果实现了hypervisor扩展相同的位也在hypervisor CSRhstateen0中定义但只控制对siselect和sireg*实际上是vsiselect和vsireg*的访问这些是可能在VS或VU模式下执行的虚拟机可以访问的状态。

当hstateen0[60]0且mstateen0[60]1时无论vsiselect的值或任何其他mstateen位的值如何所有来自VS或VU模式访问siselect或sireg*的尝试都会引发虚拟指令异常而不是非法指令异常。

扩展Ssstateen被定义为Smstateen的监管级视图。

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

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

78赛进13观看视频-78赛进13观看视频应用

百度百家号客服电话人工服务

123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123