在RV64架构下访问64比特位宽的CSR寄存器的高32比特地址(这些地址仅保留给RV32架构访问)。 Zicsr扩展中定义的CSR指令如下: 指令描述 CSRRW 交换CSR寄存器与通用寄存器的值1.读取CSR旧值,零扩展之后保存到rd。2.将rs1寄存器的值写入CSR寄存器。如果rd=0,则不会读取CSR寄存器,也不会产生任何由于读取CSR寄存器带来
B-typed 的指令操作由 7 位 opcode 和 3 位 funct3 决定,指令中具有两个源寄存器和一个 12 位的立即数,该立即数构成是指令的第32位是 imm[12]、第7位是imm[11]、25 到 30 是 imm[10:5]、8 到 11 位是 imm[4:1],同样的,在执行运算时需要把12 位立即数扩展到 32 位,然后再进行运算。B-type...
逻辑指令:AND, OR, XOR 移位指令:SLL, SRL, SRA 比较指令:SLT, SLTU 加载和存储指令:LW, SW, LH, SH, LB, SB 控制流指令:JAL, JALR, BEQ, BNE, BLT, BGE 特权指令集合 比如读写csr的指令等 csr 访问指令: | imm | rs1 | funct3 | rd | opcode | 低位, 二进制 字段描述: 31 - 20:imm[...
(1) 提供读功能给执行模块, 提供写功能给wb模块,完成CSR相关指令(包括csrrw,csrrwi, csrrs, csrrsi, csrrc, csrrci等)的读写操作。 (2) 从clint接收中断信息,并更新到mip寄存器,并更新给ctrl模块,ctrl模块通知ifu跳转到mtvec指定的地址。 (3) 提供读写功能给ctrl模块,用于异常和中断的处理; 2.3 CSR模块的...
CSR:控制状态寄存器 机器模式最重要的特性是拦截和处理异常(不寻常的运行时事件)的能力。 RISC-V 将 异常分为两类。 同步异常:这类异常在指令执行期间产生 如访问了无效的存储器地址 执行了具有无效操作码的指令 中断:它是与指令流异步的外部事件,比如键盘输入。
RISC-V体系结构可以在这个基础指令集上进行扩展:RV64I,这是64位的基础指令扩展;RV32M是乘法指令扩展...
看起来是扩展了一个CSR寄存器,实际上是一条指令,而且这条指令的功能还挺复杂。 代码里写的是 csrrw ra, CSR_JALMNXTI, ra,实际上汇编器看到的是 csrrw ra, 0x7EE, ra,CSR_JALMNXTI 是个宏,定义语句 #define CSR_PUSHMCAUSE 0x7EE...
下面理解一下中断的处理,通过csrrw ra, CSR_JALMNXTI, ra该指令进行分析。 不难发现,这个是个芯来自定义扩展指令,CSR_JALMNXTI寄存器通过gdb解析可以看到如下的数据 其中0x7ed则是该寄存器的地址。 那么一条指令是如何实现中断的处理的呢? 实际上该指令首先会判断当前eclic中是否有挂起未处理的中断,如果没有,那...
RISC-V CSR寄存器 CSR是控制状态寄存器,RISC-V中CSR寄存器,需要使用csrr、csrw、csrrw等特定指令进行访问。 M模式和S模式都有自己的CSR寄存器,但是大体上相同。下面列举一些常用的CSR。 M模式CSR寄存器 登录后复制mstatus 状态寄存器,保存了全局中断使能状态和其他状态,例如切换模式前,保存当前模式。