In reply to verif_learner:
At this point, you should ask yourself not “How would I verify this in UVM?” but “How would I verify this at all?”
You are correct that at the block level, having the driver send the descriptor information to the monitor so that the monitor knows what to look for makes sense. However, it is not always the case that the monitor has to be able to recreate everything on its own. You could have the monitor detect all the data/descriptors that occur on the bus and send them to the scoreboard, for example. But your driver could also send the descriptor information to the scoreboard which could, perhaps, wait until it sees the same descriptor reported by the monitor. Then you could have the scoreboard do whatever data checking is appropriate.
Given the nature of your system, even when this DMA function is put into a larger system, you’re still going to need to give your verification environment a hint as to what to look for. Having the scoreboard be told about descriptors is portable in that the descriptor information can come from anywhere in your system that you’re able to detect/predict it.