0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

RISC-V指令集是如何设计的

冬至配饺子 来源:天奇工作室 作者:LRC 2022-08-08 14:47 次阅读

我们来回顾一下上期内容:我们定义了两种指令,第一种是立即数指令,其指令规则是:xxxxxxxxxxxx(立即数)xxxxx(源寄存器序号)xxx(运算规则)xxxxx(目标寄存器序号)1(立即数标志位)。第二种指令是寄存器指令,其指令规则是:0000000xxxxx(源寄存器序号1)xxxxx(源寄存器序号2)xxx(运算规则)xxxxx(目标寄存器序号)0(立即数标志位)。不过呢,这些指令只是我们的一厢情愿,现实中实际的指令集是怎么实现的?

pYYBAGLwsFuAMLa5AACNBC2MMKU335.png

RISC-V指令格式

我们这次来讲讲RISC-V指令集,看看他们的指令集是如何设计的。

RISC-V指令集项目在2010年始于伯克利大学,是一个新颖先进的指令集。我们曾在前几章中多次提到过这个指令集,不过也就是顺嘴一题,这次我们具体看看究竟什么是RISC-V指令集。

首先RISC-V指令集由几部分组成。最主要的部分是最基础32位的RV32I,这部分是最基础的指令集,是兼容RISC-V程序的必要部分。其次是16位的RVC,作为压缩指令,可以极大节省程序占用内存的空间。再者是32位的RV32M,用以支持乘除法指令。此外还有RV32F、RV32A等等。为什么要分成这么多部分呢?因为我们设计的CPU大多不会对这些指令全部兼容,而是选择有目的的部分兼容。比如,设计一个低功耗的单片机CPU,我们就用不到乘除法等指令,我们可以选择只兼容RV32I,既简单又高效。当然这些指令还有64位版本,用以支持更高位数的计算。

RISC-V指令集规定了CPU中有32个寄存器。有疑问吗?你可能觉得指令集不就是指令的集合嘛,为什么还规定我们的硬件设计?不要忘了,32个寄存器意味着寄存器序号一共是5位,而这是由指令集决定的。顺便一说X86指令集中仅规定有8个寄存器。其中,00000即第一个寄存器本质并不是寄存器而是硬件连线0,始终代表数字0。这个设计是有意义的,可以借此写出许多骚操作的指令。

我们先讲最基础的RV32I指令集。作为最基础的指令集,其包括几种指令类型。分别是数字运算指令(包括寄存器指令和立即数指令)、pc跳转指令、分支指令和内存读写指令。我们上次定义的指令集属于数字运算指令,二者类型相同但内容并不完全一致。现在我来说说RV32I中的数字运算指令,你们可以和上次定义的指令集比比有何不同?这些差别能带来好处还是坏处?

pYYBAGLwsHOAc4hVAABmp1yVSCk758.png


add指令释义

首先是运算指令。RV32I一共定义了10种运算,分别是加法、减法、有符号比较、无符号比较、与、或、非、异或、逻辑左移、逻辑右移和算数右移。而这些运算分为寄存器指令和立即数指令。立即数指令中是无需减法指令的,因为我们曾经说过,减法可以通过对其中一个加数取反加一再与另一个加数求和实现,所以立即数可以直接在立即数上做文章,不需要减法指令。那我们是否需要十种运算电路来分别对应这十种计算指令呢?不用,我们只需要八种。少的那两种分别是减法和移位。减法完全可以复用加法电路,左移完全可以复用右移电路。什么是复用?为什么要复用?复用就是重复利用原有的电路,减少设置新的电路。这样可以节省芯片面积,节约生产成本,降低发热功耗。那么如何复用呢?不同的电路有不同的复用方法,以减法复用加法为例,使用加法电路前,将其中一个数取反加一便可成为减法电路。

综上所述,我们仍需要3位数字表示这八种运算逻辑,它们分别是000到111,这三位数字被称为funct3(3位功能数字)。不过加法和移位运算中需要额外的一位数字用以区分加减和左右。这一位数字在哪呢?我们先讲立即数移位指令,立即数一般是12位数字,但在移位运算中用不到这么多位数,一般只有5位。那么在这五位数之前会有7个空位,第二个空位便是这位数字所在。立即数加法指令不需要这一位数字,原因刚才有指出。寄存器指令中,同样会存在7位空位,第二位空位是这位数字所在。

然后我们讲一下另一类指令,内存读写指令。不过我们在此之前需要指出一件事,我们现在有两种指令类型了,分别是运算指令和内存读写指令,我们怎么区分呢?RV32I设置了另一种功能数字,funct7(7位功能数字),为什么会有七位呢?因为指令类型很多,funct7不单起到区分RV32I指令类型的作用,同时还区分所有RISC-V的所有指令,甚至还包括16位和64位指令,所以funct7会有7位数字。回到内存读写指令上来,读和写可以被看成两种类型,需要一位数字区分,这位数字在funct7中。读和写都需要地址,否则不知道读哪或是写哪。

同时读指令还需要知道取到的内容放到哪,而写指令需要知道写什么内容。先说地址,地址是由某一寄存器中的数字加上七位立即数得到,这样正好组成之前说的12位数字。读指令放到哪呢?放到目标寄存器嘛。写指令的内容从哪来呢?来源寄存器嘛。这不就和之前的指令样式对应起来了吗?所以这两种指令样式区别其实不大。只不过执行内容有所区别。

我们现在刚刚简单讲完两种指令类型,是不是很多人就已经迷失自我了?难道所有这些指令规则只能通过繁琐的文字来讲述吗?这里就要提到指令集图卡了。

pYYBAGLwsLCANZaWAAC_XgiafkQ258.png

RV32I指令集图卡

上图就是实拍RV32I指令集图卡,每一行都代表着一条指令,你所要做的便是填入对应的寄存器序号和立即数即可。其中rs1和rs2分别是来源寄存器1和2,rd是目标寄存器,imm是立即数。有的指令可能只需要一个来源寄存器甚至一个都不要,有的指令可能不需要目标寄存器,有的指令可能需要12位立即数,有的则可能要20位立即数。这些在指令集图卡中都体现出来了。看到右边英文中,我手写的几道黑横线了吗?夹在里面的指令是我们在前文中所讲的指令类型,可以再根据这张图对前文进行理解,会容易得多哦。

举个例子,比如加法指令,看到最右侧有两个add,分别是I addi和R add,区别在于一个是立即数加法,一个是寄存器加法。对应到靠右边的方框中是不是可以看到7位数字,这就是funct7,中间有3位数字000,这就是funct3。寄存器指令中的最左侧7位数字是空着的为0000000,而立即数指令中最左侧则是12位的立即数。再看R add下面的R sub,与R add唯一的区别是不是左边第二位数字变成了1?这就是之前所说的复用所需的那一位数字。现在是不是能完全和之前所说的联系起来了?也没那么难对吧?

剩下的下次再来吧?还是你们剩下的都能自己看懂了?可以找公众号回复一下,我想看看。


审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    31

    文章

    5342

    浏览量

    120299
  • 减法电路
    +关注

    关注

    0

    文章

    15

    浏览量

    8015
  • 指令集
    +关注

    关注

    0

    文章

    224

    浏览量

    23381
  • RISC-V
    +关注

    关注

    45

    文章

    2275

    浏览量

    46143
收藏 人收藏

    评论

    相关推荐

    RISC-V指令集概述

    RISC-V就是RISC的第五代指令集架构。而RISC-V目标就是“成为一种完全开放的指令集架构,可被任何学术机构或商业组织自由使用”。
    发表于 11-30 23:30

    RISC-V指令集位宽的几点学习心得

    在学习RISC-V指令集过程中,指令位宽大多是32位和64的,它并不像其它指令集,还有8位的古老指令集。这估计也是
    发表于 10-31 22:05

    RISC-V和arm指令集的对比分析

    RISC-V和ARM指令集是两种不同的计算机指令集架构,它们在多个方面存在显著的差异。以下是对这两种指令集的详细对比分析: 一、设计理念 RISC-
    发表于 09-28 11:05

    ISA ARM 对比 RISC-V

    ARM和RISC-V同为精简指令集RISC)架构,这意味着它们都基于相似的设计理念:通过简化指令集来提高处理器的效率和执行速度。然而,即使同为RI
    的头像 发表于 09-10 09:26 634次阅读

    RISC-V指令集的特点总结

    开源 定义:RISC-V 是完全开源的指令集架构(ISA),意味着任何人都可以查看、使用、修改以及分发其设计,而无需支付版权费用。 优势:这种开源特性促进了全球性的创新和合作。 社区化 定义
    发表于 08-30 22:05

    RISC-V指令集仿真介绍

    我们有时需要一种标准的仿真器,这种仿真器独立于处理器微架构,用于模拟处理器在执行目标应用程序时的各种状态,包括执行结果,程序流以及CSR。如果当前设计的处理器在执行指定程序时,这三个指标与标准的仿真程序所呈现的结果不一致,则认为处理器设计存在问题,需要修正。对于RISCV处理器设计来讲,最常见的仿真工具是Spike。本文将着重介绍如何安装Spike仿真工具。 安装Spike工具链 以下涉及到的安装步骤都源自两个工具链的README文件(所以README是个好东西),经作者实践后所总结。 安装riscv-fesvr 下载riscv-fesvr bash git clone --recursive https://github.com/riscv/riscv-tools.git 设置RISCV环境变量 bash RISCV=${HOME}/Software/rv_linux_bare_19-10-17-11-10/bin #riscv工具链的路径 安装可能会有用的工具 bash yum install autoconf automake autotools-dev curl libmpc-dev libmpfr-dev libgmp-dev libusb-1.0-0-dev gawk build-essential bison flex texinfo gperf libtool patchutils bc zlib1g-dev device-tree-compiler pkg-config libexpat-dev #注意:这些工具并不要求都安装成功,视后续需求。此处为保险措施 创建build文件夹 在riscv-fesvr文件夹下创建新的build文件夹,用于生成编译 bash mkdir build cd build 配置并生成代码 bash ../configure --prefix=$RISCV 安装 bash make install 此时会看到大片的编译过程,如果没有报错,则安装成功,可以进入下一步,否则就要排错并重新安装。riscv-fesvr工具是安装spike所必需的工具。 安装Spike 下载riscv-isa-sim bash git clone --recursive https://github.com/riscv/riscv-tools.git 创建build文件夹 在riscv-isa-sim文件夹下创建新的build文件夹,用于生成编译 bash mkdir build cd build 配置并生成代码 bash ../configure --prefix=RISCV --with-fesvr=RISCV 安装 bash make install 设置环境变量 将生成的Spike工具添加到环境变量中
    发表于 07-31 23:03

    RISCV架构的特点

    RISCV架构的特点 RISC-V架构RISC-V 架构是基于 精简指令集计算(RISC)原
    发表于 05-24 08:01

    RISC-V指令集说明哪里有?

    RISC-V指令集说明哪里有?汇编指令文档哪有?
    发表于 04-30 17:44

    有没有RISC-V指令集文档分享一下?

    有没有RISC-V指令集文档分享一下?了解一下他的汇编指令
    发表于 03-30 11:48

    什么是RISC-VRISC-V指令集的优势

    CPU 支持的所有指令指令的字节级编码就是这个 CPU 的指令集架构(Instruction Set Architecture,ISA),指令集在计算机软件和硬件之间搭起了一座桥梁。
    发表于 03-05 10:31 857次阅读
    什么是<b class='flag-5'>RISC-V</b>?<b class='flag-5'>RISC-V</b><b class='flag-5'>指令集</b>的优势

    RISC-V开放架构设计之道|阅读体验】RISC-V基础整数指令集

    第2章 RV32I:RISC-V基础整数指令集 本章重点讲解构成RISC-V基础整数指令集的基本指令
    发表于 01-31 21:10

    RISC-V开放架构设计之道|阅读体验】 RISC-V设计必备之案头小册

    中出现的RISC-V拓展。 这本书的开篇讲的是,为什么我们需要RISC-V指令集? 从过去的ISA的特点进行引入,先以目前主流的x86指令集架构为例列出了增量式
    发表于 01-22 16:24

    MIPS聘请SiFive前高管,推动RISC-V指令集架构IP开发

    在SIFive任职期间,Brad Burgess不仅拓展了敢达三十多年的半导体行业经验,还成功开发了许多适用各类指令集的处理器,如x86、68k、PowerPC、Arm以及如今备受瞩目的RISC-V。此次成为MIPS首席架构师,Burgess将全权负责MIPS新建重磅产品
    的头像 发表于 01-08 11:41 535次阅读

    浅谈RISC-V在人工智能的应用

    RISC-V内核的指令集只有47条指令。x86指令的实际数量难以计算,可能将近1000个。尽管Arm的指令集很小,但仍然比
    发表于 01-04 10:46 657次阅读
    浅谈<b class='flag-5'>RISC-V</b>在人工智能的应用

    新思科技收购Ansys,拓展RISC-V验证及验证解决方案

    Imperas拥有的虚拟软件模拟威廉希尔官方网站 广泛拓展至 RISC-V领域,为整个产业链带来便利。2018年,该公司推出的 riscvOVPsim成为首款免费 RISC-V指令集模拟器,便于工程师们单核
    的头像 发表于 12-27 09:57 612次阅读