基于risc-v架构cpu
一、定义:
二、指令集
三、32 位指令集
本文只是简单的介绍32位指令集的一些原理及使用:
1、立即数编码变种
1)ADDI将符号扩展的12位立即数加到寄存器rs1上。算术溢出被忽略,而结果就是运算结果的低XLEN位。ADDI rd,rs1,0用于实现MV rd,rs1汇编语言伪指令。SLTI(set less than immediate)将数值1放到寄存器rd中,如果寄存器rs1小于符号扩展的立即数(比较时,两者都作为有符号数),否则将0写入rd。SLTIU与之相似,但是将两者作为无符号数进行比较(也就是说,立即数被首先符号扩展为XLEN位,然后被作为一个无符号数)。注意,SLTIU rd,rs1,1将设置rd为1,如果rs1等于0,否则将rd设置为0(汇编语言伪指令SEQZ rd,rs)。ANDI、ORI、XORI是逻辑操作,在寄存器rs1和符号扩展的12位立即数上执行按位AND、OR、XOR操作,并把结果写入rd。注意,XORI rd,rs1,-1在rs1上执行一个按位取反操作(汇编语言伪指令NOT rd,rs)。
2)被移位常数次,被编码为I类格式的特例。被移位的操作数放在rs1中,移位的次数被编码到I立即数字段的低5位。右移类型被编码到I立即数的一位高位。SLLI是逻辑左移(0被移入低位);SRLI是逻辑右移(0被移入高位);SRAI是算术右移(原来的符号位被复制到空出的高位中)。
3)LUI(load upper immediate)用于构建32位常数,并使用U类格式。LUI将U立即数放到目标寄存器rd的高20位,将rd的低12位填0。AUIPC(add upper immediate to pc)用于构建pc相对地址,并使用U类格式。AUIPC从20位U立即数构建一个32位偏移量,将其低12位填0,然后将这个偏移量加到pc上,最后将结果写入寄存器rd。
2、控制转移指令
1)无条件跳转
跳转并连接(JAL)指令使用了UJ类格式,此处J立即数编码了一个2的倍数的有符号偏移量。这个偏移量被符号扩展,加到pc上,形成跳转目标地址,跳转范围因此达到±1MB。JAL将跳转指令后面指令的地址(pc+4)保存到寄存器rd中。标准软件调用约定使用x1来作为返回地址寄存器。普通的无条件跳转指令(汇编语言伪指令J)被编码为rd=x0的JAL指令
2)间接跳转指令JALR(jump and link register)使用I类编码。通过将12位有符号I类立即数加上rs1,然后将结果的最低位设置为0,作为目标地址。跳转指令后面指令的地址(pc+4)保存到寄存器rd中。如果不需要结果,则可以把x0作为目标寄存器。
3)条件分支
分支指令比较两个寄存器。BEQ和BNE将跳转,如果rs1和rs2相等或者不相等。BLT和BLTU将跳转,如果rs1小于rs2,分别使用有符号数和无符号数进行比较。BGE和BGEU将跳转,如果rs1大于等于rs2,分别使用有符号数和无符号数进行比较。注意,BGT、BGTU、BLE和BLEU可以通过将BLT、BLTU、BGE、BGEU的操作数对调来实现。
3、Load 和 store 指令
RV32I是一个load-store体系结构,也就是说,只有load和store指令可以访问存储器,而算术指令只在CPU寄存器上进行操作运算。RV32I提供了一个32位用户地址空间,它是字节寻址并且是小端的。执行环境将定义这个地址空间的哪些部分是可以合法访问的(译者注:这涉及到存储保护等)。
Load和store指令在寄存器和存储器之间传输数值。Load指令编码为I类格式,而store指令编码为S类格式。有效字节地址是通过将寄存器rs1与符号扩展的12位偏移量相加而获得的。Load指令将存储器中的一个值复制到寄存器rd中。Store指令将寄存器rs2中的值复制到存储器中。LW指令将一个32位数值从存储器复制到rd中。LH指令从存储器中读取一个16位数值,然后将其进行符号扩展到32位,再保存到rd中。LHU指令存储器中读取一个16位数值,然后将其进行零扩展到32位,再保存到rd中。对于8位数值,LB和LBU指令的定义与前面类似。SW、SH、SB指令分别将从rs2低位开始的32位、16位、8位数值保存到存储器中。
4、整数寄存器-寄存器操作
ADD和SUB分别执行加法和减法。溢出被忽略,并且结果的低XLEN位被写入目标寄存器rd。SLT和SLTU分别执行符号数和无符号数的比较,如果rs1<rs2,则将1写入rd,否则写入0。注意,SLTU rd,x0,rs2,如果rs2不等于0(译者注:在RISC-V中,x0寄存器永远是0),则把1写入rd,否则将0写入rd(汇编语言伪指令SNEZ rd,rs)。AND、OR、XOR执行按位逻辑操作。SLL、SRL、SRA分别执行逻辑左移、逻辑右移、算术右移,被移位的操作数是寄存器rs1,移位次数是寄存器rs2的低5位。
附录
这些博客的内容来自我工作、学习时的感悟、与行业前辈的交流感悟以及读书时的笔记,一部分内容可能与其他的网络资源类似,如果有相关问题的话(比如内容有错),请私聊博主或者在博文下面留言评论。
写博客最初目的就是记录自己容易忘记的东西,而不是像写书那样专门写给别人看的。所以,文章可以转载(转载请标明出处 http://www.cnblogs.com/podia/ ,作者:podia),无需版权。
基于risc-v架构cpu的更多相关文章
- X86架构CPU常识(主频,外频,FSB,cpu位和字长,倍频系数,缓存,CPU扩展指令集,CPU内核和I/O工作电压,制造工艺,指令集,超流水线与超标量)
1.主频 主频也叫时钟频率,单位是MHz,用来表示CPU的运算速度. CPU的主频=外频×倍频系数.很多人认为主频就决定着CPU的运行速度,这不仅是个片面的,而且对于服务器来讲,这个认识也出现了偏差. ...
- ARM架构--CPU的微架构
网上确实有说ARM架构的,但是此架构泛指用ARM指令系统的CPU,而不是CPU的微架构.,硬件电路上,要用ARM指令集系统,必然硬件设计电路上要要遵循,ARM指令的特点和寻址方式,所以说高通和苹果的C ...
- MapReduce过程详解(基于hadoop2.x架构)
本文基于hadoop2.x架构详细描述了mapreduce的执行过程,包括partition,combiner,shuffle等组件以及yarn平台与mapreduce编程模型的关系. mapredu ...
- 服务器文档下载zip格式 SQL Server SQL分页查询 C#过滤html标签 EF 延时加载与死锁 在JS方法中返回多个值的三种方法(转载) IEnumerable,ICollection,IList接口问题 不吹不擂,你想要的Python面试都在这里了【315+道题】 基于mvc三层架构和ajax技术实现最简单的文件上传 事件管理
服务器文档下载zip格式 刚好这次项目中遇到了这个东西,就来弄一下,挺简单的,但是前台调用的时候弄错了,浪费了大半天的时间,本人也是菜鸟一枚.开始吧.(MVC的) @using Rattan.Co ...
- 基于B/S架构的在线考试系统的设计与实现
前言 这个是我的Web课程设计,用到的主要是JSP技术并使用了大量JSTL标签,所有代码已经上传到了我的Github仓库里,地址:https://github.com/quanbisen/online ...
- 基于C/S架构的3D对战网络游戏C++框架_【不定期更新通知】
由于笔者最近有比赛项目要赶,这个基于C/S架构的3D对战网络游戏C++框架也遇到了一点瓶颈需要点时间沉淀,所以近一段时间不能保证每天更新了,会保持不定期更新.同时近期笔者也会多分享一些已经做过学过的C ...
- 基于C/S架构的3D对战网络游戏C++框架_01服务器端与客户端需求分析
本系列博客主要是以对战游戏为背景介绍3D对战网络游戏常用的开发技术以及C++高级编程技巧,有了这些知识,就可以开发出中小型游戏项目或3D工业仿真项目. 笔者将分为以下三个部分向大家介绍(每日更新): ...
- [我所理解的REST] 3.基于网络应用的架构
上篇中解释到什么是架构风格和应该以怎样的视角来理解REST(Web的架构风格).本篇来介绍一组自洽的术语,用它来描述和解释软件架构:以及列举下对于基于网络的应用来说,哪些点是需要我们重点关注的. 1 ...
- [解读REST] 4.基于网络应用的架构风格
上篇文章介绍了一组自洽的术语来描述和解释软件架构:如何利用架构属性评估一个架构风格:以及对于基于网络的应用架构来说,那些架构属性是值得我们重点关注评估的.本篇在以上的基础上,列举一下一些常见的(RES ...
- [解读REST] 3.基于网络应用的架构
链接上文[解读REST] 2.REST用来干什么的?,上文中解释到什么是架构风格和应该以怎样的视角来理解REST(Web的架构风格).本篇来介绍一组自洽的术语,用它来描述和解释软件架构:以及列举下对于 ...
随机推荐
- 初等函数——幂函数(Power Function)
幂函数(Power function)是形如f(x)=xa的函数,a∈R是实数.即以底数为自变量,幂为因变量,指数为常数的函数称为幂函数. 性质 幂函数的图像一定会出现在第一象限内,一定不会出现在第四 ...
- JavaFx在Main中获取Controller初始化相关配置和Fxml
Main中的方法 package sample; import javafx.application.Application; import javafx.fxml.FXMLLoader; impor ...
- Video.js + HLS 在production环境下webpack打包后出错的解决方案
Video.js是一个非常强大的视频播放库,能在微信下完美提供inline小窗口播放模式,但当涉及到hls格式视频播放时就比较麻烦,出现的数种现象都不好解决. 错误现象: 1. PC Chrome ...
- 记录openssl和openssh升级中遇到的问题以及解决方法
本文档讲述的升级操作是基于操作系统centos6.5,使用的openssl版本是openssl-1.0.2l.tar.gz,openssh版本是openssh-7.6p1.tar.gz. 1. 依赖检 ...
- JVM垃圾回收安全点Safe Point
GC安全点(Safepoint) 程序执行时并非在所有地方都能停顿下来开始GC,只有在特定的位置才能停顿下来开始GC,这些位置称为“安全点(Safepoint) ” Safe Point的选择很重要, ...
- matlab数字图像处理-给图片加入可视水印信息
将文件夹路径改成了我想要存放代码的文件夹下 然后也是在网上百度,找到了一个代码,敲着模仿了一个 自己建立了一个脚本文件 >>edit test1 然后在脚本中添加 %读取待嵌入水印的图像和 ...
- SpringValid优雅校验入参
一.简介 后台业务入口类Controller,对于入参的合法性校验,可以简单粗暴的写出一堆的 if 判断,如下: @RestController @RequestMapping("user& ...
- 永远不要在代码中使用“User”这个单词
当你意识到你在项目开始时做的轻量.简单的设想竟然完全错了时,你已经用了六个月的时间投入到这个项目上.现在你需要解决这些问题,才能让这个系统继续运行下去,你发现你用在这个项目上的精力远远超出了你的预 ...
- IOT(esp8266)
今日工具: 硬件: esp8266 DHT11温湿度传感器 软件: Arduino ESP8266 是一款由乐鑫 Espressif 公司制作的低成本的 Wi-Fi 芯片,具有完整的 TCP / IP ...
- layui动态添加选项卡
<!DOCTYPE html><html xmlns:th="http://www.thymeleaf.org"><head> <meta ...