The loosely-timed coding style is normally used with blocking models. and is appropriate for software development or when only very rough timing is needed. However the accuracy can be altered by reducing the quantum, but this also reduces performance.
There are two timing points per transaction: call and return. EDS tnow simulation time still exists, but processes become temporally decoupled from simulation time. This means each process keeps a tally of how far it has run ahead of simulation time and gets back in synch from time to time by yielding. To do this the thread must just call sc_wait( ) for the appropriate time difference that it has calculated.
It may yield because it reaches an explicit synchronization point, such as when it must block waiting for some other process to do something, or because it has consumed its time quantum.
All processes will typically use the same quantum (although they need not). When they detect their local delta time has gone above the quantum they yield. The delta time can be passed by reference between components so that one process can effectively give another process a time penalty equivalent to the time it would have blocked that process under approximate timing.
Components may share quantum keepers or have their own. Just need to make sure concurrent activities are added to different offset variables. By calling wait(myOffset) the simulation time will advance to where the caller has got to while running other pending processes.
In summary, large time quantum means fast simulation whereas small time quantum means transaction order interleaving is more accurate.
See the toy ESL practicals...