首页 > 文章 > 使用配置文件控制Vitis编译

使用配置文件控制Vitis编译

Joyce Li 2020年05月01日

简介

Vitis™统一软件平台采用配置文件的方式来控制编译器和链接器行为,这将取代赛灵思® OpenCL编译器(XOCC)中以往的命令行开关样式。使用配置文件的主要优势包括:

  • 不易出错:旧的命令行开关样式导致命令较长,难以阅读和修改。如下例:
    
v++ -t hw --log_dir /f1/f2/log_dir --report_dir /f1/f2/report_dir --xp vivado_prop:run.impl_1.STEPS.ROUTE_DESIGN.TCL.POST=/f1/f2/f3/mypostroute.tcl --xp 
param:compiler.userPostSysLinkTcl=/f1/f2/f3/f4/user_port_sys_link.tcl --nk
my_krnl:1:krnl_1 --sp krnl_1.m00_axi:bank0 --sp krnl_1.m01_axi:bank1 --sp 
krnl_1.m02_axi:bank2 --sp krnl_1.m03_axi:bank3 --sp krnl_1.m04_axi:bank1 --sp 
krnl_1.m05_axi:bank2 --sp krnl_1.m06_axi:bank0 --sp krnl_1.m07_axi:bank0 --sp
krnl_1.m08_axi:bank1 --sp krnl_1.m09_axi:bank2 --sp krnl_1.m10_axi:bank3 
--profile_kernel data:my_krnl:all:m01_axi –debug --platform ./f1/f2/xilinx_u200_xdma_201920_1/xilinx_u200_xdma_201920_1.xpfm --kernel_frequency 0:300|1:350 -o my_design.xclbin ./my_krnl.xo

  • 不同类型的选项可分组到不同的小节/文件中:Vitis工具提供诸多不同的选项,它们属于不同的类别。例如,其中一些用于控制Vitis编译器/链接器行为,一些用于控制Vivado® 工具流。为提高易用性,配置文件支持将类似类型的选项分组到一个小节甚至一个文件中。格式为:
    [section name]
Option1=A
...
Option1=B

在一个配置文件中,我们可以有多个小节,如上所示。

  • 使用多个配置文件可以利用makefile相关规则。修改一个配置文件中的选项不会导致所有内容重新编译。
  • 按遇到开关的顺序读取开关。如果同一个开关重复出现冲突信息,则使用第一个开关读取。开关的优先顺序如下,其中第一项的优先级最高:
  1. 命令行开关。
  2. 从左到右的配置文件(在命令行上)。
  3. 在配置文件中,优先级从上到下。

尽管多次指定开关的用法屡见不鲜,但建议避免这种做法,因为这将产生更多的工作来确定哪个选项优先。而且,多次指定同一选项并不具备任何优势。


将当前命令行开关迁移到配置文件

如果您已有使用命令行样式选项的现有设计,您需要掌握如何将其转换为新的配置样式。有关这方面的信息,请见Vitis统一软件开发平台文档(UG1393)中的Vitis编译器配置文件。

下面总结了一些常用的选项,并重点介绍新旧命令行样式之间的比较。

布尔开关(任何小节)

设置为True或False的选项。通常用于启动特定的流程。

Purpose of Option

Old

New

Select stage

--link(or –l)

link=1

Enable debug mode

-g

debug=1

通用开关(任何小节)

通常用于指定项目配置。

Purpose of Option

Old

New

Select target platform

--platform xxx

platform=xxx

Directory for logs

--log_dir

log_dir=

Directory for reports

--report_dir

report_dir=

Select compile target

--target hw

target=hw

连接开关(小节名称:[连通性])

系统拓扑的选项,如存储器连接、计算单元设置等。

Purpose of Option

Old

New

Number of CUs

--nk foo:2:foo_1.foo_2

nk=foo:2:foo_1.foo_2

Specify memory connection

--sp vadd_cu1.m_axi_gmem:HBM[0:3]

sp=vadd_cu1.m_axi_gmem:HBM[0:3]

Specify streaming connection between CUs

--sc vadd_1.stream_out:vadd_2.stream_in

stream_connect=vadd_1.stream_out:vadd_2.stream_in

Assign CU to SLR

--slr vadd_1:SLR0

slr=vadd_1:SLR0

HLS参数(小节名称:[hls])

用于配置HLS工具的选项。

Purpose of Option

Old

New

Specify kernel frequency

--kernel_frequency:250

clock=:

Generate separate AXI interface for each argument(only for OpenCL kernel)

--max_memory_ports

max_memory_ports=all|kernel_name

Vivado属性和参数(小节名称:[Vivado])

用于配置Vivado工具的选项。

Purpose of Option

Old

New

Vivado Properties

--xp vivado_prop run.synth.STEPS.SYNTH_DESIGN.TCL.PRE=pre.tcl

prop=run.synth.STEPS.SYNTH_DESIGN.TCL.PRE=pre.tcl

Vivado Parameters

--xp vivado_param:project.writeIntermediateCheckpoints=1

param=project.writeIntermediateCheckpoints=1

高级开关(小节名称:[高级])

控制流程的高级选项。

Purpose of Option

Old

New

Misc

--xp vivado_prop run.synth.STEPS.SYNTH_DESIGN.TCL.PRE=pre.tcl

prop=run.synth.STEPS.SYNTH_DESIGN.TCL.PRE=pre.tcl

Non-Vivado Properties

--xp prop:kernel.krnl_vadd.kernel_flags=

prop=kernel.krnl_vadd.kernel_flags=

Non-Vivado Parameters

--xp param:compiler.acceleratorBinaryContent=dcp

param=compiler.acceleratorBinaryContent=dcp


用例示例

在下面的小节中,我们将提供一些常见的用例来展示如何使用配置文件来实现它。

控制Vitis编译和链接

最常用的v++选项可能都与控制Vitis编译器和链接器有关。例如,您可能需要为您的内核设计创建多个计算单元(CU),并分配存储器连接。您可以创建connectivity.ini文件并将以下行添加到该文件中:

    [connectivity]
nk=foo:3
sp=foo_1.m_axi_p0:DDR[0]
sp=foo_2.m_axi_p0:DDR[1]
sp=foo_3.m_axi_p0:DDR[2]

connectivity.ini文件需要在v++脚本中获取,如下所示。

    v++ -l … --config connectivity.ini …


控制HLS和Vivado编译

有时,我们需要控制HLS参数和Vivado策略来提高性能。在这种情况下,我们可以创建一个配置文件来同时控制它们,也可以使用两个单独的文件。这里我们将使用两个文件演示: hls_config.ini and vivado_config.ini.

hls_config.ini中, 我们希望过度约束HLS工具以获得更好的时序余裕。例如,内核目标频率为300MHz;我们可以将HLS目标频率增加到320MHz,如下所示:

    [hls]
clock=320000000:foo	

vivado_config.ini中, 我们可以对Vivado中的实现策略进行微调,以获得更好的实现效果,但这需要扎实的硬件设计经验。如果您对这些选项的结果没有信心,赛灵思不建议手动修改。例如,我们可以在vivado_config.ini中添加以下行:

     [vivado]
prop=run.impl_1.STEPS.OPT_DESIGN.ARGS.DIRECTIVE=Explore
prop=run.impl_1.STEPS.PLACE_DESIGN.ARGS.DIRECTIVE=Explore
prop=run.impl_1.STEPS.PHYS_OPT_DESIGN.IS_ENABLED=true
prop=run.impl_1.STEPS.PHYS_OPT_DESIGN.ARGS.DIRECTIVE=AggressiveExplore
prop=run.impl_1.STEPS.ROUTE_DESIGN.ARGS.DIRECTIVE=Explore
prop=run.impl_1.STEPS.OPT_DESIGN.TCL.PRE=/preopt.tcl


您或许会注意到,该文件在opt_design阶段之前生成了一个Tcl文件。在这个Tcl文件中,您可以添加一些时序或布局约束,这有利于提高性能。

之后,这两个配置文件可以在v++脚本中一起生成:

v++ -l … --config vivado_config.ini –config hls_config.ini …


总结

Vitis工具提供了新的配置文件方法来替代传统的命令行开关样式。使用配置文件更有效且更不易出错。如果您将要创建新的设计,赛灵思建议您迁移到配置文件,因为旧样式将在未来版本中弃用。


About Joyce Li

About Joyce Li

Joyce Li 是赛灵思AI和软件团队中的一名技术营销工程师,在ACAP/FPGA设计和应用程序方面拥有超过15年的经验。自2004年加入赛灵思以来,她在技术销售、应用工程和技术营销方面历任多职。加入赛灵思后,她对Vivado、SDx和Vitis领域进行了广泛的研究。她拥有北京理工大学电子工程博士学位。