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!

cancel
Showing results for 
Search instead for 
Did you mean: 
Observer witxilinx
Observer
317 Views
Registered: ‎12-26-2018

[Vivado HLS Co-simulation] Waveform signals never change

I have been trying to run the C/RTL co-simulation of my design which is written in C using Vivado HLS. Below is an example of the waveform during the co-simulation. From the figure, all signal values do not seem to change at all (except clk and a few others), and for this reason (I believe) the co-simulation never finish even I run for a day.

Question

The top module is defined as below. Here, I would like to see the value of variables such as load_count, compute_count, store_count in the co-simulation waveform. How would I find signals of these variables? I can't find any of these values in either of the 3 groups of waveform signal:

  • AESL_inst_top
  • Design Top Signal
  • Test bench Signals

 

void top(
uint32_t inst_count,
volatile vec_T * inst_buffer,
volatile vec_T *...) {

// pragmas --------------------------------------------------------
#pragma HLS INTERFACE s_axilite port=insn_count bundle=CONTROL_BUS
#pragma HLS INTERFACE m_axi depth=7 port=inst_buffer offset=slave bundle=ins_port

// Variables ------------------------------------------------------ hls::stream<vec_T> load_queue; hls::stream<vec_T> compute_queue; hls::stream<vec_T> store_queue; #pragma HLS stream variable=load_queue depth=10 dim=1 #pragma HLS stream variable=compute_queue depth=10 dim=1 #pragma HLS stream variable=store_queue depth=10 dim=1 ... // Load instructions inst_buffer from into load/compute/store queue ... // Main loop ------------------------------------------------------ while (true) { while (load_module is not waiting for other module) { load_module(load_queue, ...);
load_count++; ... } while (compute_module is not waiting for other module) { compute_module(compute_queue, ...);
compute_count++; ... } while (store_module is not waiting on other module) { store_module(store_queue, ...);
store_count++; ... } ... // Break after executing all instructions } }

 

 

Screenshot from 2019-06-14 22-07-50.png

 

0 Kudos
2 Replies
Xilinx Employee
Xilinx Employee
271 Views
Registered: ‎06-16-2017

Re: [Vivado HLS Co-simulation] Waveform signals never change

Hello,

I believe you are looking for these signals from the default ones that are already in the view/waveform panel. If so, use the search bar in the name section (2nd column in your photo) for the signals you're looking for and add them to the view waveform panel by dragging them.

 

As a side note, I see that you're using while loops. It is recommended to convert while loops to for loops if you want to achieve coarse grain pipelining across the loops. To do so you need to -

1. Convert while to for

2. Encapsulate each loop in a sub-function

3. Use #pragma HLS dataflow on top of subfunction

 

For more details on this refer to dataflow optimization in the latest SDAccel optimization user guide :
https://www.xilinx.com/html_docs/xilinx2019_1/sdaccel_doc/zgr1534452172723.html

 

Mark kudos if this post was useful to you.

0 Kudos
Observer witxilinx
Observer
240 Views
Registered: ‎12-26-2018

Re: [Vivado HLS Co-simulation] Waveform signals never change

@siddhart The while loop is unavoidable. I cannot convert the while loop to for loop because the above C code describe the execution of an instruction stream, which can be executed in an out-of-oder fashion, exactly as in the above code.

0 Kudos