TimingUpdates

Timing updates in Initiator and Target and passing Phase by value

It would seem possible that only the initiator would set the "phase" and the target would simply indicate when that phase was done.

However, even simple protocols don't obey this rule.

For instance, during a read operation, the master may initialise the read with a read request phase, possibly acknowledged by the slave. Then, it is possible that the communication between master and slave is idle, before the slave initiates the data phases to deliver the data back to the master. The communication is as reflexive (or not) as the protocol dictates. However, communication from master to slave passes via a non blocking method call, while from slave to master it is passed via an event.

The Phase can not be modelled as "shared" data, because, unlike the transaction, the Phase indicates what data is "going to be valid" and "when".

So it is possible to "post" phases into the future, even though the data in the transaction has already been updated, the "phase" indicates when the data would have been ready in reality.

Therefore the Phase must be passed state variable is specific to each "posted event" on the communication interface

Simply, this means passing the phase by value.