I'm trying to use the data flow directive but it's giving me numerous issues. I've been able to work around some but I've run into one which I can't proceed. I have a design that uses streams to pass data from one function to the next which does seem to behave as expected. In one case I have a branching set of streams, where one set of streams is copied into two sets and each set passed to a different consumer function.
for(uint8 i = 0; i < numStreams; i++)
sample = parallelStreamIn[i].read();
That was synthesizing but I noticed the loop wasn't unrolling, so I unrolled it. Now I get an error saying one of those streams doesn't have a consumer function. C-Simulation disagrees, so I'm not sure what's happening here.
Also is it possible to tell HLS that it doesn't need to shift certain things between tasks? It ends up moving a lot of data that is effectively static after I initialize it (read from memory).
I managed to work around my issue by changing the order of some inner/outer loops. I'm not sure why this addressed it, so I suspect there is something I don't know. I do have a more general question about dataflow. I was having a problem where my top level function's ap_idle port would drop low as soon as I came out of reset. If I strobe start the same cycle it comes out of reset the design works. However this isn't going to happen typically.I saw a post where someone wrapped their function in another function to resolve it which also worked for me. However I can't use the dataflow directive on this wrapper or I run into the same issue. As a result I can't "call" my function while it's already running. ap_ready is only asserted at the very end (ap_idle returns high the next cycle). Thoughts?