任意精度 (AP) 型 - 2023.2 日本語

Vitis 高位合成ユーザー ガイド (UG1399)

Document ID
UG1399
Release Date
2023-12-18
Version
2023.2 日本語

C/C++ ベースのネイティブ データ型は、8 ビット境界 (8、16、32、64 ビット) に基づきますが、RTL バス (ハードウェアに対応) では、任意精度のデータ長がサポートされます。標準 C/C++ データ型を使用すると、効率の悪いハードウェア インプリメンテーションになることがあります。たとえば、AMD デバイスでの基本的な乗算単位は DSP モジュールなので、int (32 ビット) を乗算するには複数の DSP セルが必要となります。任意精度型を使用すると、乗算ごとに使用されるのは 1 つのセルのみになります。 

任意精度 (AP) 型を使用すると、コードでビット幅の狭い変数を使用でき、C/C++ シミュレーションでその機能が同じであるか、許容できることを検証できます。ビット幅が狭い方が小型で高速なハードウェア演算になります。これにより、より多くのロジックを FPGA に配置できるようになり、より高速のクロック周波数で実行できるようになります。

AP 型は C++ 用に提供されており、1 ~ 1024 ビットまでの幅のデータ型を記述できます。任意精度型ライブラリ で説明するように、C++ ソース コードに AP ライブラリを使用することを指定する必要があります。

ヒント: Vitis HLS では内部ロジックが最適化され、出力ポートにファンアウトされないデータ ビットおよびロジックは削除されるので、任意精度型は関数の境界でのみ必要となります。

AP の例

たとえば、通信プロトコル用のフィルター関数を含むデザインがデータ送信要件を満たすのに 10 ビットの入力データと 18 ビットの出力データを必要とする場合、標準 C/C++ データ型を使用すると、入力データが少なくとも 16 ビット、出力データが少なくとも 32 ビット必要です。最終的なハードウェアでは、これにより入力と出力の間に必要よりもデータ幅が広いデータパスが作成されるので、リソースがより多く使用され、遅延も長くなり (32 ビット x 32 ビットの乗算は 18 ビット x 18 ビットの乗算よりも長くかかる)、完了するのにさらに多くのクロック サイクルが必要になります。

このデザインで任意精度型を使用すると、合成前にコードに必要なビット サイズを正確に指定して、アップデートされたコードをシミュレーションして、合成前に結果を検証できます。任意精度および固定小数点の ap データ型を使用した例については、GitHub の Vitis-HLS-Introductory-Examples/Modeling を参照してください。