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:不支持递归函数;

原文地址:https://www.cnblogs.com/charleechan/p/13185896.html