MIPS指令集中lh/lb(载入半字/载入字节)的符号扩展发生在哪个环节?
单周期MIPS中lb/lh指令的符号扩展执行阶段解答
你观察到的简化原理图没有在回写阶段标注符号扩展逻辑,是因为这个操作的位置并不在回写(WB)阶段,而是整合在内存访问(Mem)阶段的输出通路中,属于数据存储器输出后的可选处理环节,大部分教学用简化原理图会把这部分逻辑合并到数据存储器模块,不会单独画出。
具体实现逻辑如下:
- 当控制单元解码出当前执行的是
lb/lh指令时,会生成对应的符号扩展控制信号,给到数据存储器输出端的位宽扩展模块 - 该模块会根据指令类型选择处理逻辑:
lb:从内存返回的32位数据中截取对应的8位字节,做符号扩展为32位lh:从内存返回的32位数据中截取对应的16位半字,做符号扩展为32位lbu/lhu:对应位宽数据做零扩展为32位lw:直接透传32位内存数据
- 经过扩展后的32位数据会直接送到WB阶段的寄存器写入端口,整个扩展操作在Mem阶段就完成了,所以WB阶段不需要额外的处理步骤,这就是你在WB阶段看不到符号扩展逻辑的原因。
这个位宽扩展模块和I类指令的立即数符号扩展模块是完全独立的两套逻辑:立即数扩展在指令译码(ID)阶段执行,为ALU提供操作数;load指令的位宽扩展在Mem阶段执行,为寄存器写入提供符合格式要求的32位数据,两者不会共用资源,位置也完全不同。
内容的提问来源于stack exchange,提问作者gost1212
相关产品推荐
相关产品推荐

