TimedUntimed
Separate Interface for Timed and Un-Timed models
A timed model may require to issue multiple transactions at the same time, and may require to be able to represent those transactions being "pipelined" (transactions in several states at the same time).
For both these, the model will require a "non blocking" interface where it can "post" a transaction which should then start it's "voyage", but the model should not be delayed while this is happening.
On the other hand an "untimed" model, whos only timing is "synchronisation" may arrive at a synchronisation point anywhere in any of the models. At this point, the model must "wait" for synchronisation. No other timing is required.
Hence for this sort of model, a "blocking" interface is required that MAY delay the Master, waiting for a synchronisation point.
Hence two interfaces are required.
All models should implement both interfaces
For an untimed model to implement the timed interface, or visa versa is not, in general, hard. It has some significant benefits to the user of the model.
Where it is hard, the only place that the problem can be solved is locally to a specific model. In the worst case, a model should simply raise an error if it is called using an interface that it can not support.
Hence it is RECOMMENDED that all models implement both interfaces.
Posted January 8th, 2008 by MarkBurton