What TLMs I should use?

Hello All,
I want to connect driver directly to the monitor,(not going through any DUT). So how does it work? Which TLM can be used and how? Can someone plz help in this regard? The transaction packets are being sent from driver to monitor in byte form. So please guide me through.
Thanks,
Swapnil

Hi Swapnil,
Although the usual driver setup includes a pin-level interface to connect to the DUT and the monitor, there’s nothing that requires this setup, especially if its early in your development and your DUT may not be ready (which, by the way, is the only reason I can think of to connect a driver directly to a monitor). If your pin-level protocol is such that it doesn’t require anything to be driven by the DUT, then you can simply connect the interface to both the driver and monitor. The monitor will see what the driver sends and no TLM connection is required. This has the advantage that you can reuse the driver and monitor as-is in your agent when you eventually connect your DUT (although I can’t at this moment think of any application where the DUT would be entirely passive like this).
If you reallly want a TLM connection between the driver and monitor, then you’re no longer able to use the protocol-layer agent that you would connect to your DUT. You’ll need to use the factory to:
1. replace the pin-level driver with a driver that has a TLM port on it,
2. replace the pin-level monitor with a monitor that has a matching TLM export on it
3. replace the agent with one that make the tlm connection between the driver and monitor
As to which TLM port/export to use for the connection, that’s pretty much up to you. The easiest is probably to use an analysis_port on the driver and an analysis_export on the monitor.
Of course, there’s a completely different discussion to be had as to why you would find such an arrangement useful. You could just keep the pin-level interface, not modify your agent at all, and connect it to a dummy dut that will provide just enough functionality to allow your driver to drive and your monitor to monitor.

In reply to tfitz:

Hello tfitz,

Can you please elaborate about dummy DUT part? Also could you give more idea on how to replace the pin-level driver and monitor with the driver and monitor respectively which has ports on it by using a factory? A small example would be really helpfull to me.

As such from my side, I tried to use an empty DUT (which only prints a line stating that it received the bytes) and connected the driver with the monitor through an interface.Only bytes are supposed to travel between the driver and the monitor. But its giving me some errors as there is mismatch between the sent and the received packets in the scoreboard:
The following are the errors:-

Errors:-

UVM_ERROR @ 50: reporter [PCKSZ] 16 bits needed to unpack integral, yet only 0 available.

UVM_ERROR @ 50: reporter [PCKSZ] 16 bits needed to unpack integral, yet only 0 available.

UVM_FATAL @ 600: uvm_test_top.env_h.agent_h.sequencer1_h [uvm_test_top.env_h.agent_h.sequencer1_h] Item_done() called with no outstanding requests. Each call to item_done() must be paired with a previous call to get_next_item().

Please have a look at it and give me some guidance of where it might be going wrong? Your help is appreciated.
Thanks,
Swapnil