UPGRADE YOUR BROWSER

We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome, Firefox, Internet Explorer 11, Safari. Thank you!

取消
显示结果 
搜索替代 
您的意思是: 
Participant yaoyinqi
Participant
673 次查看
注册日期: ‎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 个已接受解答

已接受的解答
Moderator
Moderator
422 次查看
注册日期: ‎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 条回复
Moderator
Moderator
633 次查看
注册日期: ‎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 项奖励
Participant yaoyinqi
Participant
629 次查看
注册日期: ‎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 项奖励
Moderator
Moderator
535 次查看
注册日期: ‎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
Participant yaoyinqi
Participant
510 次查看
注册日期: ‎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 项奖励
Moderator
Moderator
478 次查看
注册日期: ‎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 项奖励
Participant yaoyinqi
Participant
440 次查看
注册日期: ‎06-21-2018

回复: HLS loop_tripcount影响综合结果

转到解答

Hi,@wenchen

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

0 项奖励
Moderator
Moderator
423 次查看
注册日期: ‎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.
-------------------------------------------------------------------------
如果提供的信息能解决您的问题,请标记为“接受为解决方案”。
如果您认为帖子有帮助,请点击“奖励”。谢谢!
-------------------------------------------------------------------------------------------------
Participant yaoyinqi
Participant
414 次查看
注册日期: ‎06-21-2018

回复: HLS loop_tripcount影响综合结果

转到解答

Hi,@wenchen

谢谢您的解答!

0 项奖励