![](https://img-blog.csdnimg.cn/direct/400431449dcb4c1c98d608b631e8b5c3.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
RISC-V架构相关内容
文章平均质量分 90
梳理总结了RISC-V架构相关内容
Maxwell47
这个作者很懒,什么都没留下…
展开
-
RISC-V异常处理流程概述(2):异常处理机制
一、异常处理流程和异常委托1.1 异常处理流程1.2 异常委托二、RISC-V异常处理中软件相关内容2.1 异常处理准备工作2.2 异常处理函数2.3 Opensbi系统调用的注册。原创 2024-07-10 20:33:51 · 1241 阅读 · 0 评论 -
OpenSBI初始化分析
再来看下非启动hart的动作:一直在等待启动hart的link_start和load_start相同,也就是_boot_status变为BOOT_STATUS_RELOCATE_DONE。接下来可以看到在几个nop指令后,非启动hart会跳转到_wait_for_boot_hart的链接地址,将继续等待启动hart完成其他的初始化工作。设置mtvec trap处理寄存器与_trap_handler函数。其他非启动hart将等待_boot_status=BOOT_STATUS_BOOT_HART_DONE。原创 2024-04-20 20:56:16 · 2087 阅读 · 0 评论 -
RV32F\RV32D指令集
F扩展增加了32个浮点寄存器f0-f31,每个32位宽,以及一个浮点控制和状态寄存器fcsr,其中包含浮点单元的工作模式和异常状态。FLEN=32表示F单精度浮点扩展,大多数浮点指令对浮点寄存器中的值进行操作。浮点加载和存储指令在寄存器和内存之间传输浮点值。还提供了将值传入和传出整数寄存器的说明。![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/d71efac8561f42c2810214874fc7ad06.png。原创 2024-06-14 22:20:50 · 980 阅读 · 0 评论 -
RV32A\CSR\Counters\Wait-on-Reservation-Set指令集
这些 AMO指令从 rs1 中的地址原子加载数据值,将值放入寄存器 rd,将二元运算符应用于加载的值和 rs2 中的原始值,然后将结果存储回去到 rs1 中的地址。将rs2寄存器中的值与地址(rs1)中存储的值进行原子交换,并将原始值存储到rd寄存器中。功能:将csr中的值读出写入rd,然后将rs1的值进行按位或运算后再和原有csr的值进行按位或运算并写回到csr中。功能:将csr中的值读出写入rd,然后将rs1的值进行按位取反后再和原有csr的值进行按位与运算并写回到csr中。原创 2024-06-12 22:03:13 · 847 阅读 · 0 评论 -
RV32M指令集
DIVU指令 (rd = (unsigned)rs1 / (unsigned) rs2) DIVU 指令用于进行无符号整数除法运算,将一个源寄存器中的无符号整数除以另外一个源寄存器中的无符号整数,并将结果存储到目标寄存器中。REM指令 rd = rs1 % rs2 REM 指令用于进行有符号整数取模运算,将一个源寄存器中的有符号整数除以另外一个源寄存器中的有符号整数后取余数,并将结果存储到目标寄存器中。如果 rs1 和 rs2 都是无符号整数,则结果也是无符号整数。其语法如下: mul rd,原创 2024-06-11 21:58:24 · 622 阅读 · 0 评论 -
RISC-V汇编总结
一、risc-v汇编格式二、risc-v常用汇编伪指令三、risc-v汇编编程示例四、GCC内联汇编。原创 2024-06-11 21:45:59 · 1181 阅读 · 0 评论 -
FENCE.I指令及CAS指令集
FENCE.I 是 RISC-V 指令集架构中的一种 Fence 指令,用于同步指令缓存(Instruction Cache),用于保证内存操作的正确性和顺序性。具体来说,FENCE.I指令可以确保之前发出的所有对内存的读写操作都已经完成,并且将数据从处理器缓存中刷新到内存中,然后再继续执行后面的指令,这样确保处理器按照预期顺序执行指令。FENCE.I 指令的格式如下:fence.i。原创 2024-06-10 11:08:31 · 1168 阅读 · 0 评论 -
RV32I指令集
如果一个组件包含一个独立的指令获取单元,则它被称为核心。RISC-V兼容核心可能支持多个 RISC-V 兼容的硬件线程,或 harts,通过多线程。Bare metal:harts直接由物理处理器实现,线程和指令可以直接访问物理地址空间。RISC-V操作系统:通过多路复用提供多个用户级执行环境的,RISC-V 操作系统用户级 harts 到可用的物理处理器线程并通过控制访问通过虚拟内存到内存。RISC-V 虚拟机管理系统,原创 2024-06-10 11:03:17 · 2490 阅读 · 0 评论 -
RISC-V通用寄存器
riscv通用寄存器riscv通用寄存器riscv通用寄存器寄存器调用名字用途x0zero常数 0x1ra返回地址x2sp栈指针x3gp全局指针x4tp线程指针x5-x7t0-t2临时存储x8s0/fp保存用寄存器/帧指针(配合栈指针界定一个函数的栈)x9s1保存用寄存器x10-x11a0-a1函数参数/返回值x12-x17a2-a7函数参数x18-x27s2-s11保存用寄存器原创 2024-04-10 21:26:56 · 522 阅读 · 1 评论 -
Opensbi初始化分析:设备初始化
Opensbi初始化分析:设备初始化设备初始化sbi_init函数coldinit,冷启动初始化sbi_scratch_init函数sbi_domain_init函数sbi_hsm_initsbi_platform_early_initsbi_hart_initsbi_console_initsbi_platform_irqchip_init中断控制器的初始化sbi_ipi_init函数sbi_tlb_init函数sbi_timer_init函数sbi_ecall_init函数sbi_domain_fina原创 2024-04-22 19:43:23 · 498 阅读 · 0 评论 -
Opensbi初始化分析:设备初始化-warmboot
紧接_start_warm,接下来将正式进入C阶段,随机选择满足条件的hart执行clodboot,其余的hart执行warmboot,上篇博文已经详细分析了coolboot的详细过程了,下面就着重对比coolboot分析下。sbi_scratch_init本质是初始化动态加载的镜像模块,首先会初始化一个ROOT的内存域,最后会将root域注册到opensbi的系统中。console的初始化也是coldboot所特有的工作,理所应当的,所有的打印相关工作也是其完成的,这当然包括了我看到的"OpenSBI"原创 2024-05-02 21:27:48 · 74 阅读 · 0 评论 -
RISC-V基础编译
在这种情况下,“unknown”表示目标平台,其中“ELF”代表“Executable and Linkable Format”,是一种常见的二进制文件格式,可在Linux和其他Unix-like系统上使用。linux-gnu-gcc使用的是GNU的glibc库,elf-gcc使用的是newlib库,应用的领域有差异,glibc是针对PC开发的,而newlib是与glibc在API兼容的小型C库,实现了glibc的部分功能,可用于嵌入式系统的开发,更加轻量,速度更快。,共同组成通用的标量指令。原创 2024-06-09 15:10:22 · 1124 阅读 · 0 评论 -
RISC-V异常处理流程概述(1):异常处理基本介绍
其中的关键函数为sbi_ecall_register_extension,这个函数的目的是将sbi_ecall_extension类型的结构体指针添加到一个全局的ecall_exts_list列表中,也就是进行ecall注册的工作。而ecall_time、ecall_rfence等则是结构体指针,相当于sbi_ecall_extension结构体的一个实例,其中的服务和id则是要映射结构体的extid_xxx和handle处理。下面将调用到sbi_trap_handler进行真正的异常处理函数。原创 2024-05-01 23:21:04 · 1201 阅读 · 1 评论