May 18, 2011 UVM 1.1 User’s Guide 9
2. Transaction-Level Modeling (TLM)
2.1 Overview
One of the keys to verification productivity is to think about the problem at a level of abstraction that makes
sense. When verifying a DUT that handles packets flowing back and forth, or processes instructions, or
performs other types of functionality, you must create a verification environment that supports the
appropriate abstraction level. While the actual interface to the DUT ultimately is represented by signal-level
activity, experience has shown that it is necessary to manage most of the verification tasks, such as
generating stimulus and collecting coverage data, at the transaction level, which is the natural way engineers
tend to think of the activity of a system.
UVM provides a set of transaction-level communication interfaces and channels that you can use to connect
components at the transaction level. The use of TLM interfaces isolates each component from changes in
other components throughout the environment. When coupled with the phased, flexible build infrastructure
in UVM, TLM promotes reuse by allowing any component to be swapped for another, as long as they have
the same interfaces. This concept also allows UVM verification environments to be assembled with a
transaction-level model of the DUT, and the environment to be reused as the design is refined to RTL. All
that is required is to replace the transaction-level model with a thin layer of compatible components to
convert between the transaction-level activity and the pin-level activity at the DUT.
The well-defined semantics of TLM interfaces between components also provide the ideal platform for
implementing mixed-language verification environments. In addition, TLM provides the basis for easily
encapsulating components into reusable components, called verification components, to maximize reuse and
minimize the time and effort required to build a verification environment.
This chapter discusses the essential elements of transaction-level communication in UVM, and illustrates
the mechanics of how to assemble transaction-level components into a verification environment. Later in
this document we will discuss additional concerns in order to address a wider set of verification issues. For
now, it is important to understand these foundational concepts first.
2.2 TLM, TLM-1, and TLM-2.0
TLM, transaction-level modeling, is a modeling style for building highly abstract models of components and
systems. It relies on transactions (see Section 2.3,
Basics), objects that contain arbitrary, protocol-specific
data to abstractly represent lower-level activity. In practice, TLM refers to a family of abstraction levels
beginning with cycle-accurate modeling, the most abstract level, and extending upwards in abstraction as far
as the eye can see. Common transaction-level abstractions today include: cycle-accurate, approximately-
timed, loosely-timed, untimed, and token-level.
The acronym TLM also refers to a system of code elements used to create transaction-level models. TLM-1
and TLM-2.0 are two TLM modeling systems which have been developed as industry standards for building
transaction-level models. Both were built in SystemC and standardized within the TLM Working Group of
the Open SystemC Initiative (OSCI). TLM-1 achieved standardization in 2005 and TLM-2.0 became a
standard in 2009.
TLM-1 and TLM-2.0 share a common heritage and many of the same people who developed TLM-1 also
worked on TLM-2.0. Otherwise, they are quite different things. TLM-1 is a message passing system.
Interfaces are either untimed or rely on the target for timing. None of the interfaces provide for explicit
timing annotations. TLM-2.0, while still enabling transfer of data and synchronization between independent
processes, is mainly designed for high performance modeling of memory-mapped bus-based systems. A
subset of both these facilities has been implemented in SystemVerilog and is available as part of UVM.