浅谈RISC-V指令集的基本指令格式和立即数操作

简介: 在以前的文章中,我分享了RISC-V在设计的初衷,除了可以被通用软件开发使用之外,还有一个目的就是,可以支持更多定制化的设计。也就是说,用户可以在基本指令集上面,进行一个或者多个的指令集扩展操作,但是有一个条件,不能再重新定义基本指令集。也就是说,任何一款基于RISC-V指令集的处理器,都要能够支撑整数基本指令集。可以看出基本指令集的重要性。

在以前的文章中,我分享了RISC-V在设计的初衷,除了可以被通用软件开发使用之外,还有一个目的就是,可以支持更多定制化的设计。也就是说,用户可以在基本指令集上面,进行一个或者多个的指令集扩展操作,但是有一个条件,不能再重新定义基本指令集。也就是说,任何一款基于RISC-V指令集的处理器,都要能够支撑整数基本指令集。可以看出基本指令集的重要性。

基本指令格式

那么今天我们就继续来分享一下,在基本指令集体系机构中(ISA),四种核心指令格式(R/I/S/U)。基本指令格式如下图所示:

图一 RISC-V 基本指令格式

从上图中,我们可以看出这四种核心指令格式有以下三个特点:

  1. 所有指令的长度固定,都为32位,以4字节边界对齐;
  2. 源寄存器rs1\rs2,以及目标寄存器rd的位置保持不变;
  3. 将立即数的符号位放置在最左边,方便进行符号扩展。

如果出现了条件分支或者无条件转移情况,并且地址没有按照4字节对齐时,就产生一个地址不对齐的异常。另外,为了指令译码简单,RISC-V   ISA将rs1、rs2和rd寄存器放在相同位置,这导致立即数不同比特被分散开。例如,当需要加载一个32位立即数时,通常由load指令给出高20bits,常规指令给出低12bits,两个共同拼为32bits。

需要说明的是,上面这些扩展都是有符号扩展,如果对无符号数进行扩展,并没有看到很明显的收益,所以对于无符号数而言,没有进行扩展的指令,这也使得整个ISA更加简洁。

立即数编码

立即数处理,除了上面四种之外,还有两种变形(SB/UJ),立即数基本指令格式如下图所示:

图二 立即数基本指令格式

对比图一和图二,我们不难看出,在SB格式中,(imm[10:1])和符号位被放在了固定的位置上面。SB中的最高位(imm[11])被刚在S格式中的最低位(inst[7])。U和UJ格式的区别与S和SB类似,就不再赘述。

在指令集中,立即数的符号扩展操作非常重要,为了立即数操作的高效性,在RISC-V中,将所有立即数的符号位固定在了指令的31位,这使得在指令译码的时候,可以同时进行立即数的符号扩展操作。虽然将立即数放在在指令中的固定位置,对于一些复杂的实现来讲,收益有限(因为会有对应的硬件开销支撑),但是这一做法仍然可以降低硬件电路的开销。

小结

今天我们分享了RISC-V中的基本指令格式,以及立即数编码格式的内容。从上面可以看出,整个RISC-V指令集的设计出发点,都是为了提升指令编译的效率,并且使得整个指令集更加简单。后面,我会继续分享RISC-V的其他指令,包括整数计算指令、控制指令等内容,欢迎大家继续关注。

上述内容由久芯网www.9icnet.com编辑整理发布,请勿转载

目录
相关文章
|
编解码
STM32:ADC单通道(内含:1.实物图/接线图+2.代码部分如下+3.AD用到的库函数总结)
STM32:ADC单通道(内含:1.实物图/接线图+2.代码部分如下+3.AD用到的库函数总结)
1431 0
STM32:ADC单通道(内含:1.实物图/接线图+2.代码部分如下+3.AD用到的库函数总结)
|
8月前
|
人工智能 自然语言处理 数据挖掘
智能体来了:从 0 到 1 搭建属于你的 AI 工作流
AI 正在从“对话工具”升级为“工作伙伴”。越来越多的工作可以通过 AI 工作流自动完成,例如信息整理、内容生成、数据分析与流程执行。本文从 0 到 1 介绍什么是 AI 工作流、为什么每个人都值得拥有自己的 AI 工作流,以及如何一步步搭建一个真正能提升效率的个人 AI 工作流系统。
2539 1
|
索引
鸿蒙开发:自定义切换动画实现Swiper层叠滑动效果
customContentTransition不仅仅可以实现平移上的改变,很多的效果,我们都可以实现,比如放大缩小,旋转等等。
630 2
鸿蒙开发:自定义切换动画实现Swiper层叠滑动效果
【verilog】同步复位,异步复位以及异步复位同步释放
该文讨论了数字电路设计中触发器复位机制的三种类型:同步复位、异步复位和异步复位同步释放。同步复位在时钟边沿确保稳定性,但对复位脉冲宽度有要求;异步复位响应快速,但可能受干扰且时序不确定;异步复位同步释放则结合两者的优点。设计时需根据需求权衡选择。文中还给出了Verilog代码示例。
|
安全 Shell 开发工具
Windows下使用git配置gitee远程仓库
就在前几天因为一些原因,我的电脑重装了系统,然后再重新配置git的环境的时候就遇到了一些小问题。所以我决定自己写一篇文章,以便以后再配置git时,避免一些错误操作,而导致全网搜方法,找对的文章去找对应的解决方法。下面为了演示方便就拿gitee来演示,不拿GitHub了写文章了。
761 0
|
机器学习/深度学习 人工智能 自然语言处理
Google gemini官网入口是什么_谷歌 AI gemini国内怎么使用
随着人工智能(AI)技术的迅猛发展,各大科技公司不断推出更为先进的AI模型,推动技术的边界。Google开发的Gemini便是其中的佼佼者。作为一款大型语言模型(LLM),Gemini旨在处理多种自然语言处理(NLP)任务,如文本生成、翻译、摘要和对话生成。Gemini结合了最新的研究成果和技术,显著提高了自然语言处理的准确性和效率。
|
存储 弹性计算 Serverless
什么是阿里云FPGA云服务器?FPGA云服务器产品优势及应用场景介绍
FPGA云服务器是阿里云提供的实例规格,融合现场可编程门阵列的低延迟硬件加速与弹性资源。FaaS平台简化了FPGA开发,提供统一硬件、开发环境和丰富的IP生态。特性包括硬件虚拟化、联合仿真和动态互联配置。产品计费与ECS一致,支持多种计费模式。优势在于分钟级交付、高性能加速、经济性价比和设计复用。应用广泛,如视频转码、人工智能、基因测序等。FPGA云服务器通过FPGA镜像、OSS服务等工具进行管理。
什么是阿里云FPGA云服务器?FPGA云服务器产品优势及应用场景介绍
如何用牛顿法求一个数的平方根
(一)导数与导函数 导数 设函数y=f(x)在点x0的某个邻域内有定义,当自变量x在x0处有增量Δx,(x0+Δx)也在该邻域内时,相应地函数取得增量Δy=f(x0+Δx)-f(x0);如果Δy与Δx之比当Δx→0时极限存在,则称函数y=f(x)在点x0处可导,并称这个极限为函数y=f(x)在点x0处的导数记作①f'(x0) ;②y'│x=x0 ;③ │x=x0, 即 导函数 如果函数y=f(x)在开区间内每一点都可导,就称函数f(x)在区间内可导。
5531 1
|
弹性计算 关系型数据库 数据库
利用阿里云进行性能优化:实践案例分享
在开发在线教育平台过程中,我们遇到了由于用户访问量增加而导致的性能瓶颈问题。通过使用阿里云的多种服务,包括RDS数据库、ECS弹性扩展、SLB负载均衡、OSS存储和CDN加速,我们对数据库、应用服务器和静态资源加载进行了全面优化。优化后的系统性能显著提升,数据库查询速度提高了60%,服务器负载下降了40%,静态资源加载时间减少了70%,从而极大改善了用户体验。本文详细介绍了问题分析、具体解决方案及其实施效果,旨在为其他开发者提供有价值的参考。
801 3
|
Shell C语言 SoC
计基2—RISCV指令集介绍与汇编
计基2—RISCV指令集介绍与汇编
970 1