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