以下のコードは、5ステージのパイプライン化されたデータパスで実行されます。パイプラインがどのように機能するかについての私の理解が正しいかどうかを知るのに苦労しています。以下の私の試みでは、適切な場所に「バブル」を挿入することにより、データ転送ユニットのないデータパスのデータハザードを解決しようとしています。私の最初の質問は、以下のパイプラインロジックは正しいですか?
私の2番目の質問は、MEM->EXおよびWB->EXからのデータパスに転送ユニットがあると仮定していますが、それによって最初の質問からロジックがどのように変更されますか?
add t0, s1, s2
add t1, t0, s3
sub t2, t0, t1
xor t3, t2, a0
lw t4, 0(t7)
slt t5, t4, t3
これは質問1に対する私の試みです。
add t0, s1, s2 //IF add1 instruction
nop //ID add1 instruction
nop //EX add1 instruction
add t1, t0, s1 //MEM add1 instruction, IF add2 instruction
nop //WB add1 instruction, ID add2 instruction
nop //EX add2 instruction
nop //MEM add2 instruction
nop //WB add2 instruction
sub t2, t0, t1 //IF sub instruction
nop //ID sub instruction
nop //EX sub instruction
nop //MEM sub instruction
xor t3, t2, a0 //WB sub instruction, IF xor instruction
lw t4, 0(t7) //ID xor instruction, IF lw instruction
nop //EX xor instruction, ID lw instruction
nop //MEM xor instruction, EX lw instruction
nop //WB xor instruction, MEM lw instruction
slt t5, t4, t3 //WB lw instruction, IF slt instruction