一个简单的 RISC-V CPU 设计与实现

本文详细介绍了RISC-V CPU的设计与实现过程,包括RV32I、RV64I、M整数乘除扩展和C压缩指令集。使用Verilog进行硬件描述,涉及流水线设计、中断处理、CSR寄存器以及控制信号的生成。通过参考多个开源项目和官方文档,为读者提供了一个理解RISC-V架构和实现的全面指南。
摘要由CSDN通过智能技术生成

一个简单的 RISC-V CPU 设计与实现

之前写的RISCV五级流水CPU设计不够详细,本篇算是一个补充。

RISC-V 指令集介绍

  • 除压缩扩展外,所有指令均为32bits长
  • 压缩扩展指令为16bits长

RV32I 基础整数指令集

  • 32个32bits通用寄存器,x0 - x31
    • x0 零寄存器 zero
    • x1 返回地址 ra
    • x2 栈指针 sp
    • x3 全局指针 gp
    • x4 线程指针 tp
    • x5 - x7 临时寄存器 t0 - t2
    • x8 保存寄存器 s0 帧指针 fp
    • x9 保存寄存器 s1
    • x10 - x17 参数寄存器 a0 - a7
    • x18 - x27 保存寄存器 s2 - s11
    • x28 - x31 临时寄存器 t3 - t6
  • 32bits的PC寄存器
    在这里插入图片描述
  • 4类/6种指令类型
    • 用于寄存器-寄存器操作的R型
    • 用于寄存器-立即数操作的I型
    • 用于STORE操作的S型
      • 用于分支操作的B型
    • 用于立即数操作的U型
      • 用于跳转操作的J型
        在这里插入图片描述
  • 整数计算指令
    • I型指令
      • ADDI 相加指令
      • SLTI[U] (无符号)比较指令
      • ANDI、ORI、XORI 逻辑运算指令
      • SLLI、SRLI、SRAI 逻辑和算数位移指令
    • U型指令
      • LUI 加载立即数高20位
      • AUIPC 令PC增加立即数高20位并将结果存入寄存器
    • R型指令
      • ADD
      • SLT[U]
      • AND、OR、XOR
      • SLL、SRL、SRA
      • SUB 相减指令
  • 控制转移指令
    • I型指令
      • JALR JAL的寄存器寻址版本
    • J型指令
      • JAL 跳转并将下一指令地址存入寄存器
    • B型指令
      • BEQ、BNE 相等/不相等跳转
      • BLT[U] (无符号)小于跳转
      • BGE[U] (无符号)大于等于跳转
  • 访存指令
    • I型指令
      • LW、LH[U]、LB[U]
    • S型
  • 0
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值