RISC-V体系结构编程与实践
文章平均质量分 67
《RISC-V体系结构编程与实践》的学习笔记
正在起飞的蜗牛
这个作者很懒,什么都没留下…
展开
-
以RISC-V架构的CLIC中断机制讲解:中断咬尾、中断抢占、中断晚到
中断抢占的条件高特权模式的中断可以抢占低特权模式的中断,不管低特权模式的全局中断是否使能同特权模式的中断,高中断等级的中断要抢占低特权等级的中断,前提是特权模式的全局中断必须要使能中断抢占:前一个中断还在执行时发生了更高等级的中断,立马去执行高等级的中断处理程序,等高等级的中断处理程序执行完毕,再回来执行前一个中断出来程序的剩余部分。原创 2024-03-22 19:00:00 · 522 阅读 · 0 评论 -
RISC-V架构中mret、sret、ret三个指令的区别
ret用于函数调用返回,mret和sret用于从高特权模式切换回陷入前的地特权模式。原创 2024-03-21 19:00:00 · 553 阅读 · 0 评论 -
RISC-V架构的三种特权模式如何切换
【代码】RISC-V架构的三种特权模式如何切换。原创 2024-03-20 20:25:23 · 1183 阅读 · 0 评论 -
RISC-V架构——CLINT中断控制器初始化(直接模式、向量模式)
模式位占用两个bit,其中2和3这两个值是保留的,在有的芯片中,2和3会分别对应CLIC的直接模式和CLIC的向量模式模式位不仅可以决定是直接模式还是向量模式,还可以决定使用CLINT控制器还是CLIC控制。原创 2024-02-20 18:30:00 · 1202 阅读 · 0 评论 -
RISC-V架构常见gcc编译选项(-march、-mabi=、-mcmodel、-mlittle-endian、-mbig-endian)
【代码】RISC-V架构常见gcc编译选项(-march、-mabi=、-mcmodel)原创 2024-01-28 10:35:19 · 1594 阅读 · 0 评论 -
RISC-V架构学习资料整理
https://github.com/bigmagic123/d1-nezha-baremeta原创 2024-03-06 19:24:15 · 489 阅读 · 0 评论 -
RISC-V架构的不可屏蔽中断(NMI:Non-Maskable Interrupt)介绍
以NMI为例,芯莱处理器的硬件行为在“The overall process of NMI”章节描述。注意,下面的操作在一个周期中同时完成:当发生NMI时,硬件会自动将NMI的编码保存到mcause寄存器中,异常、中断和NMI都有专属的trap ID。NMI的trap ID有两种潜在的值被mmisc_ctl寄存器控制软件可以通过查询Trap ID区分出陷入原因,并且对不同的陷入类型构建对应的处理函数原创 2024-03-06 19:12:05 · 884 阅读 · 0 评论 -
芯来芯片的硬件栈溢出检测机制(Stack Check)介绍
硬件的栈溢出检测机制原创 2024-02-26 19:00:00 · 346 阅读 · 0 评论 -
RISC-V架构——中断处理和中断控制器介绍
本文不是从零开始讲解中断,对于中断的基本知识不再赘述,对中断不是很了解可以先学习ARM中断的文章。;原创 2023-10-25 20:45:00 · 1359 阅读 · 0 评论 -
RISC-V架构——中断委托和中断注入
(1)默认情况下,所有的陷入(中断和异常)都是在M模式下处理,然后再返回到发生陷入前的模式;(2)所有陷入都在M模式处理会涉及到模式切换,而模式切换是比较消耗性能和时间的。比如:在S模式下发生外部中断,需要切换到M模式处理中断,然后再返回到S模式;(3);原创 2023-10-25 19:00:00 · 725 阅读 · 0 评论 -
玄铁C906——物理内存保护(PMP)介绍
(1)本文描述的是玄铁C906的物理内存保护机制的实现中,与RISC-V架构手册中完整PMP机制的差异部分;;原创 2023-10-24 16:10:26 · 503 阅读 · 0 评论 -
RISC-V架构——物理内存保护机制设置函数(pmp_set、pmp_get)解析
3、pmp_set函数分析3.1、函数传参分析原创 2023-10-23 20:00:00 · 562 阅读 · 0 评论 -
RISC-V架构——物理内存属性和物理内存保护
(1)系统内存映射包含各种不同属性的地址空间范围,每个地址空间范围支持的操作不一样;(2)物理内存属性一般是在芯片设计阶段就固定下来(大部分芯片不支持软件修改),芯片内存有PAM检测器,PMA检测器会对物理地址权限和属性做检查;原创 2023-10-19 19:00:00 · 1796 阅读 · 2 评论 -
RIAC-V架构开发——ecall函数调用分析
(1)sbi_ecall函数是内核调用SBI的接口,在RISC-V架构中定义了SBI规范,内核通过ecall指令来调用SBI接口进而操作硬件;(2)SBI规范参考官网文档《riscv-sbi.pdf》;原创 2023-10-16 20:27:12 · 1701 阅读 · 0 评论 -
RIAC-V架构开发——CSR指令访问控制与状态寄存器的两种方式(寄存器名字、寄存器编号)
(1)CSR,即Control and Status Register,控制与状态寄存器,属于CPU自带的一类寄存器,csr寄存器采用12bit编码,共支持4096个csr寄存器,其中RISC-V架构规定占用了部分地址,剩下的地址可自由分配;(2)CSR指令是专门用来访问csr寄存器的,具体指令格式见上图;原创 2023-10-16 19:00:00 · 1444 阅读 · 0 评论 -
《RISC-V体系结构编程与实践》的benos_payload程序——mysbi跳转到benos分析
韦东山老师提供的开发文档里已经对程序的结构做了分析,这里不再赘述,下面是讨论mysbi跳转到benos的问题;原创 2023-10-11 20:00:00 · 656 阅读 · 0 评论 -
链接器松弛优化原理介绍
(1)作用:通常RISC架构处理器访问符号地址需要两条指令,一条指令处理地址高位,一条指令处理地址地位,但是在链接阶段,通过链接松弛优化,使用一条指令实现对符号地址的访问;(2)链接松弛优化主要涉及两方面:函数跳转优化、符号地址访问优化;原创 2023-09-13 18:03:56 · 437 阅读 · 3 评论 -
RISV-V架构的寄存器介绍
(1) 通用寄存器:寄存器的功能没有提前定义,是给编写代码的程序员使用的,具体寄存器里保存的数据是什么含义,是由编写代码的程序员决定;(2)系统寄存器:和处理器模式相关的寄存器,寄存器的每个bit都已经提前定义好,程序员只能按照规则来操作系统寄存器。比如:M、S、U各个模式下的系统寄存器,每个寄存器的每个bit都已经定义好了含义;原创 2023-09-13 17:57:09 · 4049 阅读 · 0 评论 -
汇编宏伪指令介绍
(1)“"和”"表示宏定义的开始和结束;(2) “.macro"后面接着宏定义的名字,然后是参数,参数后面的宏定义的实现;(3)在宏定义中使用参数,需要添加前缀”";原创 2023-09-16 17:15:41 · 541 阅读 · 0 评论 -
RISC-V架构的函数调用规范和栈布局
(1)函数的前8个参数使用a0-a7寄存器传递,如果传参多于8个,则除前8个参数使用寄存器来传递之外,后面的参数使用栈传递;(2)如果传递的参数小于寄存器宽度(64位),那么先按符号扩展到32位,再按符号扩展到64位;(3)如果传递的参数为寄存器宽度的2倍(128位),那么将使用一对寄存器来传递参数;(4)函数的返回值保存到a0和a1寄存器中;(5)函数的返回地址保存在ra寄存器中;原创 2023-09-27 17:25:26 · 584 阅读 · 0 评论 -
qemu源码下载和安装
qemu源码安装原创 2023-09-27 17:29:10 · 1371 阅读 · 0 评论 -
RISC-V架构学习——C语言内嵌汇编总结
关键字含义memory告诉编译器,内嵌汇编代码改变了内存中的值,执行完汇编代码后重新加载该值cc告诉编译器,内嵌汇编代码修改了状态寄存器的相关标志位asm goto(: "r"(a): "memory": label);return 0;label:(1)输出部必须是空的。goto是用于跳转功能,在满足某个条件下进行跳转,没有输出数据的必要;(2)相较于其他情况,goto修饰的情况下多了标签部,表明最后要跳转的标签处;原创 2023-09-16 17:46:25 · 1750 阅读 · 0 评论