UVM e Verification Tutorial using Specman
Aviral Mittal
2. Transactional Level Modelling (TLM)
Its important to first understand what is TLM or transactional Level
Modelling?
The name for sure sounds intimidating, but the concept is really
simple. And this is what the UVM/OVM
concepts are based upon. if you already know what is TLM, you may
want to skip this section.
Once upon a time, in Silicon Valley, we used to write testbenches,
which used to drive each and every signal of
the DUT, with the stimulus specified for each input at each clock
cycle.
Now, of course we dont do that.
What we do is, we define what is called a 'data item'. This is the
'unit' of stimulus which the UVM/OVM
testbench generates or will generate upon command or upon request.
So TLM does not generate individual signals at individual clock
cycles, TLM means a method to generate
a 'data item' and drive the same as stimulus to the DUT or DUT
interface.
Heyyyy... but what is TLM.
Its the way of modelling a testbench which generates a 'data item'
instead of individual stimulus for each input
on the DUT or a specific interface of DUT, which is under test is
called TLM.
Heyyyyy... but what is a 'data item'.
A Data Item is the smallest Unit produced by TLM testbench or TLM
model.
Example 1 : Data Item.
Following is an example of a 'data item' written in 'e' language.
The 'avi_ahb_if_tran' is a 'struct' type which is 'like inherited
from a pre defined 'e' type called 'any_sequence_item'
This data item has many 'fields' for example, 'haddr' is a field
which is of type 'haddr_t',
'htrans' is a field of type 'htrans_t', 'hsize' is a field of the
pre-defined type 'unsigned integer' (uint) and its 3 bits wide
... and so on and so forth.
<'
package avi_ahb_if;
struct avi_ahb_if_tran like
any_sequence_item{
%haddr : haddr_t;
%htrans : htrans_t;
%hwrite : uint (bits : 1);
%hsize : uint (bits :
3);
%hburst : hburst_t;
%hprot : uint (bits :
4);
%hwdata_l : list of hwdata_t;
!%hrdata : hrdata_t;
!%hrdata_l : list of hrdata_t;
!%hready : uint(bits:1);
!%hresp : uint(bits:2);
%hbusreqx : uint (bits :1);
%hlockx : uint (bits :1);
'>
The name 'avi_ahb_if_tran' is user defined, its the name that is
given to a new 'struct'.
'like inheritance': This means that 'avi_ahb_if_tran' is a 'struct'
which has all the properties of
the predefined struct 'any_sequence_item'.
'any_sequence_item' : This is a predefined struct available in the
'e' language.
All data items must be defined as 'like inherited' from the
base type 'any_sequence_item'. Why?
Because this is the rule of UVM. :).
As perviously discussed, UVM is a standard way of coding your
testbench,
and if you have to follow this standard, you got to follow its
rules. :) Simple!.
Getting bothered by the signs '!' or '%' before the 'fields' of the
struct. Find an explanation here.
<- PREV
NEXT ->