实现思路为: ①采用模块化设计思想代替传统的增量型ISA RV的核心是一个名为RV32I的基础指令集,该指令集固定且***不变,独立运行一个完整的软件栈。通过增加标准扩展的方式来实现不同应用,RV编译器得知当前硬件包含哪些扩展后,便可以生成当前硬件条件下的最佳代码。惯例是把代表扩展的字母附加到指令集名称之后作为指示。如RV32IMFD将乘法(RV32M)、单精度浮点(RV32F)和双精度浮点(RV32D)的扩展添加到了基础指令集(RV32I)中。将扩展指令添加到RV32I的指令集,统称为RV32G。 ②对指令集进行精简设计 与x86、ARM和MIPS相比,RV简洁得多,可有效缩短芯片的设计和验证时间,缩小实现该ISA的处理器面积,减少文档的编写时间,从而降低成本。尽管简单ISA可能在每个程序执行的指令数方面多于复杂ISA,但其可以提供更快的时钟频率和更低的平均单条指令周期数(CPI),从而实现整体性能的提升。综合来看,RV的简洁性可以提供更好的性价比。 ③将指令集架构与具体实现相分离 使程序员无需了解指令集架构就能写出正确的程序。指令集架构师也不需要为了优化某个实现,在ISA中增加某些特定指令。如不再为分支/Load指令提供延迟槽、全部采用通用寄存器、将向量长度和每时钟周期的最大操作数与指令编码相分离等。 ④对编程、编译、汇编及链接进行简化 通过增加60条伪指令,确保在不增加硬件开销的前提下代码更易于读写,且通过定义常零寄存器x0,方便大部分伪指令的实现。通过lui(立即数高位加载指令)和auipc(立即数高位与PC相加指令)两条指令,简化了编译器/链接器为外部数据/函数分配地址的过程。采用相对地址跳转方式(PC-relative branching)使得位置无关代码(PIC,position-independent code)更易实现,从而减轻链接器工作。通过配置更多的寄存器,减少寄存器保存和恢复频率,从而提高函数调用和返回的速度。
|