我想用C语言构建一个RISCV仿真器,该仿真器将支持RISC-V ISA的有限指令集,仅限于具有64位扩展名(RV32I和RV64I)的32位基数。但是我不太了解64位扩展是什么以及如何使用它们。有人可以向我解释一下基础和扩展之间的区别是什么,如何在代码中区分它们?
答案 0 :(得分:1)
RISC-V旨在支持广泛的定制和专业化。每个基本指令集的特征是寄存器的宽度和用户地址空间的相应大小。有两种基本变体,RV32I和RV64I,我代表整数ISA。
基本整数ISA可能是硬件实现的子集,但是必须使用监督层的操作码陷阱和软件仿真来实现硬件未提供的功能。
尽管大型系统需要64位地址空间,但32位地址空间可能足以满足许多嵌入式设备和客户端设备的需求,这将在未来数十年内实现,并且希望降低内存流量和能耗。此外,32位地址空间足以满足教学目的。最终可能需要更大的平面128位地址空间,因此我们可以容纳在RISC-V ISA框架中。
可以使用一个或多个可选指令集扩展来扩展基本整数ISA,但是不能重新定义基本整数指令。 RISC-V指令集扩展分为标准扩展和非标准扩展。标准扩展通常应该有用,并且不应与其他标准扩展冲突。
非标准扩展可能是高度专业的,或者可能与其他标准或非标准扩展冲突。
指令集扩展可能会提供不同的功能,具体取决于基本整数指令集的宽度。 RISC-V基本指令和指令集扩展的命名约定,为了支持更通用的软件开发,定义了一组标准扩展,以提供整数乘/除,原子运算以及单精度和双精度浮点运算。细致。
基本整数ISA被命名为“ I”(由RV32或RV64前缀,具体取决于整数寄存器的宽度),并且包含整数计算指令,整数加载,整数存储和控制流指令,并且对于所有RISC- V实现。
标准整数乘法和除法扩展名为“ M”,并添加了指令以对整数寄存器中保存的值进行乘法和除法。
用“ A”表示的标准原子指令扩展名,添加了原子读取,修改和写入内存以实现处理器间同步的指令。标准的单精度浮点扩展,用“ F”表示,增加了浮点寄存器,单精度计算指令以及单精度加载和存储。标准的双精度浮点扩展,用“ D”表示,扩展了浮点寄存器,并添加了双精度计算指令,加载和存储。
参考-RISC-V ISA手册