仅对英特尔可见 — GUID: skf1478551388209
Ixiasoft
仅对英特尔可见 — GUID: skf1478551388209
Ixiasoft
8. 任意精度数学支持
其中一些头文件由 Mentor Graphics* 提供,它们是经过Apache许可证允许的基于Algorithmic C (AC)数据类型的头文件。关于Algorithmic C数据类型的更多信息,请参阅Mentor Graphics Algorithmic C (AC) Datatypes,可以将其作为您的 Intel® HLS Compiler安装的一部分: <quartus_installdir>/hls/include/ref/ac_datatypes_ref.pdf.
Intel® HLS Compiler还支持任意精度IEEE 754合规浮点数据类型,但该数据类型并不基于AC数据类型。
数据类型 | 英特尔头文件 | 描述 |
---|---|---|
ac_int | HLS/ac_int.h | 任意宽度整数支持
要了解更多,请查阅以下教程:
|
ac_fixed | HLS/ac_fixed.h | 任意精度浮点数支持 要了解更多信息,请查看教程: <quartus_installdir>/hls/examples/tutorials/ac_datatypes/ac_fixed_constructor |
HLS/ac_fixed_math.h | 针对任意精度浮点数据类型的非数学函数的支持 要了解更多信息,请查看教程: <quartus_installdir>/hls/examples/tutorials/ac_datatypes/ac_fixed_math_library |
|
ac_complex | HLS/ac_complex.h | 复数支持 |
hls_float | HLS/hls_float.h | 任意精度浮点数支持 |
HLS/hls_float_math.h | 支持常用指数函数、对数函数、幂函数和三角函数。
要了解更多信息,请查看以下教程:
|
- ac_fixed数据类型
包括HLS/ac_fixed_math.h头文件
- hls_float数据类型
包括HLS/hls_float_math.h头文件
任意精度数据类型的有点
与在组件中使用标准C/C++数据类型相比,任意精度数据类型具有以下优势:
- 您可以为电路中的各种操作实现更窄的数据路径和处理元素。
- 数据类型确保所有操作都以一定大小来执行,从而保证不会丢失任何数据。但是,如果将数据存储到数据类型太窄的位置,则仍然可能会丢失数据。
AC数据类型的限制
AC数据类型具有以下限制:
- 乘法器只能生成512位结果。
- ac_int数据类型的除法器被限制为最大128位无符号数或127位有符号数。
- ac_fixed数据类型的除法器被限制为最大64位无符号或有符号数。
- 由 Intel® HLS Compiler为优化的FPGA提供的头文件与GCC或MSVC不兼容。因而使用 Intel® HLS Compiler头文件时,您不能使用GCC或MSVC编译测试台。但是您的组件和测试台都必须使用 Intel® HLS Compiler。
要使用GCC或MSVC编译AC数据类型,请参考 Intel® HLS Compiler提供的AC数据类型标头内容,具体详情请参阅AC数据类型和本地编译器。
- Cyclone® V器件不支持ac_int数据类型的bit_fill_hex实用工具函数。
Intel® HLS Compiler任意精度浮点数据类型的局限性
- 使用ihc_pown函数时,指数必须为有符号类型。如果指数是无符号类型,则将指数重新定义为有符号的类型,并根据需要增加位宽度。
如果您将无符号类型用作指数,则从ihc_pown函数得到的结果错误。
例如,以下代码片段生成错误结果:// Sample Code: hls_float<8, 7> a = 2; ac_int<4, false> b = 12; … = ihc_pown(a , b); // !!! Produces incorrect result
以下代码片段生成正确的结果:// Workaround: hls_float<8, 7> a = 2; ac_int<5, true> b = 12; // Use a signed type for the exponent. // The bit width is increased from //4 bits to 5 bits … = ihc_pown(a , b); // Produces correct result
- 将hls_float数据类型转换成无符号整数会生成有符号整数转换。请确保将hls_float值转换成有符号的整数,并且足够大到可以包含被转换的hls_float值(例如,通过使用ac_int数据类型)。
- 针对float和double数据类型执行的浮点优化成常数并不针对hls_float数据类型。
- 支持有限的数学函数集。请参阅hls_float数据类型支持的操作符和返回类型了解详细信息。
- Intel® HLS Compiler提供的hls_float头文件与GCC或Microsoft Visual Studio不兼容。当您使用 Intel® HLS Compiler头文件时,不能使用GCC或Microsoft Visual Studio编译您的测试台。您的组件和测试台必须由 Intel® HLS Compiler编译。请参阅编译器互操作性(Interoperability)了解详细信息。
- 高层次设计报告不会显示hls_float数据类型的位宽。
- 常数初始化仅适用于归零(RZERO) rounding mode.