从零开始实现一个基于RISC-V的流水线处理器 (1) :RISC-V指令集架构详解

本文从零开始介绍基于RISC-V的流水线处理器,重点解析RV32I指令集,包括R-Type、I-Type、J-Type、B-Type以及Load & Store指令,为微处理器设计打下基础。
摘要由CSDN通过智能技术生成

基于RISC-V的流水线处理器

RISC-V是一个基于精简指令集原则的开源指令集架构。它由加州大学伯克利分校的David Patterson教授领导下的小组完成,至今已成为RISC处理器中一股强劲的新生力量。

至今github上已有多款优秀的基于RISC-V指令集的微处理器项目被发布,如蜂鸟E203RocketChip等,但它们所涉及的知识层级较深,初学者很难迅速上手。而CSDN上也没有找到类似的RISC-V处理器的项目,因此笔者决定从零开始,由基础指令集做起,实现一款基于RISC-V指令集的微处理器。

RISC-V指令集

实现一款处理器,首先也是最重要的就是要确定处理器的指令集架构。

RISC-V指令集可以分为以下几个子集:

  • RV32I:基本整数集,包括整数计算指令,LOAD/STORE,以及控制指令。RV32I拥有32位寻址空间,32个32位寄存器。
  • RV32E:指令与RV32I相同,但是寄存器数量变为16个,用于嵌入式环境。
  • RV64I:整数指令,拥有64位寻址空间,32个64位寄存器。
  • RV128I:整数指令,拥有128位寻址空间,32个128位寄存器。

上述子集是RISC-V的基本指令集。在实际设计中,我们可以根据需要加入如下的扩展指令集:

  • M:标准乘法和除法扩展,增加了乘法和除法的指令,并把结果保存在整数寄存器。
  • A:标准原子指令扩展,增加了原子的读,修改,以及写存储器的指令。
  • F:标准单精度浮点扩展,增加了浮点寄存器,单精度计算指令,以及单精度的LOAD/STORE指令。
  • D:标准双精度浮点扩展,同样增加了浮点寄存器,且增加了双精度计算指令,双精度的LOAD/STORE指令。

上述均为RISC-V基金会认证的扩展指令集,此外还有V/P/T等处于草稿修改阶段的扩展指令集,这里就不再赘述了。

RV32I

在本次设计中,我们要实现的是基于最基本的整数指令集——RV32I的微处理器。就让我们从RV32I的具体指令格式看起。

下图展示了RV32I的基本指令格式。为了简化译码过程,源寄存器(rs1 和 rs2)和目标寄存器(rd)在RISC-V ISA 的所有指令格式中的位置保持一致。立即数被压缩在指令中最左边的可用位,并已经分配好,从而降低硬件复杂度。特别的,对于所有的立即数,指令的 31 位总是符号位,这样可以加速符号扩展电路。
RISC-V

下面我们将对各类型的指令进行具体的解释。

R-Type

R-Type的指令为寄存器-寄存器指令,其格式如下图所示。R-Type指令的特点是2个源操作数和目标操作数对象都是寄存器,在实际执行过程中需要经历寄存器的写回。
R-Type

Instruction Description F
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值