解决HLS中的关键路径

在HLS中,有如下语句
ap_int<18> offset=(trr+row*2)SIZE+(tcc+col2)+(ti+tii)SIZESIZE;
vivado HLS综合时警告显示该语句为关键路径,时钟周期超出,解决方法如下

ap_int<18> Reg(ap_int<18> in){
#pragma HLS INTERFACE register port=return
#pragma HLS INLINE off
#pragma HLS PIPELINE
	return in;
}

定义上述函数,以插入寄存器
然后将该语句改写为

ap_int<18> r=Reg((ap_int<18>)(trr+row*2));
ap_int<18> c=Reg((ap_int<18>)(tcc+2*col));
ap_int<18> s=Reg((ap_int<18>)(SIZE*SIZE));
ap_int<18> x_y=Reg((ap_int<18>)(r*SIZE+c));
ap_int<18> n_d=Reg((ap_int<18>)(ti+tii)*s);
ap_int<18> offset=x_y+n_d;

综合后警告消失
再看看vivado HLS是如何schedule的
解决HLS中的关键路径_第1张图片
解决HLS中的关键路径_第2张图片
第一张图表明r,c,s同时计算,第二张图表明x_y,n_d同时计算,而offset最后计算,从而实现了将许多操作分配到不同的时钟周期,提高了系统时钟频率。

你可能感兴趣的:(解决HLS中的关键路径)