pragma HLS resource - 2019.2 Japanese

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

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

説明

RESET プラグマでは、変数 (配列、算術演算、関数引数) を RTL にインプリメントするのに使用するライブラリ リソース (コア) を指定します。RESOURCE プラグマを指定しない場合、Vivado HLS ツールにより使用するリソースが自動的に判断されます。HLS ツールでは、ハードウェア コアを使用して演算がツールインプリメントされます。演算をインプリメントできるコアがライブラリに複数ある場合、RESOURCE プラグマを使用して使用するコアを指定できます。使用可能なコアのリストを生成するには、list_core コマンドを使用します。

ヒント: list_core コマンドを使用すると、ライブラリで使用可能なコアの詳細を表示できます。list_core は HLS ツールの Tcl コマンド インターフェイスでのみ使用でき、set_part コマンドを使用してザイリンクス デバイスを指定する必要があります。デバイスを指定しない場合、list_coreコマンドは実行されません。

たとえば、配列をインプリメントするのに使用するライブラリのメモリ エレメントを RESOURCE プラグマを使用して指定し、配列をシングル ポート RAM とデュアル ポート RAM のどちらとしてインプリメントするかを制御できます。配列に関連付けられているメモリ タイプによって RTL で必要なポートが決まるので、これは最上位関数インターフェイスの配列には重要な方法です。

latency= オプションを使用すると、コアのレイテンシを指定できます。インターフェイスのブロック RAM の場合、latency= オプションを指定すると、たとえばレイテンシ 2 または 3 の SRAM をサポートするなど、インターフェイスにオフチップの標準でない SRAM を記述できます。内部演算の場合、latency= オプションを使用すると、演算をより多くのパイプライン段を使用してインプリメントできます。これらの追加のパイプライン段により、RTL 合成中にタイミング問題を解決しやすくなります。

詳細は、 『Vivado Design Suite ユーザー ガイド: 高位合成』 (UG902) の「インターフェイスの配列」を参照してください。

重要: latency= オプションを使用するには、使用可能な複数段のコアを演算に含める必要があります。HLS ツールには、基本的な算術演算 (加算、減算、乗算、除算)、すべての浮動小数点演算、およびすべてのブロック RAM 用に複数段コアが含まれています。

より良い結果を得るため、ザイリンクスでは C の場合は -std=c99 を、C および C++ の場合は -fno-builtin を使用することをお勧めします。-std=c99 などの C コンパイル オプションを指定するには、Tcl コマンドの add_files-cflags オプションを使用します。または、[Project Settings] ダイアログ ボックスの Edit CFLAGs ボタンをクリックします。詳細は、 『Vivado Design Suite ユーザー ガイド: 高位合成』 (UG902) の「新規合成プロジェクトの作成」を参照してください。

構文

C ソースの配列変数が定義されている関数の本体内に配置します。

#pragma HLS resource variable=<variable> core=<core>\
latency=<int>

説明:

variable=<variable>
必須の引数。RESOURCE プラグマを設定する配列、算術演算、または関数引数を指定します。
core=<core>
必須の引数。テクノロジ ライブラリで定義されているのと同じように、コアの名前を指定します。
latency=<int>
コアのレイテンシを指定します。

例 1

次の例では、関数 foo の変数 <c> の乗算をインプリメントするのに 2 段のパイプライン乗算器を指定しています。変数 <d> に使用するコアは、HLS ツールにより決定されます。

int foo (int a, int b) {
int c, d;
#pragma HLS RESOURCE variable=c latency=2
c = a*b;
d = a*c;
return d;
}

例 2

次の例では、変数 <coeffs[128]> が最上位関数の foo_top に対する引数で、coeffs がライブラリの RAM_1P コアを使用してインプリメントされるように指定しています。

#pragma HLS resource variable=coeffs core=RAM_1P 
ヒント: coeffs の値にアクセスするために RTL で作成されるポートは、RAM_1P コアで定義されます。