コマンドの説明
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についてまとめました。
コメント