本文主要是介绍Unable to schedule 'load' operation,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在 Vivado HLS中开发IP核时使用#pragma HLS PIPELINE II=1时出现该warring,该条warring的下一条log显示尽管目标II=1 (II就是initiation interval),也就是想要每隔一个时钟周期就开始一个循环,但是结果却只能隔两个时钟周期,没有达到想要的目标。
原因:程序中每个循环体进行了多次读取数据
解决方法:修改程序使得每个循环体只进行一次输入
参考:Xilinx UG902
例子:
原来的:
dout_t array_mem_bottleneck(din_t mem[N]) {
dout_t sum=0;
int i;
SUM_LOOP:for(i=2;i<N;++i)
sum += mem[i] + mem[i-1] + mem[i-2];
return sum;
}
修改后的:
dout_t array_mem_perform(din_t mem[N]) {
din_t tmp0, tmp1, tmp2;
dout_t sum=0;
int i;
tmp0 = mem[0];
tmp1 = mem[1];
SUM_LOOP:for (i = 2; i < N; i++) {
tmp2 = mem[i];
sum += tmp2 + tmp1 + tmp0;
tmp0 = tmp1;
tmp1 = tmp2;
}
return sum;
}
这篇关于Unable to schedule 'load' operation的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!