CPU設計と パイプライン
パイプラインの始まり
1バスでのレジスタ間演算 3clock/命令 r1+r2→r4 Xreg ALU Yreg レジスタファイル(1RW) r1 r2 r3
2バスでのレジスタ間演算 2clock/命令 r1+r2→r4 Xreg ALU Yreg レジスタファイル(1R1RW) r1 r2 r3
3バスでのレジスタ間演算(1) r1+r2→r4 1clock/命令 周波数は低下 ALU レジスタファイル(2R1W) r1 r2 r3
3バスでのレジスタ間演算(2) r1+r2→r4 r2+r3→r1 1命令の実行時間は2clock ただし・・・ 実質1clock/命令 Xreg ALU Yreg r3 r4 レジスタファイル(2R1W) r1 r2 r1+r2→r4 r2+r3→r1 1命令の実行時間は2clock ただし・・・ RR EXE 同時実行 レジスタリードと演算実行は同時 なのでn命令の実行にnクロック 実質1clock/命令
3バスでのレジスタ間演算(2-) r1+r2→r4 r4+r3→r1 データハザード対策 ・バイパス回路 ・wait回路 Xreg ALU Yreg r3 r4 レジスタファイル(2R1W) r1 r2 バイパス r1+r2→r4 r4+r3→r1 r4の書き込みと読み出しが同時 データハザード対策 ・バイパス回路 ・wait回路 リソースハザード対策 ・バス→専用線 ・RAMの多ポート化 ・wait回路 ・その他
機械語命令とハード制御
演算命令 例えば add rs, rt, rd ( rs + rt → rd) なら opとfunctで加算を指定する。
演算命令のビットパターンと回路制御 Xreg ALU Yreg レジスタファイル(2R1W) OP rs rt rd sh func r1
タイミングを考慮すると タイミングを合わせる パイプラインレジスタ 命令メモリ 命令メモリ OP rd rt rs sh func 命令レジスタ ALU 命令メモリ レジスタ ファイル rs rt rd op,func dec パイプライン化 命令メモリ rs rt タイミングを合わせる パイプラインレジスタ 命令レジスタ 命令レジスタ レジスタ ファイル レジスタ ファイル op,func ALU dec rd レジスタ ファイル デコード→ALUは クリティカルパスになる
分岐命令 If ( CC = ttue ) PC + offset → PC 命令メモリ 命令 レジスタ PC DPC OP CC 4 8 C 命令 レジスタ DPC 命令レジスタ 4 8 C DPC adder PCと命令レジスタは1clockズレるので 次の命令のアドレス+offsetに分岐する。 PCと命令レジスタはズレないので その命令のアドレス+offsetに分岐する。
ロード命令 データ メモリー [rt+offset]→rd rt 命令レジスタ 命令レジスタ レジスタ ファイル OP rd rt dec [rt+offset]→rd rd add offset rt ALU address データ メモリー rd レジスタ ファイル
演算とロードをまとめると データ メモリー データ キャッシュ Fetch Decode Execute Mem Write rs rt 命令レジスタ 命令レジスタ レジスタ ファイル レジスタ ファイル どちらを優先するか? キャッシュを優先すると パイプラインを止める 必要あり。 →wait信号が必要 op offset Decode rd dec rd op op offset,rs rt ALU Execute address データ メモリー データ キャッシュ rd op rd Mem タイミング合わせの パイプラインレジスタ レジスタ ファイル キャッシュミスすると 競合が発生 データメモリーが 1clockアクセスなら 競合しない Write
命令読み出し 命令キャッシュは 外れる事がある Valid信号が 必要 命令 命令メモリ キャッシュ PC DPC V + 命令レジスタ adder
Validもパイプライン DC Fetch Decode Execute Mem Write rs rt V 命令レジスタ 命令レジスタ ファイル レジスタ ファイル op offset Decode rd dec V rd op op offset,rs rt ALU Execute address DC V rd op rd Mem レジスタ ファイル Write
割り込み,エラー DC 復帰用PCも必要 例外処理回路 rs rt DPC EPC MPC V 命令レジスタ 命令レジスタ レジスタ ファイル レジスタ ファイル op offset 予約命令 ゼロ除算 rd dec V V rd op op offset,rs rt データアラインメント ALU DC V rd op rd TLBミス 例外処理回路 レジスタ ファイル 復帰用PCも必要
バイパスとwait wait バイパス DC Valid wait rs rt r3 + r4 → r5 V 命令レジスタ 命令レジスタ r3 + r4 → r5 V 命令レジスタ 命令レジスタ レジスタ ファイル レジスタ ファイル op offset wait rd dec バイパス V rd op op offset,rs rt [r1 + offset]→ r3 r1 + r2→ r3 ALU DC [r1 + offset]→ r3 V rd op rd レジスタ ファイル
最後に パイプラインレジスタを入れてタイミングを合わす プロパティはパイプラインに沿って落としていく 異なるステージの信号は混ぜない Tips:信号名にステージ名を入れる ハザードの洗い出しは確実に ValidとWaitでコントロールする