为什么这个汇编代码块在流水线中有 2 个停顿而不是 1 个?
Why does this block of assembly code have 2 stalls in pipeline instead of 1?
细说题主,第三行为什么在Register2已经回写后一个时钟周期执行?
我在想它应该只有 1 个摊位在管道中。但我错了。我们必须停止一个额外的周期是否只是一些带有 LOAD 和 STORE 标签的质量?我只是有点困惑。
这是代码块:
ADD R2, #4
LSL R4, #5
LDR R1, [R2]
LDR R3, [R2]
SUB R5, #2
SUB R6, #3
我们必须制作一个 5 阶段流水线图来显示数据风险。图中有2个危害。
朋友发送的过去作业的图片,答案正确。
我正在添加来自同一个作业的不同问题的代码。评论里面是正确的流程。
@ CLOCK CYCLE 1 2 3 4 5 6 7 8
STR R2, [R5] @IF -> ID -> EX -> MEM -> WB
STR R3, [R6] @ IF -> ID -> EX -> MEM -> WB
MUL R4, R1, R2 @ IF -> ID -> NOP -> EX -> MEM -> WB
这只有一个摊位。
更新:
根据评论,似乎我的分析是错误的。所以我删除了自己的分析。
您可以在这里模拟管道:
http://www.ecs.umass.edu/ece/koren/architecture/windlx/main.html
这显示正常 classic-RISC (MIPS) pipeline 具有互锁但没有旁路转发的 1 个停顿周期。
细说题主,第三行为什么在Register2已经回写后一个时钟周期执行? 我在想它应该只有 1 个摊位在管道中。但我错了。我们必须停止一个额外的周期是否只是一些带有 LOAD 和 STORE 标签的质量?我只是有点困惑。 这是代码块:
ADD R2, #4
LSL R4, #5
LDR R1, [R2]
LDR R3, [R2]
SUB R5, #2
SUB R6, #3
我们必须制作一个 5 阶段流水线图来显示数据风险。图中有2个危害。
朋友发送的过去作业的图片,答案正确。
我正在添加来自同一个作业的不同问题的代码。评论里面是正确的流程。
@ CLOCK CYCLE 1 2 3 4 5 6 7 8
STR R2, [R5] @IF -> ID -> EX -> MEM -> WB
STR R3, [R6] @ IF -> ID -> EX -> MEM -> WB
MUL R4, R1, R2 @ IF -> ID -> NOP -> EX -> MEM -> WB
这只有一个摊位。
更新: 根据评论,似乎我的分析是错误的。所以我删除了自己的分析。
您可以在这里模拟管道: http://www.ecs.umass.edu/ece/koren/architecture/windlx/main.html
这显示正常 classic-RISC (MIPS) pipeline 具有互锁但没有旁路转发的 1 个停顿周期。