CPU设计——RISC-V指令集
前言:本文主要简单介绍RISC-V指令集,其中参考了浙江大学mooc《计算机组成与设计:RISC-V》和《手把手教你设计CPU——RISC-V处理器》,如果文章中有描述不恰当的地方,欢迎指正。
文章目录
- 1、RISC-V指令集简介
- 2、指令格式介绍
- 3、RISC-V 32个通用寄存器介绍
- 4、RISC-V 指令集
- 4.1、RISC-V 指令分类
- 4.2、6种基本指令格式具体介绍
- 4.2.1、R型指令
- 4.2.2、I 型指令
- 4.2.3、S型指令
- 4.2.4、B型指令
- 4.2.5、U型指令
- 4.2.6、J型指令
- 总结
1、RISC-V指令集简介
RISC-V(英文发音为"risk-five")架构主要由美国加州伯克利分校(简称伯克利)的Krste Asanovic教授和Yunsup Lee等开发人员于2010年发明。经过几年的发展,伯克利为RISC-V架构开发了完整的软件工具链以及若干开源的处理器实例(例如Pocket Core和BOOM Core),并且得到了计算机体系结构领域的泰斗David Patterson的大力支持。
与大多数指令集架构相反,RISC-V指令集架构最大的特点就是开放,无论学术机构还是商业组织都可以免费地用于所有需要的设备中,允许任何人设计、制造和销售RISC-V芯片和软件。
2、指令格式介绍
指令(又称机器指令):是指示计算机执行某种操作的命令,是计算机运行的最小功能单位。一台计算机的所有指令的集合构成该机的指令系统,也称为指令集。
一条指令通常要包括操作码字段和地址码字段两部分:
3、RISC-V 32个通用寄存器介绍
RISC-V32I基础指令集共定义了32个32位的通用寄存器,分别标记为x0~x31。寄存器x0固定连接到常数0,还有一个额外的用户可见程序计数器pc寄存器,它保存当前指令的地址。32个寄存器的详细功能如下图所示:
4、RISC-V 指令集
4.1、RISC-V 指令分类
根据RISC-V指令的共性,主要将其分为以下6种指令格式:
根据RISC-V指令集之间的共性,其主要可分为以下6种指令格式(R、I、S、B、U、J)。
- R型指令——用于寄存器与寄存器之间算术运算操作;
- I 型指令——用于寄存器与立即数之间算术运算和读存储器操作;
- S型指令——用于写存储器;
- B型指令——用于分支转移操作(属于S型指令的变体,之前也叫SB型指令);
- U型指令——用于高20比特位立即数操作;
- J型指令——用于直接跳转(属于U型指令的变体,之前也叫UJ型指令)。
6种基本指令的格式如下图所示为:
——opcode表示7位指令操作码,用于区分不同的指令;
——funct3表示3位的功能码,funct7表示7位的功能码,用于辅助区分不同种类的指令;
——rs1和rs2表示两个5位的源寄存器;
——rd表示5位的目的寄存器,用于存储指令的运算结果;
——imm表示不同长度的立即数,一般会扩展为32位再进行运算操作;
4.2、6种基本指令格式具体介绍
4.2.1、R型指令
R型指令是最为常用的运算指令,主要用于寄存器与寄存器之间算术运算操作。如下图所示,具有两个5位的源寄存器地址、一个5位目的寄存器地址、一个7位的funct7功能码、一个3位的funct3功能码和7位的opcode操作码。
如上图R型指令格式所示,通过低7位的opcode(0110011)可以得出指令为R型指令,然后将32位的指令按照R型指令的格式划分相应的区域。由funct3(000)和funct7(0000000)可以得出指令执行add操作。rs1对应x19(10011),rs1对应x10(01010),rd1对应x18(10010),即将寄存器19的值加上寄存器10的值并将其运算结果存放到寄存器18这个地址上。注:RISC-V并无减法指令,可以通过加负数来实现减法,减少了指令集数量,这也符合RISC-V精简的原则。注:x10、x18和x19对应上面的32个通用寄存器。
其他R型指令操作如下图所示:
4.2.2、I 型指令
I 型指令主要用于寄存器与立即数之间算术运算和读存储器操作。如下图所示,具有一个5位的源寄存器地址、一个5位目的寄存器地址、一个12位的imm立即数、一个3位的funct3功能码和7位的opcode操作码。
如上图 I 型指令格式所示,通过低7位的opcode(0010011)可以得出指令为 I 型指令,然后将32位的指令按照I型指令的格式划分相应的区域。由funct3(000)可以得出指令执行addi操作。rs1对应x1(00001),立即数imm(1111_1100_1110 = -50)通过符号位扩展成32位,rd1对应x15(01111),即将寄存器1的值加上立即数(-50)并将其运算结果存放到寄存器15这个地址上。
其他I型指令操作如下图所示:
4.2.3、S型指令
S型指令主要用于写存储器的S型指令。如下图所示,具有两个5位的源寄存器地址、一个12位的imm立即数、一个3位的funct3功能码和7位的opcode操作码。
如上图S型指令格式所示,通过低7位的opcode(0100011)可以得出指令为S型指令,然后将32位的指令按照S型指令的格式划分相应的区域。由funct3(010)可以得出指令执行sw操作。rs1对应x2(00001)作为基地址,立即数imm(0000_0000_1000 = 8)通过符号位扩展成32位作为地址偏移量,rs1对应x14(01110)作为,即将寄存器2的值加上立即数(8)的值作为地址,并将此地址的值存入到寄存器14中。
其他S型指令操作如下图所示:
4.2.4、B型指令
B型指令主要用于分支转移操作的B型指令(属于S型指令的变体,之前也叫SB型指令)。如下图所示,具有两个5位的源寄存器地址、一个12位的imm立即数、一个3位的funct3功能码和7位的opcode操作码。
如上图B型指令格式所示,通过低7位的opcode(1100011)可以得出指令为B型指令,然后将32位的指令按照B型指令的格式划分相应的区域。由funct3(000)可以得出指令执行beq操作。rs1对应x19(10011),rs2对应x10(01010),立即数imm(0000_0000_1000 = 8),即若寄存器x19中的值与寄存器x10的值相等,则跳转到立即数所示的地址中;若不相等则不实行跳转。
其他B型指令操作如下图所示:
4.2.5、U型指令
U型指令主要用于高20比特位立即数操作的U型指令。如下图所示,具有一个5位的目的寄存器地址、一个20位的imm立即数和7位的opcode操作码。
如上图U型指令格式所示,也是通过低7位的opcode可以得出其指令类型,然后将32位的指令按照相应的型指令的格式划分相应的区域。例如执行lui x10,0x87654指令,即将0x87654存入到x10寄存器中的高20位中,剩余的12位低位补零。
4.2.6、J型指令
J型指令主要用于直接跳转的J型指令(属于U型指令的变体,之前也叫UJ型指令)。如下图所示,具有一个5位的目的寄存器地址、一个20位的imm立即数和7位的opcode操作码。
如上图U型指令格式所示,也是通过低7位的opcode可以得出其指令类型,然后将32位的指令按照相应的型指令的格式划分相应的区域。jal常用于子函数的调用,例如执行jal ra,FuncName指令,即跳转到要执行的子函数FuncName中,并将当前PC+4的值存入到寄存器rd中,方便执行完子函数后跳回。
总结
若需要更为全面的学习RISC-V的基础知识,推荐浙江大学mooc《计算机组成与设计:RISC-V》,《手把手教你设计CPU——RISC-V处理器》。此外,B站和中国大学MOOC(慕课)等网站也有相应的视频可供学习。
CPU设计——RISC-V指令集相关推荐
- RISC-V CPU设计(一)---RV32I指令集介绍
RV32I是RISC-V最基本的指令集,包括6种,其中4种为核心的类型(R/I/S/U).下面给出了这6种指令的格式 指令详情如下 R型指令 包含两个源寄存器和一个目的寄存器编号,都是5位的(32个寄 ...
- Risc-V单周期CPU设计思考
Risc-V单周期CPU设计思考 今年学校课程改革,计算机组成课开始教学Risc-V,写单周期CPU的时候发现网上好像大多都是MIPS的CPU设计,所以就把自己关于设计Verilog的一些思路整理出来 ...
- 从零开始的RISCV架构CPU设计(2)-CISC与RISC
系列文章目录 上一节:从零开始的RISCV架构CPU设计(1)-CPU开源资料说明 文章目录 系列文章目录 前言 一.什么是CISC 二.什么是RISC 三.CISC与RISC 3.1 指令集实现架构 ...
- 基于RISC-V指令集的CPU设计和FPGA实现(二)
RISC-V 指令集分析 其实接下来的指令介绍我刚开始不太确定要不要写,因为对于 CPU 设计和实现而言略有拖沓,但是熟练掌握指令格式还是对写 CPU 有帮助的.接下来的部分假如学过 RISC-V 指 ...
- 基于 FPGA 的 RISC CPU 设计(2)详细的模块设计思路及其 Verilog 代码
引言 其实,一个 CPU 的设计中,各个子模块都是比较基本的.比较简单的,只是组合起来的一个整体架构会比较复杂而已,无论是时序路径,还是数据通路和控制通路,这里,主要详细介绍整个微架构 ...
- 在VIVADO上实现的非常简易的RISC-V CPU设计(来自《Verilog数字系统设计》夏宇闻著)
在VIVADO上实现的非常简易的RISC-V CPU设计 一.实验要求重述: 1.实验目的 2.实验要求: 二.学习准备: 1.什么cpu? 2.cpu需要具有哪些部件? 3.什么是RISC_CPU? ...
- RISC V (RV32+RV64) 架构 整体介绍
文章目录 riscv 市场 芯片介绍 软件介绍 开发板介绍 PC介绍 riscv 架构 编程模型(指令集/寄存器/ABI/SBI) 运行状态 指令集 寄存器 riscv32和riscv64两者的区别 ...
- 暑期实训CPU设计(四)
基于MIPS指令集的简单CPU设计(20条指令)代码及注释 数据通路图: 自底向下,一个模块一个模块来 ALU: alu.v module alu (a,b,aluc,r,z); input [31: ...
- CPU的RISC和CISC架构的区别
CPU的RISC和CISC架构的区别 有关RISC和CISC的区别方面, 之前就有一些零零碎碎的理解, 这里再次做一次总结, 以求深入. CISC架构的代表: x86, C51 RISC架构的代码:a ...
- 深入浅谈,CPU设计原理
首先,声明这是一篇转载文,这篇文章是,从卡饭论坛 看到的一篇文章<深入浅谈,CPU设计原理>,是一篇连载,文章,卡饭论坛,是我高中的时候,经常去的论坛,里面有很多好的文章,推荐给大家.也许 ...
最新文章
- ccie对java有用吗,Java和ccie有啥区别
- easyui datagrid不是相邻的能合并单元格吗_万能的Ctrl+E快捷键,学会能一键批量解决Excel中90%的问题!...
- 开发环境搭建(1)——JDK安装
- nfs参数介绍与写法示例及报错( Operation not permitted)
- [CQOI2017] 老C的键盘(树形dp + 组合数)
- PostgreSQL函数(存储过程)----笔记
- 数据结构 快速排序的三种实现 (hoare版本 挖坑法 前后指针版本)与非递归实现
- 如何使用移动硬盘加密
- AcWing 898. 数字三角形
- 服务器中文档存储在哪,云服务器存储在哪
- Python数据结构,线性结构:栈、队列、双端队列、列表
- 计算机安装应用程序卸的步骤,怎么彻底删除电脑安装的软件程序
- 开票软件V2.0.49_ZS_20220630开票接口
- VMware+WinDBG_配置_资料
- Matthew Dean Schwartz《Quantum Field Theory and The Standard Model》(马修·迪恩·施瓦茨《量子场论与标准模型》)中文目录
- 各大网站JQuery的CDN库
- Sketch 插件导出切片
- Linux 30岁,这些年经历了什么?
- android优化大师下载最新版,安卓优化大师
- BIT-MiniCC——parser(lab5语法分析器)