2012-12-30 10 views
6

以下の手順を正しく実行するためには、いくつのストールが必要ですか。私は私がやったこととちょっと混乱しているので、私は専門家の答えを見るためにここにいます。アセンブリでのパイプライン化

lw $1,0($2); 

beq $1,$2,Label; 

分岐が発生するかどうかのチェックは、デコード段階で行われることに注意してください。しかし、この場合$ 1のbeqのソースレジスタrsは、lw命令のライトバックステージの後に更新されます。したがって、メモリステージのメモリから新しいデータをbeq命令のデコードステージに転送する必要があります。

ステージは次のように行く:

enter image description here

IF:命令フェッチ。 ID:これは私がこれまでに行ったことある目的地でのデータ保存

を登録: WBは、メモリからのデータ読み出し:実行/ ALU段階 MEM:命令は 例をデコードします。

デコードステージでlwがexecステージとbeqにあるとき、ストール条件は真となり、バブルが作成されます。今度はlwがMemステージにあり、beqはまだバブルのためにデコードステージにあり、再びストール状態が成立し、2番目のストールが発生しました。そして今度はlwがWB(ライトバック)にあり、beqはデコードステージですが、 WB段階の終わりに$ 1の更新が行われ、結局beqは$ 1の間違った値で動作することになります。

+0

"分岐が発生するかどうかを確認する" - どのチェックを意味しますか。 http://www.csc.gatech.edu/~copeland/3055-00/lab/lab-2/MIPS_pipes.JPEGによると、ブランチはEXで実行されます。新しいPCはMEMのPCレジスタに転送されます。 – osgx

+0

分岐が遅延しているため、追加のストールを1回追加する必要があります。だから7つの屋台が必要です。 – Blood

+0

どのように7つの屋台になるのですか?多くの場合、屋台は2 – Alfred

答えて

2

レジスタをデコードする前にレジスタファイルに書き戻したり、ライトバックステージからデコードステージにデータを転送したりするためには、3番目のストールが必要なようです。いずれにしても、書き込まれるレジスタがrsに等しい場合、これは実行されるべきです。

デコードステージの早い段階でブランチが検出されるため、あまりにも多くのストールが必要になります。これは、不要な命令をフェッチして保存するためですが、適切なハザード検出が必要です。

+0

となります。それは私が思うことです。私は教授と議論をしていました。彼は、私は2つの屋台しか必要とせず、上記の場合の返答もないと言います。これは私が混乱している理由です – Alfred

+0

@ Alfredあなたの教授はおそらく登録ファイルが非同期で、次の時計の前に更新されると仮定していますが、それはあなたが使用しているメモリのタイプではないでしょう。 – iabdalkader

関連する問題