HLS Learning P5 - Data Type - Type Conversion
1. Variable Definition and Initialization
目前 Vivado HLS 支持 copy initialization,direct initialization 以及指定 radix format(2 进制,10 进制和 16 进制)的初始化,不支持 uniform initialization(如下图中代码第四行描述的那种初始化方式)。下面是对任意精度类型进行初始化
Q 表明了量化模式(Quantization Mode),O 表示 Overflow 溢出模式(Overflow mode)针对高位。
示例 1.25 用二进制表示为 0101,小数点在中间。其中的 0.25 用二进制表示为 0.01,这是因为在二进制表示中,小数点的右边是 0 乘以 2 的负几次方,0.01 的话就是 0 乘以 2 的负二次方也就是 1/4 = 0.25。
对于 var2,采用 AP_RND 的量化模式,相当于进位了,所以是 1.5
对于 var3,由于是只取 4 位因此是 0011 大小为 3,而 var4 设置为 AP_SAT 模式后取了 4 位有效位宽有符号数的最大值也就是 7。
2. 浮点类型处理
The Vivado HLS Math library (hls_math.h) provides extensive support for the synthesis of the standard C(math.h) and C++(cmath.h) libraries.
The support includes floating point and fixed-point functions.
a. Implicit Type Conversion:Numeric Promotion
隐式数据类型转换。如下图所示有两种形式,一种是 Numeric promotion,另一种是 Numeric conversion。之所以称为隐式是因为不需要在代码中显式地指定,编译器会根据需要自动进行。
Numeric Promotion 在编程中指的是将较低精度的数据类型在表达式中提升为较高精度的数据类型的过程。
这里有符号数赋值给无符号数时,会发生符号位扩展,以保证数值的相对大小不变。如上图中的示例,-4 有符号数(以补码表示是 252)将其赋值给 res 这个无符号数时,符号扩展后数值就是 252。
b. Implicit Type conversion: Numeric Conversion
如下图中所描述的,将一个大数据类型转换为小数据类型。
当把 v5 赋值给 res2 时,由于只取了低两位即 11,因此表示的数值大小就是 -1。对于 v6 的赋值也是如此
当把 v1 赋值给 v3 时,采用了 AP_RND 量化模式,因此变为了 1.5。
c. Explicit Type Conversion(casting):C-Style
对应算术运算的位宽处理方式