Intel®高层次综合编译器专业版: 最佳实践指南

ID 683152
日期 12/04/2023
Public
文档目录

8.4.2. 必要时对设计明确添加缓冲容量

Intel® HLS Compiler无法推断最佳容量需求时,可通过指定ihc::launchihc::collect函数的capacity参数值为设计明确添加缓冲容量。

启动任务函数时添加容量

可考虑指定ihc::launch调用指令的capacity参数,如果在仿真波形中观察到停机码型,则表示以下情况之间不平衡:
  • 任务函数引入的任何背压
  • 指令调用程序启动任务函数的频率

启用 Intel HLS Compiler来推断数据通路缓冲区容量要求中的图示通过任务系统的多个组件调用的数据流显示了此类设计的框图。

收集任务函数时添加容量

可考虑指定ihc::collect调用指令的capacity参数,如果在设计波形中观察到停机码型,表示以下情况存在差异:
  • 任务函数中的数据生成节奏
  • 通过调用指令程序函数读取数据的节奏

决定何时指定capacity参数

当您决定是否添加ihc::launchihc::collect能力时,请先考虑以下问题:
  • 是否有花费周期停顿来等待输入数据到达的任务?

    如果是,这些任务需要的启动容量等于输入数据到达任务所需的周期数。

    添加启动容量允许停顿的任务缓冲其启动信号,以便它们不会停顿计划在同一周期启动的其它任务。

    由于consumer(消费者)任务取决于来自生产者任务函数的数据,消费者任务会停顿,直到来自生产者任务的数据到达消费者,因此您应该针对ihc::launch调用添加容量以获得消费者任务。

  • 设计中最慢的任务(即,最后生成初始return 信号的任务)完成其首次执行之前是否有任何任务已经完成其首个执行?

    如果是,则在设计中最慢的任务完成之前完成的任务需要额外的收集容量。

    添加等于该任务生产首个return信号和设计中最慢的任务生产首个return信号之间的周期数的容量。

    当您添加收集容量时,任务可以缓冲它们的return信号。会从任务中消耗该缓冲的return信号,从而允许任务在没有停顿的情况下生产更多的return信号。

通常,仅通过返回值进行通信的任务不需要缓冲区容量。顶层组件处理任务函数通信同步,如下图所示:



当任务函数通过流进行通信时,如果任务在其输入准备就绪之前已启动,您可能需要添加容量。在下图中,您需要向使用者任务添加启动容量:



关于向设计添加缓冲区容量的示例,请参阅以下教程:
<quartus_installdir>/hls/examples/tutorials/system_of_tasks/launch_and_collect_capacity