机器如何读取RISC-V指令?求证R-type指令读取逻辑正确性
R-type指令的机器读取逻辑纠正
你的描述存在两处关键错误:
指令字段的提取不是“从右到左读取”
机器拿到完整的32位指令后,不会按顺序逐个读取字段,而是直接根据各字段在指令中的固定位位置来提取。以RISC-V的R-type指令为例,位分布(从高位到低位)是:- 31~25位:
funct7 - 24~20位:
rs2 - 19~15位:
rs1 - 14~12位:
funct3 - 11~7位:
rd - 6~0位:
opcode
- 31~25位:
字段识别顺序错误
你所说的“依次识别rd、funct3、rs1、rs2,最后读取funct7”完全颠倒了字段的位顺序。正确逻辑是:- 第一步:提取低7位(6~0)的
opcode,判断当前指令为R-type; - 第二步:根据R-type的位定义,分别提取对应位域的内容(硬件甚至可以并行提取所有字段,无需按顺序逐个识别),顺序为
funct7→rs2→rs1→funct3→rd。
- 第一步:提取低7位(6~0)的
本质上,机器是基于固定的位偏移来拆分指令字段,而非按“从右到左”的顺序逐个读取识别。

内容的提问来源于stack exchange,提问作者ZiChong Lv
相关产品推荐
相关产品推荐

