天天看點

Vivado_HLS 學習筆記1-資料類型

資料類型

支援的C/Cpp類型

  1. Character Types

    char 8bits

    wchar_t

  2. Integer Types

    signed char 8bits

    [signed] short [int] 16bits

    [signed] int 32bits

    [signed] long [int] 32bits

    [signed] long long [int] 64bits

  3. Integer Types(unsigned)

    unsigned char 8bits

    unsigned short [int] 16bits

    unsigned [int] 32bits

    unsigned long [int] 32bits

    unsigned long long [int] 64bits

  4. Floating-point Types

    float

    double

    long double

  5. 其他類型

    bool

支援任意精度類型Arbitrary Precision Data Types

Cpp		ap_int<W> (1024bits)	//#include <ap_int.h>
   		ap_uint<W> (1024bits)	//#include <ap_int.h>
Cpp		ap_fixed<W,I,Q,O,N>		//#include <ap_fixed.h>
   		ap_ufixed<W,I,Q,O,N>	//#include <ap_fixed.h>
           

ap_fixed<W,I,Q,O,N>

  • W-定點數的整體位寬
  • I-整數部分的位寬
  • Q-量化模式,對小數部分的量化,預設為AP_TRN_ZERO(直接舍去尾部低位), 可選AP_RND(四舍五入).
  • O-溢出模式,對整數部分的溢出,預設為AP_WRAP(直接舍去首部高位), 可選為AP_SAT(飽和,所有非符号位補1,填充到最大值)
//ap_fixed<W,I,Q,O,N>		//#include <ap_fixed.h>
ap_fixed<3,2> var1 = 1.25;				//1.25('b01.01)->1.0('b01.0)
ap_fixed<3,2,AP_RND> var2 = 1.25;		//1.25('b01.01)->1.5('b01.1)

ap_fixed<4,4> var3 = 19;				//19('b01_0011)->3('b0011)
ap_fixed<4,4,AP_RND,AP_SAT> var4 = 19;	//19('b01_0011)->7('b0111)_無符号4位數的最大值
           

浮點數

double vf2(5.0);
float vf3(5.0f);		//float類型要加字尾f, hls_math.h
           

任意精度類型的用法

在頭檔案中

#include <ap_int.h>

#define W 18
#define __NO_SYNTH__
#ifdef __NO_SYNTH__
typedef int data_t;
typedef int prod_t;
#else
typedef ap_int<W> data_t;
typedef ap_int<2*W> prod_t;
#endif

//* sizeof can check the width of a data.
//#include <typeinfo>
//typeid(var1).name()              //傳回變量的類型

prod_t ScalarMult(data_t A, data_t B);
           

變量的初始化方式

int var_i = -6;

ap_int<6> a_6bit_var_c = -22;
ap_int<6> a_6bit_var_d(-22);
ap_int<6> a_6bit_var_r2("0b101010",2); //6bit-用2進制資料初始化->'d42
ap_int<6> a_6bit_var_r8("0o52",8);	//6bit-用8進制資料初始化值->'d42
ap_int<6> a_6bit_var_r10("-22",10); //6bit-用10進制資料初始化'd-22
ap_int<6> a_6bit_var_r16("0x2A",16);//6bit-用16進制資料初始化->'d42

ap_int<6> a_6bit_var_r2("101010",2); //6bit-用2進制資料初始化->'d42
ap_int<6> a_6bit_var_r8("52",8);	//6bit-用8進制資料初始化值->'d42
ap_int<6> a_6bit_var_r16("2A",16);//6bit-用16進制資料初始化->'d42
           

常數的處理

常數參與運算: 必須顯式說明類型;

HLS:不支援遞歸函數;