以下の手順を正しく実行するためには、いくつのストールが必要ですか。私は私がやったこととちょっと混乱しているので、私は専門家の答えを見るためにここにいます。アセンブリでのパイプライン化
lw $1,0($2);
beq $1,$2,Label;
分岐が発生するかどうかのチェックは、デコード段階で行われることに注意してください。しかし、この場合$ 1のbeqのソースレジスタrsは、lw命令のライトバックステージの後に更新されます。したがって、メモリステージのメモリから新しいデータをbeq命令のデコードステージに転送する必要があります。
ステージは次のように行く:
IF:命令フェッチ。 ID:これは私がこれまでに行ったことある目的地でのデータ保存
を登録: WBは、メモリからのデータ読み出し:実行/ ALU段階 MEM:命令は 例をデコードします。
デコードステージでlwがexecステージとbeqにあるとき、ストール条件は真となり、バブルが作成されます。今度はlwがMemステージにあり、beqはまだバブルのためにデコードステージにあり、再びストール状態が成立し、2番目のストールが発生しました。そして今度はlwがWB(ライトバック)にあり、beqはデコードステージですが、 WB段階の終わりに$ 1の更新が行われ、結局beqは$ 1の間違った値で動作することになります。
"分岐が発生するかどうかを確認する" - どのチェックを意味しますか。 http://www.csc.gatech.edu/~copeland/3055-00/lab/lab-2/MIPS_pipes.JPEGによると、ブランチはEXで実行されます。新しいPCはMEMのPCレジスタに転送されます。 – osgx
分岐が遅延しているため、追加のストールを1回追加する必要があります。だから7つの屋台が必要です。 – Blood
どのように7つの屋台になるのですか?多くの場合、屋台は2 – Alfred