本帖最后由 山东_朱文鑫 于 2023-5-31 23:58 编辑
大家好,我是大白,努力的意义,不在于一定会让你取得多大的成就,只是让你在平凡的日子里,泪得比原来的那个自己更好一点。依旧感谢各位小伙伴的一路支持与陪伴。
本篇依旧借上篇文章国产化之路介绍以及信息汇总一篇通,从中介绍了国产化相关的背景信息,以及个人整合的一下信息材料与各位小伙伴进行分享学习,小伙伴们每天在说的X86、ARM等架构,真正的了解这些架构的原理与底层吗?
RISC-V是一个基于精简指令集(RISC)原则的开源指令集架构(ISA),V表示为第五代RISC(精简指令集计算机),表示此前已经有四代RISC处理器原型芯片。每一代RISC处理器都是在同一人带领下完成,那就是加州大学伯克利分校的David A. Patterson教授。与大多数ISA相反,RISC-V ISA可以免费地用于所有希望的设备中,允许任何人设计、制造和销售RISC-V芯片和软件。图1展示了此前的四代RISC处理器原型芯片。它虽然不是第一个开源的指令集(ISA),但它很重要,因为它是第一个被设计成可以根据具体场景、可以选择适合的指令集的指令集架构。基于RISC-V指令集架构可以设计服务器CPU,家用电器cpu,工控cpu和用在比指头小的传感器中的cpu。
RISC-V的状态:
1.完全开源,对指令集使用,RISC-V基金会不收取高额的授权费。开源采用宽松的BSD协议,企业完全自由免费使用,同时也容许企业添加自有指令集拓展而不必开放共享以实现差异化发展。
2.架构简单,这也是RISC-V架构的设计哲学。在处理器领域,X86与ARM架构的发展过程也伴随了现代处理器架构技术的不断发展成熟,为了能够保持架构的向后兼容性,其不得不保留许多过时的定义,导致其指令数目多,指令冗余严重,文档数量庞大,所以操作系统或者开发应用门槛就会很高。
3.模块化,RISC-V架构不仅短小精悍,而且其不同的部分还能以模块化的方式组织在一起,从而试图通过一套统一的架构满足各种不同的应用场景。
4.开源实现,RISC-V架构开源状态下,共同对多个模块进行完善处理,成为多兼容的稳定架构指令集。
RISC-V架构特点:
1.六种格式指令相比较X86的指令来讲简化太多,并且所有的指令都是 32 位长,这简化了指令解码。ARM-32, 还有更典型的 x86-32 都有许多不同的指令格式,使得解码部件在低端实现中偏昂贵,在中 高端处理器设计中容易带来性能挑战。
2.RISC-V 指令提供三个寄存器操作数,而不是 像 x86-32 一样,让源操作数和目的操作数共享一个字段。当一个操作天然就需要有三个不 同的操作数,但是 ISA 只提供了两个操作数时,编译器或者汇编程序程序员就需要多使用 一条 move(搬运)指令,来保存目的寄存器的值。
3.在 RISC-V 中对于所有指令,在解码指令之前,就可以先访问寄存器。在许多其他的 ISA 中,某些指令字段在部分指令中被重用作为源目的地,在其他指令中又被作为目的操作数(例如,ARM-32 和 MIPS-32)。
4.这些格式的立即数字段总是符号扩展,符号位总是在指令中最高位。这意味着可能成为关键路径的立即数符号扩展,可以在指令解码之前进行。
六种格式指令:
1.寄存器-寄存器操作的 R 类型指令
2.短立即数和访存 load 操作的 I 型指令
3.访存 store 操作的 S 型指令
4.条件跳转操 作的 B 类型指令
5.长立即数的 U 型指令
6.无条件跳转的 J 型指令
opcode :指令操作码
imm:代码立即数
func3和funct7:代表指令对应的功能
rs1:源寄存器1
rs2:源寄存器2
rd:目标寄存器(RSIC-V 一个指令可以提供三个寄存器操作
寄存器 | ABI 名称 | 说明 | x0 | zero | 0值寄存器,硬编码为0,写入数据忽略,读取数据为0 | x1 | ra | 用于返回地址(return address) | x2 | sp | 用于栈指针(stack pointer) | x3 | gp | 用于通用指针 (global pointer) | x4 | tp | 用于线程指针 (thread pointer) | x5 | t0 | 用于存放临时数据或者备用链接寄存器 | x6~x7 | t1~t2 | 用于存放临时数据寄存器 | x8 | s0/fp | 需要保存的寄存器或者帧指针寄存器 | x9 | s1 | 需要保存的寄存器 | x10~x11 | a0~a1 | 函数传递参数寄存器或者函数返回值寄存器 | x12~x17 | a2~a7 | 函数传递参数寄存器 | x18~x27 | s2-s11 | 需要保存的寄存器 | x28~x31 | t3~t6 | 用于存放临时数据寄存器 |
RISC-V的特权架构: 到目前为止RISC-V 对通用计算的支持所有指令都在用户模式(应用程序的代码在此模式下运行)下可用。
主要介绍两种新的权限模式:
1.运行最可信的代码的机器模式(machine mode)。 2.监管者模式(supervisor mode)为 Linux,FreeBSD 和 Windows 等操作系统 提供使用。
机器模式
机器模式(缩写为 M 模式,M-mode)是 RISC-V 中 hart(hardware thread,硬件线程)可以执行的最高权限模式。在 M 模式下运行的 hart 对内存,I/O 和一些对于启动和配 置系统来说必要的底层功能有着完全的使用权。
机器模式最重要的特性是拦截和处理异常的能力。RISC-V 将 异常分为两类。
1是同步异常,这类异常在指令执行期间产生,如访问了无效的存储器地址或执行了具有无效操作码的指令时。
2是中断,它是与指令流异步的外部事件,比如鼠标的单击。RISC-V 中实现精确例外:保证异常之前的所有指令都完整地执行了,而后续的指令都没有开始执行(或等同于没有执行)。
监管者模式
更复杂的 RISC-V 处理器用和几乎所有通用架构相同的方式处理这些问题:使用基于页面的虚拟内存。这个功能构成了监管者模式(S 模式)的核心,这是一种可选的权限模式,旨在支持现代类 Unix 操作系统,如 Linux,FreeBSD 和 Windows。S 模式比 U 模式权限更高,但比 M 模式低。与 U 模式一样,S 模式下运行的软件不能使用 M 模式的 CSR 和 指令,并且受到 PMP 的限制。S 模式提供了一种传统的虚拟内存系统,它将内存划分为固定大小的页来进行地址转 换和对内存内容的保护。
裸机程序基本示意图:
SBI就是对所有RISC-V硬件平台的共性功能做了抽象,为运行在S模式的操作系统提供统一的服务接口。在Linux里,内核空间和用户空间之间多了个系统调用层,SBI就类似于系统调用层。
RISC-V五级流水线32位单发射的RV32I处理器流水线结构示意图如下:
本篇主要是详解处理器芯片RISC-V架构下的底层架构以及相关的结构信息进行知识补充学习,以及各个组成模块下的交互方式。
RISC-V官网参考学习链接: https://wiki.riscv.org/spacedirectory/view.action
|