为什么RISC V中的程序计数器应加4而不是加0或2

问题描述

为什么RISC V架构中的PC与PC + 4而不是PC + 2或PC + 1连接。我认为这取决于指令存储器(IMEM)的存储单元的宽度。如果宽度为16位,则需要加载两个相邻地址以填充32位指令;如果宽度为32位,则仅需要加载一个地址即可获取完整指令。

解决方法

RISC-V处理字节地址中的所有内容(从the ISA manual的第19页开始:“ RV32I提供了一个32位的用户地址空间,该地址是字节寻址的,并且是低端的”)。因此,当使用字节地址时,将PC递增4是合理的,因为每个RV32指令都是4字节。

当我们说RISC-V使PC递增4时,这意味着对于32位RISC-V指令的任何给定字节地址X,下一条指令将从内存中的地址{ {1}}。 (请注意,使用16位/ 2字节的压缩指令时,PC会增加2)。

IMEM读取宽度为16位意味着需要从IMEM进行2次读取才能获得完整指令,而IMEM读取宽度为32位意味着需要从IMEM进行1次读取即可获得完整指令。但是这些是实现方面的考虑因素,而不是ISA方面的考虑因素–您可以假设使用两种IMEM类型来实现符合ISA的RISC-V处理器。