First of all, I should remember you what means loosely-timed: we use the blocking function b_transport and therefore we have two synchronization points per transaction, that corresponds to the beginning and the end of the transaction. These two points can be in the same simulation time or in different simulation time. In case we have the two synchronization points in the same simulation time, we are using untimed).
Thus, the only thing that varies in this way about the untimed mode is that in this case the function b_transport calls wait (), and thus allow the simulation time increases. This wait will be called by the target (inside the function b_transport) and models the time the device takes to respond to the transaction, for example the access time to a memory, or the time an I2C controller spent getting a data from a external FLASH …
Retrieve the untimed example that we have nearly all we need.
Notice that the second parameter of the b_transport function (type sc_time) remains zero. This parameter will help us if we use temporal decoupling, and that is where we indicate the time ahead of the simulation that takes the current transaction. That’s discussed in the next example of the series.
Note that this mode is mainly used because it is simple to use because we use the blocking method, and allows us to write down times, and therefore have a simulation that will give us information of how long it takes to run a process, how long implementation is needed even complete a task, etc..
And so far this “example”, you see there’s not much difference in code with untimed, although there is in difference in concept and results to be obtained. The code you have it available here.