看了大神的文章,又自己想用,研究了一下,分析如下:
1,comparer属于UVM中uvm_object_global 策略类,uvm_object对象自带compare()和do_compare()函数,bit compare(uvm_object rhs, uvm_cmparer comparer=null); bit do_compare(uvm_object rhs, uvm_cmparer comparer); compare()函数不需要传入comparer,在compare函数中如果传入comparer就采用传入的comparer,如果没传就用uvm 默认comparer,在compare()函数中会调用do_compare().并给其传入右值和comparer。
也就是说我们实际比较时只用调用a.compare(b)就可以,它内部会调用do_compare()。而do_comparer默认返回值1,表明比较成功,我们想要使用,就得自己改写do_compare()函数,在内部采用上述大神表格中提到的方法选择自己想要的变量进行比较,非常自由。 甚至还可以采用object中变量来控制比较与否,例子如下: