认识高层次综合的调度与绑定 - 2023.2 简体中文

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

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

高层次综合工具用于将未定时的高层次规范转变为完全定时的实现。在此变换期间,会通过实现定制架构来满足规范要求。生成的架构包含数据路径、控制逻辑、存储器接口以及 RTL 与外部世界的通信方式。数据路径由一组存储元素(例如,寄存器、寄存器文件或存储器)、一组功能单元(例如,ALU、乘法器、移位器和其他定制功能)以及互连元素(例如,三态驱动器、多路复用器和总线)组成。每个组件的执行都需耗时一个或多个时钟周期、可采用流水打拍并且可包含输入或输出寄存器。此外,完整数据路径和控制器在多个阶段内均可流水打拍。

设计师应将工程初期部分用于重新定义算法架构,以满足性能,同时将算法保持在较高层次。任何特定 HLS 工具都有设计原则和最佳实践,必须遵循这些原则和最佳实践才能生成满足目标性能的最优化 RTL。

HLS 工具会执行下列任务,如下图所示。

图 1. HLS 任务
  1. 对编写的算法进行编译以满足规范:该步骤包含多项代码最优化,例如,死码消除、常量折叠、报告不受支持的构造等。
  2. 调度给定时钟周期的运算:
    1. “Schedule”(调度)阶段用于基于下列条件来判定每个时钟周期内发生的运算:

      • 运算的依赖关系何时已得到满足或者变为可用。
      • 时钟周期长度或时钟频率。
      • 运算完成所需时间(由目标器件来定义)。时钟周期越长,单个时钟周期内可完成的运算越多。部分运算可能需要作为多周期资源来实现。HLS 会将运算自动调度到多个时钟周期内
      • 可用资源。
      • 整合任意用户指定的最优化指令。
    2. 在“Schedule”阶段内,本工具会判定将在给定周期内执行的运算符以及所需组件的数量。下一步是判定运算与对应资源之间的绑定。
  3. 将运算绑定到功能组件,将变量绑定到存储元素
    1. 绑定任务会分配硬件资源用于实现调度的每项运算,并将运算符(例如,加法、乘法和移位)映射到特定 RTL 实现。例如,mult 运算可在 RTL 内作为组合乘法器或流水打拍乘法器来实现。
    2. 绑定任务会将存储器和/或寄存器分配到函数内的阵列变量以满足目标性能。
    3. 如果多项运算使用相同资源,那么此步骤可执行资源共享,前提是不在同一个周期内使用。
  4. 控制逻辑抽取可创建有限状态机 (FSM),根据定义的调度按顺序执行 RTL 设计中的运算。
  5. 创建逻辑以与外部世界进行通信:生成的 RTL 将与外部世界进行通信,例如,对来自外部端口或起始/停止逻辑的数据进行串流,或者访问外部存储器。
  6. 最后,生成 RTL 架构

下一章按概念逐步讲解了 HLS 工具基于输入约束(例如,时钟周期)调度运算符以及将运算符绑定到可用硬件资源的总体方式。