arbitrary precision 任意精度数据类型
从硬件角度看C语言的数据类型,较浪费资源。C语言中的数据类型以8bit为界限,分为8bit、16bit、32bit、64bit,相对于传统的HDL语言,相对死板。若想计算一个18bitx18bit的乘法,就需要将两个数据声明为32bit,得到64bit结果,比较浪费资源。
Vivado HLS中使用了任意精度数据类型。
1. HLS新的数据类型
C/C++数据类型:
其中HLS中不支持char16_t和char32_t两种数据类型。在C/C++中,所有的数据位宽都是基于8-bit,即位宽都是8-bit的倍数,当在逻辑中使用时,会明显造成资源的浪费,因此HLS中引入了Arbitrary Precision Data Type。
HLS中的Arbitraty Precision Data Types:
其中W表示数据长度;I表示整数长度;Q表示量化方式;默认的为AP_TRN_ZERO,即Truncation to zero方式;O表示溢出模式,默认为AP_WPAP即Wrap Around方式。
eg1.截位方式的影响
ap_fixed<3,2> var1 = 1.25;