综合汇总 - 2021.2 Chinese

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

Document ID
UG1399
Release Date
2021-12-15
Version
2021.2 Chinese

当综合完成后,Vitis HLS 会在信息窗格中自动打开顶层函数的“Synthesis Summary”(综合汇总)报告。

以下详细介绍了Synthesis Summary中的各部分。

提示: 单击任一部分的标题行即可在报告窗口中展开或折叠该分支。

General Information

此“常规信息”部分可提供有关报告生成时间、所用软件版本、工程名称、解决方案名称和目标流程以及技术详情的信息。

图 1. 综合汇总报告

Timing Estimate

此“时序估算”部分可显示解决方案所指定的时序的快速估算结果,如 指定时钟频率 中所述。其中包括指定的Target(目标)时钟周期和Uncertainty(不确定性)的周期。时钟周期减去不确定性即可生成Estimated(估算的)时钟周期。

提示: 这些值只是用户在解决方案设置中提供的估算。通过选择Flow Navigator中的Run RTL Synthesis命令或Run RTL Place and Route即可报告更准确的估算结果,如 导出 RTL 设计 中所述。

Performance & Resource Estimates

“Performance Estimate”(性能估算)列可报告顶层函数和顶层中例化的任何子块的时延和启动时间间隔。C/C++ 源代码中在此级别调用的每个子函数都是生成的 RTL 块中的一个实例,除非使用 INLINE 编译指示或指令将该子函数内联(或者自动内联)到顶层函数内。

Slack(裕量)列可显示实现中的任何时序问题。

Latency(时延)列可显示生成输出所需的周期数和时间 (ns)。Initiation Interval(启动时间间隔)是可应用新输入之前的时钟周期数。如果没有任何 PIPELINE 指令,则时延比启动时间间隔少 1 个周期(写入最终输出后,读取下一个输入)。

提示: 如果时延显示为“?”,则表示 Vitis HLS 无法确定循环迭代次数。如果设计的时延或吞吐量取决于含可变索引的循环,那么 Vitis HLS 会将此循环的时延报告为未知。在此情况下,请使用 LOOP_TRIPCOUNT 编译指示或指令来手动指定循环迭代次数。LOOP_TRIPCOUNT 值仅用于确保生成的报告能够显示有意义的时延和时间间隔范围,而不影响综合结果。

Iteration Latency(迭代时延)表示单个循环的单次迭代的时延。Trip Count(循环次数)列显示的是特定循环在已实现的硬件内的迭代次数。它用于反映硬件中的任意循环展开行为。

此报告的“Resource Estimate”(资源估算)列用于指示实现 RTL 代码中的软件函数所需的资源估算结果。其中提供了估算的 BRAM、DSP、FF 和 LUT。

硬件接口

此综合报告的“HW Interfaces”(硬件接口)部分提供了对应于综合期间生成的不同硬件接口的表格。该工具生成的硬件接口类型取决于解决方案所指定的流程目标以及应用于代码的任何 INTERFACE 编译指示或指令。在下图中,该解决方案目标为 Vitis 内核流程,因此会按需生成 AXI 接口。

图 2. 硬件接口

查看这些表格时,应留意下列信息:

  • 针对不同接口提供了不同的表格。
  • 所提供的列用于显示接口的不同属性。对于 M_AXI 接口,包括Data Width(数据宽度)和Max Widen Bitwidth(最大拓宽位宽)列,用于指示是否发生了 自动调整端口宽度大小 以及发生的程度。在以上示例中,可以看到,此端口已从软件中指定的 16 位拓宽至 512 位。
  • Latency列可显示接口的时延:
    • ap_memory 接口中,该列可显示驱动此接口的 RAM 资源的读取时延。
    • 对于 m_axi 接口,该列会显示 AXI4 接口的期望时延,允许设计发起总线请求的时间比执行期望的读取或写入操作早数个周期(时延)。
  • Bundle(捆绑)列可显示来自 INTERFACE 编译指示或指令的任意指定的捆绑名称。
  • 此外,这些列还会显示 M_AXI 接口的突发和读取写入属性,如 set_directive_interface 中所述。
  • Bit Fields(位字段)列可显示 s_axilite 接口中寄存器所使用的位。

SW I/O Information

此“软件 I/O 信息”部分会高亮来自 C/C++ 源代码的函数实参与生成的 RTL 代码中的端口名称之间的关联方式。其中提供的软件和硬件端口的其它详细信息如下所示。请注意,软件实参可扩展至多个硬件接口中。例如,input 实参与 3 个硬件接口相关,m_axi 对应于数据,s_axi_lite 则对应于所需的控制信号。

图 3. SW I/O Information

M_AXI Burst Information

在“M_AXI 突发信息”部分中,Burst Summary(突发汇总)表中报告了成功的突发传输,并包含指向关联源代码的链接。报告的突发长度表示 max_read_burst_lengthmax_write_burst_length,并表示突发传输期间读取/写入的数据值的数量。例如,如果输入类型为整数(32 位),且 HLS 自动将此接口拓宽至 512 位,那么每次突发会传输 1024 个整数。由于拓宽后的接口每次可承载 16 个整数,因此结果是 64 拍突发。Burst Missed(突发未命中)表格用于报告突发未能命中的原因,并包含指向突发失败相关的指导性消息的链接,以帮助解决问题。

图 4. M_AXI Burst Information

绑定操作报告和绑定存储报告

在“Synthesis Summary”报告中新增了“Bind Op”(绑定操作)报告和“Bind Storage”(绑定存储)报告。这两份报告都有助于您了解 Vitis HLS 将操作映射到资源时所做的选择。该工具将把操作映射到具有适当时延的适当资源。您可通过使用 BIND_OP 编译指示或指令并请求特定资源映射和资源来影响此进程。“Bind Op”报告将显示已自动完成的映射和通过使用编译指示来强制完成的映射。同样,“Bind Storage”报告会显示 BRAM/LUTRAM/URAM 等平台上的阵列到存储器资源的映射。

“Bind Op”报告可显示内核或 IP 的实现详细信息。其中会显示顶层函数的层次结构,并列出变量和已应用的任何 HLS 编译指示或指令、已定义的操作、HLS 工具使用的实现以及任何已应用的时延。

此报告适用于检验 RTL 设计所指定的可编程逻辑实现详细信息。

图 5. 综合汇总

如上所示,“Bind OP”报告高亮显示了您的设计中的部分重要特性。当前,它调出设计中使用的 DSP 数量并按层次结构显示这些 DSP 在设计中的使用位置。该表还高亮显示是否已根据用户指定的编译指示完成特定资源分配,如果已完成分配,则会在“Pragma”列中显示“yes”。如果“Pragma”列中不存在任何条目,这表示工具已自动推断资源分配。该表还显示为用户设计中的每个模块分配的资源的 RTL 名称,您可以按层次结构降序逐级向下查看各种资源。

它不会显示所有推断的资源,而是改为显示相关的资源(例如,算术、浮点和 DSP)。此外还会显示互连结构(使用 LUT 实现)或 DSP 的具体实现选择。最后,还会显示资源的时延。这些信息有助于了解并按需增加资源的时延,以便向设计添加流水线阶段。在尝试解决实现期间的时序问题时,如需尝试对冗长的组合路径进行细分,那么这些信息是非常实用的。

每个资源分配都与源代码行相关,对应操作正是根据此源代码行来推断得出的,用户可以右键单击资源,并选择“Goto Source”(转至源代码)选项以查看此关联。最后,“Bind Op”报告下的第二个表格还显示了各项全局配置设置,这些设置全都同样可用于更改工具使用的资源分配算法。在以上示例中,dadd(双精度浮点加法)操作的实现选择已固定到 fulldsp 实现。同样,ddiv 操作的时延已固定为 2。

与 BIND_OP 编译指示类似,BIND_STORAGE 编译指示可用于选择特定存储器类型(例如,单端口或双端口)和/或特定存储器实现(例如,BRAM/LUTRAM/URAM/SRL 等)以及时延值。“Bind Storage”报告会高亮显示设计中使用的存储映射。当前,它会调出设计中使用的 BRAM 和 URAM 的数量。该表还高亮显示是否已根据用户指定的编译指示完成特定存储资源分配,如果已完成分配,则会在“Pragma”列中显示“yes”。如果“Pragma”列中不存在任何条目,则表示工具已自动推断存储资源分配。特定的存储类型和实现选择也会随变量名和时延一并显示。

您可使用此信息来复查设计中的存储资源分配情况,并根据可用资源来更改最终的存储实现,从而在设计中选择相应的选项。最后,如有任何全局配置设置可用于更改工具所使用的存储资源分配算法,那么“Bind Storage”报告下还会显示另一个表格。

User Pragma Report

此“用户编译指示”报告可显示设计中已忽略和不正确的编译指示。此报告旨在汇总 Vitis HLS log 日志文件中显示的问题。它使您能够快速识别设计中使用的编译指示所存在的问题,以便您查看哪些编译指示未能按期望的方式来使用。此外,其中还会单独报告有效的编译指示,以便您查看设计中使用的所有编译指示。

提示: 在此报告中还会提供指向应用编译指示的源代码的链接。
图 6. 编译指示报告