在RISC-V中,"csrs"和"csrw"是两种特殊的指令。"csrs"是"Read from a Control and Status Register"的缩写,意思是从控制和状态寄存器中读取数据。"csrw"是"Write to a Control and Status Register"的缩写,意思是向控制和状态寄存器中写入数据。 控制和状态寄存器(CSR)在RISC-V架构中用于各种不同的目的,例如...
在 RISC-V 里有专门的一组控制和状态寄存器(CSR),它们记录着内核运行的各种关键状态信息,像系统时间、时间周期、已执行指令数目等。比如说 “csrrw”(原子读 - 写控制寄存器)指令,当系统需要调整一些关键配置,像是切换处理器的工作模式,从用户模式切换到特权模式时,就能用这条指令精准地对相应的控制寄存器进行读写...
如:csrw mstatus, t0,将 t0 的值写入 mstatus。 ecall 请求更高级特权态,例如:从U模式请求到S模式,从S模式请求到M模式。 fence.i 用来清理 i-cache 的。 我们知道缓存是存储层级结构中提高访存速度的很重要一环。而 CPU 对物理内存所做的缓存又分成数据缓存(d-cache) 和指令缓存(i-cache) 两部分,分别...
csrw,把一个通用寄存器中的值写入 CSR 中。如:csrw mstatus, t0,将t0的值写入mstatus。 csrs,把 CSR 中指定的 bit 置 1。如:csrsi mstatus, (1 << 2),将mstatus的右起第 3 位置 1。 csrc,把 CSR 中指定的 bit 置 0。如:csrci mstatus, (1 << 2),将mstatus的右起第 3 位置 0。 csr...
实际上RISCV在实现系统指令集的时候,是支持多种模式的扩展的,这一系列的指令集通过Control and Status Registers (CSRs)来进行控制。 CSR地址是扩展了12位,也就是可以设计最大4096个指令。 通过下面的网站可以看到当前CSRs的实现状态。 代码语言:javascript ...
RISC-V CSR寄存器 CSR是控制状态寄存器,RISC-V中CSR寄存器,需要使用csrr、csrw、csrrw等特定指令进行访问。 M模式和S模式都有自己的CSR寄存器,但是大体上相同。下面列举一些常用的CSR。 M模式CSR寄存器 mstatus 状态寄存器,保存了全局中断使能状态和其他状态,例如切换
这里出现一个关键的指令csrw意思是写入状态控制寄存器。每个核心都有一系列状态控制寄存器,可以参考 RISCV 手册。下方列出的是mstatus状态寄存器的每个位的情况。 使FS置位,可以开启浮点运算(不开启的话使用浮点数会报错) 使MPIE置位,手册里的说法是,这个位储存中断前MIE的值,当我们从中断返回后MPIE会放到MIE中 ...
中断(中断返回)本质上也是一种跳转,只不过还需要附加一些读写CSR寄存器的操作。 RISC-V中断分为两种类型,一种是同步中断,即ECALL、EBREAK等指令所产生的中断,另一种是异步中断,即GPIO、UART等外设产生的中断。 中断号保存在mcause寄存器中,最高位是 1 说明是同步异常,否则是中断 ...
csrwCSR_MTVT2,t0 csrsCSR_MTVT2,0x1 其中irq_entry表示了非向量的处理过程。csrs CSR_MTVT2, 0x1该指令的解析如下: mtvt2[0] = 1 mtvt2[0]为0时,中断入口使用mtvec寄存器,mtvt2[0]为1时,中断入口为mtvt2[31:2]。 3.详细分析一下irq_entry ...