重要問題⑥:ロード命令実行の様子ger/Lectures/C-CompArch2012/...①命令メモリからのフェッチとPCの繰り上げ...

29
重要問題⑥:ロード命令実行の様子 ロード命令の lw $t0, 12($s0)の実行に関して、 以下の各ステップのデータパスを図示せよ。また、その時の各MUXへの制御 入力は01のどちらか?(各バスの値も確認せよ) 入力は01のどちらか?(各バスの値も確認せよ) lw $t0, 12($s0) 100011 0000000000001100 01000 10000 op rs rt address ①命令メモリからのフェッチとPCの繰り上げ 31-26 25-21 20-16 15-0 $t0 $s0 +12 lw ①命令メモリからのフェッチとPCの繰り上げ ②レジスタファイルからの1つのレジスタrsの読出し (この間に 主制御ユニットが制御信号を生成) ALU制御入力信号を生成して、ALU演算を実行 (足されるのは、のレジスタとoffset の値) (この間に主制御ユニットが制御信号を生成) ④③で計算した値をアドレスとしてデータメモリをアクセス ⑤④で読み出したメモリの値をディスティネーションレジスタに書き込み 10 次世代コンピューティング研究室 山下 [email protected] *この問題は、図4.16を見ながら回答してよし。

Transcript of 重要問題⑥:ロード命令実行の様子ger/Lectures/C-CompArch2012/...①命令メモリからのフェッチとPCの繰り上げ...

  • 重要問題⑥:ロード命令実行の様子ロード命令の lw $t0, 12($s0)の実行に関して、以下の各ステップのデータパスを図示せよ。また、その時の各MUXへの制御入力は0か1のどちらか?(各バスの値も確認せよ)入力は0か1のどちらか?(各バスの値も確認せよ)

    lw $t0, 12($s0) 100011 00000000000011000100010000op rs rt address

    ①命令メモリからのフェッチとPCの繰り上げ31-26 25-21 20-16 15-0

    $t0$s0 +12lw

    ①命令メモリからのフェッチとPCの繰り上げ②レジスタファイルからの1つのレジスタrsの読出し(この間に 主制御ユニットが制御信号を生成)

    ③ALU制御入力信号を生成して、ALU演算を実行(足されるのは、②のレジスタとoffset の値)

    (この間に、主制御ユニットが制御信号を生成)

    ②④③で計算した値をアドレスとしてデータメモリをアクセス⑤④で読み出したメモリの値をディスティネーションレジスタに書き込み

    10次世代コンピューティング研究室 山下 茂 [email protected]

    *この問題は、図4.16を見ながら回答してよし。

  • ①命令メモリからのフェッチとPCの繰り上げ

    加算4 M0

    命令アドレス

    4

    2ビット左に

    加算

    UX

    1

    0

    制御

    RegDstBranch

    MemRead

    MemWriteALUOpMemtoReg命令[31:26]

    0

    この制御線の値は実際には、もう少し後で決定さ

    読出reg1読出

    読出reg1 ゼロ判定

    命令メモリ

    PCシフト

    命令[25:21]

    命令[20:16]

    MemWriteALUSrcRegWrite

    AND し後で決定される

    レジスタ ALU ALU結果読出reg2書込reg

    書込デ タ

    読出reg2

    ALU操作 データ

    読出データ

    アドレス MUX

    MUX

    命令[31:0]

    01

    0

    [20:16]

    MUX

    01

    データ 4 メモリ書込データ

    符号3216

    X

    ALU

    1命令[15:11]

    命令[15:0] 符号

    拡張ALU制御

    命令[5:0]

    11次世代コンピューティング研究室 山下 茂 [email protected]

  • ②レジスタファイルからの1つのレジスタrsの読出し(この間に、主制御ユニットが制御信号を生成)⇒値は次のページ

    加算4 M0

    命令アドレス

    4

    2ビット左に

    加算

    UX

    1

    0

    制御

    RegDstBranch

    MemRead

    MemWriteALUOpMemtoReg命令[31:26]

    読出reg1読出

    読出reg1 ゼロ判定

    命令メモリ

    PCシフト

    命令[25:21]

    命令[20:16]

    MemWriteALUSrcRegWrite

    AND

    レジスタ ALU ALU結果読出reg2書込reg

    書込デ タ

    読出reg2

    ALU操作 データ

    読出データ

    アドレス MUX

    MUX

    命令[31:0]

    01

    0

    [20:16]

    MUX

    01$s0をここで指定

    データ 4 メモリ書込データ

    符号3216

    X

    ALU

    1命令[15:11]

    命令[15:0] 符号

    拡張ALU制御

    命令[5:0]

    12次世代コンピューティング研究室 山下 茂 [email protected]

  • RegDst= 0(所望のデータパスの作成のため)ALUSrc= 1(所望のデータパスの作成のため)MemtoReg= 1(所望のデータパスの作成のため)MemtoReg= 1(所望のデ タパスの作成のため)RegWrite= 1(レジスタに書きこむので)MemRead= 1 (メモリを読むので)MemWrite= 0(メモリには書き込まないので)MemWrite= 0(メモリには書き込まないので)Branch= 0 (beq命令でないので)ALUOp1= 0(lw/sw命令なので)

    ( 命令な )ALUOp0 =0 (lw/sw命令なので)

    *これらの信号の値は、そのクロック周期中はずっと同じ値となっていると考えてください。

    13次世代コンピューティング研究室 山下 茂 [email protected]

  • ③ALU制御入力信号を生成して、ALU演算を実行(足し算)(足されるのは ②のレジスタとoffset の値)

    加算4 M0

    (足されるのは、②のレジスタとoffset の値)

    命令アドレス

    4

    2ビット左に

    加算

    UX

    1

    0

    制御

    RegDstBranch

    MemRead

    MemWriteALUOpMemtoReg命令[31:26]

    読出reg1読出

    読出reg1 ゼロ判定

    命令メモリ

    PCシフト

    命令[25:21]

    命令[20:16]

    MemWriteALUSrcRegWrite

    AND

    レジスタ ALU ALU結果読出reg2書込reg

    書込デ タ

    読出reg2

    ALU操作 データ

    読出データ

    アドレス MUX

    MUX

    命令[31:0]

    01

    0

    [20:16]

    MUX

    01

    データ 4 メモリ書込データ

    符号3216

    X

    ALU

    1命令[15:11]

    命令[15:0]

    ALU制御コードは0010 (add)

    符号拡張

    ALU制御

    命令[5:0]

    ALUの下側の入力は、命令[15:0]の値を32ビットにしたもの(この例では その

    14次世代コンピューティング研究室 山下 茂 [email protected]

    (この例では、その値は12)

  • ④③で計算した値をアドレスとしてデータメモリをアクセス

    加算4 M0

    命令アドレス

    4

    2ビット左に

    加算

    UX

    1

    0

    制御

    RegDstBranch

    MemRead

    MemWriteALUOpMemtoReg命令[31:26]

    読出reg1読出

    読出reg1 ゼロ判定

    命令メモリ

    PCシフト

    命令[25:21]

    命令[20:16]

    MemWriteALUSrcRegWrite

    AND

    レジスタ ALU ALU結果読出reg2書込reg

    書込デ タ

    読出reg2

    ALU操作 データ

    読出データ

    アドレス MUX

    MUX

    命令[31:0]

    01

    0

    [20:16]

    MUX

    01

    データ 4 メモリ書込データ

    符号3216

    X

    ALU

    1命令[15:11]

    命令[15:0] 符号

    拡張ALU制御

    命令[5:0]

    15次世代コンピューティング研究室 山下 茂 [email protected]

  • ⑤④で読み出したメモリの値をディスティネーションレジスタに書き込み

    加算4 M0

    命令アドレス

    4

    2ビット左に

    加算

    UX

    1

    0

    制御

    RegDstBranch

    MemRead

    MemWriteALUOpMemtoReg命令[31:26]

    読出reg1読出

    読出reg1 ゼロ判定

    命令メモリ

    PCシフト

    命令[25:21]

    命令[20:16]

    MemWriteALUSrcRegWrite

    AND

    レジスタ ALU ALU結果読出reg2書込reg

    書込デ タ

    読出reg2

    ALU操作 データ

    読出データ

    アドレス MUX

    MUX

    命令[31:0]

    01

    0

    [20:16]

    MUX

    01

    データ 4 メモリ書込データ

    符号3216

    X

    ALU

    1命令[15:11]

    命令[15:0] 符号

    拡張ALU制御

    命令[5:0]

    命令[20:16]が、書き込みレジスタの指定

    16次世代コンピューティング研究室 山下 茂 [email protected]

  • 重要問題⑦:beq命令実行の様子ロード命令の beq $s1, $s2, 100 の実行に関して、

    以下の各ステップのデータパスを図示せよ。また、その時の各MUXへの制御入力は0か1のどちらか?(各バスの値も確認せよ)入力は0か1のどちらか?(各バスの値も確認せよ)

    beq $s1, $s2, 100 000100 00000000000110011001010001op rs rt address

    $s2$s1 25beq

    ①命令メモリからのフェッチとPCの繰り上げ①命令メモリからのフ ッチと Cの繰り げ②レジスタファイルからの2つのソースレジスタの読出し(この間に、主制御ユニットが制御信号を生成)

    ③ALU制御入力信号を生成して、ALU演算を実行(減算)同時にPC+4 + (offset*4) の計算( )

    ④ALUのゼロ判定出力に基づき、PCに格納する値を選択

    17次世代コンピューティング研究室 山下 茂 [email protected]

    *この問題は、図4.16を見ながら回答してよし。

  • ①命令メモリからのフェッチとPCの繰り上げ

    この制御線

    加算4 M0

    この制御線の値は実際には、もう少し後で決定さ

    命令アドレス

    4

    2ビット左に

    加算

    UX

    1

    0

    制御

    RegDstBranch

    MemRead

    MemWriteALUOpMemtoReg命令[31:26]

    し後で決定される(分岐の場合1)その正しい値には

    後ほどセ ト

    読出reg1読出

    読出reg1 ゼロ判定

    命令メモリ

    PCシフト

    命令[25:21]

    命令[20:16]

    MemWriteALUSrcRegWrite

    AND 後ほどセットされる

    レジスタ ALU ALU結果読出reg2書込reg

    書込デ タ

    読出reg2

    ALU操作 データ

    読出データ

    アドレス MUX

    MUX

    命令[31:0]

    01

    0

    [20:16]

    MUX

    01

    データ 4 メモリ書込データ

    符号3216

    X

    ALU

    1命令[15:11]

    命令[15:0] 符号

    拡張ALU制御

    命令[5:0]

    18次世代コンピューティング研究室 山下 茂 [email protected]

  • ②レジスタファイルからの2つのソースレジスタの読出し(この間に、主制御ユニットが制御信号を生成)⇒値は次のページ

    加算4 M0

    (この間に、主制御ユニットが制御信号を生成)⇒値は次のペ ジ

    命令アドレス

    4

    2ビット左に

    加算

    UX

    1

    0

    制御

    RegDstBranch

    MemRead

    MemWriteALUOpMemtoReg命令[31:26]

    読出reg1読出

    読出reg1 ゼロ判定

    命令メモリ

    PCシフト

    命令[25:21]

    命令[20:16]

    MemWriteALUSrcRegWrite

    AND

    レジスタ ALU ALU結果読出reg2書込reg

    書込デ タ

    読出reg2

    ALU操作 データ

    読出データ

    アドレス MUX

    MUX

    命令[31:0]

    01

    0

    [20:16]

    MUX

    01$s1をここで指定

    データ 4 メモリ書込データ

    符号3216

    X

    ALU

    1命令[15:11]

    命令[15:0]$s2をここで指定 符号

    拡張ALU制御

    命令[5:0]

    $s2をここで指定

    19次世代コンピューティング研究室 山下 茂 [email protected]

  • RegDst= x(所望のデータパスの作成には無関係)ALUSrc= 0(所望のデータパスの作成のため)MemtoReg=x(所望のデータパスの作成には無関係)MemtoReg=x(所望のデ タパスの作成には無関係)RegWrite= 0(レジスタに書きこむので)MemRead= 0 (メモリは読まないので)MemWrite= 0(メモリには書き込まないので)MemWrite= 0(メモリには書き込まないので)Branch= 1 (beq命令なので)ALUOp1= 0(beq命令なので)

    ( 命令な )ALUOp0 =1 (beq命令なので)

    *これらの信号の値は、そのクロック周期中はずっと同じ値となっていると考えてください。

    20次世代コンピューティング研究室 山下 茂 [email protected]

  • ③ALU制御入力信号を生成して、ALU演算を実行(減算)同時にPC+4 + (offset*4) の計算

    加算4 M0

    ( )

    命令アドレス

    4

    2ビット左に

    加算

    UX

    1

    0

    制御

    RegDstBranch

    MemRead

    MemWriteALUOpMemtoReg命令[31:26]

    読出reg1読出

    読出reg1 ゼロ判定

    命令メモリ

    PCシフト

    命令[25:21]

    命令[20:16]

    MemWriteALUSrcRegWrite

    AND

    レジスタ ALU ALU結果読出reg2書込reg

    書込デ タ

    読出reg2

    ALU操作 データ

    読出データ

    アドレス MUX

    MUX

    命令[31:0]

    01

    0

    [20:16]

    MUX

    01

    データ 4 メモリ書込データ

    符号3216

    X

    ALU

    1命令[15:11]

    命令[15:0] 符号

    拡張ALU制御

    命令[5:0]ALU制御コードは

    0110 (引き算)

    21次世代コンピューティング研究室 山下 茂 [email protected]

    0110 (引き算)

  • ④ALUのゼロ判定出力に基づき、PCに格納する値を選択以下はゼロ判定が1の時のデータパス。ゼロ判定が0の時は以下のMUXでは上側が選択される

    加算4 M0

    以下はゼ 判定が1の時のデ タ ス。ゼ 判定が0の時は以下のMUXでは上側が選択される

    命令アドレス

    4

    2ビット左に

    加算

    UX

    1

    0

    制御

    RegDstBranch

    MemRead

    MemWriteALUOpMemtoReg命令[31:26]

    読出reg1読出

    読出reg1 ゼロ判定

    命令メモリ

    PCシフト

    命令[25:21]

    命令[20:16]

    MemWriteALUSrcRegWrite

    AND

    レジスタ ALU ALU結果読出reg2書込reg

    書込デ タ

    読出reg2

    ALU操作 データ

    読出データ

    アドレス MUX

    MUX

    命令[31:0]

    01

    0

    [20:16]

    MUX

    01

    データ 4 メモリ書込データ

    符号3216

    X

    ALU

    1命令[15:11]

    命令[15:0] 符号

    拡張ALU制御

    命令[5:0]

    22次世代コンピューティング研究室 山下 茂 [email protected]

  • 章末問題①

    • 重要問題⑥においてストアの場合を考える ま重要問題⑥においてストアの場合を考える。まず問題文自体を自分で変更せよ(動作の内容が異なる)。そして その問題を回答せよ。異なる)。そして、その問題を回答せよ。

    23次世代コンピューティング研究室 山下 茂 [email protected]

  • ストア命令実行の様子ストア命令の sw $t0, 12($s0)の実行に関して、以下の各ステップのデータパスを図示せよ。また、その時の各MUXへの制御入力は0か1のどちらか?(各バスの値も確認せよ)入力は0か1のどちらか?(各バスの値も確認せよ)

    sw $t0, 12($s0) 101011 00000000000011000100010000op rs rt address

    ①命令メモリからのフェッチとPCの繰り上げ

    31-26 25-21 20-16 15-0$t0$s0 +12sw

    ①命令メモリからのフェッチとPCの繰り上げ

    ②レジスタファイルからの2つのレジスタの読出し(この間に、主制御ユニットが制御信号を生成) ロードと少し違う

    ③ALU制御入力信号を生成して、ALU演算を実行(足されるのは、②のレジスタとoffset の値)

    ④③で計算した値を書きみアドレスとして、データメモリにレジスタrtの値を書き込む

    24次世代コンピューティング研究室 山下 茂 [email protected]

  • ①命令メモリからのフェッチとPCの繰り上げ

    加算4 M0

    命令アドレス

    4

    2ビット左に

    加算

    UX

    1

    0

    制御

    RegDstBranch

    MemRead

    MemWriteALUOpMemtoReg命令[31:26]

    0

    この制御線の値は実際には、もう少し後で決定さ

    読出reg1読出

    読出reg1 ゼロ判定

    命令メモリ

    PCシフト

    命令[25:21]

    命令[20:16]

    MemWriteALUSrcRegWrite

    AND し後で決定される

    レジスタ ALU ALU結果読出reg2書込reg

    書込デ タ

    読出reg2

    ALU操作 データ

    読出データ

    アドレス MUX

    MUX

    命令[31:0]

    01

    0

    [20:16]

    MUX

    01

    データ 4 メモリ書込データ

    符号3216

    X

    ALU

    1命令[15:11]

    命令[15:0] 符号

    拡張ALU制御

    命令[5:0]

    25次世代コンピューティング研究室 山下 茂 [email protected]

  • ②レジスタファイルからの2つのレジスタの読出し(この間に、主制御ユニットが制御信号を生成)⇒値は次のページ

    加算4 M0

    命令アドレス

    4

    2ビット左に

    加算

    UX

    1

    0

    制御

    RegDstBranch

    MemRead

    MemWriteALUOpMemtoReg命令[31:26]

    読出reg1読出

    読出reg1 ゼロ判定

    命令メモリ

    PCシフト

    命令[25:21]

    命令[20:16]

    MemWriteALUSrcRegWrite

    AND

    レジスタ ALU ALU結果読出reg2書込reg

    書込デ タ

    読出reg2

    ALU操作 データ

    読出データ

    アドレス MUX

    MUX

    命令[31:0]

    01

    0

    [20:16]

    MUX

    01$s0をここで指定

    データ 4 メモリ書込データ

    符号3216

    X

    ALU

    1命令[15:11]

    命令[15:0] 符号

    拡張ALU制御

    命令[5:0]

    ALUの下側の入力は、命令[15:0]の値を32ビットにしたもの

    26次世代コンピューティング研究室 山下 茂 [email protected]

  • RegDst= x(所望のデータパスの作成に無関係のため)ALUSrc= 1(所望のデータパスの作成のため)MemtoReg= x(所望のデータパスの作成にに無関係のため)MemtoReg= x(所望のデ タパスの作成にに無関係のため)RegWrite= 0(レジスタに書きこまないので)MemRead= 0 (メモリを読まないので)MemWrite= 1(メモリに書き込むので)MemWrite= 1(メモリに書き込むので)Branch= 0 (beq命令でないので)ALUOp1= 0(lw/sw命令なので)

    ( 命令な )ALUOp0 =0 (lw/sw命令なので)

    *これらの信号の値は、そのクロック周期中はずっと同じ値となっていると考えてください。

    27次世代コンピューティング研究室 山下 茂 [email protected]

  • ③ALU制御入力信号を生成して、ALU演算を実行(足し算)(足されるのは ②のレジスタとoffset の値)

    加算4 M0

    (足されるのは、②のレジスタとoffset の値)

    命令アドレス

    4

    2ビット左に

    加算

    UX

    1

    0

    制御

    RegDstBranch

    MemRead

    MemWriteALUOpMemtoReg命令[31:26]

    読出reg1読出

    読出reg1 ゼロ判定

    命令メモリ

    PCシフト

    命令[25:21]

    命令[20:16]

    MemWriteALUSrcRegWrite

    AND

    レジスタ ALU ALU結果読出reg2書込reg

    書込デ タ

    読出reg2

    ALU操作 データ

    読出データ

    アドレス MUX

    MUX

    命令[31:0]

    01

    0

    [20:16]

    MUX

    01

    データ 4 メモリ書込データ

    符号3216

    X

    ALU

    1命令[15:11]

    命令[15:0] 符号

    拡張ALU制御

    命令[5:0]ALU制御コードは

    0010 (add)

    28次世代コンピューティング研究室 山下 茂 [email protected]

    0010 (add)

  • ④③で計算した値を書きみアドレスとして、データメモリにレジスタrtの値を書き込む

    加算4 M0

    命令アドレス

    4

    2ビット左に

    加算

    UX

    1

    0

    制御

    RegDstBranch

    MemRead

    MemWriteALUOpMemtoReg命令[31:26]

    読出reg1読出

    読出reg1 ゼロ判定

    命令メモリ

    PCシフト

    命令[25:21]

    命令[20:16]

    MemWriteALUSrcRegWrite

    AND

    レジスタ ALU ALU結果読出reg2書込reg

    書込デ タ

    読出reg2

    ALU操作 データ

    読出データ

    アドレス MUX

    MUX

    命令[31:0]

    01

    0

    [20:16]

    MUX

    01

    データ 4 メモリ書込データ

    符号3216

    X

    ALU

    1命令[15:11]

    命令[15:0] 符号

    拡張ALU制御

    命令[5:0]

    29次世代コンピューティング研究室 山下 茂 [email protected]

  • 章末問題②:ジャンプ命令の追加教科書のP301の例題を自分で読んで理解した後、図4.24に関して以下の

    問いに答えよ

    • 教科書:図4.24で新たに付け加えられた部分はどこか答えよ

    • PCへの更新のデータパスにおいて、以下の4つの場合のデータパスをそれぞれ示せ。(どのMUXでどのデータを選択するかを明示せよ.また、制御線で1となっているものをあげよ)

    1 beq命令で分岐が成立する時1. beq命令で分岐が成立する時2. beq命令で分岐が成立しない時3. jump命令4. add命令

    30次世代コンピューティング研究室 山下 茂 [email protected]

  • 追加されたのは、以下の水色の部分

    命令

    加算

    2ビット左にシフト

    命令[25-0]

    26 28 PC+4[31-28]

    ジャンプ先アドレス[31-0 ]

    42ビット

    加算

    MUX

    1

    0制御

    RegDst

    BranchMemReadMemtoReg命令[31:26]

    MUX

    1

    0Jump

    読出 読出

    命令メモリ

    命令アドレス

    PC

    2ビット左にシフト

    命令[25:21]

    制御MemWriteALUOp

    g

    ALUSrcRegWrite

    AND

    [31:26]

    レジスタ

    reg1

    ALU ALU結果読出reg2書込reg

    reg1

    読出reg2

    ALU操作

    ゼロ判定

    読出データ

    アドレス MUMU

    メモリ

    命令[31:0]

    01

    命令[20:16]

    MU0

    書込データ 4

    ALU操作 データメモリ

    書込データ

    UXUX

    10

    命令[15:11]

    命令

    X1

    符号拡張

    3216ALU制御

    命令[15:0]

    命令[5:0]

    31次世代コンピューティング研究室 山下 茂 [email protected]

  • beq命令で分岐が成立する時のデータパス:赤色命令

    加算

    2ビット左にシフト

    命令[25-0]

    26 28 PC+4[31-28]

    ジャンプ先アドレス[31-0 ]

    42ビット

    加算

    MUX

    1

    0制御

    RegDst

    BranchMemReadMemtoReg命令[31:26]

    MUX

    1

    0Jump

    読出 読出

    命令メモリ

    命令アドレス

    PC

    2ビット左にシフト

    命令[25:21]

    制御MemWriteALUOp

    g

    ALUSrcRegWrite

    AND

    [31:26]

    レジスタ

    reg1

    ALU ALU結果読出reg2書込reg

    reg1

    読出reg2

    ALU操作

    ゼロ判定

    読出データ

    アドレス MUMU

    メモリ

    命令[31:0]

    01

    命令[20:16]

    MU0

    書込データ 4

    ALU操作 データメモリ

    書込データ

    UXUX

    10

    命令[15:11]

    命令

    X1

    符号拡張

    3216ALU制御

    命令[15:0]

    命令[5:0]

    32次世代コンピューティング研究室 山下 茂 [email protected]

  • beq命令で分岐が成立しない時のデータパス:赤色命令

    加算

    2ビット左にシフト

    命令[25-0]

    26 28 PC+4[31-28]

    ジャンプ先アドレス[31-0 ]

    42ビット

    加算

    MUX

    1

    0制御

    RegDst

    BranchMemReadMemtoReg命令[31:26]

    MUX

    1

    0Jump

    読出 読出

    命令メモリ

    命令アドレス

    PC

    2ビット左にシフト

    命令[25:21]

    制御MemWriteALUOp

    g

    ALUSrcRegWrite

    AND

    [31:26]

    レジスタ

    reg1

    ALU ALU結果読出reg2書込reg

    reg1

    読出reg2

    ALU操作

    ゼロ判定

    読出データ

    アドレス MUMU

    メモリ

    命令[31:0]

    01

    命令[20:16]

    MU0

    書込データ 4

    ALU操作 データメモリ

    書込データ

    UXUX

    10

    命令[15:11]

    命令

    X1

    符号拡張

    3216ALU制御

    命令[15:0]

    命令[5:0]

    33次世代コンピューティング研究室 山下 茂 [email protected]

  • beq命令で分岐が成立する時の制御線(b 命令で分岐が不成立の時の制御線の(beq命令で分岐が不成立の時の制御線の値も同じ。違うのはALUのゼロ判定出力

    RegDst= x(所望のデータパスの作成には無関係)ALUSrc= 0(所望のデータパスの作成のため)MemtoReg=x(所望のデータパスの作成には無関係)MemtoReg=x(所望のデ タパスの作成には無関係)RegWrite= 0(レジスタに書きこむので)MemRead= 0 (メモリは読まないので)MemWrite= 0(メモリには書き込まないので)MemWrite= 0(メモリには書き込まないので)Jump = 0 (Jumpでないので)Branch= 1 (beq命令なので)

    ( 命令な れは ビ ト す)ALUOp1= 01(beq命令なので:これは2ビットです)

    *これらの信号の値は、そのクロック周期中はずっと同じ値となっていると考えてください。

    34次世代コンピューティング研究室 山下 茂 [email protected]

  • jump命令の時のデータパス:赤色命令

    加算

    2ビット左にシフト

    命令[25-0]

    26 28 PC+4[31-28]

    ジャンプ先アドレス[31-0 ]

    42ビット

    加算

    MUX

    1

    0制御

    RegDst

    BranchMemReadMemtoReg命令[31:26]

    MUX

    1

    0Jump

    読出 読出

    命令メモリ

    命令アドレス

    PC

    2ビット左にシフト

    命令[25:21]

    制御MemWriteALUOp

    g

    ALUSrcRegWrite

    AND

    [31:26]

    レジスタ

    reg1

    ALU ALU結果読出reg2書込reg

    reg1

    読出reg2

    ALU操作

    ゼロ判定

    読出データ

    アドレス MUMU

    メモリ

    命令[31:0]

    01

    命令[20:16]

    MU0

    書込データ 4

    ALU操作 データメモリ

    書込データ

    UXUX

    10

    命令[15:11]

    命令

    X1

    符号拡張

    3216ALU制御

    命令[15:0]

    命令[5:0]

    35次世代コンピューティング研究室 山下 茂 [email protected]

  • jump命令の時の制御線

    RegDst= x(所望のデータパスの作成には無関係)ALUSrc=x(所望のデータパスの作成には無関係)MemtoReg (所望のデ タパスの作成には無関係)MemtoReg=x(所望のデータパスの作成には無関係)RegWrite= 0(レジスタに書きこむので)MemRead= 0 (メモリは読まないので)

    ( は書き込まな )MemWrite= 0(メモリには書き込まないので)Jump = 1 (Jumpなので)Branch= 0 (beq命令でないので、ただし1でも問題ないという意味ではxと答えてもOK.)ALUOp=xx(ALUは使わないので、これは2ビット)

    *これらの信号の値は、そのクロック周期中はずっと同じ値となっていると考えてください。

    36次世代コンピューティング研究室 山下 茂 [email protected]

  • add命令の時のデータパス:赤色命令

    加算

    2ビット左にシフト

    命令[25-0]

    26 28 PC+4[31-28]

    ジャンプ先アドレス[31-0 ]

    42ビット

    加算

    MUX

    1

    0制御

    RegDst

    BranchMemReadMemtoReg命令[31:26]

    MUX

    1

    0Jump

    読出 読出

    命令メモリ

    命令アドレス

    PC

    2ビット左にシフト

    命令[25:21]

    制御MemWriteALUOp

    g

    ALUSrcRegWrite

    AND

    [31:26]

    レジスタ

    reg1

    ALU ALU結果読出reg2書込reg

    reg1

    読出reg2

    ALU操作

    ゼロ判定

    読出データ

    アドレス MUMU

    メモリ

    命令[31:0]

    01

    命令[20:16]

    MU0

    書込データ 4

    ALU操作 データメモリ

    書込データ

    UXUX

    10

    命令[15:11]

    命令

    X1

    符号拡張

    3216ALU制御

    命令[15:0]

    命令[5:0]

    37次世代コンピューティング研究室 山下 茂 [email protected]

  • RegDst= 1(所望のデータパスの作成のため)ALUSrc= 0(所望のデータパスの作成のため)MemtoReg= 0(所望のデータパスの作成のため)MemtoReg= 0(所望のデ タパスの作成のため)RegWrite= 1(レジスタに書きこむので)MemRead= 0 (メモリは読まないので)MemWrite= 0(メモリには書き込まないので)MemWrite= 0(メモリには書き込まないので)Jump = 0 (Jump命令でないので)Branch= 0 (beq命令でないので)

    ( 命令な ) れは ビ トALUOp= 10(R命令なので) これは2ビット

    *これらの信号の値は、そのクロック周期中はずっと同じ値となっていると考えてください。

    38次世代コンピューティング研究室 山下 茂 [email protected]