FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

BOOM (Berkeley Out-of-Order Machine) のマイクロアーキテクチャドキュメントを読む (9)

RISC-VのアウトオブオーダコアであるBOOM (Berkely Out-of-Order Machine) について勉強を進めている。以下のドキュメントを日本語に訳しながら読んでいくことにした。

docs.boom-core.org


レジスタファイルとバイパスネットワーク

Multi-Issue Pipeline

Fig. 18 複数命令発行パイプラインの例。整数レジスタファイルには、存在する実行ユニットに対して、6つのリードポートと3つのライトポートが必要です。 FPレジスタファイルには,3つのリードポートと2つのライトポートが必要です。 FP演算とメモリ演算は、整数レジスタファイルとFPレジスタファイルの両方に対して、long latency書き込みポートを共有します。 書き込みポートのスケジューリングを容易にするために、ALUのパイプラインはFPUのレイテンシに合わせて長くなっています。 ALUは、これらのステージのいずれかから、レジスタリードステージの依存する命令にバイパスすることができます。

BOOMは、統一された PRF(Physical Register File) デザインです。 レジスタファイルには、コミットされた状態と投機的な状態の両方が保持されます。 さらに、2つのレジスタファイルがあります:1つは整数レジスタ値用、もう1つは浮動小数レジスタ値用です。 リネームマップテーブル は、どの物理レジスタがどのISAレジスタに対応するかを追跡します。

BOOMは、内部65ビットのオペランドフォーマット(https://github.com/ucb-bar/berkeley-hardfloat) を使用するBerkeleyのHardfloat浮動小数点ユニットを使用しています。 したがって、すべての物理的な浮動小数レジスタは65ビットです。

レジスタ読み込み

レジスタファイルは、発行されたすべての命令を満たすために必要なすべてのレジスタリードポートを静的に規定します。 例えば、 発行ポート#0 が整数のALUに対応し、 発行ポート#1 がメモリユニットに対応する場合、 最初の2つのレジスタリードポートがALUに、次の2つのレジスタリードポートがメモリユニットに、 合計4つのリードポートが静的に提供されます。

動的な読み込みポートスケジューリング

将来の設計では、より少ない数のレジスタリードポートを用意し、動的にスケジューリングすることで、 面積効率を向上させることができます。 これは、ほとんどの命令が1つのオペランドしか必要としない場合に特に有効です。 しかし、この方法では設計が複雑になり、アービトレーションや構造上の問題を検出するために パイプラインのステージが増えることになります。 また、発行された Micro-Ops (UOP) を kill し、 後のサイクルで 発行キュー から再発行する機能も必要です。

バイパスネットワーク

バイパスネットワーク を介してライトバック値を転送することで、 ALU演算を連続して実行することができます。 バイパスは レジスタ読み込み ステージの最後に行われます。