0

こんにちは、以下の命令があるとします:

R1<-M1
R2<-M2
R3<-R1*R2
M3<-R3

[XXX : バブル] をバイパスせずに、以下のパイプラインのようなパイプラインを作成します。

IF1 ID1 EX1 ME1 WB1
    IF2 ID2 EX2 ME2 WB2
        IF3 XXX XXX XXX ID3 EX3 WB3
        XXX XXX XXX XXX IF4 ID4 EX4 WB4

そして、以下のようなパイプラインをバイパスしてパイプラインを作成します: [XXX : バブル]

IF1 ID1 EX1 ME1 WB1
    IF2 ID2 EX2 ME2 WB2
        IF3 XXX ID3 EX3 WB3
        XXX XXX IF4 ID4 EX4 WB4

WB1 と WB2 が完了するまで待つ必要があります。その後、命令 3 を実行できます。したがって、バイパス方法では、EX1 と EX2 レベルの後に R1 と R2 の値をバッファに格納します。

しかし...バイパス方法では、EX1 の後、どうすればレジスタ R1 値を取得できますか?? WB1 値に達していません。なぜバッファが必要なのか、R1を直接読み取らないのはなぜですか??

4

1 に答える 1

1

R1 にロードするためにメモリから読み取った値は、まだレジスタ ファイルに書き込まれていないためです。R1 から値を読み取る場合、R1<-M1 命令の前に含まれる値 R1 を取得します。新しい R1 値は、ME1 の後に ME->WB パイプライン レジスタに格納されます。

于 2012-01-15T16:22:00.780 に答える