v++
命令支持许多编译、链接和封装进程选项,如下所述。
v++
命令行选项均可搭配 --config
选项一起使用,这些命令行选项可在配置文件中可指定,如 Vitis 编译器配置文件 中所述。例如,通过使用如下语法,即可在配置文件中指定 --platform
选项:platform=xilinx_u50_gen3x16_xdma_5_202210_1
--board_connection
- 适用于
- 链接
--board_connection
为每个 DIMM 连接器插槽指定一个双列直插式存储器模块 (DIMM) 开发板文件。此开发板是使用该 DIMM 卡的 Vendor:Board:Name:Version (vbnv) 属性(显示在开发板存储库中)指定的。
例如:
<DIMM_connector>:<vbnv_of_DIMM_board>
-c | --compile
- 适用于
- 编译
--compile
编译的必需选项,但与 --link
和 --package
互斥。运行 v++ -c
以从内核源文件生成 XO 文件。
--config
- 适用于
- 编译、链接和封装
--config <config_file> ...
指定包含 v++
命令选项的配置文件。此配置文件可用于捕获编译、链接或封装策略,通过查看 v++
命令行上的配置文件即可轻松复用这些策略。此外,该配置文件允许将 v++
命令行缩短为仅包含配置文件中未指定的选项。如需了解更多信息,请参阅 Vitis 编译器配置文件。
v++
命令行上可指定多个配置文件。所使用的每个字段都需要 1 个独立的 --config
开关。例如:v++ -l --config system.cfg --config vivado.cfg ...
--custom_script
- 适用于
- 编译和链接
--custom_script <kernel_name>:<file_name>
该选项支持您指定在编译或链接期间,构建 (build) 进程中将使用的自定义 Tcl 脚本。搭配 --export_script
选项一起使用,用于创建、编辑和运行脚本以自定义构建进程。
搭配 v++ --compile
命令一起使用时,该选项允许您指定定制 HLS 脚本,以供在编译指定内核时使用。此脚本支持您修改或自定义 Vitis HLS 工具。--export_script
选项可用于提取 Vitis HLS 用于编译内核的 Tcl 脚本、按需修改此脚本并使用 --custom_script
选项重新提交,以便更好地管理内核构建进程。
v++ -c -k kernel1 -export_script ...
*** Modify the exported script to customize in some way, then resubmit. ****
v++ -c --custom_script kernel1:./kernel1.tcl ...
搭配 v++ --link
命令一起用于硬件构建目标 (-t hw
) 时,该选项允许您指定指向已编辑的 run_script_map.dat 文件的绝对路径。该文件包含构建进程中的步骤列表以及 Vitis 和 AMD Vivado™
工具在执行这些步骤期间运行的 Tcl 脚本。您可编辑 run_script_map.dat 以指定在构建进程中执行这些步骤时要运行的自定义 Tcl 脚本。要自定义 Tcl 脚本,必须使用以下步骤:
- 运行构建进程并指定
--export_script
选项,如下所示:v++ -t hw -l -k kernel1 -export_script ...
- 针对要自定义的任意步骤,复制 run_script_map.dat 文件中引用的 Tcl 脚本。例如,复制针对综合运行或实现运行所指定的 Tcl 文件。您必须将此文件复制到位于工程构建结构外部的独立位置。
- 编译此 Tcl 脚本,添加或修改任意现有命令以创建新的自定义 Tcl 脚本。
- 编译 run_script_map.dat 文件,将特定实现步骤指向新的定制脚本。
- 使用
--custom_script
选项重新启动构建进程,指定指向 run_script_map.dat 文件的绝对路径,如下所示:v++ -t hw -l -k kernel1 -custom_script /path/to/run_script_map.dat
read_xdc dont_touch.xdc
set_property used_in_implementation false [get_files dont_touch.xdc]
如不执行此操作,则综合运行会返回有关缺少 dont_touch.xdc 文件的错误。
-D | --define
- 适用于
- 编译和链接
--define <arg>
有效的宏名称和定义对:<name>=<definition>
。
将名称预定义为含定义的宏。该选项会传递给 v++
预处理器。
--export_archive
- 适用于
- 链接
--export_archive
此命令会从链接进程(而不是 .xclbin 器件二进制文件或 .xsa 固定平台)生成 Vitis 元数据存档文件 (.vma)。如需获取此命令的流程以及 .vma 文件使用方法的描述,请参阅 Vitis 导出到 Vivado 流程。
--export_script
- 适用于
- 编译、链接和封装
--export_script
该选项可运行构建进程,直至导出脚本文件或者脚本文件列表为止,然后停止执行。构建进程必须使用 --custom_script
选项来完成。这样您即可编辑导出的脚本或脚本列表,然后使用您的定制脚本来重新运行构建。
该选项搭配 v++ --compile
命令一起使用即可为指定内核导出 Tcl 脚本 <kernel_name>.tcl(可用于执行 Vitis HLS),但会在实际启动 HLS 工具前停止构建进程。这样您即可中断构建进程以编辑生成的 Tcl 脚本,然后使用 --custom_script
选项重新启动构建进程,如以下示例所示:
v++ -c -k kernel1 -export_script ...
–t sw_emu
) 不支持该选项。该选项搭配 v++ --link
命令一起用于硬件构建目标 (-t hw
) 时,即可在当前目录中导出 run_script_map.dat 文件。该文件包含构建进程中的步骤列表以及 Vitis 和 Vivado 工具在执行这些步骤期间运行的 Tcl 脚本。您可编辑指定的 Tcl 脚本、自定义这些脚本中的构建进程,然后使用 --custom_script
选项重新启动构建。使用以下命令导出 run_script_map.dat 文件:
v++ -l -t hw -export_script ...
--freqhz
- 适用于
- 编译和链接
--freqhz <value>::<cu>[.<clk_pin>][,<cu_n>[.<clk_pin_n>]]
在编译期间指定组件频率,或者在链接期间指定系统频率。--freqhz
选项会在编译和链接期间覆盖任何默认时钟频率,并应用声明的频率。
指定时钟频率(以赫兹为单位)、关联计算单元名称列表及其时钟管脚(可选)
- <value>
- 必须以赫兹为单位来指定该值。例如,150 MHz 指定为 150000000
- [cu[.clk_pin]]
- (可选)为指定的时钟频率指定 PL 内核或 PL 内核实例(计算单元)目标。这样您即可为不同的内核实例指定不同的频率。您还可添加
.clk_pin
语法来指定 CU 的时钟管脚。
例如:
v++ -l -t hw –platform <pfm_name> --freqhz=200000000:mm2s \
--freqhz=300000000:s2mm –config system.cfg
--freqhz
选项可用于整合多种方法或命令,这些方法或命令都与在 AI 引擎、PL 内核或系统设计内指定时钟相关联。--freqhz
选项优先于其他时钟命令,如果使用多条命令,v++
可返回错误。--from_step
- 适用于
- 编译、链接和封装
--from_step <arg>
为 Vitis 编译器构建进程指定步骤名称,以从该步骤开始启动构建进程。如有中间结果可用,那么链接进程会快进至该指定步骤开始执行(如可能)。这样您即可通过 --to_step
运行构建,然后在通过某种方式与工程进行交互之后,于 --from_step
处恢复构建进程。您可使用 --list_step
选项来判定有效步骤的列表。
--to_step
/--from_step
均为顺序构建选项,须使用 --from_step
在工程目录内恢复构建,此工程目录即为您使用 --to_step
启动构建时所使用的工程目录。例如:
v++ --link --from_step vpl.update_bd
-g
- 适用于
- 编译和链接
-g
生成代码用于在软件仿真期间进行内核调试。该选项可用于添加相应的功能特性,以促进内核编辑时的调试。
例如:
v++ -g ...
-h | --help
- 适用于
- 编译、链接和封装
-h
打印 v++
命令的帮助内容。例如:
v++ -h
--hls
- 适用于
- 编译
指定内核编译期间 Vitis HLS 综合进程的命令。
-I | --include
- 适用于
- 编译和链接
--include <arg>
在目录列表中添加指定目录,此列表可供搜索头文件。该选项将传递给 Vitis 编译器预处理器。
--input_files <input_file>
- 适用于
- 编译、链接和封装
--input_files <input_file1> <input_file2> ...
指定 OpenCL 或 C/C++ 内核源文件用于执行 v++
编译,或者指定赛灵思对象 (XO) 文件用于执行 v++
链接。
例如:
v++ -l --input_files kernel1.xo kernelRTL.xo ...
--input_files
选项,亦可按位置指定输入文件。例如:v++ -l kernel1.xo kernelRTL.xo ...
--interactive
- 适用于
- 链接
--interactive [ impl ]
v++
能以实现工程来配置所需环境并启动 Vivado 工具。
由于您采用交互式方式来启动 Vivado 工具,因此在完成 vpl
步骤后链接进程即停止,这等同于在 v++
命令中使用 --to_step vpl
选项。
以交互方式处理完 Vivado 工具并保存设计检查点 (DCP) 后,您可使用 v++ --from_step rtdgen
或者使用 --reuse_impl 或 --reuse_bit
选项来恢复 Vitis 编译器链接进程,以便读入已实现的 DCP 文件或比特流。
例如:
v++ --interactive impl
## Interactively use the Vivado tool
v++ --from_step rtdgen
-k | --kernel
- 适用于
- 编译
--kernel <arg>
仅编译来自输入文件的指定内核。每条 v++
命令仅允许一个 -k
选项。有效值包括要编译的内核名称(来自输入 .cl 或 .c/.cpp 内核源代码)。
该选项对于 C/C++ 内核而言是必需的,但对于 OpenCL 内核而言则是可选选项。OpenCL 使用 kernel
关键字来识别内核。对于 C/C++ 内核,您必须通过 -k
或 --kernel
来识别内核。
如果编译 OpenCL 源文件时不使用 -k
选项,则会编译文件中的所有内核。使用 -k
可指定特定内核作为目标。
例如:
v++ -c --kernel vadd
--kernel_frequency
- 适用于
- 链接
--kernel_frequency <freq> | <clockID>:<freq>[<clockID>:<freq>]
为内核指定用户定义的时钟频率(以 MHz 为单位),覆盖硬件平台上定义的默认时钟频率。<freq>
可为仅有单个时钟的内核指定单一频率,或者也可用于为支持 2 个时钟的内核指定 <clockID> 和 <freq>。
在仅含单个内核时钟的平台上覆盖时钟的语法是只需指定以 MHz 为单位的频率即可:
v++ --kernel_frequency 300
要在含 2 个时钟的平台上覆盖特定时钟,请指定时钟 ID 和频率:
v++ --kernel_frequency 0:300
要在多时钟平台上覆盖 2 个时钟,请指定每个时钟 ID 和对应的频率。例如:
v++ --kernel_frequency 0:300|1:500
-l | --link
- 适用于
- 链接
--link
这是编译后的链接进程的必需选项,但该选项与 --compile
或 --package
互斥。在链接模式下运行 v++
即可链接 XO 输入文件并生成 xclbin 或 .xsa 输出文件。
--list_steps
- 适用于
- 编译、链接和封装
--list_steps
列出给定目标的有效运行步骤。该选项会返回可在 --from_step
或 --to_step
选项中使用的步骤列表。此命令指定时,必须包含以下选项:
-
-t | --target [sw_emu | hw_emu | hw ]
: -
[ --compile | --link ]
:指定来自指定构建目标的编译进程或链接进程的步骤列表。
例如:
v++ -t hw_emu --link --list_steps
--log_dir
- 适用于
- 编译、链接和封装
--log_dir <dir_name>
指定用于存储 log 日志文件的目录。如不指定 --log_dir
,则该工具会将 log 日志文件保存到 ./_x/logs 中。如需了解更多信息,请参阅 v++ 命令的输出目录。
例如:
v++ --log_dir /tmp/myProj_logs ...
--message_rules
- 适用于
- 编译、链接和封装
--message-rules <file_name>
指定消息规则文件,其中包含用于控制消息的规则。如需了解更多信息,请参阅 使用消息规则文件。
例如:
v++ --message_rules ./minimum_out.mrf ...
--mode
- 适用于
- 编译
为 v++
命令指定编译模式,可接受的值为 aie
或 hls
。v++ --mode aie
会创建 AI 引擎组件(如
AI 引擎工具和流程用户指南(UG1076) 中所述),并且可搭配 v++ 模式 AI 引擎 中所述的配置命令一起使用。v++ --mode hls
会创建 HLS 组件(如
Vitis HLS 用户指南(UG1399) 中所述),并且可搭配 v++ 模式 HLS 中所述的配置命令一起使用。
--no_ip_cache
- 适用于
- 链接
--no_ip_cache
为 Vivado 综合的非关联 (OOC) 综合禁用 IP 高速缓存。禁用 IP 高速缓存存储库要求该工具为每次构建重新生成 IP 综合结果,可能导致增加构建时间。但它也能生成清洁无错的构建,删除设计中先前的 IP 结果。
例如:
v++ --no_ip_cache ...
-O | --optimize
- 适用于
- 链接
--optimize <arg>
该选项可指定 Vivado 实现结果的最优化级别。有效的最优化值包括:
-
0
:默认最优化。缩短编译时间。 -
1
:通过运行 Vivado 实现策略Power_DefaultOpt
进行最优化,以减少功耗。这会导致设计构建时间增加。 -
2
:通过最优化来提升内核速度。该选项会增加构建时间,但也能通过在实现中添加PHYS_OPT_DESIGN
步骤来改善生成的内核的性能。 -
3
:此最优化可在生成的代码中提供最高级别的性能,但是编译时间会显著增加。该选项可指定综合期间的重定时,并在实现期间启用PHYS_OPT_DESIGN
和POST_ROUTE_PHYS_OPT_DESIGN
。 -
s
:对设计大小进行最优化。它可通过运行Area_Explore
实现策略来减少内核所使用的器件逻辑资源。 -
quick
:缩短 Vivado 实现时间,但是会降低内核性能,并增加内核所使用的资源。它能为综合和实现启用Flow_RuntimeOptimized
策略。
例如:
v++ --link --optimize 2
-o | --output
- 适用于
- 编译、链接和封装
-o <output_name>
指定 v++
命令所生成的输出文件的名称。编译 (-c
) 进程输出名称必须以赛灵思对象文件的 XO 文件后缀结尾。链接 (-l
) 进程输出文件必须以 .xclbin 文件后缀或 .xsa 后缀结尾。--export_archive 命令需包含 .vma 后缀。--package
命令会取 .xsa 作为输入,并输出 .xclbin。
例如:
v++ -o krnl_vadd.xo
如不指定 --o
或 --output
,则输出文件名默认设置为:
- 编译
- a.o
- 链接
- a.xclbin(对于 Versal 平台则为 a.xsa)
- 封装
- a.xclbin
--part
- 适用于
- 编译、链接和封装
--part <part_name>
指定 AMD 器件,用于编译、链接和封装设计组件。--part
命令可用于指定器件,而不是完整的平台或 XSA。指定 v++ --link --part <Versal part
only>
会指示该工具为指定的 AMD Versal™
器件生成简单的基础硬件平台。
例如:
v++ --part xcvc1902-vsva2197-2MP-e-S --target hw_emu ...
--part
仅限用于为将来平台进行软件(AI 引擎和 PL 内核)开发,开发的此类平台无需任何更改。如果软件开发需硬件更改,则请在 Vivado 中创建平台并使用。为 Versal 器件的 --part 所提供的默认时钟为 300 MHz。默认值是根据 管理时钟频率 中所述的不同进程来判定的。-f | --platform
- 适用于
- 编译、链接和封装
--platform <platform_name>
指定受支持的加速平台(由 $PLATFORM_REPO_PATHS
环境变量指定)的名称,或者指定指向平台 .xpfm 文件的完整路径。要获取该版本支持的平台列表,请参阅 Vitis 软件平台版本说明。
该选项对于编译和链接都属于必需选项,用于定义构建进程的目标 AMD 平台。--platform
选项可接受平台名称或者指向平台文件 xpfm(使用完整路径或相对路径)的路径。
--platform
和 -t
选项必须与链接和封装期间所使用的 --platform
和 -t
相同。如需了解更多信息,请参阅 platforminfo 实用工具。例如:
v++ --platform xilinx_u50_gen3x16_xdma_5_202210_1 ...
--remote_ip_cache
- 适用于
- 链接
--remote_ip_cache <dir_name>
指定远程 IP 高速缓存目录的位置,以供 Vivado 综合在 IP 的非关联 (OOC) 综合期间使用。OOC 综合允许 Vivado 综合工具复用 IP 的综合结果,这些综合结果在设计迭代过程中未进行更改。由于复用综合结果,因此可缩短 .xclbin 文件所需的构建时间。
不指定 --remote_ip_cache
选项时,IP 高速缓存会写入原先从中启动 v++
的当前工作目录。您可使用该选项来指定其他高速缓存位置,此位置可供多个工程使用。
例如:
v++ --remote_ip_cache /tmp/IP_cache_dir ...
--report_dir
- 适用于
- 编译、链接和封装
--report_dir <dir_name>
指定用于存储报告文件的目录。如不指定 --report_dir
,则该工具会将报告文件保存到 ./_x/reports 中。如需了解更多信息,请参阅 v++ 命令的输出目录。
例如:
v++ --report_dir /tmp/myProj_reports ...
-R | --report_level
- 适用于
- 编译、链接和封装
--report_level <arg>
有效的报告级别:0
、1
、2
和 estimate
。
这些报告级别的映射保存在 optMap.xml 文件中。您可改写已安装的 optMap.xml 以定义定制报告级别。
-
-R0
规格会在 Vivado 实现期间关闭所有中间设计检查点 (DCP) 生成操作。开启布线后时序报告生成。 -
-R1
规格包含来自-R0
的一切以及report_failfast pre-opt_design
和report_failfast post-opt_design
,还会启用所有中间 DCP 生成操作。 -
-R2
规格包含来自-R1
的一切以及report_failfast post-route_design
。 -
-Restimate
规格会强制 Vitis HLS 生成 design.xml 文件(如果此文件不存在),然后生成“System Estimate”(系统估算)报告,如 系统估算报告 中所述。提示: 如果默认不生成 design.xml,该选项可用于软件仿真构建 (-t sw_emu
)。
例如:
v++ -R2 ...
--reuse_bit
--reuse_bit <arg>
- 适用于
- 链接
指定生成的比特流文件 (.bit) 的路径和文件名,生成器件二进制文件 (xclbin) 时将使用此比特流文件。如 使用 --to_step 并以交互方式启动 Vivado 中所述,您可指定 --to_step
选项以中断 Vitis 构建进程并对已综合的设计进行手动布局布线以生成比特流。
--reuse_bit
选项属于顺序构建选项,要求您在使用 --reuse_bit
恢复 Vitis 编译器时,使用的工程目录与您使用 --to_step
启动构建时所指定的工程目录相同。例如:
v++ --link --reuse_bit ./project.bit
--reuse_impl
--reuse_impl <arg>
- 适用于
- 链接
指定已实现的设计检查点 (DCP) 文件的路径和文件名,生成器件二进制文件 (xclbin) 时将使用此 DCP 文件。链接进程使用已实现的指定 DCP 来提取 FPGA 比特流并生成 xclbin。您可手动编辑由先前已完成的 Vitis 构建所创建的 Vivado 工程,或者也可指定 --to_step
选项以中断 Vitis 构建进程,并对已综合的设计进行手动布局布线。这样您即可以交互方式来使用 Vivado Design Suite,在构建进程中更改设计和使用 DCP。
--reuse_impl
选项属于增量构建选项,要求您在使用 --reuse_impl
恢复 Vitis 编译器时,使用的工程目录与您使用 --to_step
启动构建时所指定的工程目录相同。例如:
v++ --link --reuse_impl ./manual_design.dcp
-s | --save-temps
- 适用于
- 编译、链接和封装
--save-temps
指示 v++
命令保存在编译进程和链接进程期间所创建的中间文件/目录。--temp_dir
选项可用于指定中间文件的写入位置。
例如:
v++ --save-temps ...
-t | --target
- 适用于
- 编译、链接和封装
-t [ sw_emu | hw_emu | hw ]
指定构建目标,如 处理构建目标 中所述。构建目标会判定编译进程和链接进程的结果。您可以选择构建仿真模型用于调试和测试,或者构建真实系统以供在硬件中运行。如不指定 -t
,那么构建目标默认设置为 hw
。
--platform
和 -t
选项必须与链接期间所使用的 --platform
和 -t
相同。有效值包括:
-
sw_emu
:软件仿真 -
hw_emu
:硬件仿真 -
hw
:硬件
例如:
v++ --link -t hw_emu
--temp_dir
- 适用于
- 编译、链接和封装
--temp_dir <dir_name>
该选项允许您管理在构建进程中所创建的临时文件的写入位置。临时结果由 v++
编译器写入,然后被移除,除非同时指定 --save-temps
选项。
如不指定 --temp_dir
,那么该工具会将临时文件保存到 ./_x/temp 中。如需了解更多信息,请参阅 v++ 命令的输出目录。
例如:
v++ --temp_dir /tmp/myProj_temp ...
--to_step
- 适用于
- 编译、链接和封装
--to_step <arg>
为编译进程或链接进程指定步骤名称,以便通过该步骤来运行构建进程。您可使用 --list_step
选项来判定有效的编译步骤或链接步骤的列表。
构建进程会在完成指定步骤后终止。此时,您即可与构建结果进行交互。例如,手动访问 HLS 工程或者 Vivado Design Suite 工程以执行特定任务,然后再返回构建流程并以 --from_step
选项启动 v++
命令。
--to_step
/--from_step
均为顺序构建选项,须使用 --from_step
在工程目录内恢复构建,此工程目录即为您使用 --to_step
启动构建时所使用的工程目录。使用 --to_step
时,必须同时指定 --save-temps
以保存 Vivado 工具所需的临时文件。例如:
v++ --link --save-temps --to_step vpl.update_bd
--user_board_repo_paths
- 适用于
- 链接
--user_board_repo_paths
为 DIMM 开发板文件指定现有用户开发板存储库。该值将追加到 Vivado 工程的 board_part_repo_paths
属性之前。
--user_ip_repo_paths
- 适用于
- 链接
--user_ip_repo_paths <repo_dir>
指定一个或多个用户 IP 存储库路径的目录位置,以供首先在其中搜索内核设计中所使用的 IP。该值将附加到 Vivado 工具所用的 ip_repo_paths
开头位置之后,用于定位 IP 核。优先使用来自这些指定路径的 IP 定义,然后再使用来自硬件平台 (.xsa) 或来自 AMD IP 目录的 IP 存储库的 IP 定义。
v++
命令行上可指定多个 --user_ip_repo_paths
。以下列表显示了构建进程中查找 IP 定义的优先顺序(从高到低)。
- 对于系统硬件构建 (
-t hw
):- 来自
--user_ip_repo_paths
的 IP 定义。 - 内核 IP 定义(
vpl --iprepo
开关值)。 - 来自与平台关联的 IP 存储库的 IP 定义。
- 来自安装区域的 IP 高速缓存(例如,<Install_Dir>/Vitis/2019.2/data/cache/)。
- 来自安装区域的 AMD IP 目录(例如,<Install_Dir>/Vitis/2019.2/data/ip/)
- 来自
- 对于硬件仿真构建 (
-t hw_emu
):- 来自
--user_ip_repo_paths
的 IP 定义和用户仿真 IP 存储库。 - 内核 IP 定义(
vpl --iprepo
开关值)。 - 来自与平台关联的 IP 存储库的 IP 定义。
- 来自安装区域的 IP 高速缓存(例如,<Install_Dir>/Vitis/2019.2/data/cache/)。
-
$::env(XILINX_VITIS)/data/emulation/hw_em/ip_repo
-
$::env(XILINX_VIVADO)/data/emulation/hw_em/ip_repo
- 来自安装区域的 AMD IP 目录(例如,<Install_Dir>/Vitis/2019.2/data/ip/)
- 来自
例如:
v++ --user_ip_repo_paths ./myIP_repo ...
-v | --version
-v
打印 v++
命令的版本和构建信息。例如:
v++ -v