This PR implements the syntax for sequences described in #9 with a partial implementation of the arbitration functionality.
Introduces @foraster.sequence() and @forastero.requires() to define sequences and required drivers/monitors/named locks respectively;
Adds BaseSequence and related classes to manage sequences;
Adds tb.schedule(...) function to schedule sequences to execute;
Adds locking mechanism with primitive arbitration to allow different sequences to co-ordinate;
Updates documentation with details on sequences.
There are more mechanisms described in #9 than are implemented in this PR, for example a more sophisticated arbitration mechanism needs to be implemented in order to balance lock starvation of different sequences.
This PR implements the syntax for sequences described in #9 with a partial implementation of the arbitration functionality.
@foraster.sequence()
and@forastero.requires()
to define sequences and required drivers/monitors/named locks respectively;BaseSequence
and related classes to manage sequences;tb.schedule(...)
function to schedule sequences to execute;There are more mechanisms described in #9 than are implemented in this PR, for example a more sophisticated arbitration mechanism needs to be implemented in order to balance lock starvation of different sequences.