UVM uses 2 monitors, 1 for input, and 1 for output?

In reply to graeme_jessiman:

You may have noticed that uvm_driver includes a single TLM connection, and is a parameterized class that you specialize with the sequence item type. On the other hand, uvm_monitor does not include any TLM connections and is not parameterized. As Graeme said, how you use the monitor depends on your protocol.

My typical agents have a single monitor, with two TLM analysis ports, one for input transactions, and one for outputs. The run_phase() has two parallel threads to process these two streams.