`uvm_component_utils_begin(class name)
`uvm_component_utils_end
または
`uvm_object_utils_begin(class name)
`uvm_object_utils_end
の間に挟んで使うマクロです。メンバの型によって、さまざまあります。このページの最後に載せておきます。
例:
class data_item extends uvm_object;
int decimal;
int hex;
`uvm_component_utils_begin(data_item)
`uvm_field_int(decimal, UVM_DEFAULT | UVM_DEC)
`uvm_field_int(hex, UVM_DEFAULT | UVM_HEX)
`uvm_component_utils_end
endclass
用途は、UVMの「オートメーション」機能を適用するために使います。UVMには、さまざまなオートメーション機能が実装されています。
例えば
と書けば、そのクラス内のメンバ値を表示してくれます。上記のように、メンバを10進表記したければ、パイプ「|」つけてUVM_DECと書けばいいし、16進表記したければUVM_HEX(初期値はUVM_HEXな ので省略していいです)を付加します。また
と書けば、inst_Aとinst_Bの全メンバを比較してくれます。この機能を有効にするスイッチは、UVM_DEFAULTに含まれます。比較したくないメンバは、パイプでUVM_NOCOMPAREと書きます。
UVMのオートメーションメソッド(printとかcompareとか)は他にもいくつかあります。それはまた後日ということで。
以下は、UVMクラスライブラリからの抜粋です。
// Parameter: `uvm_field_* macro flags//// Defines what operations a given field should be involved in.// Bitwise OR all that apply.//// UVM_DEFAULT - All field operations turned on// UVM_COPY - Field will participate in <uvm_object::copy>// UVM_COMPARE - Field will participate in <uvm_object::compare>// UVM_PRINT - Field will participate in <uvm_object::print>// UVM_RECORD - Field will participate in <uvm_object::record>// UVM_PACK - Field will participate in <uvm_object::pack>//// UVM_NOCOPY - Field will not participate in <uvm_object::copy>// UVM_NOCOMPARE - Field will not participate in <uvm_object::compare>// UVM_NOPRINT - Field will not participate in <uvm_object::print>// UVM_NORECORD - Field will not participate in <uvm_object::record>// UVM_NOPACK - Field will not participate in <uvm_object::pack>//// UVM_DEEP - Object field will be deep copied// UVM_SHALLOW - Object field will be shallow copied// UVM_REFERENCE - Object field will copied by reference//// UVM_READONLY - Object field will NOT be automatically configured.// Enum: uvm_radix_enum//// Specifies the radix to print or record in.//// UVM_BIN - Selects binary (%b) format// UVM_DEC - Selects decimal (%d) format// UVM_UNSIGNED - Selects unsigned decimal (%u) format// UVM_OCT - Selects octal (%o) format// UVM_HEX - Selects hexidecimal (%h) format// UVM_STRING - Selects string (%s) format// UVM_TIME - Selects time (%t) format// UVM_ENUM - Selects enumeration value (name) format以下は、自作ツールでリストアップした、uvm_field系マクロの一覧です。
uvm analyzer (q/Q exit) > list uvm_field
uvm_field_utils_begin
uvm_field_utils_end
uvm_field_int
uvm_field_real
uvm_field_enum
uvm_field_object
uvm_field_event
uvm_field_string
uvm_field_array_enum
uvm_field_array_int
uvm_field_sarray_int
uvm_field_sarray_enum
uvm_field_array_object
uvm_field_sarray_object
uvm_field_array_string
uvm_field_sarray_string
uvm_field_queue_enum
uvm_field_queue_int
uvm_field_queue_object
uvm_field_queue_string
uvm_field_aa_int_string
uvm_field_aa_string_string
uvm_field_aa_object_string
uvm_field_aa_int_int
uvm_field_aa_int_int_unsigned
uvm_field_aa_int_integer
uvm_field_aa_int_integer_unsigned
uvm_field_aa_int_byte
uvm_field_aa_int_byte_unsigned
uvm_field_aa_int_shortint
uvm_field_aa_int_shortint_unsigned
uvm_field_aa_int_longint
uvm_field_aa_int_longint_unsigned
uvm_field_aa_int_key
uvm_field_aa_string_int
uvm_field_aa_object_int
uvm_field_aa_int_enumkey