刷新流水线 - 2021.2 Chinese

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

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

只要在流水线输入端数据可用,流水线就会持续执行。如果没有可供处理的数据,流水线就会停滞。如下图所示,其中输入数据 valid 信号转为低电平,表示没有更多数据。只要没有可供处理的新数据,流水线就将停止操作。

图 1. 含停滞的循环流水打拍

在某些情况下,最好采用可“清空”或可“刷新”的流水线。提供 flush 选项即可执行此操作。当“刷新”流水线时,如果没有新输入可用(由流水线起始位置的数据 valid 信号来判定),流水线就会停止读取,但仍会继续处理并关闭后续每个流水线阶段,直至最终输入已处理至流水线输出为止。

Vitis HLS 实现的流水打拍的默认样式是由 config_compile -pipeline_style 命令定义的。您可指定在设计整个流程中使用停滞流水线 (stp) 或自由运行的刷新流水线 (frp)。您也可以通过 PIPELINE 编译指示或指令搭配使用 enable_flush 选项来定义第三种类型的可刷新流水线 (flp)。该选项仅适用于编译指示或指令的特定范围,不更改 config_compile 分配的全局默认设置。

下表汇总了该工具内可用的三种类型的流水线:
表 1. 流水线类型
名称 已停滞的流水线(默认) 自由运行/可刷新的流水线 可刷新的流水线
全局设置 config_compile -pipeline_style stp(默认) config_compile -pipeline_style frp config_compile -pipeline_style flp
编译指示/指令 #HLS pragma pipeline style=stp #HLS pragma pipeline style=frp #HLS pragma pipeline style=flp
优势
  • 默认流水线。无使用约束。
  • 通常总体资源利用率最低。
  • 时序更好,因为
    • 扇出更少
    • 流水线控制逻辑更简单
  • 可刷新
  • 可刷新
缺点
  • 不可刷新,因此可能:
    • 导致数据流中出现更多死锁
    • 如果缺少下一次迭代的输入,则会阻止交付计算所得的输出
  • 由于流水线控制上扇出过高导致时序问题
  • 由于输出上添加的 FIFO,资源增加量中等
  • 使用约束:
    • 主要用于数据流内部进程
    • 不支持 M-AXI
  • 可采用较大的 II
  • 由于共享更少 (II>1),资源利用率更大
  • 使用约束:
    • 仅限函数流水打拍
用例
  • 如果流水线控制上不存在因扇出过高而导致的时序问题,则可使用此项
  • 如无需可刷新流水线(如不存在因停滞而导致的性能或死锁问题),则可使用此项
  • 如果由于从流水线控制到寄存器使能的扇出,而需要更好的时序,则可使用此项
  • 如需可刷新的流水线以换取更好的性能或避免死锁,则可使用此项
  • 如需可刷新的流水线以换取更好的性能或避免死锁,则可使用此项