优化指令pragma HLS pipeline的作用是缩短C函数或C循环之内的指令触发间隔(initial interval,II)。
在不使用该指令的情况下,函数或循环默认的指令触发间隔II为N;使用该指令后,编译器将将对II进行优化,默认将其缩短为1。用户也可以在优化指令中指定期望的II值。
下图(转自Xilinx官网)展示了使用优化指令前后设计所具有的时序。图A显示,默认情况下,循环在每次执行时消耗3个时钟周期,完成3次循环至少需要等待8个时钟周期;而图B显示使用优化指令以后,RD/CMP/WR可以并发按流水线方式执行,3次循环的触发间隔缩短为1,因此执行相同程序只需要4个时钟周期。
如果Vivado HLS编译器不能将II优化为指定值,那么会在默认情况下把II优化到最小。
指令语法
#pragma HLS pipeline II=<int> enable_flush rewind
II = <int> 设定期望的流水线程序触发间隔II;默认值为1。
enable_flush (可选)如果流水线输入不有效,则清空流水线。
rewind (可选)使多次循环执行形成流水线,多次循环之间不产生时间间隔,如下图所示。在这种情况下,循环之前的代码段将:
1)作为初始化;2)仅被执行1次;3)不能包含if-else。
示例
对foo函数进行流水线优化,设定II=1。