Jump to content

Recommended Posts

Hi all, 

I have a systemC-tlm code that uses SC_THREAD( ) to implement parallel modules. I am working on latency analysis and hence included a few wait statements in each of the SC_THREAD functions.

It was working fine for a long time, until yesterday. The SC_THREAD functions with wait(time, SC_NS)  hang exactly at the wait statement. I tried debugging into the wait function, and found that the code throws an SC_REPORT_ERROR in wait( ) function in sc_wait.cpp. I am not sure if that error is caught, because I do not see any error in my console output.

Does anyone have a clue on why I am seeing this behavior?    

Share this post

Link to post
Share on other sites

I kind of work on proprietary code. But here is an example of what I have

//## test.h

#include "systemc.h"
#include "tlm.h"

class test: public sc_module{

	// some variables
	sc_port <int> output_port;
    tlm::tlm_fifo<int> input_fifo;
	void command_initiator();

//## test.cpp
#include "test.h"
void test:test(){
	// initialize the variables
void test:command_initiator(){
      // receive command
      if(!input_fifo.nb_can_get) wait(input_fifo.ok_to_get());
      cmd = input_fifo.get();
      // do some processing on the command
      // put the command in the outputport 
      if (! output_port->nb_can_put() ) wait(output_port->ok_to_put);
      // this is where the code hangs
      wait(4, SC_NS)

The code hangs in command initiator function at the wait statement 


Share this post

Link to post
Share on other sites

Generally speaking, it would be a bug if the whole SystemC simulation is hanging inside a timed wait.  I suspect that you have in face a separate (set of) process(es) that are running indefinitely without advancing SystemC time (beyond these 4 ns).

You can try to find the culprit by setting a breakpoint in a debugger on the affected line above, continue the simulation for a bit and then break, checking in which SystemC process you end up.  Maybe you are missing a similar "wait" on the consumer side?

Hope that helps,

Share this post

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now