CSR指令不会引起PC跳转,但是可能产生非法指令异常(illegal-instruction exception)。比如: 对只读CSR寄存器进行写入。 未使用足够的特权级别访问相应的寄存器。 M态下访问地址为0x7B0-0x7BF的寄存器,这些寄存器只允许在Debug模式下被访问。 在RV64架构下访问64比特位宽的CSR寄存器的高32比特地址(这些地址
对标准CSRs的读取不会造成副作用(side effect),但写入则有可能。 2.1 CSR地址映射协定 标准RISC-V ISA为多达4096个的CSRs预留了一个12bit地编码空间(csr[11:0])。按照协定,CSR地址的高4bits(csr[11:0])用于编码CSRs在各个权级上的可读写性,见Table 2.1。最高2bit(csr[11:0])用于编码该寄存器是可读写...
异常值寄存器,例如发生异常时,保存出错的地址。 S模式CSR寄存器 S模式的CSR和M模式基本上是一样的,只不过将第一个字母m改为了s,例如登录后复制mcause改为了登录后复制scause,登录后复制mvtal改为了登录后复制svtal。它们的功能基本相同,这里就不再赘述了。 需要注意的是,S模式除了拥有M模式相同功能的CSR外,另...
CSR地址映射编码约定 RISC-V ISA使用12bits编码空间定义了最多4096个CSRs,其中[11:10]用于表示读写属性,[9:8]用于表示对应的特权等级,剩余[7:0]作为内部编码。 CSR访问异常类型 访问不存在的CSR会引发illegal instruction exception 访问不适当特权级别的CSR也会引发illegal instruction exception 写入只读寄存器也会...
RISC-V 定义了控制和状态寄存器CSR (Control and Status Register),用于配置或记录处理器的运行状态, RISC-V 特权指令就是通过控制CSR来实现的。CSR 使用专有的 12 位地址空间,因此理论上能够支持最多 4096 个 CSR。但实际上,这个地址空间大部分是空的,RISC-V 手册中实际只定义了数十个 CSR,访问不存在的 CSR...
用到硬件浮点的时候,更是要保存32个浮点寄存器。除了上述的寄存器,移植还要关心的是几个csr寄存器mstatus,mepc。正常情况下大部分csr只能在机器模式下操作(WCH的v3和v4内核支持机器模式和用户模式)。mstatus中,MIE为中断使能,当进中断时MPIE更新为MIE,返回时MIE更新为MPIE。MPP用于保存进中断之前的特权模式,...
csrrw ra, CSR_JALMNXTI, ra 1. 翻阅Bumblebee内核指令架构手册.pdf ,对这条指令是这么解释的: Bumblebee 内核定义了 jalmnxti 寄存器用于减少中断延迟,加速中断咬尾。 jalmnxti 除了包含 mnxti 的开启中断使能,处理下一个中断,返回下一个中断的入口地址等功能之外,还有跳转至中断 handler 的...
对于RISC-V的特权架构而言,异常处理是其不可或缺的一环,深入理解其中的流程,实质上就是掌握在特权模式下如何利用CSRs(控制状态寄存器组)来处理异常。◆ RISC-V的权限模式 用户模式提供低级访问权限, supervisor模式支持特权操作, machine模式处理异常。RISC-V的权限模式包括:User(用户)模式:在这种模式下,...
RISC-V架构定义了一些控制和状态寄存器(Control and Status Register,CSR),用于配置或记录一些运行的状态。CSR寄存器是处理器核内部的寄存器,使用其自己的地址编码空间和存储器寻址的地址区间完全无关系。 CSR寄存器的访问采用专用的CSR指令,包括CSRRW、CSRRS、CSRRC、CSRRWI、CSRRSI以及CSRRCI指令。