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

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

2.1. Intel® HLS Compiler Pro版命令选项

使用 Intel® HLS Compiler Pro Edition命令选项自定义编译器如何执行常规功能、自定义文件链接或自定义编译。
表 2.  常规命令选项这些i++命令选项执行常规编译器功能。
命令选项 描述
-h--help 指示编译器在屏幕上列出所有命令选项及其描述。
-o <result> 指示编译器将其输出放置到 <result> 可执行文件和 <result>.prj目录中。

如果您不指定-o <result>选项,编译器输出 a.out文件用于Linux和 a.exe文件用于Windows。使用 -o <result>命令选项指定编译器输出的名称。

命令实例: i++ -o hlsoutput multiplier.c

调用此实例命令会在您的工作目录中创建一个hlsoutput 可执行文件用于Linux以及hlsoutput.exe用于Windows。

--debug-log 指示编译器生成包含诊断信息的日志文件。debug.log文件位于您当前工作目录内的 <result>.prj子目录中。

如果您的编译失败,无论您是否设置该选项,都会生成debug.log 文件。

-v 详细模式(Verbose mode),指示编译器显示描述编译进度的消息。

命令实例: i++ -v multiplier.cpp,其中multiplier.cpp是输入文件。

--version 命令编译器在屏幕上显示其版本信息。

命令: i++ --version

表 3.  自定义编译的命令选项这些i++命令选项执行的编译器功能会影响从源文件到目标文件的转换。
选项 描述
-c 指示编译器预处理、解析并在当前工作目录中生成目标文件(.o/.obj)。链接阶段被省略。

实例命令: i++ -march="Arria 10" -c multiplier.c

调用此实例命令创建一个multiplier.o文件并将 <result>.prj目录的名称设置为multiplier.prj

稍后连接.o文件时,该-o选项仅影响可执行文件的名称。 <result>.prj目录的名称仍保持通过i++ -c命令调用时设置的目录名称。

--component <components> 允许您指定一个函数名单,名字用逗号隔开。该名单是您需要编译器综合到RTL的函数名称。

实例命令: i++ counter.cpp --component count

要使用此选项,您的组件必须使用extern "C"规范的C-linkage配置。例如:
extern "C" int myComponent(int a, int b)

当您需要指示将函数编译到RTL时,请使用component函数属性来指示,会比使用--component 命令选项更好。

-D <macro> [= <val> ] 允许您将宏定义(<macro>)及其值(<val>)传递给编译器。

如果您未指定值<val>,其默认值为1。

-g 生成调试信息(默认)。
-g0 不生成调试信息。
--gcc-toolchain=<GCC_dir> 指定需要用于编译的GCC安装路径。该路径应该是包含GCC

libbininclude文件夹的绝对路径(absolute path)

如果您按照入门指南(Getting Started Guide)中所述配置了系统,则无需使用此功能。

--hyper-optimized-handshaking=[auto|off]

此选项仅适用于 Intel Agilex® 7 Intel® Stratix® 10器件。

使用此选项可以修改设计中某些区域里使用的握手协议。

默认情况下,--hyper-optimized-handshaking选项设置为auto

启用此优化后,编译器会将流水线寄存器添加到可停顿节点的握手路径中。此优化可提高fMAX ,但由于增加了寄存器,从而增加了面积和延迟。

禁用此优化通常会减少面积和延迟,但代价是降低fMAX

限制: 此选项仅适用于 Intel Agilex® 7 Intel® Stratix® 10器件的设计。如果您在目标器件不是 Intel Agilex® 7 Intel® Stratix® 10器件时使用该选项,则编译器会因错误而退出。
-I <dir> 添加目录(<dir>)到包含路径列表的末尾。
-march= [x86-64 | <FPGA_family> | <FPGA_part_number>] 指示编译器将组件编译成指定的架构或FPGA系列。
-march编译器选项可以采用下列值之一:
x86-64
指示编译器编译模拟器流程的编码。
"<FPGA_family>"
指示编译器编译目标FPGA器件系列的编码。
<FPGA_family>值可以是下列任意一个器件系列:
  • Agilex
  • Arria10或者"Arria 10"
  • CycloneV 1
  • Cyclone10GX或者"Cyclone 10 GX"
  • Stratix10或者"Stratix 10"
仅当您指定的FPGA系列名称说明符包含空格时才需要引号
<FPGA_part_number>
指示编译器编译目标器件的编码。编译器根据您在此处指定的FPGA部件号确定FPGA器件系列。

如果不指定此选项,则假设为,-march=x86-64

如果您指定的参数值包含空格,则请用引号对该参数值加注。

--quartus-compile 使用Intel Quartus Prime编译器编译您的设计。

实例命令: i++ --quartus-compile <input_files> ‑march="Arria 10"

指定此选项时,Intel Quartus Prime编译器会在RTL生成后运行。编译后的Intel Quartus Prime工程被放置于 <result>.prj/quartus目录中,并且 FPGA资源消耗和最大时钟频率的总结被添加到 <result>.prj/reports目录的高层次设计报告中。

此次编译旨在估计您的组件可实现的最佳fMAX。因而预计报告中您组件的时序收敛效果不佳。

--quartus-seed <seed> 指定seed numeric值(生成随机数序列的初始值),该值由位于 <result>.prj/quartus目录中的Intel Quartus Prime工程使用。

在优化设计布局以符合时序要求(fMAX)时,Intel Quartus Prime Fitter使用该seed值获得初始布局配置。

有关Fitter seed的更多信息,请参阅 Intel Quartus Prime Pro Edition用户指南:设计编译中"Fitter设置参考"小节 的Fitter初始布局Seed的内容。 .

--simulator <simulator_name> 指定您用来执行验证的仿真器。
此命令选项可以将以下值用于<simulator_name>
  • modelsim

    使用Siemens* EDA ModelSim*或者Questa*进行组件验证。

  • none

    禁用验证。即,不使用测试台的情况下为组件生成RTL。

如果不指定此选项,假设为--simulator modelsim

重要: --simulator命令选项仅与-march命令选项一同使用。

--simulator none选项指示HLS编译器跳过验证流程,并且在不生成相应测试台的情况下为组件生成RTL。如果使用此选项,会更快生成高层设计报告(report.html),但却无法仿真您的设计。如果没有来自仿真的数据,报告一定会省略组件延迟等验证统计数据。

实例命令: i++ -march="<FPGA_family_or_part_number>" ‑‑simulator none multiplier.c

-ffp-contract=[ fast | on ]

对于双精度数据类型,控制编译器是否可以将浮点乘法和加法或减法运算合并为单个融合乘加(fused multiply-add,FMA),并控制编译器是否跳过中间舍入和转换,但由#pragma clang fp contract(off)守护程序隔离的代码块除外。

此选项对涉及单精度数据类型的操作无效。

-ffp-contract选项可以采用下列值之一:
fast
数学运算可以跨多个相邻的代码行进行融合,除非它们被#pragma clang fp contract(off)守护程序隔离。

#pragma clang fp contract(on)守护程序隔离的代码中的数学运算只能跨一行代码进行融合。

on
数学运算只能在一行代码中融合,除非它们被#pragma clang fp contract(off)守护程序隔离。

#pragma clang fp contract(fast)守护程序隔离的代码中的数学运算仍然可以融合多个相邻代码行。

要了解更多信息,请查看以下教程:
  • <quartus_installdir>/hls/examples/tutorials/best_practices/floating_point_contract
  • <quartus_installdir>/hls/examples/tutorials/best_practices/floating_point_ops
-ffp-reassociate

控制编译器是否可以重新排列任意精度的浮点算术运算的顺序,如果重新排列可以提高吞吐量、延迟或两者。

#pragma clang fp reassociate(off)守护程序隔离的代码块未被重新排列。

要了解更多信息,请查看以下教程: <quartus_installdir>/hls/examples/tutorials/best_practices/floating_point_ops

--daz 仅限于double数据类型,请禁用本地IEEE-754双精度浮点计算中的亚正常支持。

要了解更多信息,请查看以下教程: <quartus_installdir>/hls/examples/tutorials/best_practices/submnormal_and_rounding

--rounding= [ieee | faithful]

仅限于double数据类型,控制本地IEEE-754双精度加法器、乘法器和除法器的舍入方案。

如果您未指定此选项,则加法器和乘法器将根据IEEE-754四舍五入到最接近数,即,向偶数舍入(even (RNE) rounding (0.5 ULP)),而除法器则使用忠实舍入(faithful rounding (1 ULP))。

--rounding选项可以采用下列值:
ieee
所有加法器、乘法器和除法器均使用IEEE-754 RNE舍入。

IEEE-754 RNE舍入将结果舍入为最接近的值。如果数字位于中间,则将其舍入为最接近的偶数位值。这是IEEE 754-2008标准定义的默认舍入模式。

IEEE-754 RNE舍入的精度为0.5 ULP。

faithful
所有加法器、乘法器和除法器均采用忠实舍入。

忠实舍入将结果舍入为最接近的单精度数的上限或下限。因此,忠实舍入会产生两个可能值之一。两者之间的选择没有定义。

忠实舍入的最大误差为一个ULP。不保证误差均匀分布。

IEEE-754标准未定义忠实舍入模式。

要了解更多信息,请查看以下教程: <quartus_installdir>/hls/examples/tutorials/best_practices/submnormal_and_rounding

--clock <clock target> 针对指定的时钟频率或周期优化RTL。

<clock target>值必须包含一个单元。

例如:
i++ -march="Arria 10" test.cpp --clock 100MHz
i++ -march="Arria 10" test.cpp --clock 10ns
--dsp_mode= [prefer-dsp | prefer-softlogic | default] 对于支持的数据类型和数学运算,控制全局范围内数学函数的硬件实现。
prefer-dsp
编译器尝试使用DSP实现支持的数学运算。
prefer-softlogic
编译器尝试使用ALM的软逻辑来实现支持的数学运算。
default
编译器根据数据类型和操作来实现支持的数学运算。

该值是默认值。

有关硬件中数学函数实现的详细信息,请参阅数学函数硬件实现总结

要了解更多信息,请参考以下教程: <quartus_installdir>/hls/examples/tutorials/best_practices/control_of_dsp_usage

表 4.  用于自定义文件链路的命令选项这些HLS命令选项指定的编译器操作会影响目标文件到二进制或RTL组件的转换。
选项 描述
-ghdl[=<depth>]

运行验证可执行文件时记录信号,以帮助您调试生成的RTL。运行可执行文件后,仿真器会将波形记录到 a.prj/verification/vsim.wlf文件。

使用可选的<depth>属性以指定被记录的层次结构层数。如果未指定<depth>属性,则所有信号都被记录。

使用-ghdl=1仅记录顶层信号。

关于 ModelSim* 波形的详细信息,请查看 Intel® High Level Synthesis Compiler Pro版用户指南中的验证过程中的调试

-L <dir>

-L <dir>

(仅Linux) 将目录(<dir>)添加到库文件搜索路径的末尾。
-l <library> (仅Linux) 将目标文件链接到二进制文件时指定库文件(.a)的名称。

在Windows上,您可以在命令行上列出库文件(.lib),无需指定任何命令选项或标志。

--x86-only 仅创建测试台可执行文件。

编译器输出 Linux的 <result> 文件或Windows的 <result>.exe文件。不创建 <result>.prj目录及其内容。

--fpga-only 仅创建 <result>.prj目录及其内容。

不创建测试台可执行性文件( <result> / <result>.exe)。

在使用此选项从编译输出仿真您的硬件之前,必须先使用--x86-only选项编译您的测试台(或作为完整编译的一部分)。

1 Cyclone® V器件支持会收到限制。有关详细信息,请参阅Cyclone V限制.