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!

AR# 63007

2014.4 Vivado HLS - C Synthesis hangs on dataflow when some of the variables are not able to be applied with dataflow.

Description

Vivado HLS hangs in C Synthesis.

I am receiving the following message:
 
@I [XFORM-712] Applying dataflow to function 'top' (top.cpp:59), detected/extracted 3 process function(s):
'func1'
'func2'
'Block__proc'.
@W [XFORM-713] Internal global variable 'start.V' should only be read in one process function.
Internal global variable 'start.V' has read operations in process function 'func1' (top.cpp:167:1).
Internal global variable 'start.V' has read operations in process function 'func2' (top.cpp:82).
@I [XFORM-401] Performing if-conversion on hyperblock from (top.cpp:187:6) in function 'func1'... converting 3 basic blocks.
@I [XFORM-401] Performing if-conversion on hyperblock from (top.cpp:191:16) in function 'func2'... converting 6 basic blocks.

How can I resolve this?

Solution

The pseudo code below gives an example of the code causing issues:
 

top() {
#pragma HLS dataflow 
func1()
func2()
}

func1() {
read / write global_variable
}

func2() {
read global_variable
}


The issue for dataflow checking is that the global_variable is read from 2 processes.

You can change the code to the following:
 
func1() {
read / write local_variable
write local_variable TO global_variable
}

func2() {
read global_variable
}

In Vivado 2015.1, an error will be displayed for situations where variables are read or written in both functions when dataflow is applied.
AR# 63007
Date Created 12/02/2014
Last Updated 02/16/2015
Status Active
Type General Article
Tools
  • Vivado Design Suite - 2014.3
  • Vivado Design Suite - 2014.4