1.1 通用整数寄存器 RISC-V 架构提供32个通用寄存器x0-x31,其中x0 有些特殊,x0 寄存器被设置为硬件连线的常数0,读恒为0,写无效,这个寄存器在一些地方很有作用,因为程序运行中常数0的使用频率非常高,所以专门用一个寄存器来存放常数0,并没有浪费寄存器数量,并且使得编译器工作更加简便,这一点也是RISC-V架构优雅...
如果这两位是 2'b11 的话,则表示该寄存器是只读寄存器;否则, 该寄存器既可以被读取,又可以被写入。地址位 [9 :8] 表示有权访问该寄存器的最 低特权层级。对要讨论的机器模式 CSR,这两位都是 2'b11。在表14 中列出了本 书会涉及的所有 CSR 寄存器。 表14 本书所涉及的 CSR 寄存器列表 表14 看起来有...
PC相对寻址,分支地址是PC和指令中常量之和。注: 「加载和存储对字节、半字、字或双字的访问有不同的版本」。 3.2 寄存器的用途 3.2.1 RISC-V的寄存器列表 3.2.2 RISC-V寄存器在汇编代码中使用 3.3 汇编指令 RISC-V有六种基本指令格式: R 类型指令,用于寄存器-寄存器操作I 型指令,用于短立即数和访存 load ...
这个过程是编译器帮我们实现,有一点需要注意的是我们移植的代码里面进中断后获取了中断的堆栈“csrrw sp,mscratch,sp”,返回时恢复了线程的堆栈指针“csrrw sp,mscratch,sp”中断堆栈指针初始值是在任务开始时存入mscratch寄存器的,如果采用C形式中断函数,中断堆栈的获取会在压栈操作之后,中断压入的堆栈是当前运...
对于中断模块设计,一种简单的方法就是当检测到中断(中断返回)信号时,先暂停整条流水线,设置跳转地址为中断入口地址,然后读、写必要的CSR寄存器(mstatus、mepc、mcause等),等读写完这些CSR寄存器后取消流水线暂停,这样处理器就可以从中断入口地址开始取指,进入中断服务程序。
基本 ISA 还指定了 32 个 CPU 寄存器(均为 32 位宽)以及程序计数器。唯一的特殊寄存器是x0,它总是读作0,就像以前的RISC ISA中实现的那样。尽管所有寄存器(表2中显示的一些寄存器)都可用于一般用途,但应用程序二进制接口(ABI)根据其调用约定为每个寄存器指定了用途。这意味着一些寄存器应该保存临时或已保存的...
中断(中断返回)本质上也是一种跳转,只不过还需要附加一些读写CSR寄存器的操作。 RISC-V中断分为两种类型,一种是同步中断,即ECALL、EBREAK等指令所产生的中断,另一种是异步中断,即GPIO、UART等外设产生的中断。 中断号保存在mcause寄存器中,最高位是 1 说明是同步异常,否则是中断 ...
PC寄存器模块所在的源文件:rtl/core/pc_reg.v PC寄存器模块的输入输出信号如下表所示: PC寄存器模块代码比较简单,直接贴出来: 第3行,PC寄存器的值恢复到原始值(复位后的值)有两种方式,第一种不用说了,就是复位信号有效。第二种是收到jtag模块发过来的复位信号。PC寄存器复位后的值为CpuResetAddr,即32’h0,可...
寄存器如下: 所有位全部是 0 是非法的 RV32I 指令,所有位全部是 1 的指令也是非法指令 立即数总是进行符号扩展,并不需要一个立即数版本的 sub sll(shift left logical)为右侧补0,srl为左侧补0,sra(shift right arithmetic)左侧补符号位。 slt(set less than):如果第一个操作数小于第二个操作数,它将目标寄...
RISC-V 架构支持 32 位或者 64 位的架构,32 位架构由 RV32 表示,其每个通用寄存器的宽度为 32 比特;64 位架构由 RV64 表示,其每个通用寄存器的宽度为 64 比特。RISC-V 架构的整数通用寄存器组,包含 32 个(I 架构)或者 16 个(E 架构)通用整数寄存器,其中整数寄存器 0 被预留为常数 0,其他的 ...