描述
如何实现浮点累加的PIPELINE II=1?
我正在使用下面的代码:
#define FT float
FT ybd(FT din[1024]){
FT sum=0;
LOOP:for(int i=0;i<1024;i++){
#pragma HLS PIPELINE
sum+=din[i];
}
return sum;
}
但是HLS报告了以下警告:
@W [SCHED-68] Unable to enforce a carried constraint (II = 9)
between 'fadd' operation ('sum', ybd/ybd.cpp:7) and 'fadd' operation ('sum', ybd/ybd.cpp:7).
解决方法
因为在这种情况下,fadd的延迟是11个时钟周期,你需要填满fadd内部的流水线,使其在每个时钟周期做一次加法。
XAPP599详细介绍了这一点。
下面是修改后的代码。
该函数的II是1034:
#define FT float
#define FADD_LAT 11
FT ybd(FT din[1024]){
FT sum_p[FADD_LAT];
#pragma HLS ARRAY_PARTITION variable=sum_p complete dim=1
FT sum;
loop_init: for(int i=0;i
sum_p[i] = 0;
}
sum = 0;
LOOP:for(int i=0;i<1024;i+=FADD_LAT){
#pragma HLS PIPELINE II=11 rewind
for (int j=0; j
}
loop_sum_f: for (int k=0; k
#pragma HLS UNROLL
sum += sum_p[k];
}
return sum;
}