RE: sc_is_running

From: <john.aynsley@doulos.com>
Date: Wed Mar 31 2010 - 07:12:22 PDT

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
---
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: Bishnupriya Bhattacharya [mailto:bpriya@cadence.com]
|Sent: Tuesday, March 30, 2010 4:18 AM
|To: Philipp A. Hartmann; john.aynsley@doulos.com
|Cc: Michael (Mac) McNamara; systemc-p1666-technical@eda.org; Jeremiassen,
|Tor
|Subject: RE: sc_is_running
|
|I agree with Philip. The LRM should reword itself along the lines of:
|
|"If simulation has been explicitly ended (either by calling sc_stop() or 
by
|any other means available to an implementation), sc_is_running() shall
|return false when called from destructors of objects in the module
|hierarchy. If simulation has not been explicitly ended, ......"
|
|So the current reference inplementation behavior will be legal according 
to
|the LRM.
|
|Thanks,
|-Bishnupriya
|
|
|
|-----Original Message-----
|From: Philipp A. Hartmann [mailto:philipp.hartmann@offis.de]
|Sent: Tuesday, March 30, 2010 2:06 PM
|To: john.aynsley@doulos.com
|Cc: Michael (Mac) McNamara; systemc-p1666-technical@eda.org; Jeremiassen,
|Tor; Bishnupriya Bhattacharya
|Subject: Re: sc_is_running
|
|John, All,
|
|sorry for jumping in that late.  Just as brief comments:
|
|  I think we need to fix the LRM that an implementation does NOT have to
|return false from sc_is_running during the destructor calls.  I don't see 
a
|possible implementation for this (at least in an sc_main/sc_start based
|environment).
|
|  I think, dropping this requirement should be enough, since in case of
|called end_of_simulation callbacks, it would even return false during the
|destruction.
|
|  There's no problem in calling sc_stop from within sc_main after the 
last
|call to sc_start, right?  (at least in practice)  This is an easy 
solution
|for the user to ensure calls to end_of_simulation.  But I don't see how 
to
|automate this without breaking existing models.
|
|Greetings from Oldenburg,
|Philipp
|
|On 26/03/10 16:59, john.aynsley@doulos.com wrote:
|> All,
|>
|> The LRM currently says that sc_is_running shall return:
|>
|> false during elaboration
|> false from start_of_simulation
|> true during initialization
|> true while the scheduler is running (during simulation) false from
|> end_of_simulation false from the destructor of any object in the
|> module hierarchy
|>
|> The LRM does not directly relate the behavior of sc_is_running to
|> sc_stop
|>
|> The LRM says that sc_stop causes the scheduler to halt, which in turn
|> causes end_of_simulation to be called
|>
|> The LRM says nothing about what happens if sc_stop is NOT called: by
|> inference, simulation just "runs off the end", but sc_is_running is
|> required to be false in the module destructors
|>
|> The LRM says that a simulator that does not make use of sc_start shall
|> call end_of_simulation "at the very end of simulation" regardless of
|> whether sc_stop is called. The OSCI simulator, does make use of
|> sc_start, but does not call end_of_simulation unless sc_stop has been
|> called (and is therefore 1666-compliant).
|>
|> If sc_stop is called, the OSCI sim behaves as expected.
|> If sc_stop is not called, the OSCI sim has sc_is_running() == true on
|> return from sc_start() and in the destructors, CONTRADICTING the LRM
|>
|> As Tor says, sc_is_running() is indeed true up until the
|> end_of_simulation callbacks.
|>
|> Mac's check will indeed work
|>
|> My gripe was that the value of sc_is_running() on return from
|> sc_start() has to be inferred from the above rules. If sc_stop has
|> been called then everything is clear: sc_is_running() will be false.
|> But what if sc_stop has not been called?
|>
|> -  Is an implementation allowed to insert end_of_simulation()
|> callbacks before returning from sc_start?
|> -  The OSCI sim has sc_is_running() == true in the destructors. Is
|> this a bug, or should we change the LRM?
|>
|> I just want to make these details explicit.
|>
|> Cheers,
|>
|> John A
|> Nit-picker.
|>
|>
|>
|>
|> From:
|> "Michael (Mac) McNamara" <mcnamara@cadence.com>
|> To:
|> "Jeremiassen, Tor" <tor@ti.com>, Bishnupriya Bhattacharya
|> <bpriya@cadence.com>, "john.aynsley@doulos.com"
|> <john.aynsley@doulos.com>, "systemc-p1666-technical@eda.org"
|> <systemc-p1666-technical@eda.org>
|> Date:
|> 25/03/2010 16:17
|> Subject:
|> RE: sc_is_running
|>
|>
|>
|> Or perhaps sc_is_running()  should return false during the
|> end_of_simulation call backs, so they could be coded to check this
|> status in order to guide their behavior.  For example, a given routine
|> that is called in general, and also from end_of_simulation call backs
|> might want to check sc_is_running before invoking an action that would
|> schedule something.
|>
|>
|> Michael McNamara
|> VP&GM System Software
|> Cadence Design Systems
|> mcnamara@cadence.com
|> From: owner-systemc-p1666-technical@eda.org [
|> mailto:owner-systemc-p1666-technical@eda.org] On Behalf Of
|> Jeremiassen, Tor
|> Sent: Thursday, March 25, 2010 4:26 AM
|> To: Bishnupriya Bhattacharya; john.aynsley@doulos.com;
|> systemc-p1666-technical@eda.org
|> Subject: RE: sc_is_running
|>
|> That sounds good. In fact, it would seem reasonable for
|> sc_is_running() to be true up until the end_of_simulation callbacks.
|>
|> 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: owner-systemc-p1666-technical@eda.org [
|> mailto:owner-systemc-p1666-technical@eda.org] On Behalf Of Bishnupriya
|> Bhattacharya
|> Sent: Thursday, March 25, 2010 4:34 AM
|> To: john.aynsley@doulos.com; systemc-p1666-technical@eda.org
|> Subject: RE: sc_is_running
|>
|> John,
|>
|> If I understrand your question correctly, in between or after calls to
|> sc_start(), sc_is_running() should return true if simulation has not
|> ended, and false otherwise. For example, see code below.
|>
|> int sc_main(...) {
|>   ...
|>   sc_start(100, SC_NS);  <---------------- sc_stop() is not called and
|> sc_start() returns to sc_main
|>   assert(sc_is_running() == true);
|>   sc_start(); <---------------- sc_stop() is called from a thread
|> process at time 200 ns, and sc_start() returns to sc_main
|>   assert(sc_is_running() == false);
|>   return 0;
|> }
|>
|> non-OSCI simulators may have other ways of ending simulation besides
|> sc_stop(), but the behavior of sc_is_running() will still be the same
|> if the wording is done in terms of "end of simulation" instead of in
|> terms of sc_stop(), which is what the current wording is.
|>
|> Does that sound right?
|>
|> Thanks,
|> -Bishnupriya
|>
|>
|> From: owner-systemc-p1666-technical@eda.org [
|> mailto:owner-systemc-p1666-technical@eda.org] On Behalf Of
|> john.aynsley@doulos.com
|> Sent: Thursday, March 25, 2010 2:28 PM
|> To: systemc-p1666-technical@eda.org
|> Subject: sc_is_running
|> The LRM is ambiguous about the value of sc_is_running() when called
|> from sc_main between or after calls to sc_start(). In the OSCI
|> implementation, sc_is_running returns true between or after calls to
|> sc_start(), but then the OSCI sim does not call end_of_simulation
|> unless sc_stop is explicitly called.
|>
|> Comments? Do we want the LRM to specific the value of sc_is_running()
|> as per the behavior of the OSCI sim?
|>
|> Thanks
|>
|> John A
|>
|>
|
|
|--
|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 07:12:59 2010

This archive was generated by hypermail 2.1.8 : Wed Mar 31 2010 - 07:13:00 PDT