RISC-V基本介绍
文章目录
- 前言
- 一、命名规范
- 二、模块化ISA
- 三、一些概念
- 1. 指令格式
- 2. 寄存器
- 3. 特权级别
- 4. CSR(控制和状态寄存器)
- 四、学习资料
- 1. 官方资料
- 2. 开发参考
- 总结
前言
RISC-V作为目前大火的开源指令集架构有着自己的独特魅力,本文将对其基本情况进行介绍,给大家留一个初步印象。
关于指令集的概念大家可以参看:什么是指令集架构ISA【从处理器谈起】
RISC-V念作 “risk-five”,代表着 Berkeley 所研发的第五代精简指令集。它是一款高质量、免许可证、开放的RISC ISA(指令集架构),是一套由RISC-V基金会维护的标准,适用于所有类型的计算系统。开源的RISC-V打破了ARM、x86架构的技术壁垒,便于开发者进行开发,目前国内外都在流行该架构。
一、命名规范
我们在实现基于RISCV架构的处理器时,根据应用场景的需要我们可以选择只实现架构中的部分指令,或者对于处理器的位宽有不同的选择。我们需要根据一些命名规范来对选择的RISCV子架构进行命名。以方便让用户马上了解这款处理器是基于怎样的子架构开发的。
RISCV ISA 命名格式:RV[###][abc……xyz]
- RV:用于标识 RISC-V 体系架构的前缀,即 RISC-V的缩写。
- [###]:{32, 64, 128} 用于标识处理器的位宽,也就是处理器的寄存器的宽度(单位为 bit)
- [abc…xyz]:标识该处理器支持的指令集模块集合。(指令模块的含义在下面会介绍)
如RV32IMA,RV64GC。
二、模块化ISA
RISC-V采用模块化的指令集,易于扩展、组装。
RISCV ISA = 1 个基本整数指令集(I) + 多个可选的扩展指令集
其中唯一强制要求实现的基础指令集,其他指令集都是可选的扩展模块。RISC-V 允许在实现中以可选的形式实现其他标准化和非标准化的指令集扩展。
RISC-V指令集模块包括
【注:特定组合“IMAFD”被称为 “通用(General)”组合,用英文字母 G 表示】
其他的扩展指令集还包括“B”标准扩展:位操作、“E”标准扩展:嵌入式、“H”特权态架构扩展:支持管理程序(Hypervisor)、“J”标准扩展:动态翻译语言、“L”标准扩展:十进制浮点、“N”标准扩展:用户态中断、“P”标准扩展:封装的单指令多数据(Packed-SIMD)指令、“Q”标准扩展:四精度浮点。
RV32I指令集有47条指令,能够满足现代操作系统运行的基本要求,47条指令按照功能可以分为如下几类。
- 整数运算指令:实现算术、逻辑、比较等运算。
- 分支转移指令:实现条件转移、无条件转移等运算,并且没有延迟槽。
- 加载存储指令:实现字节、半字、字的加载、存储操作,采用的都是寄存器相对寻址方式。
- 控制与状态寄存器访问指令:实现对系统控制与状态寄存器的原子读-写、原子读-修改、原子读-清零等操作。
- 系统调用指令:实现系统调用、调试等功能。
三、一些概念
1. 指令格式
RISC-V具有非常工整的指令格式,所有基础指令的格式可以分为以下四种,指令长度为32位,在“C”标准扩展中,指令长度被压缩到16位:
规整的指令格式有利于处理器中的控制器对于二进制指令的解码。符合“越规整,越简单”的设计理念。
还有两种特殊的指令格式:SB型和UJ型,两种格式都只包含一条指令。
具体基本的RISCV的汇编语言和机器语言的对应表如下所示:
2. 寄存器
RISC-V 的 Unprivileged Specification 定义了 32 个通用寄存器以及一个 PC
对RV32I/RV64I/RV128I都一样
如果实现支持 F/D 扩展则需要额外支持 32个浮点(Float
Point)寄存器。RV32E(E表示嵌入式系统)将32个通用寄存器缩减为16个。
每个寄存器具体编程时有特定的用途以及各自的别名,如下表:
3. 特权级别
RISC-V 的 Privileged Specification 定义了四个特权级别(privilege level),以下特权等级由高到低排列。
机器级别(M):RISC-V中hart(hardware thread,硬件线程,hart相当于核)可以执行的最高权限模式。在M模式下运行的hart对内存,I/O和一些对于启动和配置系统来说必要的底层功能有着完全的使用权。因此它是唯一所有标准RISC-V
处理器都必须实现的权限模式。实际上普通的RISC-V微控制器仅支持M模式。超级监管者级别(H):为了支持虚拟机监视器。
监管者级别(S):旨在支持现代类Unix操作系统,如Linux,FreeBSD和Windows。
用户级别(U):用于运行应用程序,适用于安全嵌入式系统。
任何时候,一个RISC-V硬件线程(hart)是运行在某个特权级上的,这个特权级由CSR(control and status register,控制和状态寄存器)配置。
4. CSR(控制和状态寄存器)
不同的特权级别下时分别对应各自的一套Registers(CSR),用于控制和获取相应特权级别下的处理器工作状态。在高级别的特权级别下,可以访问低级别的CSR,譬如Machine Level下可以访问Supervisor/User Level的CSR;但反之不可以。
标准RISC-V ISA设置了一个12位的编码空间(csr[11:0])作为CSR地址,可用于4096个CSR。根据约定,CSR地址的高4位(csr[11:8])用于编码CSR根据特权级读写的可访问性。其中最高2位(csr[11:10])指示这个寄存器是否是可以读/写(如只读是11)。后面2位(csr[9:8])指示了能够访问这个CSR所需要的最低特权级(如上表中,监管者模式是01)。
RISC-V定义了专门用于操作CSR的指令,且定义了特定的指令可以用于在不同特权级别之间进行切换(称为trap)。
一个hart(硬件线程)通常在U-mode下运行应用程序,直到某些自陷(trap,例如一个管理员调用或者一个定时器中断)强制切换到一个自陷处理函数(trap handler)。提升特权级别的自陷称为垂直自陷(vertical trap),而保持在同样特权级别的自陷称为水平自陷(horizontal trap)。
例如,下表是已被分配的用户级别(U)的CSR地址:
特权级别的切换对应于操作系统中用户态到内核态的切换,在内核态中才可以进行系统调用。
四、学习资料
1. 官方资料
在RISC-V官网上可以下载基础的ISA手册及特权手册:https://riscv.org/technical/specifications/
开发者在开发前需要阅读架构规范。官方的github主页是:https://github.com/riscv。
2. 开发参考
RISC-V只是定义了一套指令集架构规范,没有具体实现的代码,需要开发者根据该架构手册,通过使用硬件描述语言如VHDL编程来具体实现基于RISC-V的处理器,再移植到满足RISC-V需求的硬件平台(处理器芯片或开发板)上去。
使用RISC-V架构的同时,还要配套开发相应的编译器gcc以及调试器如openOCD。
同时RISC-V官方提供了兼容性测试代码,可以测试每一条指令的运行结果,验证开发者的核是否实现了RISC-V规范。
目前基于RISC-V架构的开源处理器有很多,既有标量处理器Rocket,也有超标量处理器BOOM,还有面向嵌入式领域的Z-scale、PicoRV32等。具体有哪些开源处理器项目可以参见:RISC-V架构总结1,开源代码在github上也有很多。
可供学习的一个简单RISC-V核是tinyrisc。该项目实现的是一个单核32位的小型RISC-V处理器核,采用verilog语言编写
总结
RISCV由于其开源性,被大家广泛使用,我们在需要特定的处理器时也可以采用RISCV架构自行开发。同时RISCV具有低功耗的特点,适合嵌入式开发。
RISC-V基本介绍相关推荐
- RISC V (RV32+RV64) 架构 整体介绍
文章目录 riscv 市场 芯片介绍 软件介绍 开发板介绍 PC介绍 riscv 架构 编程模型(指令集/寄存器/ABI/SBI) 运行状态 指令集 寄存器 riscv32和riscv64两者的区别 ...
- 计组学习笔记2(RISC v版)
指令集解释 (规定:R[r]表示通用寄存器r的内容,M[addr]表示存储单元addr的内容,SEXT[imm]表示对imm进行符号扩展,ZEXT[imm]表示对imm进行零扩展) 整数运算类 -U型 ...
- 以太坊创始人V神介绍
"V神"的真名叫维塔利克·布特林,他以太坊的创始人,是区块链界真正的大佬. 1994 年 1 月 31 日,V神出生于俄罗斯,6 岁时,他跟随父母移民到加拿大.他的父亲是一个计算机 ...
- 安装Ubuntu RISC V toolchain失败(网速、git配置原因)
git获取大容量工程出错:RPC failed: curl GnuTLS recv error : Decryption has failed. error: RPC failed; curl 56 ...
- RISC-V指令集架构介绍及国内外厂商介绍
文章目录 RISC-V架构介绍 ·RISC-V简介 ·CPU主流架构:x86.ARM.RISC-V ·RICS-V的设计理念及优势 ·RISC-V的历史沿革与市场应用 国内外厂商介绍 ·SiFive ...
- V神北京演讲全文:Casper与分片技术的最新进展
6月3日,2018以太坊技术及应用大会在京召开,以太坊创始人Vitalik Buterin出席大会并在演讲中分享了Casper与分片技术的最新进展. 在提及二次分片时,V神称假设一个节点能处理N个交易 ...
- 华为手机鸿蒙系统官方下载入口,华为鸿蒙系统官方下载入口v.20
华为鸿蒙系统官方下载入口v.20是一款非常好用的国产手机程序.华为鸿蒙系统官方下载入口v.20为您带来了华为方面提供的权威下载地址.在这款国产手机系统里您可以收获到相比于各种老牌外国手机系统更好的体验 ...
- 永磁同步电机恒压频比(V/F)控制Simulink仿真
1 V/F介绍 V/F控制作为一种简单的开环控制方式,常常用于异步电机的变频起动,同样也可以用于同步电机的起动,但是用在永磁同步电机中存在失步,效率低,转速不稳定等问题. 先说说为什么永磁同步电机会失 ...
- 百度企业百家号运营矩阵三部曲——1、蓝V认证 2、企业头条 3行业词占领(蓝V2.0);蓝V认证立享21项特权(度爷解说收藏版)
一.企业百家号认证详细介绍 经过不断地打磨,百度百家号企业[认证服务(上一版本)]终于浮出水面.此品牌企业蓝v认证介绍版本是最新官方版,度爷在此加以解读分析,供大家更详细地参考阅读:充分了解后,尽快入 ...
- 测试模型 V模型 W模型(双V模型) H模型 优缺点解析
一.测试模型概述 软件测试和软件开发一样,都遵循软件工程原理,遵循管理学原理,所以理解好软件的开发模型会便于理解测试模型. 软件测试的一般流程: 我们发现一般的软件测试流程和软件开发的流程一样,但是这 ...
最新文章
- SQL Relay 0.47 发布,SQL 中间层
- nginx实现请求的负载均衡 + keepalived实现nginx的高可用
- 用jquery的ajax功能获取网站alexa的方法
- ios 点击出现另外一套tabbar_iOS开发中TabBar再次点击实现刷新效果
- 二分搜索 HDOJ 2289 Cup
- 使用dynDNS+openSSH+putty突破公司防火墙
- linux配置ip地址 suse_suse linux中为单网卡配置多IP的方法
- C++ 内存分配层次以及memory primitives的基本用法
- C++头文件保护符和变量的声明定义
- python在线学习直播-Python在线学习最有效马哥开启全网独家全程直播课
- 南京玄武常发广场远程预付费电能管理系统的设计与应用(安科瑞 顾晓燚)
- Protel99se 犯的错误
- 伊斯兰教历的计算和各个月的名称
- IDEA 社区版下载与安装
- Gromacs基础教程一:入门建议
- RT-Thread Studio 使用笔记(六)| 获取光传感器数据(I2C设备驱动+BH1750手写驱动代码分享)
- Lucene打分公式详解(TFIDFSimilarity)
- 阿里内网最新发布“M8”级Java面试笔记,助力金九银十
- 针对场景化痛点,锐捷网络推出极简光 2.X,以太全光网再下一城
- 具有跳跃性思维的算法
热门文章
- Arduino ESP32 第三方库读取SD卡信息(三)
- DZ插件制作简易入门教程(自学手记)第二篇
- 使用Amazon Elasticache构建你的专属内存缓存服务集群
- 闲聊弹幕网站背后的用户需求和心理动机
- 所见即所得的php编辑,常用所见即所得HTML在线编辑器汇总(15个)
- 分享50个免费的云盘网盘服务——拥有无限储存空间
- backupexec mysql_backup-mysql.sh
- Symantec Backup Exec 2010 安装报 bad ELF interpreter: No such file or directory
- HackMyVM-hostname
- 计算机与数学交融的教学设计,信息技术与小学数学学科的整合 小学数学教案...