set_directive_bind_op - 2024.1 日本語

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

Document ID
UG1399
Release Date
2024-07-03
Version
2024.1 日本語

説明

ヒント: このプラグマまたは指示子は、DSP のマルチ演算マッチング (MULADD、AMA、ADDMUL、および該当する減算演算) には関係ありません。実際、演算子を DSP に割り当てる際に BIND_OP を使用すると、HLS コンパイラが複数の演算式をマッチングできなくなることがあります。詳細は、DSP マルチ演算マッチング を参照してください。

Vitis HLS では、コードの演算は特定のインプリメンテーションを使用してインプリメントされます。set_directive_bind_op コマンドは、特定の変数に対し、演算 (muladdsub) を RTL でのインプリメンテーションで特定のデバイス リソース (impl) にマップする必要があることを指定します。このコマンドを指定しない場合、Vitis HLS により使用するリソースが自動的に判断されます。

たとえば、特定の乗算 (mul) を DSP ではなくデバイス ファブリックにインプリメントするよう指定するには、set_directive_bind_op コマンドを使用できます。

-latency オプションを使用して、演算のレイテンシを指定することもできます。

重要: -latency オプションを使用するには、使用可能な複数段のインプリメンテーションを演算に含める必要があります。HLS ツールでは、基本的な算術演算 (加算、減算、乗算、除算) およびすべての浮動小数点演算に複数段インプリメンテーションが提供されています。

構文

set_directive_bind_op [OPTIONS] <location> <variable>
  • <location>: 変数を含める場所を function[/label] の形式で指定します。
  • <variable>: 割り当てる変数を指定します。この場合の変数は、この指示子のターゲットである演算の結果が割り当てられた変数のことです。

オプション

-op <value>
指定したインプリメンテーション リソースにマップする演算を定義します。サポートされる機能演算は、muladdsub などです。

サポートされる浮動小数点演算は、faddfsubfdivfexpflogfmulfrsqrtfrecipfsqrtdadddsubddivdexpdlogdmuldrsqrtdrecip, dsqrthaddhsubhdivhmul、および hsqrt などです。

ヒント: 浮動小数点演算には、単精度 (f)、倍精度 (d)、および半精度 (h) があります。
-impl <value>
指定した演算に使用するインプリメンテーションを定義します。
機能演算にサポートされるインプリメンテーションは、fabricdsp などです。
浮動小数点演算にサポートされるインプリメンテーションは、fabricmeddspfulldspmaxdspprimitivedsp などです。
注記: primitivedsp は、Versal デバイスでのみ使用可能です。
-latency <int>
演算のインプリメンテーションのデフォルト レイテンシを定義します。有効なレイテンシは、op および impl の指定によって異なります。デフォルトは -1 で、Vitis HLS によりレイテンシが選択されます。
次の表に、演算、サポートされるインプリメンテーション、レイテンシの組み合わせを示します。
表 1. サポートされる機能演算、インプリメンテーション、レイテンシの組み合わせ
動作 インプリメンテーション 最小レイテンシ 最大レイテンシ
add fabric 0 4
add dsp 0 4
mul fabric 0 4
mul dsp 0 4
sub fabric 0 4
sub dsp 0 0
ヒント: dcmp などの比較演算子は LUT にインプリメントされるため、ファブリック外部にインプリメントしたり、DSP にマップしたりすることはできません。このため、config_op または bind_op コマンドでは設定できません。
表 2. サポートされる浮動小数点演算、インプリメンテーション、レイテンシの組み合わせ
動作 インプリメンテーション 最小レイテンシ 最大レイテンシ
fadd fabric 0 13
fadd fulldsp 0 12
fadd primitivedsp 0 3
fsub fabric 0 13
fsub fulldsp 0 12
fsub primitivedsp 0 3
fdiv fabric 0 29
fexp fabric 0 24
fexp meddsp 0 21
fexp fulldsp 0 30
flog fabric 0 24
flog meddsp 0 23
flog fulldsp 0 29
fmul fabric 0 9
fmul meddsp 0 9
fmul fulldsp 0 9
fmul maxdsp 0 7
fmul primitivedsp 0 4
fsqrt fabric 0 29
frsqrt fabric 0 38
frsqrt fulldsp 0 33
frecip fabric 0 37
frecip fulldsp 0 30
dadd fabric 0 13
dadd fulldsp 0 15
dsub fabric 0 13
dsub fulldsp 0 15
ddiv fabric 0 58
dexp fabric 0 40
dexp meddsp 0 45
dexp fulldsp 0 57
dlog fabric 0 38
dlog meddsp 0 49
dlog fulldsp 0 65
dmul fabric 0 10
dmul meddsp 0 13
dmul fulldsp 0 13
dmul maxdsp 0 14
dsqrt fabric 0 58
drsqrt fulldsp 0 111
drecip fulldsp 0 36
hadd fabric 0 9
hadd meddsp 0 12
hadd fulldsp 0 12
hsub fabric 0 9
hsub meddsp 0 12
hsub fulldsp 0 12
hdiv fabric 0 16
hmul fabric 0 7
hmul fulldsp 0 7
hmul maxdsp 0 9
hsqrt fabric 0 16

次の例は、関数 foo の変数 <c> の乗算をインプリメントするのに、ファブリック ロジックを使用する 2 段のパイプライン乗算器を指定します。

int foo (int a, int b) {
int c, d;
c = a*b;
d = a*c;
return d;
}
set_directive コマンドは次のとおりです。
set_directive_bind_op -op mul -impl fabric -latency 2 "foo" c
ヒント: 変数 <d> に使用するコアは、HLS ツールにより決定されます。