uvm_comparer uvm_object::compareの設定を変更する UVM

コマンドの説明

uvm_comparerはuvm_objectのMethodであるcompareの設定を変更できます。

使い方

    uvm_object ob1;
    uvm_object ob2;
    uvm_comparer comp;
    initial begin
        int status;
        ob1 = trans::type_id::create("ob1");
        ob2 = trans::type_id::create("ob2");
        void'(ob1.randomize());
        void'(ob2.randomize());
        comp = new();
        comp.show_max = 2;  // 表示する変数の数を指定する
        comp.verbosity = UVM_NONE;  // UVM_LOW, UVM_MEDIUM, UVM_HIGH, UVM_FULL
        comp.sev = UVM_ERROR; // UVM_WARNING, UVM_INFO
        status = ob1.compare(ob2, comp);
    end

uvm_object::compare()は<uvm_comparer>が無くても動作しますが、<uvm_comparer>を与えることで設定を変更できます。

<uvm_object1>.compare(<uvm_object2>, <uvm_comparer>)のように使用します。

変数

show_max
表示する変数の数を指定します。

verbosity
ログへの表示レベルを設定します。

sev
Severityを設定します。

サンプル

変数の数よりshow_maxが少ないとき

module top;
    import uvm_pkg::*;
    `include "uvm_macros.svh"
    class trans extends uvm_object;
        rand int a;
        rand int b;
        `uvm_object_utils_begin(trans)
            `uvm_field_int(a, UVM_ALL_ON)
            `uvm_field_int(b, UVM_ALL_ON)
        `uvm_object_utils_end
        function new(string name="trans");
            super.new(name);
        endfunction
    endclass
    trans ob1;
    trans ob2;
    uvm_comparer comp;
    initial begin
        int status;
        ob1 = trans::type_id::create("ob1");
        ob2 = trans::type_id::create("ob2");
        void'(ob1.randomize());
        void'(ob2.randomize());
        comp = new();
        comp.show_max = 2;
        comp.verbosity = UVM_LOW;
        comp.sev = UVM_ERROR; // UVM_WARNING, UVM_INFO

        status = ob1.compare(ob2, comp);
        $finish;
    end
endmodule
// 出力
// [UVM_ERROR][MISCMP] obj1.a: lhs = '12345678 : rhs = 'h98765432 

まとめ

uvm_comparerについてまとめました。

コメント

タイトルとURLをコピーしました