All,
I include below a revised summary of the proposal to add sc_pause, 
including the finer points of integrating sc_pause with the scheduler and 
with other features such as event notifications and process control 
methods. 
The following has been analysed pretty thoroughly and all points have been 
agreed either on the reflector or in side-conversations. Of course, feel 
free to comment if you see any holes!
John A
Change sc_start() to return with sc_time_stamp() equal to the time of the 
most recent event or time-out (more useful than having time = infinity)
sc_start(T) or sc_start(T, RUN_TO_TIME), T > 0, returns with 
sc_time_stamp() advanced by T (the old behavior)
sc_start(T, SC_EXIT_ON_STARVATION), T > 0, returns with sc_time_stamp() 
equal to the time of the most recent event or time-out if the process, 
update, and delta notification queues are empty at +T
sc_start(T ...) runs up-to-and-including any timed notification phase that 
may occur at time +T (no change)
sc_start(SC_ZERO_TIME) runs for a single delta cycle, i.e. 1 eval phase, 1 
update phase, 1 delta notification phase (no change)
Add a function sc_pause that puts simulation into the paused state. 
Simulation can be restarted from the paused state by calling sc_start 
again.
If sc_pause is called, simulation will remain in the running state until 
all processes have yielded prior to the return from sc_start. On return 
from  sc_start without sc_stop having been called, the simulation is left 
in the paused state (whether or not sc_pause was called). On return from 
sc_start after sc_stop has been called, the simulation is left in the 
stopped state. 
After a call to sc_pause, the scheduler completes the current delta cycle 
before returning from sc_start.
When sc_start is called again from the paused state, the scheduler resumes 
from the evaluation phase of the next delta cycle
It is possible to call request_update() of a primitive channel before or 
between calls to sc_start. Calls made between calls to sc_start are 
executed as if made in the first evaluation phase after resuming the 
scheduler
It is possible to execute delta or timed notifications before the first 
call to sc_start, but not immediate notifications.
It is possible to execute immediate, delta, and timed notifications when 
in the paused state between calls to sc_start. They behave as if executed 
in the first evaluation phase after resuming the scheduler
sc_stop() overrides sc_pause(). sc_pause() is ignored following sc_stop()
We add a recommendation that an application should call sc_stop() from 
sc_main() at the end of simulation, e.g.
  if (sc_get_status() && SC_PAUSED) {
    SC_REPORT_WARNING(MSGID, "Simulation stopped running from SC_PAUSED");
    sc_stop();
  } 
The following process control methods are permitted from sc_main while 
simulation is paused:
  suspend
  resume
  disable
  enable
  sync_reset_on
  sync_reset_off
 
The following are NOT permitted
  kill
  reset
  throw_it
Add a global function sc_get_status whose value is a bit mask, used as 
follows:
if (sc_get_status() & (SC_PAUSED |
                                        SC_STOPPED |
                                        SC_END_OF_SIMULATION) )
      ...
The full list of simulation phases is:
        SC_ELABORATION
        SC_BEFORE_END_OF_ELABORATION
        SC_END_OF_ELABORATION
        SC_START_OF_SIMULATION
        SC_RUNNING
        SC_PAUSED
        SC_STOPPED
        SC_END_OF_SIMULATION
sc_is_running() returns true only when sc_get_status()  is SC_RUNNING or 
SC_PAUSED
Change the LRM such that sc_is_running() is not obliged to return false 
when called from a destructor; sc_is_running would return true unless 
sc_stop had been called
-- This message has been scanned for viruses and dangerous content by MailScanner, and is believed to be clean.Received on Mon Nov 22 09:06:38 2010
This archive was generated by hypermail 2.1.8 : Mon Nov 22 2010 - 09:06:41 PST