RISCV基础知识

ops/2025/2/13 21:40:45/

一、ISA指令集

ISA 命名格式:RV [###] [abc…xyz]

RV:用于标识 RISC-V体系架构的前缀,既 RISC-V 的缩写。

[###] :{32, 64, 128} 用于标识处理器的字宽,也就是处理器的寄存器的宽度(单位为bit)。

[abc…xyz] :标识该处理器支持的指令集模块集合。

例子:RV32IMA,RV64GC

增量化:即下一代兼容上一代处理器的ISA

模块化:指令集的构成由1个基本整数指令集加上多个可选的扩展指令集组成,基础指令集是固定的,永远不会改变。

1.1基础整数指令集

是唯一强制要求实现的基础指令集,其他指令集都是可选的扩展模块。

1.2扩展指令集

RISC-V 允许在实现中以可选的形式实现其他标准化和非标准化的指令集扩展。

特定组合“IMAFD”被称为“通用(General)”组合,用英文字母G表示。

例子:

RV32I:最基本的 RISC-V 实现。

RV32IMAC:32位实现,支持 Integer + Multiply + Atomic + Compressed 。

RV64GC:64位实现,支持 IMAFDC 。

二、术语

2.1Hart

hardware thread 硬件线程,一个处理器有多个执行流

2.2特权级别

2.3 IALIGN

instruction-address alignment constraint the implementation enforces指令地址强制对齐,参看第三点

2.4ILEN

the maximum instruction length supported by an implementation

所支持的最大指令长度

2.5 EEI

execution environment interface执行环境接口

定义了程序的初始状态、环境中 hart 的数量和类型(包括 hart 支持的权限模式)、内存和 I/O 区域的可访问性和属性、在每个 hart 上执行的所有合法指令的行为(即 ISA 是 EEI 的一个组件), 以及处理执行过程中引发的任何中断或异常,包括环境调用。

RISC-V 里面用的是管理程序二进制接口 (SBI) supervisor binary interface

2.6分支延迟槽

为了避免流水线气泡。

假设我们在执行阶段才知道比较跳转指令beq需要跳转,那么此时已经在取指、译码的两条指令会无效,下一个时钟周期需要把它们清空,于是流水线出现两个周期的气泡,即浪费了两个clk,

那我们索性不清空取指阶段指令,让它继续执行,反正下一个指令是跳转指令,只要有个标记知道它是“多出”的指令,称为“延迟槽指令”。所以把转移指令后面的指令位置称为“延迟槽”。这样流水线就没有气泡了。

这种方法的思想其实是去延长分支指令的执行时间,因此多出来的时间可以用来填补上图分支预测失败导致的丢弃指令的操作。那么如何延长呢?其实就是通过设置延迟槽(slot),一般来说,延迟槽都是一个,且无论分支是否成功,都需要执行延迟槽中的指令。

总而言之,延迟槽的作用就是通过找与分支无关的指令(或者不影响分支运行的指令)去充分利用分支的空间,进而削弱预测分支的副作用,减少分支延迟。

2.7 RAS

return address stack返回地址堆栈,使用容量有限的硬件堆栈来存储函数调用(间接跳转)的返回地址。

三、指令集编码

3.1基本指令集编码

base insturction是32位对齐的;但是一些扩展指令是16位对齐的

IALIGN--instruction-address alignment constraint the implementation enforces

ILEN --(measured in bits) refer to the maximum instruction length supported by an implementation。他是IAIGN的倍数。对于仅支持基本指令集的实现,ILEN 为 32 位。支持较长指令的 implementations 具有更大的 ILEN 值。

3.2扩展指令集编码

标准的 RISC-V 指令长度编码约定。基本 ISA 中的所有 32 位指令的最低 2 位都设置为 11。可选的压缩 16 位指令集扩展的最低两位等于 00、01 或 10。

低16位全为0的指令是非法的;指令位全为1或0的指令也是非法的

ISA基础指令小端序和大端序都是可以的,与 内存系统的序是解耦的。

四、中断(interrupts)、异常(exceptions)与陷入(traps)

4.1 中断

是由CPU外部产生的,对CPU来说,是被动的。

当中断发生时,CPU将下一条指令,也就是接下来要执行的指令的地址压入栈作为中断服务的返回地址。

4.2陷入

是由CPU本身在执行程序过程中产生的。它是由专设的指令,如X86中的“INT n”,在程序中有意产生的,是主动的。

同中断一样,当陷入发生时,CPU将下一条指令,也就是接下来要执行的指令的地址压入栈,作为中断服务的返回地址。

4.3异常(或称fault)

是由于CPU因无法完成一些指令而产生的,如除以0、映射失败,等等。

当异常发生时,CPU将当前指令的地址(而不是下一条指令的地址)压入栈,作为异常服务的返回地址。这样,就可以在异常处理返回时完成未完成的事业。

这个特殊性是在CPU的内部电路实现的,而不需由软件干预。即是由Intel实现的,和微软没关系。

五、原子操作的概念

在RISC-V架构中,原子操作是指不可分割的操作,即在操作执行过程中不会被其他操作中断

RISC-V的内存模型定义了原子操作的顺序和一致性规则。原子操作通常具有强内存顺序语义,确保在多核或多线程环境中的正确性。为了进一步控制内存操作的顺序,RISC-V还提供了FENCE指令,用于显式地强制执行内存屏障。

本文部分 参看博客RISC-V入门(基础概念+汇编部分) 基于 汪辰老师的视频笔记_risc-v csdn-CSDN博客

如有侵权请联系删除


http://www.ppmy.cn/ops/157064.html

相关文章

wordpressAI工具,已接入Deepseek 支持自动生成文章、生成图片、生成长尾关键词、前端AI窗口互动、批量采集等

基于关键词或现有内容生成SEO优化的文章,支持多种AI服务(如OpenAI、百度文心一言、智谱AI等),并提供定时任务、内容采集、关键词生成等功能。 核心功能 文章生成 关键词生成:根据输入的关键词生成高质量文章。 内容…

亚博microros小车-原生ubuntu支持系列:24 巡线驾驶

这篇跟之前的颜色识别类似,亚博microros小车-原生ubuntu支持系列:21 颜色追踪-CSDN博客 1、程序功能说明 程序启动后,调整摄像头的俯仰角,把摄像头往下掰动,使得摄像头可以看到线,然后点击图像窗口&#…

【MySQL系列】记插入产生的死锁问题

???欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老…

DeepSeek R1本地化部署 Ollama + Chatbox 打造最强 AI 工具

🌈 个人主页:Zfox_ 🔥 系列专栏:Linux 目录 一:🔥 Ollama 🦋 下载 Ollama🦋 选择模型🦋 运行模型🦋 使用 && 测试 二:🔥 Chat…

?和.和*在正则表达式里面的区别

在正则表达式中,?、. 和 * 是三种非常重要的元字符,它们各自有不同的功能和用途,以下是它们的区别: ?(问号) 功能:表示前面的元素(字符、字符集、分组等)是可选的&…

Node-RED的基础用法

一、准备工作 需要先安装Node-RED Home Assistant中安装开源低代码的事件驱动图形化编排工具——Node-RED文章浏览阅读137次。 Node-RED是一种开源的低代码工具,它用于以新颖有趣的方式将硬件设备、API 和在线服务连接在一起;它提供了一个基于浏览器的Web编辑器,通过图形化…

springboot基于微信小程序的仓储管理系统

大家好,我是2013crazy,今天为大家带来的是Java 基于 SpringBootVue 的校园兼职平台。Java 项目的安装部署教程,包括软件的下载,软件的安装。该系统采用 Java 语言开发,SpringBoot 框架,MySql 作为数据库&am…

idea整合deepseek实现AI辅助编程

1.File->Settings 2.安装插件codegpt 3.注册deepseek开发者账号,DeepSeek开放平台 4.按下图指示创建API KEY 5.回到idea配置api信息,File->Settings->Tools->CodeGPT->Providers->Custom OpenAI API key填写deepseek的api key Chat…