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 Confusion Message Thread: Previous | Next
  • To: vince vince <vincekoskesh@xxxxxxxxxxx>
  • From: "Philipp A. Hartmann" <philipp.hartmann@xxxxxxxx>
  • Date: Wed, 09 Dec 2009 10:05:58 +0100
  • Cc: systemc-forum@xxxxxxxxxxxxxxxxx
Send Email to systemc-forum@lists.systemc.org:
Send new message
Reply to this message
Hi Vince,

On 09/12/09 05:40, vince vince wrote:
> 
> I have produced the trace file. However, I do not see the value of
> the 'app_engine_state_current' change in the trace file, and I can
> guarantee that in my code its value changes. I may not be referencing
> it correctly but I followed a tutorial online :-). Any
> recommendations would be great.

This is one of the subtle gotchas of SystemC... :)

Your 'app_engine_state_current' is of an enumeration type.
Unfortunately, enum variables can't be traced in SystemC directly
(without ugly casts, close to C++ "undefined behaviour").

You could change the type of this variable to a plain "int" (and still
assign only values of your enum to it), which should work.

> Also, I would like to trace a 'app_cache_msg' obj in the 'app_engine'
> obj. (i.e. trace an obj1 within another obj2). Would I need to pass
> the tracefile pointer to the obj1 and place a sc_trace cal for obj2?

Not necessarily.  You need to pass the trace file pointer to the
sc_trace overload, that is used to trace that obj1.

> Where would I place the sc_trace call for obj2.. is the contructor of
> obj1 sufficient?

Inside the sc_trace() call for obj1. (Here you changed the roles of obj1
and obj2, right?)

Consider the following:

sc_trace( sc_trace_file* tf
        , app_engine const & obj1
        , const std::string & name
        )
{
  // trace nested object
  sc_trace( tf, obj1.obj2, name + ".obj2" );
}

sc_trace( sc_trace_file tf*
        , app_cache_msg const & obj2
        , const std::string & name )
{
  // call sc_trace for local/primitive data
}

If you have these overloads for your 'app_eninge' and your msg class,
you can simply forward the sc_trace_file from the sc_trace call of the
outer object to the inner object.

Greetings from Oldenburg,
Philipp


-- 
Philipp A. Hartmann
Hardware/Software Design Methodology Group

OFFIS
R&D Division Transportation | FuE-Bereich Verkehr
Escherweg 2 · 26121 Oldenburg · Germany
Phone/Fax: +49-441-9722-420/282 · PGP: 0x9161A5C0 · http://www.offis.de/

Attachment: signature.asc
Description: OpenPGP digital signature


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