【问题标题】:RISCV 32-bit base and 64-bit extensionsRISCV 32 位基础和 64 位扩展
【发布时间】:2019-01-01 17:24:50
【问题描述】:

我想用 C 语言构建一个 RISCV 模拟器,它支持有限的 RISC-V ISA 指令集,仅限于具有 64 位扩展的 32 位基础(RV32I 和 RV64I)。但我不太明白什么是 64 位扩展以及如何使用它们。有人可以向我解释基础和扩展之间的区别以及我如何在代码中区分它们吗?

【问题讨论】:

  • 您阅读过文档吗?它对这件事有什么看法?

标签: c cpu-architecture riscv


【解决方案1】:

RISC-V 旨在支持广泛的定制和专业化。每个基本指令集的特点是寄存器的宽度和用户地址空间的相应大小。有两个基本变体,RV32I 和 RV64I,其中 I 代表整数 ISA。

基础整数 ISA 可能是硬件实现的子集,但必须使用操作码陷阱和监督层的软件仿真来实现硬件不提供的功能。

尽管 64 位地址空间是大型系统的必要条件,但 32 位地址空间可能足以在未来几十年内满足许多嵌入式和客户端设备的需求,并且对于降低内存流量和能耗来说是可取的。此外,32 位地址空间足以用于教育目的。最终可能需要更大的平面 128 位地址空间,因此我们可以适应 RISC-V ISA 框架。

基本整数 ISA 可以使用一个或多个可选的指令集扩展进行扩展,但是不能重新定义基本整数指令。 RISC-V 指令集扩展分为标准扩展和非标准扩展。标准扩展通常应该是有用的,并且不应该与其他标准扩展冲突。

非标准扩展可能是高度专业化的,或者可能与其他标准或非标准扩展发生冲突。

指令集扩展可能会根据基本整数指令集的宽度提供略微不同的功能。 RISC-V 基本指令和指令集扩展的命名约定,以支持更通用的软件开发,定义了一组标准扩展以提供整数乘法/除法、原子操作以及单精度和双精度浮点算术梅蒂克

基本整数 ISA 命名为“I”(前缀为 RV32 或 RV64,具体取决于整数寄存器宽度),包含整数计算指令、整数加载、整数存储和控制流指令,并且对于所有 RISC- 都是强制性的五、实施。

标准整数乘法和除法扩展名为“M”,并添加指令以对整数寄存器中保存的值进行乘法和除法。

用“A”表示的标准原子指令扩展添加了原子读取、修改和写入内存以实现处理器间同步的指令。标准的单精度浮点扩展,用“F”表示,增加了浮点寄存器、单精度计算指令和单精度加载​​和存储。标准的双精度浮点扩展,用“D”表示,扩展了浮点寄存器,增加了双精度计算指令、加载和存储。

参考 - RISC-V ISA 手册

【讨论】: