FPGA開発日記

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

自作CPUにベクトル命令を追加する実装検討(45. ベクトルパイプラインのまとめ)

ベクトル演算システムの構造をまとめておこうと思う。

1. システムの全体構成

ベクトル演算システムは、主にベクトル演算側とベクトルLSU側の二つの部分に分類される。

フロントエンド部分では、スカラ演算機能にベクトル用のリネームユニットなどを追加し、ベクトル・バックエンドはベクトルALUとベクトルLSUに分かれている。 これらのユニットは独立して演算やメモリアクセスを実行可能であり、ベクトルALUはスカラーのALUと完全に独立している。

2. ベクトルLSUの内部構造

ベクトルLSUの内部構造は、命令発行ユニット、マイクロオペレーション変換ユニット、命令パイプライン、リプレイキューを中心に構成される。

命令発行ユニットはフロントエンドからの命令を受け取り、オペラントの監視と発行を行う。 マイクロオブジェネレーターは受け取った命令をマイクロオペレーションに分解し、ベクトルメモリアクセス命令は複数のマイクロオペレーションに分割されることもある。

LSUパイプラインはアドレス生成とメモリアクセスの機能を担い、スカラーLSUとの連携も行われる。

3. ベクトルLSUパイプラインの機能

ベクトルLASUパイプライン内では、仮想アドレスの生成、TLBへのアクセス、L1Dキャッシュへのアクセスが行われる。 仮想アドレスの生成フェーズでは、マイクロオペレーションの種類に応じた仮想アドレスが生成され、TLBを介して物理アドレスが取得される。

ハザードチェックはベクトルLSU側とスカラーLSU側に分けられ、ベクトルロード命令とストア命令間のフォワーディングなどが確認される。

L1キャッシュアクセスでは、キャッシュミス時にMSHRにリクエストを送信し、キャッシュヒット時は直接データを取得する。