Uvm Basics - Uvm TLM
Uvm Basics - Uvm TLM
Training
UVM TLM
Jonathan Mathews
Intel Confidential
02/07/2025
1
Contents
Introduction
What is TLM? Why?
Usage
UVM TLM methods
Communication types
Blocking and Non-blocking
TLM Ports, Exports and Imps
Analysis ports
Subscribers
TLM & Analysis FIFO
TLM 2.0
UVM Testbench
UVM Test
Sequence Sequence
UVM Enviroment
Agent Agent
DUT
• Communication via
method calls
• Parameterized by the
transaction /object type
• Put(push)
• Pushes an object across the interface
• Doesn’t overwrite an object
• Get(pull)
• Pulls an object across the interface
• Removes the object from the other
side
• Peek
• Similar to get but doesn’t remove the
object
• Try_put/can_put
• Returns 1 if it was able to or could
put an object
• Try_get/can_get
• Returns 1 if it was able to retrieve or
could get an object
• Try_peek/can_peek
• Similar to get but doesn’t destroy
the object
• Port to Export
• Connecting components at
the same hierarchy(peer-to-
peer)
• Port to Export
• Connecting component ports
at the same hierarchy(peer-
to-peer)
• Port to Port
• Connecting child component
port to the parent
component port
• Port to Export
• Connecting component ports
at the same hierarchy(peer-
to-peer)
• Port to Port
• Connecting child
component’s port to the
parent component’s port
• Export to Export
• Connecting parent
component’s export to the
child component’s export
• Port to Export
• Connecting component ports
at the same hierarchy(peer-
to-peer)
• Port to Port
• Connecting child
component’s port to the
parent component’s port
• Export to Export
• Connecting parent
component’s export to the
child component’s export
• Lowest level export is actually an
Imp
Pull mode
• Sequence calls
wait_for_grant() which is
blocking
• Driver’s get_next_item(txn)
unblocks the sequence
• Transaction can be
randomized and
send_request(txn) pushes the
transaction
• Driver unblocks and receives
the transaction
• Sequence is blocked by
wait_for_item_done() which is
unblocked once driver calls
item_done()
Push mode
• Requires a special sequencer, driver i.e
uvm_push_sequencer, uvm_push_driver to support the push
mode
• Performance benefit?
• Support 1:many
connections/subscribers
• Isolates producer-consumer
execution
Option 1:
• Use macros for imp suffixes
• Can’t synchronize between
streams
Option 2:
• Use embedded analysis fifos
• Actively pull from fifos to
synchronize