只要在流水线输入端数据可用,流水线就会持续执行。如果没有可供处理的数据,流水线就会停滞。如下图所示,其中输入数据 valid
信号转为低电平,表示没有更多数据。只要没有可供处理的新数据,流水线就将停止操作。
图 1. 含停滞的循环流水打拍
在某些情况下,最好采用可“清空”或可“刷新”的流水线。提供 flush
选项即可执行此操作。当“刷新”流水线时,如果没有新输入可用(由流水线起始位置的数据 valid
信号来判定),流水线就会停止读取,但仍会继续处理并关闭后续每个流水线阶段,直至最终输入已处理至流水线输出为止。
Vitis HLS 实现的流水打拍的默认样式是由 config_compile
-pipeline_style
命令定义的。您可指定在设计整个流程中使用停滞流水线 (stp) 或自由运行的刷新流水线 (frp)。您也可以通过 PIPELINE 编译指示或指令搭配使用 enable_flush
选项来定义第三种类型的可刷新流水线 (flp)。该选项仅适用于编译指示或指令的特定范围,不更改 config_compile
分配的全局默认设置。
下表汇总了该工具内可用的三种类型的流水线:
名称 | 已停滞的流水线(默认) | 自由运行/可刷新的流水线 | 可刷新的流水线 |
---|---|---|---|
全局设置 |
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
|
优势 |
|
|
|
缺点 |
|
|
|
用例 |
|
|
|