プロジェクト実習 LSIの設計と実現

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