Processor design中signal values相关习题解答正确性咨询
流水线寄存器值问题解答
问题附图


现有解答正误说明
你给出的解答存在两处明显错误:
- 第3行对应lw指令的EX/MEM寄存器内容,若1号字段为ALU输出位,lw指令在EX阶段完成访存地址计算,结果为
$a0 + 0,不是你写的0x1或0x0 - 第4行对应sw指令的ID/EX寄存器内容,若8号位为符号扩展后的立即数字段,sw指令的偏移量是4,不是你写的0x1
其余标记为unknown的字段如果是对应阶段未产生/无需使用的数值,判断是合理的。
通用求解步骤
这类流水线寄存器填充问题可以按三步处理:
- 先梳理所有指令的执行顺序,明确当前周期下每条指令分别处于IF、ID、EX、MEM、WB中的哪个阶段,每个流水线寄存器存储的是相邻两个阶段之间需要传递的所有指令相关信息
- 记清每个流水线寄存器的字段定义:区分哪些字段存寄存器堆读取的源操作数、哪些存目标寄存器编号、哪些存ALU运算结果、哪些存访存得到的数据、哪些存控制信号、哪些存扩展后的立即数
- 逐字段追溯取值来源:如果该字段取值已经在前序阶段或者更早的指令执行过程中确定,直接填对应值即可;如果值还未计算出来,或者当前阶段不需要用到该字段,填unknown即可;另外要注意数据前递(旁路)机制:如果后序指令的源操作数是前1-2条指令还没写回寄存器堆的运算结果,可以直接从对应流水线寄存器取确定值,不需要填unknown
内容的提问来源于stack exchange,提问作者user1
相关产品推荐
相关产品推荐

