RISC-V学习整理
RISC-V学习整理
目前网上关于risc-v架构概念介绍的文章比较多,本文从开发角度把学习中的记录整理出来。
以下为作者为自学记录内容,文章仅抛砖引玉,有学习需要的同学还需以官网及risc-v专家的书籍为准。
有错误欢迎指出,共同学习进步。
RISC-V:
- RV32I RV32E
RV32G表示RV32IMAFD
I – 32位地址空间,32个通用寄存器
M – 整数乘,整数除
A – 原子操作指令
F – 单精度浮点
D – 双精度浮点
C – 压缩指令,长度16 - RISC-V仅支持小端
RISC-V不支持地址自增自减
RISC-V有2条无条件跳转指令,6条条件跳转指令
汇编部分:
1.伪操作,汇编结束伪操作就结束
2. .option rvc 表示接下来的汇编程序可以被汇编生成16位宽的压缩指令
.option norvc 表示接下来的汇编程序不可以被汇编生成16位宽的压缩指令
3. li 赋值
la 标签地址赋值
中断和异常:
- 广义中断和异常都称为异常
同步:非法地址空间,访问地址属性,取指非对齐,非法指令,断点
异步:外部中断(精确),读写存储器(非精确) - 异常发生 --> 硬件更改寄存器 --> 软件读取寄存器判断 --> 异常处理
系统会读取mcause寄存器判断何种异常从而跳转异常处理
RISC-V硬件不会保存上下文,需要软件保存和恢复 - 相关寄存器
mtvec
异常入口地址寄存器,指定异常处理的pc地址,软件可以更改其值
高30为是BASE
低2位是mode模式 —| mode=0 所有异常响应 BASE 为 PC
| mode =1 —| 狭义异常响应 BASE 为 PC
| 狭义中断响应 BASE+4×casue(中断异常编号) 为 PC
mcause
软件可读取寄存器,查看异常原因
高1位 interropt域
低31位 异常编号域 --> 定义了12种中断类型和10种异常类型
mepc
保存原PC,用于异常返回,可读写,软件可以更改
中断时,mepc为下一条指令
异常时,mepc为发生异常时当前的PC
mtral
异常值
如果存储器访问,mtral为存储器地址
如果非法指令,mtral为非法指令编码
mstatus
机器模式状态
MIE=1,该模式下中断全局打开,为0关闭
进入异常和退出时都会更改此寄存器 - RISC-V狭义的异常不可以被屏蔽
狭义的中断可以被屏蔽,通过中断使能寄存器mie控制 - RISC-V不支持硬件中断嵌套
进入异常后,mstatus中mie会被硬件该为0,则中断全局关闭,不支持硬件中断嵌套
中断嵌套需要有软件实现:
a.读取mcause确认是中断
b.软件强写mie为1
打开mie前需要注意 —| 屏蔽优先级低的中断可以修改mie中几个域
| 也可以通过修改PLIC屏蔽低优先级中断
| 软件注意保存中断上下文
| 软件注意修改mepc值,恢复使用
PLIC 平台级别中断控制器:
支持0~7共8个中断目标
中断编号0 做为保留,实际中断源为(支持个数-1)个
优先级为0~7,数字越大,优先级越高。优先级0可以认为屏蔽中断
另一种屏蔽中断方法是设置中断使能寄存器 IE为0中断处理流程
a 中断使能IE为1,中断源优先级大于0
b 外部中断经过gateway 寄存器IP(只读)被置1。
c 仲裁,优先选择高优先级中断,优先级一样则选编号小的中断,仲裁结果必须大于中断目标优先级阈值
d 产生中断。
e 中断目标读取存储器地址映射的中断响应寄存器(可读)进行响应,且返回id ,通过此id进行中断处理
f 将id写入中断完成寄存器(可写)表示中断结束,硬件自动将IP置0, 解除gateway屏蔽,以便其他中断产生
RISC-V学习整理相关推荐
- 计组学习笔记2(RISC v版)
指令集解释 (规定:R[r]表示通用寄存器r的内容,M[addr]表示存储单元addr的内容,SEXT[imm]表示对imm进行符号扩展,ZEXT[imm]表示对imm进行零扩展) 整数运算类 -U型 ...
- ACM竞赛学习整理开篇之01背包问题
ACM竞赛学习整理开篇之01背包问题. 最近,偶然的一次机会让我关注信息奥赛的一些内容.发现其中的内容很有趣,是学习编程的一条很好的路径,又能很好地将数学和编程联系到一起.在csdn里看到了不少同好也 ...
- Vue-Cli 学习整理【转载】
Vue-Cli 学习整理 坚果 程序猿/艺术 关注他 21 人赞同了该文章 1. vue-cli(vue脚手架)全集 1.1. vue-cli2脚手架 1.1.1. nodejs/npm环境安装 1 ...
- red had第二次学习整理
#red hat 第二次学习整理 今天上午我们学习了Linux高级语法的使用,令我印象最深的是awk和sed,他们是两个不太好懂的语法,但是学起来尤为有意思,特别是结合管道符之后,下面让我们来看看. ...
- docker学习整理
Docker学习整理 概述 Docker 是一个开源的应用容器引擎,基于 Go 语言并遵从 Apache2.0 协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器 ...
- Java设计模式(学习整理)---命令模式
设计模式之Command(学习整理) 1.Command定义 不少Command模式的代码都是针对图形界面的,它实际就是菜单命令,我们在一个下拉菜单选择一个命令时,然后会执行一些动作. 将这些命令封装 ...
- 2019.07.30 学习整理
2019.07.30 学习整理 数据类型 1. 什么是数据类型 数据类型指的就是变量值的不同类型 2. 为何对数据分类? 变量的是用来反映状态以及状态变化的,毫无疑问针对不同的状态就应该用不同类型的数 ...
- java基础学习整理(一)
java基础学习整理(一) lesson1: D0s命令: 1.回到根目录,>cd \ 2.复制命令行下的内容,右击标记所要复制的内容,这样就已经复制好了,右击粘贴就可以了. 3.查看,设置环境 ...
- Elastic Nodes Example 翻译及学习整理
文章目录 Elastic Nodes Example 翻译及学习整理 题记: 简介: Node Class Definition Edge Class Definition GraphWidget C ...
- ACM竞赛学习整理--矩阵运算
ACM竞赛学习整理–矩阵运算 了解矩阵类 [任务] 实现矩阵的基本变换 [接口] 结构体:Matrix 成员变量: int n,m 矩阵大小 int a[][] 矩阵内容 重载运算符: +.-.x 成 ...
最新文章
- 肝了3版才满意:分布式系统之CAP理论,我们对它的理解和误解
- Dockerfile实践优化建议
- 蓝桥杯-2的次幂表示(java)
- Express新建工程以及新建路由规则、匹配路由规则、控制权转移
- vue xxx was assigned to but it has no setter.
- Linux基础命令(常用的)
- Air Data System
- 大数据力推产业转型升级
- 2019交大计算机考研分数线,上海交大2019考研计算机软件与理论的复式分数..._考研_帮考网...
- android 监听通知栏点击事件,android使用NotificationListenerService监听通知栏消息
- Android 10 LED 驱动开发
- python 多行注释 unicode error 问题
- 2017云计算与IT风向标—— 移动、转型、整合
- 计算机表格复制粘贴,Excel复制表格保留原格式不会操作?超全技巧教给你!
- 求循环小数的循环节C/C++
- 吴军的《见识》书的核心内容
- 计算机专业,真的这么赚钱吗?
- zipfile的压缩和解压缩
- 用python实现模拟登录人人网
- 设计问卷调查有哪些技巧?
热门文章
- 一款在线视频 App,基于 Material Design + MVP + RxJava + Retrofit + Realm + Glide
- 如何下载网页中的json文件
- 无言以队事后诸葛亮分析
- 傲游浏览器如何显示收藏夹栏 傲游浏览器显示收藏夹栏的方法
- 悖论在计算机中的应用,“索洛悖论”悖论 计算机影响随处可见
- android培训感想
- GS1011无线模块的使用简介。
- Python递归获取指定文件夹下的所有文件夹、文件
- 云文档服务器开小差,回首初中作文
- 开源倾情奉献:基于.NET打造IP智能网络视频监控系统