はじめに
本記事では Agilex™ 3 搭載の評価ボード Atum を使用し、Hyper Register を実装することで FPGA の動作周波数である Fmax を向上させる方法についてご紹介します。Agilex™ 3 の Hyper-Pipelining 機能を有効にすることで、ALM レジスタ間に Hyper Register を実装でき、長い配線遅延を排除してデザイン全体における Fmax を向上させることができますので、今回はサンプルデザインをもとに Hyper Register を実装した Fmax の向上についてご説明します。
サンプルデザイン(ファイル名:”top_Hyper_Register.qar)は、ページ下部よりダウンロードしてご使用ください。
1. Hyper Register とは
Hyperflex コア・アーキテクチャーでは従来の FPGA とは異なり、ALM 間の配線の交点に数百万ものレジスターが追加されています。このレジスターを論理ブロック内に配置されているレジスターと区別するために Hyper Register と呼びます。以下は ALM 間の配線に配置されている Hyper Register を示した図です。
Fmax を向上させる手法として、パイプラインレジスタの挿入があります。従来の設計手法では、組み合わせ回路が多段となる箇所にそれぞれ必要な段数のパイプラインレジスタを設計者自身で挿入する必要があったため、回路に手を加えるのはその回路に精通した設計者である必要がありました。一方で、Hyperflex コア・アーキテクチャーに対応している Agilex™ 3 の場合は、組み合わせ回路が多段となる回路の前後に、必要段数のパイプラインレジスタをまとめて組み込むだけで、Quartus Prime のリタイミング機能が有効となり自動的にクリティカルパスへのレジスタの配置がおこなわれ、必要に応じて Hyper Register が配置されます。これにより設計者の工数を削減でき Fmax の向上を図ることができます。
2. 環境セットアップ
”top_Hyper_Register.qar” のデザインは下記ツールバージョンで作成しています。
・ 対象デバイス : Agilex™ 3 (A3CZ135BB18AE7S)
・ ツールバージョン : Quartus Prime Pro Edition ver. 25.1.1
まずはページ下部の ”top_Hyper_Register.qar” をダウンロードし、Project > Restore Archived Project を選択します。
”top_Hyper_Register.qar” を保存したパスを Archive name: 欄で指定し、Destination folder: には解凍先のパスを指定後、OK を選択することで Quartus Prime プロジェクトの解凍ができます。
プロジェクトの解凍ができましたら、青色三角のコンパイルボタンをクリック(下図)することで、コンパイルが実行されます。
これで Hyper Register の実装および Fmax 値について確認する準備が整いました。
3. デザインの説明
サンプルとして用意したデザインは、整数の除算器を実装したデザインです。除算器は組み合わせ回路として実装されるためデータパス遅延(信号が入力から出力まで到達するまでの時間)が大きくなりやすい構造です。その結果 、設計全体の最長経路遅延であるクリティカルパス遅延が大きくなり、Fmax の低下要因になりやすい回路といえます。
そこで、今回 Fmax が低下しやすい除算器のデザインを使用して検証することで、Hyper Register による Fmax 改善効果が確認できます。また、Fmax が低下する除算回路の前後にパイプラインレジスタを挿入するための hyperpipe_vlat モジュールを実装します。これにより、Quartus Prime は Hyper Register を実装する対象のレジスタと判断し、 Hyper-Retiming 機能により最適な段数や配置個所を Quartus Prime が考慮して Fmax を向上するよう自動的に配置をおこないます。
本デザインにおいては、追加可能な最大パイプライン段数を MAX_PIPE のパラメータの値を修正することで変更できます。
*MAX_PIPE の値を変更し Fmax の値の変化や Hyper Register の実装の様子を本デザインで実際にご確認いただけます。
4. 実装方法
パイプラインを許可するための仮想レジスタのモジュールである hyperpipe_vlat を実装するテンプレートが Quartus Prime で用意されているため、このモジュールを遅延が大きくなりやすい回路の前後に実装します。
なお、Hyper Register のクロックは、グローバルクロックに割り当てる必要がありますので、該当のクロックがグローバルクロックに割り当てられていない場合は、グローバルクロックの設定をおこないます。
その他パイプラインレジスタの挿入に関するガイドラインについてはハンドブックに記載がありますので、併せてご参照ください。
■Hyperflex® Architecture High-Performance Design Handbook -2.3.2.2. Automatic Pipeline Insertion
5. Hyper Register の実装確認
テンプレートで実装したパイプラインを許可するための仮想レジスタは下記 RTL デザインの青色のモジュールになり、HDL デザインの記述内容をそのまま反映した結果を RTL Analyzer で確認することができます。
Quartus Prime で Tools > Netlist Viewer > RTL Analyzer を選択することで RTL 情報を回路図形式で確認できます。
回路内全体で適切な位置に Hyper Register が実装される (Hyper-Retiming) ことでクリティカルパスの解消を行い、Fmax が向上した様子を Technology Map Viewer (Post-Fitting) で確認することができます。回路の全体像が下記になります。
Quartus Prime で Tools > Netlist Viewer > Technology Map Viewer (Post-Fitting) を選択することで RTL 情報を回路図形式で確認できます。
Technology Map Viewer (Post-Fitting) の回路の一部を拡大した図が下記になります。
Hyper Register として実装されているものは Technology Map Viewer (Post-Fitting) 上で HYPER と記載されます。
Hyper Register の実装数は Compilation Report 上の Fitter > Place Stage > Resource Usage Summary から確認することができます。
Fmax は Compilation Report 上の Fitter > Fast Forward Timing Closure Recommendations > Clock Fmax Summary から確認することができます。
6. Hyper Register が実装されない場合
ユーザーデザインにおいて hyperpipe_vlat のテンプレートを使用しているにも関わらず Hyper Register が実装されない場合、Fast Forward Timing Closure Recommendations レポートに従い対策を行います。
レポートを出力するには、Compilation Dashboard における Fast Forward Timing Closure Recommendations のブランクにチェックをいれます。
Compilation Report 上の Fitter > Fast Forward Timing Closure Recommendations > Fast Forward Details for Clock Domain xxx から確認することができます。
こちらのレポートに記載されている内容に従ってデザインを修正することで Hyper Register が使用され Fmax の向上を図ることができます。レポート内容に関してはユーザーガイドをご参照ください。
■Hyperflex® Architecture High-Performance Design Handbook -4.1.1. Step 1: Compile the Base Design
7. 本デザインにおける MAX_PIPE の値を変更した際の各種パラメータの違い
MAX_PIPE のパラメータの値を変更することでデザインに最適なパスに Hyper Register が実装され、MAX_PIPE=15 以降では Fmax の値は飽和する結果となりました。下記グラフより全体的に Fmax は向上していることが確認できます。
なお、デザインに応じて向上する Fmax の上り幅は異なります。
8. まとめ
Agilex™ 3 の Hyper Register を実装することで、これまで課題となっていた長い配線遅延を排除して、デザイン全体における Fmax を向上させることができます。尚、非同期リセット回路があると Hyper Register が実装できないなど、Hypter Register の実装には条件がありますので、Altera の Hyperflex Architecture のハンドブック等も併せてご参照ください。
■Hyperflex® Architecture High-Performance Design Handbook
https://www.intel.com/content/www/us/en/docs/programmable/683353/25-1-1/faq.html
■AN 917: Reset Design Techniques for Hyperflex® Architecture FPGAs
また、Hyper Register の Fmax の検証に使用したデザインを添付しておりますので、Hyper Register を実装する際のサンプルとしてご利用ください。MAX_PIPE 値を変更することで Fmax や Hyper Register の実装数が変わっている様子を確認することができます。
「Agilex™ 3 でやってみた」シリーズ一覧はこちら