数据类型
支持的C/Cpp类型
-
Character Types
char 8bits
wchar_t -
Integer Types
signed char 8bits
[signed] short [int] 16bits
[signed] int 32bits
[signed] long [int] 32bits
[signed] long long [int] 64bits -
Integer Types(unsigned)
unsigned char 8bits
unsigned short [int] 16bits
unsigned [int] 32bits
unsigned long [int] 32bits
unsigned long long [int] 64bits -
Floating-point Types
float
double
long double -
其他类型
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:不支持递归函数;