UVM_Object

2023-09-06
UVM

什麼是 uvm_object

UVM 環境中的所有元件和物件類別都衍生自 uvm_objectuvm_object的主要作用是定義常見的實用function,例如print、copy、compare和record,UVM testbench中的任何其他class都可以使用這些function。

uvm_object 衍生的類別必須實作純虛方法,例如 createget_type_name

create範例如下:

1
2
3
4
5
6
class mytype extends uvm_object;
...
virtual function uvm_object create(string name="");
mytype t = new(name);
return t;
endfunction

get_type_name範例如下:

1
2
3
4
5
6
7
class mytype extends uvm_object;
...
const static string type_name = "mytype";

virtual function string get_type_name();
return type_name;
endfunction

Factory Interface

UVM用了一個稱為factory的概念,UVM環境中定義的所有class都向factory做註冊,然後factory之後回傳該class type的object。

繼承uvm_object的類別要包含允許其向factory註冊的Macro。
範例如下:

1
2
3
4
5
6
7
class packet extends uvm_object;
`uvm_object_utils(packet)
endclass

class packetD extends packet;
`uvm_object_utils(packetD)
endclass

Utility Functions

UVM object提供了很多basic的function讓使用者使用,例如printing/recording/copying/comparing/packing/unpacking/configuration。

這些function如果要客製化的話可以override do_xxx的function。
例如UVM object有提供的print function,如果想要改變print的格式的話,就可以override do_print這個function,之後在使用print function的時候,就會呼叫到自己客製化的do_print function。