4.パイプラインの検討(Jun.28.2004)
パイプラインの段数をいくらにするべきか?
当初、3段、4段、を検討し、最終的に5段に決定しました。
LUT節約の為、レジスタファイルは、RAMにせざるを得ません。ブロック図を数回書き直し/論理合成、試行錯誤を繰り返した結果、パイプラインの段数が増えてしまいました。また、見かけのパフォーマンスを良く見せるために、ドライストーンベンチマークでは、最低16KBの内部RAMが必要で、このRAMに対し1CLOCKでR/Wできることを重要視しました。結果、分岐性能にしわ寄せがきてしまいました。
StaratixUWEB EDITIONのフロアプランなしでも150MHz程度(100DMPIS)で駆動できます。
100DMIPSは10年前のペンティアム90MHzに相当する値です。
パイプライン検討 | ||||||
StratixUを論理合成しながら、最適なStage構成を考える | ||||||
Jun.28.2004 Tak.Sugawara | ||||||
通常命令 | ||||||
時刻 | Stage1 | Stage2 | Stage3 | Stage4 | Stage5 | |
フェッチ&デコード1 | デコード2 | MEMアドレスセット | MEM読み出し整列 | MEM読み出し | ||
レジスタファイル読み出しアドレスセット | レジスタファイル読み出し | MEMWrite | レジスタファイル書き込み | |||
Alu前段ラッチ(LEFT/RIGHT_LATCH) | Alu演算結果ラッチ(AReg) | Nreg | Rreg | |||
t0 | F&D1 | |||||
t1 | F&D1 | RF | ||||
t2 | F&D1 | RF | ALU | |||
t3 | F&D1 | RF | ALU | MEM | ||
t4 | F&D1 | RF | ALU | MEM | WB | |
t5 | RF | ALU | MEM | WB | ||
t6 | ALU | MEM | WB | |||
t7 | MEM | WB | ||||
WB | ||||||
NOTE: | ||||||
メモリアクセス(R/W)は、パイプラインの同じステージでやらないと、競合する。 | ||||||
Forwardingは、RReg(前段)、RReg(後段)から、ALU_left_latch,ALU_Right_latchへ行う | ||||||
メモリリード結果は、STAGE5に得られる。1NOPを挿入し、STAGE5から3へのFORWARDING | ||||||
ジャンプ先がフェッチ時に既定の場合 | ||||||
時刻 | Stage1 | Stage2 | Stage3 | Stage4 | Stage5 | |
フェッチ&デコード1 | デコード2 | MEMアドレスセット | MEM読み出し整列 | MEM読み出し | ||
レジスタファイル読み出しアドレスセット | レジスタファイル読み出し | MEMWrite | レジスタファイル書き込み | |||
Alu前段ラッチ(LEFT/RIGHT_LATCH) | Alu演算結果ラッチ(AReg) | Nreg | Rreg | |||
t0 | F&D1 | |||||
t1 | F&D1(JMP命令発見) | RF | ||||
t2 | ディレイドブランチ命令 | ジャンプ先SET | ALU | |||
t3 | F&D1(ジャンプ先命令) | RF | ALU | MEM | ||
t4 | F&D1 | RF | ALU | MEM | WB | |
t5 | RF | ALU | MEM | WB | ||
t6 | ALU | MEM | WB | |||
t7 | MEM | WB | ||||
WB | ||||||
NOTE: | ||||||
JMP先が既定なので、Stage2でPCをSETできる。 | ||||||
レジスタジャンプ | ||||||
時刻 | Stage1 | Stage2 | Stage3 | Stage4 | Stage5 | |
フェッチ&デコード1 | デコード2 | MEMアドレスセット | MEM読み出し整列 | MEM読み出し | ||
レジスタファイル読み出しアドレスセット | レジスタファイル読み出し | MEMWrite | レジスタファイル書き込み | |||
Alu前段ラッチ(LEFT/RIGHT_LATCH) | Alu演算結果ラッチ(AReg) | Nreg | Rreg | |||
t0 | F&D1 | |||||
t1 | F&D1(レジスタJMP命令発見) | RF | ||||
t2 | ディレイドブランチ命令 | RF | ALU | |||
t3 | F&D1 | RF | ジャンプ先アドレスSET | MEM | ||
t4 | F&D1(ジャンプ先命令) | NOPにする | ALU | MEM | WB | |
t5 | RF | NOP | MEM | WB | ||
t6 | ALU | NOP | WB | |||
t7 | MEM | NOP | ||||
WB | ||||||
NOTE: | ||||||
レジスタが決まらないとJMPできない。 | ||||||
決まるのは、STAGE3 | ||||||
=>2命令のディレイドブランチをCコンパイラで検討要 | ||||||
ディレイドブランチ命令は、ブランチ命令でないこと(Check) | ||||||
ブランチ命令でブランチする場合 | ||||||
時刻 | Stage1 | Stage2 | Stage3 | Stage4 | Stage5 | |
フェッチ&デコード1 | デコード2 | MEMアドレスセット | MEM読み出し整列 | MEM読み出し | ||
レジスタファイル読み出しアドレスセット | レジスタファイル読み出し | MEMWrite | レジスタファイル書き込み | |||
Alu前段ラッチ(LEFT/RIGHT_LATCH) | Alu演算結果ラッチ(AReg) | Nreg | Rreg | |||
t0 | F&D1 | |||||
t1 | F&D1(BracnchP命令発見) | RF | ||||
t2 | ディレイドブランチ命令 | RF | ALU | |||
t3 | F&D1 | RF | ジャンプ先判断(Taken) | MEM | ||
t4 | F$D1 | NOPにする | ALU | ブランチ先SET | WB | |
t5 | ブランチ先命令 | NOPにする | NOP | MEM | ||
t6 | RF | NOP | NOP | WB | ||
t7 | ALU | NOP | NOP | |||
MEM | NOP | |||||
WB | ||||||
NOTE: | ||||||
ブランチ判断とブランチアドレスSETをStage3にしたい、 | ||||||
レジスタ決定がStage3、それから、32ビットコンペアして、アドレス計算、アドレスSet | ||||||
=>timing間に合わずアドレスSetをStage4に移行 | ||||||
=>3命令のディレイドブランチをCコンパイラで検討要 | ||||||
ディレイドブランチ命令は、ブランチ命令でないこと(Check) | ||||||
ブランチ命令でブランチしない場合 | ||||||
時刻 | Stage1 | Stage2 | Stage3 | Stage4 | Stage5 | |
フェッチ&デコード1 | デコード2 | MEMアドレスセット | MEM読み出し整列 | MEM読み出し | ||
レジスタファイル読み出しアドレスセット | レジスタファイル読み出し | MEMWrite | レジスタファイル書き込み | |||
Alu前段ラッチ(LEFT/RIGHT_LATCH) | Alu演算結果ラッチ(AReg) | Nreg | Rreg | |||
t0 | F&D1 | |||||
t1 | F&D1(BracnchP命令発見) | RF | ||||
t2 | ディレイドブランチ命令 | RF | ALU | |||
t3 | F&D1 | RF | ジャンプ先判断(NotTaken) | MEM | ||
t4 | F&D1 | RF | ALU | MEM | WB | |
t5 | F&D1 | RF | ALU | MEM | WB | |
t6 | RF | ALU | MEM | WB | ||
t7 | ALU | MEM | NOP | |||
MEM | NOP | |||||
WB | ||||||
割り込みの条件 | ||||||
時刻 | Stage1 | Stage2 | Stage3 | Stage4 | Stage5 | |
フェッチ&デコード1 | デコード2 | MEMアドレスセット | MEM読み出し整列 | MEM読み出し | ||
レジスタファイル読み出しアドレスセット | レジスタファイル読み出し | MEMWrite | レジスタファイル書き込み | |||
Alu前段ラッチ(LEFT/RIGHT_LATCH) | Alu演算結果ラッチ(AReg) | Nreg | Rreg | |||
t0 | F&D1 | |||||
t1 | F&D1(割り込み命令発見) | RF | ||||
t2 | InterruptNOP | 割り込み先SET | ALU | |||
t3 | F&D1(割り込み先命令) | NOP | ALU | MEM | ||
t4 | F&D1 | RF | NOP | MEM | WB | |
t5 | RF | ALU | NOP | WB | ||
t6 | ALU | MEM | NOP | |||
t7 | MEM | WB | ||||
WB | ||||||
割り込みの条件 | ||||||
Branch中ではないこと。 | ||||||
乗除算結果読み込み命令 | ||||||
時刻 | Stage1 | Stage2 | Stage3 | Stage4 | Stage5 | |
フェッチ&デコード1 | デコード2 | MEMアドレスセット | MEM読み出し整列 | MEM読み出し | ||
レジスタファイル読み出しアドレスセット | レジスタファイル読み出し | MEMWrite | レジスタファイル書き込み | |||
Alu前段ラッチ(LEFT/RIGHT_LATCH) | Alu演算結果ラッチ(AReg) | Nreg | Rreg | |||
t0 | F&D1 | |||||
t1 | F&D1(乗算Read命令発見) Set | RF | ||||
t2 | NOP | SAVE_PC | ALU | |||
t3 | 乗除算が終了していないなら待ち | NOP | NOP | MEM | ||
t4 | NOP | 次のPC<=読み込み命令の再実行 | NOP | NOP | WB | |
Tx-1 | NOP | NOP | NOP | NOP | NOP | |
Tx | F&D1 | NOP | NOP | MEM | NOP | |
Tx+1 | RF | NOP | MEM | WB | ||
ALU | NOP | WB | ||||
MULDIVは、ストールしない。 | ||||||
実行Moduleが、実行するのみ。 | ||||||
読み出し命令が来て、終了していないときストールし、乗除算終了を待って再実行する。 | ||||||
(ストール機構を簡単にするため。現在の実装では、乗算が2CLOCKで終了するのに対し、待ちで8CLK消費してしまう。アセンブラでNOPを乗算は挿入した方がよい。) | ||||||