Intel® 高层次综合编译器专业版Pro版: 参考手册

ID 683349
日期 12/04/2023
Public
文档目录

8. 任意精度数学支持

Intel® HLS Compiler Pro Edition支持一系列优化FPGA的任意精度数据类型,对这些类型的定义在头文件中,您可以将这些头文件包含到设计中。

其中一些头文件由 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数据类型。

Intel® HLS Compiler支持以下任意精度数据类型:
表 18.   Intel® HLS Compiler Pro Edition支持的任意精度数据类型
数据类型 英特尔头文件 描述
ac_int HLS/ac_int.h 任意宽度整数支持
要了解更多,请查阅以下教程:
  • <quartus_installdir>/hls/examples/tutorials/ac_datatypes/ac_int_basic_ops
  • <quartus_installdir>/hls/examples/tutorials/ac_datatypes/ac_int_overflow
  • <quartus_installdir>/hls/examples/tutorials/best_practices/struct_interfaces
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 支持常用指数函数、对数函数、幂函数和三角函数。
要了解更多信息,请查看以下教程:
  • <quartus_installdir>/hls/examples/tutorials/hls_float/1_reduced_doubl
  • <quartus_installdir>/hls/examples/tutorials/hls_float/2_explicit_arithmetic
  • <quartus_installdir>/hls/examples/tutorials/hls_float/3_conversions
当您在设计中包含了其他头文件时, Intel® HLS Compiler还支持以下数据类型的一些非标准数学函数:
  • 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任意精度浮点数据类型的局限性

hls_float数据类型具有如下局限性:
  • 使用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数据类型)。
  • 针对floatdouble数据类型执行的浮点优化成常数并不针对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.