运行 C 语言综合 - 2023.2 简体中文

Vitis 高层次综合用户指南 (UG1399)

Document ID
UG1399
Release Date
2023-12-18
Version
2023.2 简体中文

Flow Navigator中,确保 HLS 组件处于活动状态,或者在Component(组件)菜单中将其选中,在该工具中将其设为活动组件。当 HLS 组件为活动组件时,Flow Navigator支持运行 C 语言仿真、C 语言综合、C/RTL 协同仿真、封装与实现来构建和分析该 HLS 组件。要综合 HLS 组件,请选中Flow NavigatorC SYNTHESIS(C 语言综合)标题下的Run(运行)。对该 HLS 组件运行 C 语言综合会从 C/C++ 源代码生成 RTL。

提示:Vitis Unified IDE 中运行综合时,会使用 v++ -c --mode hls 命令,如 HLS 配置文件命令 中所述。

指定流程目标和通用设置

HLS 组件可用于为 Vivado IP 流程或 Vitis 内核流程创建综合结果,如 目标流程概述 中所述。流程目标用于判定应用于 IP 或内核的默认接口端口(如 定义接口 中所述)以及综合后设计的其他详细信息。

图 1. HLS 组件通用设置

在上图中,当前为 Vitis 流程设置了flow_target。默认流程目标为 Vivado IP 流程。通常在创建 HLS 组件时设置此目标,但也可按需修改。

General(通用)设置下还可指定part(器件)或platform(平台)。这些选项用于确定物理器件,以便为这些器件执行 C/C++ 代码综合。所选器件可采用相应的硬件资源,这些资源会扩展或限制可供 RTL 综合选择的实现选项。

最后,可以指定clock(时钟)周期和clock_uncertainty(时钟不确定性)来定义 RTL 设计的时序详细信息。这些都可能会影响设计中的操作的时序和调度,如 指定时钟频率 中所述。

这些选项会生成如下配置文件条目:
part=xcvc1902-vsva2197-2MP-e-S

[hls]
flow_target=vitis
clock=8ns
clock_uncertainty=15%

加载源文件和识别顶层函数

通常,HLS 组件的源代码是在创建时定义或加载的。但您可在创建组件时绕过此步骤,然后您需要在综合设计前添加源文件。要向现有 HLS 组件添加源文件,请打开组件配置文件,导航到C Synthesis sources(C 语言综合源文件)部分,如下所示。“Config Editor”(配置编辑器)的这部分支持您添加一个或多个源文件,并指定顶层函数。

图 2. HLS 组件综合源文件

C Synthesis sources会显示当前添加的源文件,并允许您编辑或删除当前源文件、添加新的源文件以及添加或修改 CFLAGS 和 CSIMFLAGS。

  • Add item(添加项):选择此命令即可向 HLS 组件添加新的源文件。这样会打开“File Browser”(文件浏览器)并允许您导航到并选中要添加的源文件。
  • Add CFLAGS or CSIMFLAGS(添加 CFLAGS 或 CSIMFLAGS):您可添加综合编译标志 (CFLAGS) 和仿真编译标志 (CSIMFLAGS),以供应用于所有源文件或者添加到特定源文件。如上图所示,只需将这些标志添加到Flags common to all files(所有文件的通用标志)的相应文本输入框中即可。要为特定源文件添加标志,请选中该源文件,然后选中Edit item(编辑项)以添加标志或者修改文件名和路径。
  • top(顶层函数):允许您指定用作为综合的顶层 RTL 模块的函数。顶层模块用于判定将添加的 RTL 端口以及要包含在 HLS 组件中的子函数。这样会打开Select Top Function(选择顶层函数)对话框,其中会显示源文件中已定义的函数列表以供您从中选择顶层函数。
这些选项会生成如下配置文件条目:
[HLS]
syn.file=<path/to/file.cpp>
syn.file_cflags=<path/to/file.cpp>,<cflag>
syn.file_csimflags=<path/to/file.cpp>,<csimflag>
syn.cflags=<cflag for all files>
syn.csimflags=<csimflag for all files>
syn.top=<top function name>

配置默认设置

对于 HLS 组件,Vitis Unified IDE 会提供各种命令,这些命令可用于配置该工具的默认综合与仿真设置。这些配置命令显示在“Config Editor”的“C Synthesis”(C 语言综合)标题下,如下图所示。通常,这些选项按图中所示方式记述在文档中,如 编译选项接口配置RTL 配置

图 3. HLS 组件默认设置

分配设计指令

图 4. HLS 组件指令

设计指令允许您为源代码自定义综合结果。更改多轮综合运行中使用的指令即可更改结果或最优化设计。这些指令可作为 HLS 编译指示 直接添加至源代码,或者作为 HLS 最优化指令 添加至配置文件,以供在 HLS 组件中使用。在“Config File Editor”(配置文件编辑器)中,会列出各种指令,您可选中Add Item(添加项)打开“Directive”(指令)编辑器,如 添加编译指示和指令 中所述。

配置文件中的设计指令输入的部分示例:
[HLS]
syn.directive.dataflow=dct
syn.directive.array_partition=dct buf_2d_in type=block factor=4
syn.directive.pipeline=dct2d II=4

运行综合

在配置文件中定义 HLS 组件的关键元素后,即可运行综合。从Flow Navigator中选中Run即可开始综合。您可在Output(输出)窗口中跟踪综合运行的进度。综合运行的转录文本所含顶层函数名为 <component-name>::synthesis。综合进程期间,消息将被转录到控制台窗口内,并记录到 vitis_hls.log 文件中。

图 5. 运行综合的 HLS 组件

完成综合后,应在转录文本底部显示“Synthesis finished successfully”(综合成功完成)消息。在Run命令下还会显示填充的Reports文件夹,如上图所示。综合后可用报告如下所示:

  • Summary(汇总):报告使用的命令行和结果的时间戳。
  • Synthesis(综合):报告综合结果及结果质量、硬件接口、突发传输事务等信息。如需了解更多信息,请参阅 综合汇总
  • Function Call Graph(函数调用计算图):在 C 语言综合或 C/RTL 协同仿真完成后,显示 HLS 组件,以显示设计的时延和 II 方面的吞吐量,如 函数调用计算图 中所述。
  • Schedule Viewer(调度查看器);显示函数的每项操作和每个控制步骤,以及执行操作和步骤的时钟周期,如 调度查看器 中所述。
  • Dataflow Viewer(数据流查看器):仅当设计中使用 DATAFLOW 编译指示或指令时才可用。此报告会显示本工具推断所得的数据流结构,如 数据流查看器 中所述。
  • Kernel Guidance(内核指南):报告指南消息,为源代码与综合结果提供设计建议。