RE: sc_is_running

From: Jeremiassen, Tor <tor@ti.com>
Date: Wed Mar 31 2010 - 09:27:34 PDT

Philipp,

I like it, and it allows us to enrich the status a little more. I would suggest if we do this, that we add to the status the timing points of the callbacks, such that maybe there's:

NOT_STARTED, // before calling sc_start
ELABORATION, // up to the first call to end_of_elaboration
END_OF_ELABORATION,
RUNNING,
PAUSED,
STOPPED,

This would allow a piece of code that is called during different times of the simulation to adjust its behavior to the current simulator state.

Or is it overkill?

Best regards,

Tor Jeremiassen

---
Tor Jeremiassen, Ph.D.
Simulation and Modeling CTO
SDO Foundational Tools
Texas Instruments                    Ph:    281 274 3483
P.O. Box 1443, MS 730                Fax:   281 274 2703
Houston, TX 77251-1443               Email: tor@ti.com
|-----Original Message-----
|From: Philipp A. Hartmann [mailto:philipp.hartmann@offis.de]
|Sent: Wednesday, March 31, 2010 11:21 AM
|To: john.aynsley@doulos.com
|Cc: Jeremiassen, Tor; Bishnupriya Bhattacharya; systemc-p1666-
|technical@eda.org
|Subject: Re: sc_is_running
|
|All,
|
|  instead of adding sc_is_paused and having to consider all different
|combinations, wouldn't it make sense to add a new functionality for sth.
|like sc_sim_status?  This way, the user could more easily identify the
|correct state of the scheduler.
|
|I've attached a small PoC implementation for such a feature (always
|returning PAUSED for simplicity) based on a small wrapper around an enum
|with the following states:
|
|class sc_sim_status
|{
|  // ...
|  enum status
|  {
|    NOT_STARTED = 0,
|    RUNNING     = 1,
|    PAUSED      = 2,
|    STOPPED     = 4
|  };
|  // ...
|};
|
|With this, you can do things like:
|
|// backwards compatibility
|sc_assert( sc_is_running() == sc_sim_status().to_bool() )
|
|if( sc_sim_status() == sc_sim_status::PAUSED )
|  // ...
|
|  Of course, we could add a global function: sc_get_status()
|which directly returns global enum values like SC_PAUSED and have
|sc_is_running for backwards compatibility to return true, iff the
|simulation has been started and is not yet stopped via sc_stop().
|
|Regarding the different return values, these could be (which covers
|John's nice idea of a paused simulation between calls to sc_start):
|
|NOT_STARTED // until end_of_elaboration,
|PAUSED      // within sc_main, after return from sc_start
|RUNNING     // within user processes
|STOPPED     // after call to sc_stop (and during end_of_simulation)
|
|Comments?
|
|Greetings from Oldenburg,
|Philipp
|
|On 31/03/10 16:12, john.aynsley@doulos.com wrote:
|> Tor,
|>
|> I can see the sense in having sc_is_paused() reflect whether the
|scheduler
|> can resume.
|>
|> As things stand,  sc_is_running() == false implies that either simulation
|> has not yet started, or sc_stop() has been called.
|>
|> Following sc_stop() the scheduler cannot resume, so I guess
|sc_is_paused()
|> == false ? That would make sense to me.
|> But before the start of simulation ?
|>
|> John A
|>
|>
|>
|>
|> From:
|> "Jeremiassen, Tor" <tor@ti.com>
|> To:
|> "john.aynsley@doulos.com" <john.aynsley@doulos.com>
|> Cc:
|> Bishnupriya Bhattacharya <bpriya@cadence.com>, "Philipp A. Hartmann"
|> <philipp.hartmann@offis.de>, "systemc-p1666-technical@eda.org"
|> <systemc-p1666-technical@eda.org>
|> Date:
|> 31/03/2010 14:26
|> Subject:
|> RE: sc_is_running
|>
|>
|>
|> John,
|>
|> Just a quick issue. Should sc_is_paused() return true if sc_is_running()
|> is false? I don?t think so. I think sc_is_paused() should reflect whether
|> the scheduler can resume again or not.
|>
|>
|> Tor
|>
|> ---
|> Tor Jeremiassen, Ph.D.
|> Simulation and Modeling CTO
|> SDO Foundational Tools
|> Texas Instruments                    Ph:    281 274 3483
|> P.O. Box 1443, MS 730                Fax:   281 274 2703
|> Houston, TX 77251-1443               Email: tor@ti.com
|>
|> From: john.aynsley@doulos.com [mailto:john.aynsley@doulos.com]
|> Sent: Wednesday, March 31, 2010 6:41 AM
|> To: Jeremiassen, Tor
|> Cc: Bishnupriya Bhattacharya; Philipp A. Hartmann;
|> systemc-p1666-technical@eda.org
|> Subject: RE: sc_is_running
|>
|> I agree with Tor that, as presently defined, sc_is_running() indicates
|> whether the simulation has terminated (effectively, whether sc_stop() has
|> been called).  At present, sc_is_running() stays == true between calls to
|> sc_start(), and even following return from the final call to sc_start()
|> provided sc_stop() has not been called.
|>
|> I suggest we should not re-define sc_is_running() at this point, even if
|> it is arguably a misnomer.
|>
|> If we were to add sc_pause(), then sc_is_paused() could be defined and
|> could be orthogonal to sc_is_running(). sc_is_paused() would return true
|> between a call to sc_pause() and a subsequent call to sc_start(), and
|only
|> then.
|>
|> Another idea. How about we define sc_start() and sc_start(time) as having
|> an implicit sc_pause() at the end? Then sc_is_paused() would always
|return
|> false when called from a running SystemC process, but would always return
|> true when called directly from sc_main. Just a thought.
|>
|> Cheers,
|>
|> John A
|>
|>
|>
|> From:
|> "Jeremiassen, Tor" <tor@ti.com>
|> To:
|> "john.aynsley@doulos.com" <john.aynsley@doulos.com>
|> Cc:
|> Bishnupriya Bhattacharya <bpriya@cadence.com>, "Philipp A. Hartmann"
|> <philipp.hartmann@offis.de>, "systemc-p1666-technical@eda.org"
|> <systemc-p1666-technical@eda.org>
|> Date:
|> 30/03/2010 17:57
|> Subject:
|> RE: sc_is_running
|>
|>
|>
|>
|>
|> Thinking about this, regardless of the eventual fate of sc_pause(), there
|> seem to be two pieces of information that we want to provide:
|>
|> - whether the simulation has terminated or not
|> And
|> - whether the scheduler is currently active (running)
|>
|> The LRM currently specifies that sc_is_running() answers the second,
|> though I claim since it returns true following the return of
|> sc_start(sc_time) it really answers the first. I would propose that both
|> pieces of information should be made available.
|>
|>
|> Best regards,
|>
|> Tor Jeremiassen
|>
|> ---
|> Tor Jeremiassen, Ph.D.
|> Simulation and Modeling CTO
|> SDO Foundational Tools
|> Texas Instruments                    Ph:    281 274 3483
|> P.O. Box 1443, MS 730                Fax:   281 274 2703
|> Houston, TX 77251-1443               Email: tor@ti.com
|>
|>
|>
|> From: john.aynsley@doulos.com [mailto:john.aynsley@doulos.com]
|> Sent: Tuesday, March 30, 2010 11:27 AM
|> To: Jeremiassen, Tor
|> Cc: Bishnupriya Bhattacharya; Philipp A. Hartmann;
|> systemc-p1666-technical@eda.org
|> Subject: RE: sc_is_running
|>
|> So, as things stand, on return from sc_start(10, SC_NS) without an
|> sc_stop(),  sc_is_running() would == true, or with an sc_stop(),
|> sc_is_running() would == false.
|>
|> If we agreed to add sc_pause(), then I would propose that sc_pause()
|> should not affect the value returned from sc_is_running(), i.e. a paused
|> simulation is still running. On this other hand, we might want to add a
|> new function sc_is_paused() that would return true in this circumstance?
|>
|> Just my two pence.
|>
|> John A
|>
|> From:
|> "Jeremiassen, Tor" <tor@ti.com>
|> To:
|> Bishnupriya Bhattacharya <bpriya@cadence.com>, "Philipp A. Hartmann"
|> <philipp.hartmann@offis.de>, "john.aynsley@doulos.com"
|> <john.aynsley@doulos.com>
|> Cc:
|> "Michael (Mac) McNamara" <mcnamara@cadence.com>,
|> "systemc-p1666-technical@eda.org" <systemc-p1666-technical@eda.org>
|> Date:
|> 30/03/2010 16:41
|> Subject:
|> RE: sc_is_running
|>
|>
|>
|>
|>
|>
|>
|>
|> Regarding the semantics of sc_is_running, I would like to bring up one
|> item that I proposed a few weeks back, and that is the ability to pause
|> the simulation and return from sc_start() in a restartable manner.
|> (Whether this should be done by allowing a resumption of simulation
|> following an sc_stop() or if a separate function, such as sc_pause(),
|> should be added is a slightly separate manner). However, the issue of
|what
|> sc_is_running() should return when the simulation is "paused" then
|becomes
|> an issue. I guess this is still an issue currently if sc_start(sc_time )
|> is called and then returns. The scheduler is not running, but is in a
|> sense paused and restartable (unlike a return from sc_start() due to
|> sc_stop()).
|>
|> Should sc_is_running() return true only if the scheduler is active, or
|> until the simulation is terminating? Should there be a separate call that
|> indicates if the simulation is suspended but restartable (i.e., the
|> scheduler is not running, but the simulation has not terminated).
|>
|> Best regards,
|>
|> Tor Jeremiassen
|>
|
|[snip]
|
|--
|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/
-- 
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.
Received on Wed Mar 31 09:27:56 2010

This archive was generated by hypermail 2.1.8 : Wed Mar 31 2010 - 09:27:56 PDT