In reply to chr_sue:
Actually, no. I think we both are not on the same page here. Let’s say the virtual sequence sends reads, writes with random delays in between such that for a given clock, you can hit any of the 4 scenarios:
- only read
- only write
- write and read together.
- neither read nor write
NOTE that i have 2 interfaces, not 1.
I want to use this virtual sequence because it’s capable of doing ALL OF THE ABOVE.
Case 3) is a valid scenario, and I’m able to drive that.
My question here is, how do I change the monitor/driver/scoreboard for case 3) knowing that my DUT handles write → read when both are presented during the same cycle. If I just use the code above, there is no guarantee that the ap.write() of rd_mon gets called after the ap.write() of wr_mon.
If ap.write() of rd_mon gets called before the ap.write() of wr_mon, then my scoreboard will return the data prior to the write, and DUT would return the data after the write. Do you see the problem I’m facing?