デフォルトでは Vitis HLS はまずパフォーマンスを最大限にしようとするため、場合によっては、明示的に演算子の数を制限してエリア削減する必要があります。デザインの演算子数を制限する方法はエリア削減には効率的な方法で、演算を共有させるとエリアが削減しやすくなりますが、パフォーマンスが落ちる可能性があります。
ALLOCATION 指示子を使用すると、デザインで使用される演算子の数を制限できます。たとえば、foo
というデザインには 317 個の乗算が含まれるのに、FPGA には 256 個の乗算器リソース (DSP マクロセル) しかないとします。次の ALLOCATION プラグマを使用すると、Vitis HLS で最大 256 個の乗算 (mul
) 演算子を含むデザインが作成されます。
dout_t array_arith (dio_t d[317]) {
static int acc;
int i;
#pragma HLS ALLOCATION instances=fmul limit=256 operation
for (i=0;i<317;i++) {
#pragma HLS UNROLL
acc += acc * d[i];
}
rerun acc;
}
注記: ALLOCATION 制限を必要な数よりも大きな値に指定すると、Vitis HLS ではその制限で指定されたリソース数を使用するか、必要な最大数を使用しようとするので、共有される量が減ります。
type
オプションを使用すると、ALLOCATION 指示子で演算、インプリメンテーション、または関数を制限するかどうかを指定できます。次の表に、ALLOCATION 指示子を使用して制御可能なすべての演算をリストします。
注記: 次にリストされている演算は、ALLOCATION プラグマまたは指示子でサポートされます。BIND_OP プラグマまたは指示子では、コマンド構文で説明するように、演算子のサブセットがサポートされます。
演算子 | 説明 |
---|---|
add | 整数の加算 |
ashr | 四則演算右シフト |
dadd | 倍精度浮動小数点の加算 |
dcmp | 倍精度浮動小数点の比較 |
ddiv | 倍精度浮動小数点の除算 |
dmul | 倍精度浮動小数点の乗算 |
drecip | 倍精度浮動小数点の逆数 |
drem | 倍精度浮動小数点の剰余 |
drsqrt | 倍精度浮動小数点の逆数平方根 |
dsub | 倍精度浮動小数点の減算 |
dsqrt | 倍精度浮動小数点の平方根 |
fadd | 単精度浮動小数点の加算 |
fcmp | 単精度浮動小数点の比較 |
fdiv | 単精度浮動小数点の除算 |
fmul | 単精度浮動小数点の乗算 |
frecip | 単精度浮動小数点の逆数 |
frem | 単精度浮動小数点の剰余 |
frsqrt | 単精度浮動小数点の逆数平方根 |
fsub | 単精度浮動小数点の減算 |
fsqrt | 単精度浮動小数点の平方根 |
icmp | 整数の比較 |
lshr | 論理演算右シフト |
mul | 乗算 |
sdiv | 符号付き除算 |
shl | 左シフト |
srem | 符号付き剰余 |
sub | 減算 |
udiv | 符号なし除算 |
urem | 符号なし剰余 |