説明
演算 (add、mul、sub...) のマイクロアーキテクチャ バインディングのデフォルト オプションを FPGA インプリメンテーション リソースに設定し、そのレイテンシを指定します。
バインディングとは、加算、乗算、シフトなどの演算子を特定の RTL インプリメンテーションにマップするプロセスです。たとえば乗算 (mult
) 演算は、組み合わせまたはパイプライン RTL 乗算器としてインプリメントされます。
このコマンドを複数回使用すると、異なる演算タイプのデフォルト バインディングを別々のインプリメンテーション リソースに設定したり、その演算に対してデフォルト レイテンシを指定したりできます。config_op
で定義されたデフォルト設定は、特定のデザイン エレメントに BIND_OP プラグマまたは指示子を指定することにより無効にできます。
構文
config_op [OPTIONS] <op>
-
<op>
- 指定した変数の演算タイプを指定します。有効な値は次のとおりです。
-
mul: 整数乗算演算
-
add: 整数加算演算
-
sub: 整数減算演算
-
fadd: 単精度浮動小数点の加算演算
-
fsub: 単精度浮動小数点の減算演算
-
fdiv: 単精度浮動小数点の除算演算
-
fexp: 単精度浮動小数点の指数演算
-
flog: 単精度浮動小数点の対数演算
-
fmul: 単精度浮動小数点の乗算演算
-
frsqrt: 単精度浮動小数点の逆数平方根演算
-
frecip: 単精度浮動小数点の逆数演算
-
fsqrt: 単精度浮動小数点の平方根演算
-
dadd: 倍精度浮動小数点の加算演算
-
dsub: 倍精度浮動小数点の減算演算
-
ddiv: 倍精度浮動小数点の除算演算
-
dexp: 倍精度浮動小数点の指数演算
-
dlog: 倍精度浮動小数点の対数演算
-
dmul: 倍精度浮動小数点の乗算演算
-
drsqrt: 倍精度浮動小数点の逆数平方根演算
-
drecip: 倍精度浮動小数点の逆数演算
-
dsqrt: 倍精度浮動小数点の平方根演算
-
hadd: 半精度浮動小数点の加算演算
-
hsub: 半精度浮動小数点の減算演算
-
hdiv: 半精度浮動小数点の除算演算
-
hmul: 半精度浮動小数点の乗算演算
-
hsqrt: 半精度浮動小数点の平方根演算
-
facc: 単精度浮動小数点の累算演算
-
fmacc: 単精度浮動小数点の積和演算
-
fmadd: 単精度浮動小数点の乗加算演算
-
オプション
-
-impl [dsp | fabric | meddsp | fulldsp | maxdsp | primitivedsp | auto | none | all]
- 指定した演算のデフォルト インプリメンテーション形式を定義します。デフォルトでは、どのインプリメンテーションを使用するかツールで自動的に選択されます。これには、次の選択肢があります。
-
all: すべてのインプリメンテーション。これがデフォルト設定です。
-
dsp: DSP リソースを使用
-
fabric: DSP 以外のリソースを使用
-
meddsp: DSP リソースの浮動小数点 IP の中程度使用
-
fulldsp: DSP リソースの浮動小数点 IP の全使用
-
maxdsp: DSP リソースの浮動小数点 IP の最大使用
-
primitivedsp: DSP リソースの浮動小数点 IP のプリミティブ使用
-
auto: facc | fmacc | fmadd 演算子の組み合わせの推論をイネーブル
-
none: facc | fmacc | fmadd 演算子の組み合わせの推論をディスエーブル
-
-
-latency <value>
- タイプをインプリメンテーション リソースにバインディングする際のデフォルト レイテンシを定義します。有効な値の範囲は、演算のインプリメンテーション (
-impl
) によって異なります。デフォルトは -1 で、インプリメンテーション リソースの標準レイテンシが適用されます。ヒント: レイテンシは、インプリメンテーション詳細を指定せずに特定演算に対して指定できます。これにより、Vitis HLS でインプリメンテーションが選択され、レイテンシも管理されます。 -
-precision [low | high | standard]
-
facc
、fmacc
、およびfmadd
演算子に適用されます。指定した演算子の精度を指定します。-
low
: 使用可能な場合は、低精度 (60 ビットおよび 100 ビット整数) の累積インプリメンテーションを使用します。このオプションは、特定の Versal 以外のデバイスでのみ使用可能であり、C++ シミュレーションの精度が不十分なので、RTL/協調シミュレーションが一致しないことがあります。また、standard
精度の浮動小数点の累積リソースの約 3 倍を使用しますが、ソース コードを変更せずに、常に II=1 でパイプライン処理できるという利点もあります。 -
high
: 使用可能な場合は、高精度 (1 ビット追加) の乗加算インプリメンテーションを使用します。このオプションは、高精度のアプリケーションの場合に便利で、Versal デバイスでは非常に効率的ですが、C++ シミュレーションの精度が高くなるため、RTL/協調シミュレーションが一致しなくなることがあります。standard
精度の浮動小数点の累積よりもリソースが多く使用されます。 -
standard
: ほとんどの浮動小数点の計算に standard 精度の浮動小数点の累積および乗加算が適しており、これがデフォルトの設定です。Versal デバイスでは常に II = 1 でパイプライン処理できる真の浮動小数点アキュムレータを使用し、Versal 以外のデバイスでは通常 3 ~ 5 (クロック周波数とターゲットデバイスによって異なる) の II を使用します。
-
例 1
次の例では、指定したレイテンシで加算演算をファブリックにバインドしています。
config_op add -impl fabric -latency 2
例 2
次の例では、Versal 以外のデバイスで II=1 を達成するために、低精度の浮動小数点アキュムレータをイネーブルにしています。
config_op facc -impl auto -precision low