標準データ型 - 2023.2 日本語

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

Document ID
UG1399
Release Date
2023-12-18
Version
2023.2 日本語

次のコード例に、基本的ないくつかの算術演算の実行を示します。


#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 longinD と 64 ビットに符号拡張された 8 ビットの charinA を使用して実行され、64 ビットの出力結果 out4 が作成されます。

out1 結果が示すように、Vitis HLS では可能な限り最小の演算子が使用され、必要な出力ビット幅に一致するように結果が拡張されます。結果 out2 では、入力の 1 つが 16 ビットですが、必要なのは 8 ビット出力なので、8 ビット加算器を使用できます。out3 および out4 結果が示すように、すべてのビットが必要であれば、フルサイズの演算子が合成されます。