在RV64架构下访问64比特位宽的CSR寄存器的高32比特地址(这些地址仅保留给RV32架构访问)。 Zicsr扩展中定义的CSR指令如下: 指令描述 CSRRW 交换CSR寄存器与通用寄存器的值1.读取CSR旧值,零扩展之后保存到rd。2.将rs1寄存器的值写入CSR寄存器。如果rd=0,则不会读取CSR寄存器,也不会产生任何由于读取CSR寄存器带来
R-type是最常用的指令类型,表示寄存器-寄存器操作,指令的操作由7bit的opcode、3位的func3、7位的func7 共同决定的(func3字段正好3位,func7字段正好7位);R-type包含有三个寄存器(两个源寄存器rs1与rs2,一个目的寄存器rd),寄存器位宽为5bit,可以寻址32个寄存器(指令集定义的通用寄存器个数2^5),由这些小细节...
比较指令:SLT, SLTU 加载和存储指令:LW, SW, LH, SH, LB, SB 控制流指令:JAL, JALR, BEQ, BNE, BLT, BGE 特权指令集合 比如读写csr的指令等 csr 访问指令: | imm | rs1 | funct3 | rd | opcode | 低位, 二进制 字段描述: 31 - 20:imm[11:0](12 位立即数) 功能:表示 CSR 的地址,用于...
JALR指令会把12位立即数和源寄存器相加,并把相加结果末位清零,作为新的跳转地址。同时和JAL指令一样,也会把紧随其后的那条指令地址,存入目标寄存器中。 5.4 其他指令 除了内存地址空间和通用寄存器地址空间外,RISC-V 还定义了一个独立的控制和状态寄存器地址空间(Control Status Register)每个处理器实现的CSR会因设计...
CSRs[csr] &= ~x[rs1] 清除控制状态寄存器 (Control and Status Register Clear). 伪指令(Pesudoinstruction), RV32I and RV64I. 对于x[rs1]中每一个为 1 的位,把控制状态寄存器 csr 的的对应位清零,等同于 csrrc x0, csr, rs1. csrr 读取一个 CSR 的值到通用寄存器。 如:csrr t0, mstatu...
I-typed 具有两个寄存器地址和一个立即数,其中一个是源寄存器 rs1,一个是目的寄存器 rd,指令的高 12 位是立即数。指令的操作仅由 7 位的 opcode 和 3 位的funct3两者决定。值得注意的是,在执行运算时需要先把 12 位立即数扩展到 32 位之后再进行运算。I-typed 指令相当于将 R-typed 指令格式中的一个...
简单起见,我们将不支持 CPU 流水线中的计时器、中断和异常。因此,CSR 和特权级别也无需实现。因此, RISC-V 特权 ISA不包含在 Pequeno 的当前实现中。 设计CPU 最简单的方法是非流水线方式。让我们看看非流水线 RISC CPU 的几种设计方法,并了解其缺点。
对于CSRRS指令和CSRRC指令,如果rs1=x0,那么指令将根本不会去写CSR,因此应 该不会产生任何由于写CSR产生的副作用(译者注:某些特殊CSR检测是否有人尝试写入, 一旦有写入,则执行某些动作。这和写入什么值没什么关系),例如试图访问一个只读CSR 时产生一个非法指令异常。注意如果rs1寄存器包含的值是0,而不是rs1=x...
2.3 与中断相关的指令 CSR Read Write(csrrw) csrrw dst, csr, src:将指定的CSR寄存器写入dst,同时将src的值写入CSR。 CSR Read(csrr) csrr dst,csr:读一个CSR寄存器到dst。 CSR Clear(csrc) csrc(i) csr, rs1:将指定的位清零。 CSR Set(csrs) ...