Skip Nav
Home » Forums » SystemC Forum

Icon - KMLM List KMLM List

View email archives for the history of this mailing list.

List Home All Archives Dates Threads Authors Subjects
systemc-forum - Re: [systemc-forum] sc_trace for pointers Message Thread: Previous | Next
  • To: "Philipp A. Hartmann" <philipp.hartmann@xxxxxxxx>
  • From: Johnnie Chan <johnnie@xxxxxxxxxxxxxxx>
  • Date: Tue, 12 Jul 2011 08:53:06 -0700
  • Cc: systemc-forum@xxxxxxxxxxxxxxxxx
Send Email to systemc-forum@lists.systemc.org:
Send new message
Reply to this message
Many thanks for this suggestion, this is exactly what I needed!

On 7/12/11 2:02 AM, Philipp A. Hartmann wrote:
Johnnie,

On 12/07/11 01:20, Johnnie Chan wrote:
I'm seeking help for a way to overload the sc_trace function for
pointers. Is this possible at all without modifying the System C
library?
Well, it is kind of possible with a helper method process, translating
your pointee to a "referencable" supported type (e.g. sc_lv_base/sc_lv<N>).

SC_METHOD(update_id);
   sensitive<<  v_in; // (1)

sc_lv<42>  id_val; // use proper length

//...
void update_id() {
   if( v_in.read() )
     id_val = v_in.read()->id; // (2)
   else
     id_val = sc_lv<42>(); // set to "X..."
}

But this approach has still two limitations you need to solve.

(1) you need a hook to trigger the helper process on each pointer change
(NULL<->object).  This can be solved e.g. by putting the pointer into a
signal (to which your helper process is then sensitive).

(2) you may need to trigger the process on changes within the pointee as
well (i.e. your v->id changes, without a change to v itself).  The
correct (and maybe even existence of a) solution to this depends on your
application and the access pattern to the pointees.

Usually, it is better to restructure your model to avoid the need to
trace arbitrary pointers, e.g. by copying the interesting parts of the
pointees to "real" traceable variables.

Greetings from Oldenburg,
   Philipp

Basically I'd like to do something like this (pseudo code since
this doesn't work):

sc_trace(sc_trace_file *tf, Class *v, const string&NAME)
{
     if(v == NULL)
     {
         sc_trace(tf, "X", NAME);
     }
     else
     {
         sc_trace(tf, v->id, NAME);
     }
}

this of course doesn't work since from my understanding, SystemC simply
references the original object, and therefore this example code would
only get called once during the elaboration phase. I see in the source
of vcd_trace_file.cpp where I'd need to overload the trace member
function but I'd like to avoid editing the systemc library. Any
suggestions?

Thanks.


By Date: Previous | Next Current Thread By Thread: Previous | Next