Driver mode

Hi all ,

1] The normal driver works in pull mode , in which situation should we use a push driver ?

2] The normal sequencer operates in push / pull mode ?

Thanks

In reply to bl4ckp3rl :

A driver has a concept of simulator time associated with it. A sequence is a task, but it is really not aware how much time a transaction takes to be sent on a push. As such, the driver pulls transactions when it is ready. The sequence waits till the driver can receive it and thus it does not need to generate transaction ahead of time and simulator startup time is quicker. You could create loads of transactions at time zero, store them in a queue and send them to the driver but that would have a high startup simulation time.

In reply to bl4ckp3rl :

Push mode is the simplest mechanism to implement. You generate all of your stimulus items upfront and pushes it into the sequencer’s queue. Your driver pops items off the queue as it is ready to drive them.

In pull mode there is no sequencer queue of items. There is a queue of requests to send items to the driver (start_item). The item does not get generated until the driver is ready to drive it. In this way, the item gets generated having information avaialble from the current state of the design and testbench. Although this protocol is harder to implement, the UVM has done this for you, and you’ll never want to go back to push mode.

I can’t think of a scenario where a push mode is absolutely necessary. I think it’s just there for completeness.