取消
显示结果 
搜索替代 
您的意思是: 
Highlighted
Explorer
Explorer
1,696 次查看
注册日期: ‎06-21-2018

HLS loop_tripcount影响综合结果

转到解答

Hi,ALL

根据ug902,LOOP_TRIPCOUNT :Used for loops which have variables bounds. Provides an
estimate for the loop iteration count. This has no impact on synthesis, only on reporting.

按照这个说法,loop_tripcount只影响报告,不影响结果。但实际操作过程中,我发现是否加loop_tripcount影响综合工具对loop dependency的判断。请问这是什么原因?

代码见附件。

如果循环L1和L2加LOOP_TRIPCOUNT,II=1;

如果循环L1和L2不加LOOP_TRIPCOUNT,II=2。而且会报如下告警:

WARNING: [SCHED 204-68] Unable to enforce a carried dependence constraint (II = 1, distance = 1, offset = 1)
between 'store' operation (top.c:54) of variable 'line_buffer_2_load', top.c:54 on array 'line_buffer_1' and 'load'
operation ('line_buffer_1_load', top.c:54) on array 'line_buffer_1'. prj:solution3 Dec 12, 2018 11:20:17 AM

标记 (2)
0 项奖励
1 个已接受解答

已接受的解答
Highlighted
Moderator
Moderator
1,445 次查看
注册日期: ‎05-27-2018

回复: HLS loop_tripcount影响综合结果

转到解答

Hi @yaoyinqi

    在2018.3上跑得到的结果一样,如果把line_buffer 做二维ARRAY_PARTITION,那么dependency 警告就消失了,但是ii依然等于2.

#pragma HLS ARRAY_PARTITION variable=line_buffer complete dim=2 

    ii=2 的原因应该是如果不加loop_tripcount指令限制范围,Trip Count=0 ~ 1073676289 范围太大,软件为了时序收敛的要求而加大了II,但是导致依赖警告应该是II=2时,RAM的读取有关,array 二维全部划分成寄存器就没有依赖警告了。

    所以,建议加上loop_tripcount指令,还有其他问题吗?

 

谢谢

Wen

 

-------------------------------------------------------------------------
Don’t forget to reply, kudo, and accept as solution.
-------------------------------------------------------------------------
如果提供的信息能解决您的问题,请标记为“接受为解决方案”。
如果您认为帖子有帮助,请点击“奖励”。谢谢!
-------------------------------------------------------------------------------------------------

在原帖中查看解决方案

8 条回复8
Highlighted
Moderator
Moderator
1,656 次查看
注册日期: ‎05-27-2018

回复: HLS loop_tripcount影响综合结果

转到解答

Hi @yaoyinqi

     1、 看一下这个链接,里面有这样的说明:

      Vivado® HLS reports the total latency of each loop, which is the number of clock cycles to execute all iterations of the loop. The loop latency is therefore a function of the number of loop iterations, or tripcount.

      Vivado HLS会报告每个循环的总延迟,即执行循环所有迭代的时钟周期数。因此,循环延迟是循环迭代次数或tripcount的函数。所以说,工具在向你报告循环的总延迟,这和你设定的tripcount参数是相关的。

      loop_tripcount这个指令的使用意义在于,对于某些无法确定tripcount,并且延迟未知的循环,使用这个指令通过指定循环的最小和最大迭代,让工具分析循环延迟如何影响报告中的总设计延迟,并帮助你确定设计最适合的优化方式。

     2、在你的代码中,正好符合tripcount是输入变量所以循环延迟未知的情况。

     3、我复现了一下你提供的代码,按照如下方式设置II=2 没有发现您的warning, 方便贴出截图或者更详细地描述一下吗?

     

L1:
for(r=0;r<height;r++)
	{
#pragma HLS LOOP_TRIPCOUNT min=600 max=1080 avg=720
		L2:for(c=0;c<width;c++){
#pragma HLS PIPELINE II=2
#pragma HLS LOOP_TRIPCOUNT min=800 max=1920 avg=1280			//
			for(int i=0;i<2;i++)

 

-------------------------------------------------------------------------
Don’t forget to reply, kudo, and accept as solution.
-------------------------------------------------------------------------
如果提供的信息能解决您的问题,请标记为“接受为解决方案”。
如果您认为帖子有帮助,请点击“奖励”。谢谢!
-------------------------------------------------------------------------------------------------
0 项奖励
Highlighted
Explorer
Explorer
1,652 次查看
注册日期: ‎06-21-2018

回复: HLS loop_tripcount影响综合结果

转到解答

Hi,@wenchen

可能是我描述的不够清楚。

因为我的目标是希望II=1,所以#pragma HLS PIPELINE这条指令一直是默认II=1.

一开始我没有给L1和L2加tripcount,综合结果显示II=2,并有dependency告警。

然后,我给L1和L2加上tripcount,综合结果显示II=1,并且dependency告警消失。

0 项奖励
Highlighted
Moderator
Moderator
1,558 次查看
注册日期: ‎05-27-2018

回复: HLS loop_tripcount影响综合结果

转到解答

Hi @yaoyinqi

    参考一下这个Post,我的理解是对数组访问的dependency check仅基于循环索引。 如果你确定这是一个错误的依赖,可以使用 以下directive 解除依赖,前提是确保解除依赖,在循环迭代和读取的过程中不会因为 interval 的大小选择而操作失误。具体参考 UG902 page:147-153,有对你这个警告的详细解答方式描述。

    至于你给L1和L2加上tripcount,综合结果显示II=1,并且dependency告警消失,我猜想原因有可能是你需要最终确定loop_tripcount的大小。毕竟这个loop_tripcount指令的目的是协助你更好的选择优化方式。

  

#pragma HLS dependence variable=line_buffer inter false

谢谢,

 Wen

 

-------------------------------------------------------------------------
Don’t forget to reply, kudo, and accept as solution.
-------------------------------------------------------------------------
如果提供的信息能解决您的问题,请标记为“接受为解决方案”。
如果您认为帖子有帮助,请点击“奖励”。谢谢!
-------------------------------------------------------------------------------------------------
0 项奖励
Highlighted
Explorer
Explorer
1,533 次查看
注册日期: ‎06-21-2018

回复: HLS loop_tripcount影响综合结果

转到解答

Hi,@wenchen

谢谢您的解答!对于您说的:“我猜想原因有可能是你需要最终确定loop_tripcount的大小。毕竟这个loop_tripcount指令的目的是协助你更好的循环优化方式”,这个是否有相关手册作为理论依据?

我在ug902里,看到有这么一句:“To help with the design analysis that drives optimization, the
set_directive_loop_tripcount command allows you to specify minimum and
maximum tripcounts for a loop. ”

但在ug902里,又明确写着:“Used for loops which have variables bounds. Provides an
estimate for the loop iteration count. This has no impact on
synthesis, only on reporting.”

总感觉有点矛盾,可能是我太过于较真了。

0 项奖励
Highlighted
Moderator
Moderator
1,501 次查看
注册日期: ‎05-27-2018

回复: HLS loop_tripcount影响综合结果

转到解答

Hi @yaoyinqi

      目前在HLS 2018.2/2017.4上复现了这个问题,就是删除loop_tripcount的指令导致了dependency的报警问题我们也在寻找原因,下周会用2018.3测试一下。

      最终IP核应用于整个设计后综合产生的延迟是与你给定的输入变量有关,HLS的综合报告只是基于给定的tripcount范围,给客户提供一个可参考的延迟范围协助优化设计,这两句话应该不矛盾。

ii=2.png

谢谢,

Wen

-------------------------------------------------------------------------
Don’t forget to reply, kudo, and accept as solution.
-------------------------------------------------------------------------
如果提供的信息能解决您的问题,请标记为“接受为解决方案”。
如果您认为帖子有帮助,请点击“奖励”。谢谢!
-------------------------------------------------------------------------------------------------
0 项奖励
Highlighted
Explorer
Explorer
1,463 次查看
注册日期: ‎06-21-2018

回复: HLS loop_tripcount影响综合结果

转到解答

Hi,@wenchen

谢谢您能帮我复现这个问题,我在2018.2上同样可以复现这个问题,2018.3上我没有尝试过。如果您有最新的结果,麻烦反馈给我,Thank you!

0 项奖励
Highlighted
Moderator
Moderator
1,446 次查看
注册日期: ‎05-27-2018

回复: HLS loop_tripcount影响综合结果

转到解答

Hi @yaoyinqi

    在2018.3上跑得到的结果一样,如果把line_buffer 做二维ARRAY_PARTITION,那么dependency 警告就消失了,但是ii依然等于2.

#pragma HLS ARRAY_PARTITION variable=line_buffer complete dim=2 

    ii=2 的原因应该是如果不加loop_tripcount指令限制范围,Trip Count=0 ~ 1073676289 范围太大,软件为了时序收敛的要求而加大了II,但是导致依赖警告应该是II=2时,RAM的读取有关,array 二维全部划分成寄存器就没有依赖警告了。

    所以,建议加上loop_tripcount指令,还有其他问题吗?

 

谢谢

Wen

 

-------------------------------------------------------------------------
Don’t forget to reply, kudo, and accept as solution.
-------------------------------------------------------------------------
如果提供的信息能解决您的问题,请标记为“接受为解决方案”。
如果您认为帖子有帮助,请点击“奖励”。谢谢!
-------------------------------------------------------------------------------------------------

在原帖中查看解决方案

Highlighted
Explorer
Explorer
1,437 次查看
注册日期: ‎06-21-2018

回复: HLS loop_tripcount影响综合结果

转到解答

Hi,@wenchen

谢谢您的解答!

0 项奖励