pragma HLS allocation - 2019.2 Japanese

Vitis 統合ソフトウェア プラットフォームの資料: アプリケーション アクセラレーション開発 (UG1393)

Document ID
UG1393
Release Date
2020-02-28
Version
2019.2 Japanese

説明

インプリメントされたカーネルでのリソースの割り当てを制限するインスタンス制限を指定します。特定の関数、ループ、演算、またはコアをインプリメントするのに使用される RTL インスタンスおよびハードウェア リソースの数を定義して制限できます。ALLOCATION プラグマは関数の本体、ループ、またはコード領域内に指定します。

たとえば、C ソース コードに foo_sub という関数のインスタンスが 4 つある場合、ALLOCATION プラグマを使用して最終 RTL で foo_sub のインスタンスを 1 つだけにできます。C 関数の 4 つのインスタンスすべてが、同じ RTL ブロックを使用してインプリメントされます。これにより関数で使用されるリソースは削減されますが、パフォーマンスが低下することがあります。

加算、乗算、配列読み出し、書き込みなどの C コードでの演算は、ALLOCATION プラグマを使用して制限できます。合成中に演算子がマップされるコアは、それらの演算子と同じ方法で制限できます。乗算演算子の総数を制限する代わりに、組み合わせ乗算器コアの数を制限して、残りの乗算がパイプライン乗算器を使用して実行されるようにすることもできます (逆も可能)。

ALLOCATION プラグマは、指定された関数、ループ、またはコード領域内に適用されますが、config_bind コマンドの -min_op 引数を使用して、デザイン全体で演算子の数を最小限に抑えることもできます。

ヒント: 詳細は、 『Vivado Design Suite ユーザー ガイド: 高位合成』 (UG902) の「ハードウェア リソースの制御」および「config_bind」を参照してください。

構文

このプラグラマは、適用する関数の本体、ループ、または領域内に配置します。

#pragma HLS allocation instances=<list> 
limit=<value> <type>

説明:

instances=<list>
関数、演算子、またはコアの名前を指定します。
limit=<value>
カーネルで使用されるインスタンスの制限を指定します (オプション)。
<type>
ALLOCATION プラグマが、関数、演算、またはコア (デザインを作成するのに使用される加算器、乗算器、パイプライン乗算器、ブロック RAM などのハードウェア コンポーネント) に適用されることを指定します。次のいずれかを指定します。
function
instances= にリストされた関数に適用されることを指定します。関数には、次の条件を満たす元の C または C++ コードの関数を指定できます。
  • pragma HLS inline または set_directive_inline コマンドによりインライン展開されていない。
  • Vivado HLS ツールで自動的にインライン展開されていない。
operation
instances= にリストされた演算に適用されることを指定します。ALLOCATION プラグマを使用して制限可能な演算のリストは、 『Vivado Design Suite ユーザー ガイド: 高位合成』 (UG902) を参照してください。
core
ALLOCATION がコア (加算器、乗算器、パイプライン乗算器、ブロック RAM などのデザイン作成のために使用される特定ハードウェア コンポーネント) に適用されるよう指定します。使用するコアは、instances= オプションで指定します。コアを指定する場合、ツールで使用される必要のあるコアを指定するか、または指定したコアの制限を定義できます。

例 1

デザインに関数 foo のインスタンスが複数含まれているとします。この例では、ハードウェア カーネルの RTL における foo のインスタンス数を 2 に制限しています。

#pragma HLS allocation instances=foo limit=2 function

例 2

次の例では、関数 my_func のインプリメンテーションに使用される乗算演算の数を 1 に制限しています。この制限は、my_func 外にある乗算器、または my_func のサブ関数に含まれる乗算器には適用されません。

ヒント: サブ関数のインプリメンテーションに使用される乗算器の数を制限するには、そのサブ関数に ALLOCATION プラグマを指定するか、サブ関数を my_func にインライン展開します。
void my_func(data_t angle) {
#pragma HLS allocation instances=mul limit=1 operation
...
}