90 likes | 244 Views
プロジェクト実習 LSI の設計と実現. パイプラインプロセッサの設計 2. 今日の目標. ID, EX ステージを実装し、足し算を出来るようにする LDIH r1 , 0, 1 LDIH r2, 0, 2 ADD r3, r1, r2 足し算の結果に 3 ・ 00000000 が 入ることを確認する 余裕があれば WB まで 実装 r3 に 3 ・ 00000000 が 入ることを確認する. 実装方針. 次のステージに渡すべきデータ パイプラインレジスタ 前段のパイプラインレジスタの内容を使って 後段 のパイプラインレジスタの内容を決定. IF.
E N D
プロジェクト実習LSIの設計と実現 パイプラインプロセッサの設計2
今日の目標 • ID, EXステージを実装し、足し算を出来るようにする • LDIHr1, 0, 1 • LDIH r2, 0, 2 • ADD r3, r1, r2 • 足し算の結果に3・00000000が入ることを確認する • 余裕があればWBまで実装 • r3に3・00000000が入ることを確認する
実装方針 • 次のステージに渡すべきデータ • パイプラインレジスタ • 前段のパイプラインレジスタの内容を使って • 後段のパイプラインレジスタの内容を決定 IF IF/ID パイプライン レジスタ ID ID/EX パイプライン レジスタ EX EX/MEM パイプライン レジスタ
ソースコード • IF/IDパイプラインレジスタの宣言 • IFステージのalways • ID/EXパイプラインレジスタの宣言 • IDステージのalways • EX/MEMパイプラインレジスタの宣言 • 以下同様 • 宣言を全部上にまとめて書いても良い
ヒント • 現段階では前段以外のパイプラインレジスタの値は不要 • そのうち必要になってくる • 実は冒頭の例すらまだ動かない • パイプラインレジスタ以外は処理に応じて必要 • ハザードの存在 • 詳細は次回説明 • とりあえず命令の間にいくつかNOPを入れると動作する
何を実装するべきか • ID • 演算の種類を判別しデータを準備する • 演算対象がレジスタの場合 • レジスタ番号を特定し • レジスタの内容を読み出す • EX • 演算を実行し • 結果をパイプラインレジスタに格納する
IDの結果 • LDIHr1, 0, 1 の場合 • OP=LDIH? • A={1 , 00000000} • B=0(不要) • ADD r3, r1, r2 の場合 • OP=ADD • A=(r1の中身) • B=(r2の中身)
EXの結果 • LDIHr1, 10 の場合 • C={1000000000} • ADD r3, r1, r2 の場合 • C=(r1の中身)+(r2の中身)
中島研の学生は • 今日中に(次回までに)WBまで実装すること • すべての算術論理演算を実装 • できればLOAD/STOREも • 次回は分岐とハザードの処理を実装