Avoid race condition between two monitors generating dependent transactions

In reply to No:

There are a number of ways to approach this. But I think it might help if we knew the reasoning behind your requirement that put_a has to happen before put_b.

One possible solution is always doing a put() on both monitors every clock cycle and using null to represent there was no transaction. Then the scoreboard would do a fork/join to wait for both mailboxes get()s. This might not be the best solution ff there are many clock cycles between having any “real” transaction creating extra simulation overhead.