本文章对E203开源核的Decode模块进行总结。

一、 指令总结

六种基本指令格式,分别是:

  • 用于寄存器-寄存器操作的 R 类型指令
  • 用于短立即数和访存 load 操作I 型指令
  • 用于访存 store 操作的 S 型指令
  • 用于条件跳转操作的 B 类型指令
  • 用于长立即数U 型指令
  • 用于无条件跳转J 型指令

RISC-V的指令有几个特点:

  1. 指令只有六种格式,并且所有的指令都是 32 位长,这简化了指令解码
  2. RISC-V 指令提供三个寄存器操作数
  3. 在 RISC-V 中对于所有指令,要读写的寄存器的标识符总是在同一位置,意味着在解码指令之前,就可以先开始访问寄存器。
  4. 这些格式的立即数字段总是符号扩展,符号位总是在指令中最高位。这意味着可能成为关键路径的立即数符号扩展,可以在指令解码之前进行

32位risc-v整数指令集:


寄存器如下:


  • 所有位全部是 0 是非法的 RV32I 指令,所有位全部是 1 的指令也是非法指令
  • 立即数总是进行符号扩展,并不需要一个立即数版本的 sub
  • sll(shift left logical)为右侧补0,srl为左侧补0,sra(shift right arithmetic)左侧补符号位。
  • slt(set less than):如果第一个操作数小于第二个操作数,它将目标寄存器设置为 1,否则为0。对这个指令,有一个有符号版本(slt)和无符号版本(sltu)。
  • 加载立即数到高位(lui)将 20 位常量加载到寄存器的高 20 位。接着便可以使用标准的立即指令来创建 32位常量。例如lui+addi可以构造32位立即数和rs的计算。
  • 当前的 PC 可以通过将 auipc 的 U 立即数字段设置为 0 来获得
  • 向 PC 高位加上立即数(auipc)让我们仅用两条指令,便可以基于当前 PC 以任意偏移量转移控制流或者访问数据。将 auipc 中的 20 位立即数jalr(参见下面)中 12 位立即数的组合,我们可以将执行流转移到任何 32 位 PC 相对地址。而 auipc 加上普通加载或存储指令中的 12位立即数偏移量,使我们可以访问任何 32 位 PC 相对地址的数据。李例如(auipc+jalr; auipc+lw)
  • RISC-V 中没有字节或半字宽度的整数计算操作
  • 除了提供 32 位字(lw,sw)的加载和存储外,RV32I 支持加载有符号和无符号字节和半字(lb,lbu,lh,lhu)以及存储字节和半字(sb,sh)。有符号字节和半字符号扩展为 32 位再写入目的寄存器。无符号字节和半字,在写入目标寄存器之前都被无符号扩展到 32 位(只要取得是非32位,都被扩展成32位放入rd,为了对齐)
  • 与 x86-32 不同,RISC-V 没有特殊的堆栈指令。将 31 个寄存器中的某一个作为堆栈指针
  • RISC-V 选择了小尾端字节序

  • RV32I 可以比较两个寄存器并根据比较结果上进行分支跳转。比较可以是:相等(beq),不相等 (bne),大于等于(bge),或小于(blt)。
  • 对于jal,有两种方式。rd = ra 或者 x0,当=ra则为有返回地址实现过程调用,=x0则为直接跳转。jal 将其 20 位分支地址乘以 2,进行符号扩展后再添加到 PC 上,便得到了跳转地址。
  • 对于控制状态寄存器指令 (csrrc、csrrs、csrrw、csrrci、csrrsi、csrrwi),使我们可以轻松地访问一些程序性能计数器。对于这些 64 位计数器, 我们一次可以读取 32位。这些计数器包括了系统时间, 时钟周期以及执行的指令数目。
  • ecall 指令用于向运行时环境发出请求,例如系统调用。调试器使用 ebreak 指令将控制转移到调试环境。
  • fence 指令外部可见的访存请求,如设备 I / O 和内存访问等进行串行化。外部可见指对处理器的其他核心、线程,外部设备或协处理器可见。fence.i 指令同步指令和数据流。在执行 fence.i 指令之前,对于同一个硬件线程,RISC-V 不保证用存储指令写到内存指令区的数据可以被取指令取到。
  • fence指令的定义:RISC-V 架构采用松散存储器模型(Relaxed Memo Model ),松散存储器模型对于访问不同地址的存储器读写指令的执行顺序不作要求,除非使用明确的存储器屏障指令。fence指令就是存储器屏障指令。
  • RISC-V 架构定义了 Fence Fence.I 两条存储器屏障指令,用于强行界定存储器访问的顺序,其定义如下:
  1. 在程序中,如果添加了 Fence 指令,则 Fence 指令能够保证“在 Fence 之前所有指令造成的访存结果必须比“在 Fence 之后所有指令造成的访存结果”先被观测到
  2. 在程序中,如果添加了 Fence .I指令,则“在 Fence.I 之后所有指令的取指令操作” 一定能够观测到“在 Fence.I 之前所有指令造成的访存结果

RISC-V指令集架构特点及其总结相关推荐

  1. RISC V (RV32+RV64) 架构 整体介绍

    文章目录 riscv 市场 芯片介绍 软件介绍 开发板介绍 PC介绍 riscv 架构 编程模型(指令集/寄存器/ABI/SBI) 运行状态 指令集 寄存器 riscv32和riscv64两者的区别 ...

  2. 计算机组成原理 — CPU — 指令集架构类型

    目录 文章目录 目录 主流 CPU 指令集架构 CISC(复杂指令集计算机) x86 系列处理器 RISC(精简指令集计算机) ARM 系列处理器 PowerPC 系列处理器 MIPS 架构 RISC ...

  3. 计算机架构宗师Patterson与Hennessy 演讲实录,ISA指令集架构回顾——未来指令集架构方向,RISC-V与DSA

    相信所有和计算机体系结构打过交道的朋友们都看过David Patterson与John Hennessy的煌煌巨作,<计算机体系架构:量化研究方法>.两位在计算机架构领域鼎鼎大名的教授,一 ...

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

    目录 基于RISC-V的流水线处理器 RISC-V指令集 RV32I R-Type I-Type J-Type B-Type Load & Store 总结 后记 基于RISC-V的流水线处理 ...

  5. 一种全新的指令集架构RISC-V

    目录 RISC-V指令集架构介绍 通用寄存器模型 RISC-V特权级 RISC-V指令集描述 RISC-V总结 RISC-V指令集架构介绍 RISC-V(英文发音为"risk-five&qu ...

  6. RISC-V指令集架构介绍及国内外厂商介绍

    文章目录 RISC-V架构介绍 ·RISC-V简介 ·CPU主流架构:x86.ARM.RISC-V ·RICS-V的设计理念及优势 ·RISC-V的历史沿革与市场应用 国内外厂商介绍 ·SiFive ...

  7. 自己动手写处理器之第一阶段(3)——MIPS32指令集架构简单介绍

    将陆续上传本人写的新书<自己动手写处理器>(尚未出版).今天是第四篇.我尽量每周四篇 1.4 MIPS32指令集架构简单介绍 本书设计的处理器遵循MIPS32 Release 1架构,所以 ...

  8. 芯片设计“花招”已耍完?无指令集架构颠覆旧套路

    日前,英伟达在GTC大会上发布了最新一代GPU H100,采用台积电4nm工艺,集成了800亿个晶体管.3月初,苹果发布了M1 Ultra芯片,更是集成了高达1140亿个晶体管.显然,头部厂商都在推进 ...

  9. 指令集架构、微架构、处理器架构、CPU架构、内核

    前两天看书碰到了"CPU架构"这个词,脑子里感觉有点模糊不懂.查阅相关资料后又陆续碰到了"指令集架构"."微架构"."处理器架构& ...

  10. 科普 | 处理器RISC和CISC架构分析对比

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"书",获取 后台回复"k8s",可领取k8s资料 CISC(复杂指 ...

最新文章

  1. PySCF :基于Python的化学模拟框架
  2. java中的账户冻结原理_java可重入锁(ReentrantLock)的实现原理
  3. 【转】面试题:将多个集合合并成没有交集的集合
  4. 框架页面中,从子页面刷新父页面问题解决
  5. Bootstrap是什么
  6. 【经验分享】linux交叉编译 - openssl动态库
  7. 二、yii的入口与app应用实例(Yii::app())
  8. 为什么Locust单进程运行模式下只能用到一个处理器的能力?
  9. PHP设计模式——建造者模式
  10. 全网首发:制作LINUX安装软件包,要处理哪些系统目录和文件(3)
  11. 滤波器: 滤波器设计软件
  12. python学习笔记(汇率兑换)
  13. 行测判断推理部分之图形推理(位置)
  14. 分数的大小比较优秀教案_分数的大小比较 教学设计
  15. 属于多媒体计算机必不可少的配置是,制作多媒体作品选择(答案)
  16. 【热门收藏】iOS开发人员必看的精品资料(100个)
  17. 时隙aloha协议仿真程序_石科院:芳烃吸附分离装置吸附塔控制系统的仿真培训系统开发!...
  18. 定义一个名为Cylinder类表示圆柱,它继承Circle类
  19. 循迹智能小车c语言主程序,智能小车循迹、避障、红外遥控C语言代码
  20. java scanner的hasnext,Java Scanner hasNext()方法

热门文章

  1. rtx2060什么水平_RTX2060与Super有什么区别?RTX2060和RTX2060 Super性能对比评测
  2. shell du命令
  3. Yolov5图像识别教程
  4. 王者荣耀头像大小怎么调?调整图片尺寸大小工具分享
  5. 正则表达式元字符 和限定字符
  6. 这么设置USB Copy数据就能轻松备份到NAS
  7. 手把手教你将矩阵画成张量网络图
  8. dom4j 学习 -- 封装dom4j工具类+如何使用dom4j解析
  9. 如何生成android的BKS证书
  10. 《统计学习方法》(李航)第1章主要内容介绍(统计学习概述、分类、三要素)