Vivado HLS - 如何实现浮点累加的PIPELINE II=1?

描述
如何实现浮点累加的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 #pragma HLS UNROLL
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 sum_p[j]+=din[j+i];
}

loop_sum_f: for (int k=0; k {
#pragma HLS UNROLL
sum += sum_p[k];
}
return sum;
}

最新文章

最新文章