03. `uvm_field_intとは
`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には、さまざまなオートメーション機能が実装されています。
例えば
- class_inst.print;
と書けば、そのクラス内のメンバ値を表示してくれます。上記のように、メンバを10進表記したければ、パイプ「|」つけてUVM_DECと書けばいいし、16進表記したければUVM_HEX(初期値はUVM_HEXな ので省略していいです)を付加します。また
- class_inst_A.compare(class_inst_B);
と書けば、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