从零开始学RISC-V之CSR访问

背景介绍

CSR,即Control and Status Register,控制与状态寄存器,属于CPU自带的一类寄存器(注意这里需要跟前文所述的通用数据寄存器区别开来,后文对这种寄存器称之为数据寄存器,以示区分)。在机器模式(Machine Mode,本项目只支持该模式)下这些存储器主要包括以下六类:

  • 处理器信息相关:例如处理器的厂商信息,架构信息,核心数等等,是一个芯片自身的I固有信息。
  • 中断配置相关:例如中断开关以及中断入口等信息。
  • 中断响应相关:例如中断原因,中断返回地址等信息。
  • 存储器保护相关:设置不同地址空间的存储器的访问属性,例如可读可写可执行等等。
  • 性能统计相关和调试接口相关

CSR的访问与当前指令,或者说程序处于何种模式密切相关,不同模式下所能访问的CSR数量都不同。如果强行访问一个本不应该在该模式下访问的CSR则会触发非法指令的异常。所以在设计CSR访问逻辑时,需要知道该CSR允许在哪(些)种模式下可以访问,而这需要仔细研读RISC-V SPEC相关的部分。除此之外,一条CSR指令并不会比一条ADD指令更复杂。同样可以套用前面总结的设计模板

开始Coding

与先前所实现的指令类似,实现CSR指令,需要以下几个EXU子模块的协同配合:

  • exu_decode:指令解码模块,负责解析具体的访存指令。
  • exu_regfile:寄存器文件模块,源操作数需要从此模块读出,读存储器的结果需要写回到此模块。
  • exu_alu:指令执行模块,具体指访存地址的生成,以及其他控制信号。
  • exu_wbck:结果写回模块,负责结果写回

基于上述划分标准,以下将详细介绍各个模块的设计细节。

指令译码

首先,我们需要从riscv-spec上找到CSR指令所对

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值