02. `uvm_xxx_utilsとは

よく使うものは以下の2つです。

  • `uvm_component_utils(class name)
  • `uvm_object_utils(class name)

これは何のためにあるかというと、UVMファクトリーへクラスを登録するために使用します。マクロの正体は以下の通り。

下記に「type_id」とありますね。見たことありませんか?そう、

class_inst = class_name::type_id::create(name, parent);

これです。

`define uvm_component_utils(T) \

`m_uvm_component_registry_internal(T,T) \

`m_uvm_get_type_name_func(T) \

`define m_uvm_component_registry_internal(T,S) \

typedef uvm_component_registry #(T,`"S`") type_id; \

static function type_id get_type(); \

return type_id::get(); \

endfunction \

virtual function uvm_object_wrapper get_object_type(); \

return type_id::get(); \

endfunction

`define m_uvm_get_type_name_func(T) \

const static string type_name = `"T`"; \

virtual function string get_type_name (); \

return type_name; \

endfunction