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