This class defines the OVM equivalent of the apb_rw VMM transaction type. There are two ways to define this, both shown.
Manual | Here, you manually write the do_copy, do_print, and do_compare methods. This gives you complete control at a cost of a little more programming. |
Field Automation Macros | Here, you invoke a macro sequence that expands into code that implements these methods. The macros expand into a significant amount of code and can be hard to debug if not used properly. However, many find their convenience to outweigh these costs. |
`ifndef OVM_APB_RW_SV `define OVM_APB_RW_SV class ovm_apb_rw extends ovm_sequence_item; rand int unsigned addr; rand integer unsigned data; rand enum {RD, WR} cmd; `ovm_object_utils(ovm_apb_rw) function new(string name="ovm_apb_rw"); super.new(name); endfunction virtual function void do_copy(ovm_object rhs); ovm_apb_rw tr; super.do_copy(rhs); assert($cast(tr,rhs)); cmd = tr.cmd ; addr = tr.addr; data = tr.data; endfunction virtual function string convert2string(); convert2string = { super.convert2string(), "APB ",cmd.name(), " @ 0x",$psprintf("%8h",addr), " = 0x",$psprintf("%8h",data)}; endfunction virtual function bit do_compare(ovm_object rhs, ovm_comparer comparer); ovm_apb_rw tr; if (rhs == null) return 0; if (!$cast(tr, rhs)) return 0; if (cmd != tr.cmd || addr != tr.addr || data !== tr.data) begin $display(" ",this.convert2string(),"\n!= ",tr.convert2string()); return 0; end return 1; endfunction endclass : ovm_apb_rw // Typedefs- APB Transaction Types // // Define alternative names for the transaction type for those who // speak in terms of transactions or items. typedef ovm_apb_rw ovm_apb_tr; typedef ovm_apb_rw ovm_apb_item; `endif // OVM_APB_RW_SV