次のコード例に、基本的ないくつかの算術演算の実行を示します。
#include "types_standard.h"
void types_standard(din_A inA, din_B inB, din_C inC, din_D inD,
dout_1 *out1, dout_2 *out2, dout_3 *out3, dout_4 *out4
) {
// Basic arithmetic operations
*out1 = inA * inB;
*out2 = inB + inA;
*out3 = inC / inA;
*out4 = inD % inA;
}
上記の例のデータ型は、次のコード例に示すヘッダー ファイル types_standard.h
で定義されています。これは、次のデータ型の使用方法を示します。
- 標準符号付き型
- 符号なし型
- 固定長整数型 (
stdint.h
ヘッダー ファイルを含めることにより指定)#include <stdio.h> #include <stdint.h> #define N 9 typedef char din_A; typedef short din_B; typedef int din_C; typedef long long din_D; typedef int dout_1; typedef unsigned char dout_2; typedef int32_t dout_3; typedef int64_t dout_4; void types_standard(din_A inA,din_B inB,din_C inC,din_D inD,dout_1 *out1,dout_2 *out2,dout_3 *out3,dout_4 *out4);
これらのデータ型は、合成後、次の演算子およびポート サイズになります。
-
out1
結果を計算するために使用される乗算器は 24 ビット乗算器です。これは、8 ビットのchar
型を 16 ビットのshort
で乗算するには、24 ビット乗算器が必要だからです。結果は、出力ポート幅と一致するように 32 ビットまで符号拡張されます。 -
out2
に使用される加算器は 8 ビットです。出力が 8 ビットのunsigned char
型なので、inB
(16 ビットのshort
) の下位 8 ビットのみが 8 ビットのchar
型のinA
に追加されます。 -
out3
(32 ビットの固定幅型) 出力では、8 ビットのchar
型のinA
が 32 ビット値に拡張され、32 ビット (int
型) のinC
入力を使用して 32 ビットの除算演算が実行されます。 - 64 ビット モジュールの演算は 64 ビットの
long long
型inD
と 64 ビットに符号拡張された 8 ビットのchar
型inA
を使用して実行され、64 ビットの出力結果out4
が作成されます。
out1
結果が示すように、Vitis HLS では可能な限り最小の演算子が使用され、必要な出力ビット幅に一致するように結果が拡張されます。結果 out2
では、入力の 1 つが 16 ビットですが、必要なのは 8 ビット出力なので、8 ビット加算器を使用できます。out3
および out4
結果が示すように、すべてのビットが必要であれば、フルサイズの演算子が合成されます。