调度查看器 - 2023.2 简体中文

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

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

“Schedule Viewer”(调度查看器)可提供已综合 RTL 的详细视图,用于展示功能的每个操作和控制步骤,以及执行步骤的时钟周期。它有助于您识别阻碍并行化的任意循环依赖关系、时序违例以及数据依赖关系。

图 1. 调度查看器
  • 左侧纵轴显示的是将在 RTL 层级中作为逻辑来实现的操作和循环的名称。操作按拓扑顺序执行,这暗示任一行上的操作只能由前一行的操作驱动,并且只能驱动后一行中的操作。根据发现的违例类型,“Schedule Viewer”会显示每项操作的额外信息
    提示: 每项操作都与源代码行关联。右键单击操作即可使用Goto Source(转至源代码)命令打开与操作关联的输入源代码。
  • 顶部横轴显示连续的时钟周期。
  • 每个时钟周期内的竖轴虚线显示由于时钟不确定性而保留的时钟周期部分。此时间即工具保留用于 Vivado 后端进程(如布局布线)的时间。
  • 每项操作在表中均显示为灰框。根据操作延迟占总时钟周期百分比来设置此框的横向大小。对于函数调用,提供的周期信息与操作时延相等。多周期操作显示为灰框,框中间有一条水平线贯穿。
  • “Schedule Viewer”还会将常规运算符数据依赖关系显示为蓝色实线。如上图所示,选择操作时,您可看到实体蓝色箭头高亮特定的运算符依赖关系。这使您能够对数据依赖关系执行详细分析。绿色虚线表示相互迭代数据依赖关系。存储器依赖关系则以金色线条来显示。
    提示: 默认情况下,其中可显示关键时序路径中的每项操作之间的所有依赖关系(蓝色线条)。
  • 在右侧远端的“Schedule Viewer”(调度查看器)旁会显示HLS Module Hierachy(HLS 模块层级),以便您快速浏览设计层级。

在下图中,已选中名为 COL_DCT_LOOP_DCT_OUTER_LOOP 的循环。这是经流水打拍的循环,在循环栏中已显式声明启动时间间隔 (II)。所有流水打拍循环均处于以可视化方式展开状态,这表示在调度查看器中显示 1 次完整迭代。II 定义的重叠以循环标记上加粗的时钟边界来标记。单次迭代的总时延等同于循环标记所覆盖的周期数。在此情况下,总时延为 6 个时钟周期。

图 2. 循环流水打拍

“Schedule Viewer”会在报告顶部显示一个菜单栏,其中包含以下功能特性:

  • Zoom In(放大)、Zoom Out(缩小)/Zoom Fit(缩放适应)命令
  • 用于为特定操作或步骤输入搜索词的文本字段;以及用于在与搜索词匹配的对象列表中上下滚动的方向键命令:Previous Match(前一项匹配)或Next Match(后一项匹配)
  • Legend(图例)命令用于显示图例。
图 3. 时序违例

您可使用Module Hierarchy视图中的工具栏来快速定位时序违例和 II 违例,如上图所示。要定位导致源代码中出现违例的操作,请右键单击操作并使用Goto Source(转至源码)命令。时序违例是一条操作路径,其所需时间超过可用时钟周期。为便于直观显示,在Schedule Viewer中会以红色框显示存在问题的操作。

属性视图

如上图所示,在Schedule Viewer底部有Properties(属性)视图,该视图可显示Schedule Viewer中当前所选对象的属性。它可便于您查看Schedule Viewer中选中的特定函数、循环或操作的详细信息。可选中的元素类型以及显示的属性包括:

  • 函数或循环
    Initiation Interval (II)(启动时间间隔)
    表示函数或循环可接受新输入数据之前的时钟周期数。
    Loop Iteration Latency(循环迭代时延)
    表示完成循环的单次迭代所需的时钟周期数。
    Latency(时延)
    表示函数计算所有输出值或者循环完成所有迭代所需的时钟周期数(和时间)。
    Name(名称)
    函数或循环的名称。
    Pipelined(流水打拍)
    表示在 RTL 设计中对函数或循环进行流水打拍。
    Slack(裕量)
    表示函数或循环的时序裕量。
    Tripcount(循环次数)
    表示循环完成的迭代数。
    Resource Utilization(资源使用率)
    显示用于实现函数或循环的 BRAM、DSP、LUT 或 FF 的数量。
  • 运算和存储映射
    Bitwidth(位宽)
    对应运算的位宽。
    Impl(实现)
    定义用于指定运算或存储的实现。
    Name(名称)
    操作名称。
    Op Latency(运算时延)
    显示运算或存储的绑定的默认时延或指定时延。
    Opcode(操作代码)
    表示调度的运算,例如,addsubmult。如需了解更多信息,请参阅 BIND_OPBIND_STORAGE 编译指示或指令。
    Schedule Delay(调度延迟)
    指定与操作关联的延迟。