森/日誌/2009-02-17
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[森/日誌]]
-ToDo
--パイプラインレジスタを入れる。
-パイプラインレジスタはどこで必要か
--IF / RF
---if_ir ->pcのアドレスの命令コードを命令メモリから読み出して、保持する。
---if_pc ->pcの値をインクリメントし、保持する。
--RF / EX
---rg1 ->regfileから読み出した値を保持する。
---rg2 ->regfileから読み出した値を保持する。
---rf_ir --> EX_stageで使用するので、値を保持しなければいけない?
---rf_pc ->分岐命令などで使用する。
--EX / EX2
---mar -> LD,ST で使用するためのアドレス。
---mdr -> ST命令のとき値が必要となるため。
---ex_ir -> LD命令のとき、アドレスが必要なため。
---ex_pc ->JALで必要。
---ex_rg1 -> JALRのpcを戻すときに使う。
-間違っていたら教えてください。お願いします。自信ないです。
--大体あってると思いますが、そのままだと16ビットのレジスタが大量に使われるので、消費電力が増えてしまいます。~
省略できる部分があるかどうかも検討してみましょう。
-わかったこと
--なぜ、EX2まで必要なのか(もしくはEX2が必要かどうか)
---パイプライン処理の性能向上は、(全体の作業時間)/(もっとも長いステージの作業時間)となるので、各ステージの作業時間をなるべく等しくする必要があるため。だと思うのですが、他の理由が思い付きません。コメントありがとうございます。
---もしも余裕があれば、EX2の動作をEXに移して、動作遅延や実行クロック数を比較してみるといいかも。~
EX2の動作を付けることで、性能がどう変化するかを実験できます。
-わからないこと
--relay()文は、同じstage内で何度も使用できるのか。
stage RF {
par {
relay EX.do(REG.read(RD, RS).dout1, REG.dout2, if_ir);
/* ST */
any {
(OP == 0b00000) & (FUNC == 0b01001) : relay EX.do(REG.dout2);
}
}
}
---同じステージを起動するために実行されるrelayは必ず一つでなければいけません。~
その書き方だと、ST命令のとき、二つのrelayが実行されます。~
これは正しく動かないので注意してください。~
また、ステージの起動に同じtaskを使用する場合は引数を統一する必要があります。~
引数を変えたいときは、stage_name宣言のtaskを追加しましょう。
終了行:
[[森/日誌]]
-ToDo
--パイプラインレジスタを入れる。
-パイプラインレジスタはどこで必要か
--IF / RF
---if_ir ->pcのアドレスの命令コードを命令メモリから読み出して、保持する。
---if_pc ->pcの値をインクリメントし、保持する。
--RF / EX
---rg1 ->regfileから読み出した値を保持する。
---rg2 ->regfileから読み出した値を保持する。
---rf_ir --> EX_stageで使用するので、値を保持しなければいけない?
---rf_pc ->分岐命令などで使用する。
--EX / EX2
---mar -> LD,ST で使用するためのアドレス。
---mdr -> ST命令のとき値が必要となるため。
---ex_ir -> LD命令のとき、アドレスが必要なため。
---ex_pc ->JALで必要。
---ex_rg1 -> JALRのpcを戻すときに使う。
-間違っていたら教えてください。お願いします。自信ないです。
--大体あってると思いますが、そのままだと16ビットのレジスタが大量に使われるので、消費電力が増えてしまいます。~
省略できる部分があるかどうかも検討してみましょう。
-わかったこと
--なぜ、EX2まで必要なのか(もしくはEX2が必要かどうか)
---パイプライン処理の性能向上は、(全体の作業時間)/(もっとも長いステージの作業時間)となるので、各ステージの作業時間をなるべく等しくする必要があるため。だと思うのですが、他の理由が思い付きません。コメントありがとうございます。
---もしも余裕があれば、EX2の動作をEXに移して、動作遅延や実行クロック数を比較してみるといいかも。~
EX2の動作を付けることで、性能がどう変化するかを実験できます。
-わからないこと
--relay()文は、同じstage内で何度も使用できるのか。
stage RF {
par {
relay EX.do(REG.read(RD, RS).dout1, REG.dout2, if_ir);
/* ST */
any {
(OP == 0b00000) & (FUNC == 0b01001) : relay EX.do(REG.dout2);
}
}
}
---同じステージを起動するために実行されるrelayは必ず一つでなければいけません。~
その書き方だと、ST命令のとき、二つのrelayが実行されます。~
これは正しく動かないので注意してください。~
また、ステージの起動に同じtaskを使用する場合は引数を統一する必要があります。~
引数を変えたいときは、stage_name宣言のtaskを追加しましょう。
ページ名: