I am learning UVM. So far I was able to create the following environment for my DUT.
Agents with monitors, drivers and sequences for all of the input-output interfaces from my DUT.
A top level UVM env.
Sequences to send valid data to DUT. I yet to implement scoreboard.
I'm having some trouble to understand how to handle scenarios like following:
For one of my tb->dut interfaces, TB needs to wait for an event (or transaction) from DUT. Once it receives the transaction from DUT, TB needs to send back a response. What is the best way to implement this? How can I monitor DUT transaction from sequence? I assume I need to wait for an event or something similar which will tell me that DUT has a new valid output in its interface.
My agents have monitors which will monitor any new output signals from DUT. So, do I need to somehow bring this data from agent's monitor to my test/sequence class? I know that monitor has an analysis port and it can be used to send received data to scoreboard for checking. So, do I need to use the same port to read DUT output data, create valid response and send it to DUT?