Macros defined for SVT:
|
|
$sformatf(`"ovm_callback::FUNC - No callbacks registered with object '%s'`", (obj==null?"null":obj.get_full_name())) |
|
|
$sformatf(`"ovm_callback::FUNC - Callback '%s' not registered with object '%s'`",cb.get_name(), (obj==null?"null":obj.get_full_name())) |
|
|
$sformatf(`"ovm_callback::FUNC - Callback argument for object '%s' is null`", (obj==null?"null":obj.get_full_name())) |
|
|
`"ovm_callback::FUNC - Object argument is null`" |
|
|
protected
|
|
|
virtual class avm_``name #(type T=int) extends ovm_``name#(T); function new(string name , ovm_component parent = null ); super.new( name, parent ); endfunction : new endclass |
|
|
"\033[40m"
|
|
|
"\033[44m"
|
|
|
"\033[46m"
|
|
|
"\033[42m"
|
|
|
"\033[45m"
|
|
|
"\033[41m"
|
|
|
"\033[47m"
|
|
|
"\033[43m"
|
|
|
"\033[5m"
|
|
|
"\033[1m"
|
|
|
"\033[2m"
|
|
|
"\033[30m"
|
|
|
"\033[34m"
|
|
|
"\033[36m"
|
|
|
"\033[32m"
|
|
|
"\033[35m"
|
|
|
"\033[31m"
|
|
|
"\033[37m"
|
|
|
"\033[33m"
|
|
|
"\033[0m"
|
|
|
"\033[7m"
|
|
|
"\033[4m"
|
|
|
wait_for_grant(); pre_apply(); if (! OVM_DATA_REQ.randomize() with CONSTRAINTS ) begin ovm_report_warning("ovm_scenario", "Randomization failed in apply_request_with"); end mid_apply(); |
|
|
|
|
apply_request_with(OVM_DATA_REQ, CONSTRAINTS) send_request(OVM_DATA_REQ); get_response(OVM_DATA_RSP); post_apply(); |
|
|
|
class avm_``kind``_port #(type REQ=int,RSP=int) extends ovm_``kind``_port #(REQ,RSP); function new( string name, ovm_component parent, int min_size = 1, int max_size = 1 ); super.new( name, parent, min_size, max_size ); endfunction : new endclass class avm_``kind``_export #(type REQ=int,RSP=int) extends ovm_``kind``_export #(REQ,RSP); function new( string name, ovm_component parent, int min_size = 1, int max_size = 1 ); super.new( name, parent, min_size, max_size ); endfunction : new endclass class avm_``kind``_imp #( type REQ = int , type RSP = int , type IMP = int , type REQ_IMP = IMP , type RSP_IMP = IMP ) extends ovm_``kind``_imp #( REQ, RSP, IMP, REQ_IMP, RSP_IMP); function new( string name , IMP imp , REQ_IMP req_imp = imp , RSP_IMP rsp_imp = imp ); super.new( name , imp , req_imp, rsp_imp); endfunction endclass |
|
|
class avm_``name #(type T=int) extends ovm_``name#(T); function new(string name , ovm_component parent = null ); super.new( name, parent ); endfunction : new endclass |
|
|
class avm_``name #(type T=int) extends ovm_``name#(T); endclass |
|
|
class avm_``kind``_port #(type T=int) extends ovm_``kind``_port #(T); function new( string name, ovm_component parent, int min_size = 1, int max_size = 1 ); super.new( name, parent, min_size, max_size ); endfunction : new endclass class avm_``kind``_export #(type T=int) extends ovm_``kind``_export #(T); function new( string name, ovm_component parent, int min_size = 1, int max_size = 1 ); super.new( name, parent, min_size, max_size ); endfunction : new endclass class avm_``kind``_imp #(type T=int,IMP=int) extends ovm_``kind``_imp #(T,IMP); function new( string name, IMP imp); super.new( name, imp ); endfunction : new endclass |
|
|
|
|
task get (output TYPE arg); imp.get(arg); endtask |
|
|
task get( output TYPE arg); imp.get``SFX( arg); endtask |
|
|
|
|
task peek (output TYPE arg); imp.peek(arg); endtask |
|
|
task peek( output TYPE arg);imp.peek``SFX( arg); endtask |
|
|
task put (TYPE arg); imp.put(arg); endtask |
|
|
task put( input TYPE arg); imp.put``SFX( arg); endtask |
|
|
task transport (REQ req_arg, output RSP rsp_arg); imp.transport(req_arg, rsp_arg); endtask |
|
|
task transport( input REQ req_arg, output RSP rsp_arg); imp.transport``SFX(req_arg, rsp_arg); endtask |
|
|
|
const
|
|
|
begin ovm_object this_d__, from_d__; if(tmp_data__ != null) if(!$cast(local_data__, tmp_data__)) begin ovm_object::m_sc.scratch1 = `"Cast failed for argument: ARG`"; end if(ARG != null) $cast(this_d__,ARG); if(local_data__.ARG != null) $cast(from_d__,local_data__.ARG); if((this_d__==null) && (from_d__!=null)) begin this_d__ = from_d__.clone(); this_d__.set_name(`"ARG`"); end else if(from_d__ == null) this_d__ = from_d__; else begin this_d__.copy(from_d__); end if((this_d__ == null) || !$cast(ARG, this_d__)) begin ovm_object::m_sc.scratch1 = `"Cast failed for ARG during copy`"; _global_reporter.ovm_report_error("CSTFLD", ovm_object::m_sc.scratch1, OVM_NONE); end end |
|
|
if( (FLAG)&OVM_REFERENCE)) ARG = local_data__.``ARG; |
|
|
if( (FLAG)&OVM_SHALLOW) begin ovm_object lhs__, rhs__; ovm_object::m_sc.scratch1 = `"Executing shallow copy of arg ARG`"; /* Can't do shallow copy right now due to an issue with abstract classes */ /* like ovm_object, so do a deep copy instead. */ if(ARG2==null) ARG1 = ARG2; else begin if(ARG1 != null) $cast(lhs__, ARG1); if(ARG2 != null) $cast(rhs__, ARG2); if(rhs__!=null && lhs__!=null) lhs__.copy(rhs__); else if(rhs__ != null) begin $cast(lhs__, rhs__.clone()); if (lhs__ != null) $cast(ARG1, lhs__); end else ARG1 = null; /* ARG = new local_data__.ARG; */ end end else begin ovm_object::m_sc.scratch1 = `"Shallow copy off for arg ARG`"; end |
|
|
do urm_pkg_msg_imp("DUT",MESSAGE,ovm_pkg::OVM_URM_MSG_DUT,ovm_pkg::OVM_ERROR,ovm_pkg::OVM_NONE,"",ovm_global_reporter) while (0) |
|
|
urm_msg_imp("DUT",MESSAGE,OVM_URM_MSG_DUT,OVM_ERROR,OVM_NONE,get_full_name(),m_get_report_object()) |
|
|
"TLM interface function not implemented"
|
|
|
|
|
|
|
|
|
|
|
|
|
Clients wishing to pull in the OVM package manually have a couple of options for doing so.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
The basic objective of this program is to delave a final block to terminate the SLI license server. Since final blocks cannot exist inside a package, this must be defined external to the SVT package.
This file therefore provides the final block, inside a program, for inclusion in the SVT package files. |
|
|
|
|
|
|
|
1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
case(what__) OVM_PACK: if(((FLAG)&OVM_NOPACK) == 0) begin if((((FLAG)&OVM_ABSTRACT) && ovm_auto_options_object.packer.abstract) || (!((FLAG)&OVM_ABSTRACT) && ovm_auto_options_object.packer.physical)) begin if(ovm_auto_options_object.packer.use_metadata == 1) ovm_auto_options_object.packer.pack_field_int(ARG.size(), 32); foreach(ARG[i]) ovm_auto_options_object.packer.pack_field(ARG[i], $bits(ARG[i])); end end OVM_UNPACK: if(((FLAG)&OVM_NOPACK) == 0) begin if((((FLAG)&OVM_ABSTRACT) && ovm_auto_options_object.packer.abstract) || (!((FLAG)&OVM_ABSTRACT) && ovm_auto_options_object.packer.physical)) begin if(ovm_auto_options_object.packer.use_metadata) begin int s_; s_ = ovm_auto_options_object.packer.unpack_field_int(32); ARG = new[s_]; end foreach(ARG[i]) ARG[i] = ovm_auto_options_object.packer.unpack_field($bits(ARG[i])); end end endcase |
|
|
case(what__) OVM_PACK: if(((FLAG)&OVM_NOPACK) == 0) begin if((((FLAG)&OVM_ABSTRACT) && ovm_auto_options_object.packer.abstract) || (!((FLAG)&OVM_ABSTRACT) && ovm_auto_options_object.packer.physical)) begin if(ovm_auto_options_object.packer.use_metadata == 1) ovm_auto_options_object.packer.pack_field_int(ARG.size(), 32); foreach(ARG[i]) begin ovm_auto_options_object.packer.pack_object(ARG[i]); end end end OVM_UNPACK: if(((FLAG)&OVM_NOPACK) == 0) begin if((((FLAG)&OVM_ABSTRACT) && ovm_auto_options_object.packer.abstract) || (!((FLAG)&OVM_ABSTRACT) && ovm_auto_options_object.packer.physical)) begin if(ovm_auto_options_object.packer.use_metadata) begin int s_; s_ = ovm_auto_options_object.packer.unpack_field_int(32); if(ARG.size() < s_) _global_reporter.ovm_report_error("OBJUPK", $psprintf(`"Array ARG cannot support the unpack operation, the unpack requires %0d elements, ARG has only %0d`", s_, ARG.size()), OVM_NONE); end foreach(ARG[i]) begin ovm_auto_options_object.packer.unpack_object(ARG[i]); if(ovm_auto_options_object.packer.use_metadata == 0 && ARG[i] == null) return; end end end endcase |
|
|
case(what__) OVM_PACK: if(((FLAG)&OVM_NOPACK) == 0) begin if((((FLAG)&OVM_ABSTRACT) && ovm_auto_options_object.packer.abstract) || (!((FLAG)&OVM_ABSTRACT) && ovm_auto_options_object.packer.physical)) begin if(ovm_auto_options_object.packer.use_metadata == 1) ovm_auto_options_object.packer.pack_field_int(ARG.size(), 32); foreach(ARG[i]) ovm_auto_options_object.packer.pack_real(ARG[i]); end end OVM_UNPACK: if(((FLAG)&OVM_NOPACK) == 0) begin if((((FLAG)&OVM_ABSTRACT) && ovm_auto_options_object.packer.abstract) || (!((FLAG)&OVM_ABSTRACT) && ovm_auto_options_object.packer.physical)) begin if(ovm_auto_options_object.packer.use_metadata) begin int s_; s_ = ovm_auto_options_object.packer.unpack_field_int(32); ARG = new[s_]; end foreach(ARG[i]) ARG[i] = ovm_auto_options_object.packer.unpack_real(); end end endcase |
|
|
case(what__) OVM_PACK: if(((FLAG)&OVM_NOPACK) == 0) begin if((((FLAG)&OVM_ABSTRACT) && ovm_auto_options_object.packer.abstract) || (!((FLAG)&OVM_ABSTRACT) && ovm_auto_options_object.packer.physical)) begin if(ovm_auto_options_object.packer.use_metadata == 1) ovm_auto_options_object.packer.pack_field_int(ARG.size(), 32); foreach(ARG[i]) ovm_auto_options_object.packer.pack_string(ARG[i]); end end OVM_UNPACK: if(((FLAG)&OVM_NOPACK) == 0) begin if((((FLAG)&OVM_ABSTRACT) && ovm_auto_options_object.packer.abstract) || (!((FLAG)&OVM_ABSTRACT) && ovm_auto_options_object.packer.physical)) begin if(ovm_auto_options_object.packer.use_metadata) begin int s_; s_ = ovm_auto_options_object.packer.unpack_field_int(32); ARG = new[s_]; end foreach(ARG[i]) begin ARG[i] = ovm_auto_options_object.packer.unpack_string(-1); end end end endcase |
|
|
begin int r__; if((what__ == OVM_PRINT) && (((FLAG)&OVM_NOPRINT) == 0) && (ovm_radix_enum'((FLAG)&OVM_RADIX) == OVM_ENUM) && (ovm_auto_options_object.printer.knobs.print_fields == 1)) begin $swrite(m_sc.stringv, "%0d", ARG); ovm_auto_options_object.printer.print_generic(`"ARG`", "enum", $bits(ARG), m_sc.stringv); end else if((what__ == OVM_RECORD) && (((FLAG)&OVM_NORECORD) == 0) && (ovm_radix_enum'((FLAG)&OVM_RADIX) == OVM_ENUM)) begin $swrite(m_sc.stringv, "%0d", ARG); ovm_auto_options_object.recorder.record_string(`"ARG`",m_sc.stringv); end else if(tmp_data__!=null) begin if($cast(local_data__, tmp_data__)) begin r__ = m_do_data(`"ARG`", ARG, local_data__.ARG, what__, $bits(ARG), FLAG); end end else begin if(what__ != OVM_COMPARE && what__ != OVM_COPY) begin r__ = m_do_data(`"ARG`", ARG, 0, what__, $bits(ARG), FLAG); end end if((what__ == OVM_COMPARE) && r__) begin if(ovm_radix_enum'((FLAG)&OVM_RADIX) == OVM_ENUM) begin if(local_data__!=null) begin ovm_print_msg_enum(ARG, local_data__.ARG) end else begin ovm_print_msg_enum(ARG, 0) end end end end |
|
|
begin if((what__ & (FLAG)) || (what__ >= OVM_MACRO_EXTRAS)) begin KEY aa_key; case (what__) OVM_COMPARE: begin if(!((FLAG)&OVM_NOCOMPARE) && (tmp_data__ != null) ) begin $cast(local_data__, tmp_data__); if(ARG.num() != local_data__.ARG.num()) begin int s1__, s2__; m_sc.stringv = ""; s1__ = ARG.num(); s2__ = local_data__.ARG.num(); $swrite(m_sc.stringv, "lhs size = %0d : rhs size = %0d", s1__, s2__); ovm_auto_options_object.comparer.print_msg(m_sc.stringv); end ovm_auto_options_object.comparer.scope.up(null); if(ARG.first(aa_key)) do begin void'(ovm_auto_options_object.comparer.compare_field_int({`"ARG[`",aa_key.name(),"]"}, ARG[aa_key], local_data__.ARG[aa_key], $bits(ARG[aa_key]), ovm_radix_enum'((FLAG)&OVM_RADIX) )); end while(ARG.next(aa_key)); ovm_auto_options_object.comparer.scope.down(`"ARG`",null); end end OVM_COPY: begin if(!((FLAG)&OVM_NOCOPY) && (tmp_data__ != null) ) begin $cast(local_data__, tmp_data__); ARG.delete(); if(local_data__.ARG.first(aa_key)) do begin ARG[aa_key] = local_data__.ARG[aa_key]; end while(local_data__.ARG.next(aa_key)); end end OVM_PRINT: begin ovm_printer p__ = ovm_auto_options_object.printer; p__.print_array_header (`"ARG`", ARG.num(),`"aa_``KEY`"); if((p__.knobs.depth == -1) || (p__.m_scope.depth() < p__.knobs.depth+1)) begin if(ARG.first(aa_key)) do begin ovm_auto_options_object.printer.print_field( {"[",aa_key.name(),"]"}, ARG[aa_key], $bits(ARG[aa_key]), ovm_radix_enum'((FLAG)&OVM_RADIX), "[" ); end while(ARG.next(aa_key)); end p__.print_array_footer(ARG.num()); p__.print_footer(); end endcase end end |
|
|
begin if((what__ & (FLAG)) || (what__ >= OVM_MACRO_EXTRAS)) begin case (what__) OVM_COMPARE: begin if(!((FLAG)&OVM_NOCOMPARE) && (tmp_data__ != null) ) begin $cast(local_data__, tmp_data__); if(ARG.num() != local_data__.ARG.num()) begin int s1__, s2__; m_sc.stringv = ""; s1__ = ARG.num(); s2__ = local_data__.ARG.num(); $swrite(m_sc.stringv, "lhs size = %0d : rhs size = %0d", s1__, s2__); ovm_auto_options_object.comparer.print_msg(m_sc.stringv); end string_aa_key = ""; while(ARG.next(string_aa_key)) begin ovm_auto_options_object.comparer.scope.set_arg({"[",string_aa_key,"]"}); void'(m_do_data({`"ARG[`", string_aa_key, "]"}, ARG[string_aa_key], local_data__.ARG[string_aa_key], what__, $bits(ARG[string_aa_key]), FLAG)); ovm_auto_options_object.comparer.scope.unset_arg(string_aa_key); end end end OVM_COPY: begin if(!((FLAG)&OVM_NOCOPY) && (tmp_data__ != null) ) begin $cast(local_data__, tmp_data__); ARG.delete(); string_aa_key = ""; while(local_data__.ARG.next(string_aa_key)) ARG[string_aa_key] = local_data__.ARG[string_aa_key]; end end OVM_PRINT: `ovm_print_aa_``KEY``_``TYPE``3(ARG, ovm_radix_enum'((FLAG)&(OVM_RADIX)), ovm_auto_options_object.printer) endcase end end |
|
|
begin if((what__ & (FLAG)) || (what__ >= OVM_MACRO_EXTRAS)) begin KEY aa_key; case (what__) OVM_COMPARE: begin if(!((FLAG)&OVM_NOCOMPARE) && (tmp_data__ != null) ) begin $cast(local_data__, tmp_data__); if(ARG.num() != local_data__.ARG.num()) begin int s1__, s2__; m_sc.stringv = ""; s1__ = ARG.num(); s2__ = local_data__.ARG.num(); $swrite(m_sc.stringv, "lhs size = %0d : rhs size = %0d", s1__, s2__); ovm_auto_options_object.comparer.print_msg(m_sc.stringv); end ovm_auto_options_object.comparer.scope.up(null); if(ARG.first(aa_key)) do begin $swrite(string_aa_key, "%0d", aa_key); ovm_auto_options_object.comparer.scope.set_arg({"[",string_aa_key,"]"}); void'(m_do_data({`"ARG[`", string_aa_key, "]"}, ARG[aa_key], local_data__.ARG[aa_key], what__, $bits(ARG[aa_key]), FLAG)); ovm_auto_options_object.comparer.scope.unset_arg(string_aa_key); end while(ARG.next(aa_key)); ovm_auto_options_object.comparer.scope.down(`"ARG`",null); end end OVM_COPY: begin if(!((FLAG)&OVM_NOCOPY) && (tmp_data__ != null) ) begin $cast(local_data__, tmp_data__); ARG.delete(); if(local_data__.ARG.first(aa_key)) do begin ARG[aa_key] = local_data__.ARG[aa_key]; end while(local_data__.ARG.next(aa_key)); end end OVM_PRINT: ovm_print_aa_int_key4(KEY,ARG, ovm_radix_enum'((FLAG)&(OVM_RADIX)), ovm_auto_options_object.printer) endcase end end |
|
|
M_OVM_FIELD_DATA_AA_generic(int, string, ARG, FLAG) |
|
|
begin int key__; if((what__ & (FLAG)) || (what__ >= OVM_MACRO_EXTRAS)) begin case (what__) OVM_COMPARE: begin if(!((FLAG)&OVM_NOCOMPARE) && (tmp_data__ != null) ) begin $cast(local_data__, tmp_data__); if(ARG.num() != local_data__.ARG.num()) begin int s1__, s2__; m_sc.stringv = ""; s1__ = ARG.num(); s2__ = local_data__.ARG.num(); $swrite(m_sc.stringv, "lhs size = %0d : rhs size = %0d", s1__, s2__); ovm_auto_options_object.comparer.print_msg(m_sc.stringv); end if(ARG.first(key__)) begin do begin ovm_object tmp__; /* Since m_do_data_object is inout, need a ovm_object for */ /* assignment compatibility. We must cast back the return. */ tmp__ = ARG[key__]; $swrite(m_sc.stringv, "[%0d]", key__); ovm_auto_options_object.comparer.scope.down_element(key__,tmp__); void'(m_do_data_object(m_sc.stringv, tmp__, local_data__.ARG[key__], what__, FLAG)); ovm_auto_options_object.comparer.scope.up_element(tmp__); end while(ARG.next(key__)); end end end OVM_COPY: begin if(!((FLAG)&OVM_NOCOPY) && (tmp_data__ != null) ) begin $cast(local_data__, tmp_data__); ARG.delete(); if(local_data__.ARG.first(key__)) do begin if((FLAG)&OVM_REFERENCE) ARG[key__] = local_data__.ARG[key__]; /*else if((FLAG)&OVM_SHALLOW)*/ /* ARG[key__] = new local_data__.ARG[key__];*/ else begin ovm_object tmp_obj; tmp_obj = local_data__.ARG[key__].clone(); if(tmp_obj != null) $cast(ARG[key__], tmp_obj); else ARG[key__]=null; end end while(local_data__.ARG.next(key__)); end end OVM_PRINT: ovm_print_aa_int_object3(ARG, ovm_auto_options_object.printer,FLAG) endcase end end |
|
|
begin if((what__ & (FLAG)) || (what__ >= OVM_MACRO_EXTRAS)) begin case (what__) OVM_COMPARE: begin if(!((FLAG)&OVM_NOCOMPARE) && (tmp_data__ != null) ) begin $cast(local_data__, tmp_data__); if(ARG.num() != local_data__.ARG.num()) begin int s1__, s2__; m_sc.stringv = ""; s1__ = ARG.num(); s2__ = local_data__.ARG.num(); $swrite(m_sc.stringv, "lhs size = %0d : rhs size = %0d", s1__, s2__); ovm_auto_options_object.comparer.print_msg(m_sc.stringv); end string_aa_key = ""; while(ARG.next(string_aa_key)) begin ovm_object tmp; /* Since m_do_data_object is inout, need a ovm_object for */ /* assignment compatibility. We must cast back the return. */ tmp = ARG[string_aa_key]; ovm_auto_options_object.comparer.scope.down({"[",string_aa_key,"]"},tmp); void'(m_do_data_object({"[", string_aa_key, "]"}, tmp, local_data__.ARG[string_aa_key], what__, FLAG)); ovm_auto_options_object.comparer.scope.up(tmp,"["); end end end OVM_COPY: begin if(!((FLAG)&OVM_NOCOPY) && (tmp_data__ != null) ) begin $cast(local_data__, tmp_data__); ARG.delete(); if(local_data__.ARG.first(string_aa_key)) do if((FLAG)&OVM_REFERENCE) ARG[string_aa_key] = local_data__.ARG[string_aa_key]; /*else if((FLAG)&OVM_SHALLOW)*/ /* ARG[string_aa_key] = new local_data__.ARG[string_aa_key];*/ else begin $cast(ARG[string_aa_key],local_data__.ARG[string_aa_key].clone()); ARG[string_aa_key].set_name({`"ARG`","[",string_aa_key, "]"}); end while(local_data__.ARG.next(string_aa_key)); end end OVM_PRINT: ovm_print_aa_string_object3(ARG, ovm_auto_options_object.printer,FLAG) endcase end end |
|
|
begin if((what__ & (FLAG)) || (what__ >= OVM_MACRO_EXTRAS)) begin case (what__) OVM_COMPARE: begin if(!((FLAG)&OVM_NOCOMPARE) && (tmp_data__ != null) ) begin $cast(local_data__, tmp_data__); if(ARG.num() != local_data__.ARG.num()) begin int s1__, s2__; m_sc.stringv = ""; s1__ = ARG.num(); s2__ = local_data__.ARG.num(); $swrite(m_sc.stringv, "lhs size = %0d : rhs size = %0d", s1__, s2__); ovm_auto_options_object.comparer.print_msg(m_sc.stringv); end string_aa_key = ""; while(ARG.next(string_aa_key)) begin ovm_auto_options_object.comparer.scope.set_arg({"[",string_aa_key,"]"}); void'(m_do_data_string({`"ARG[`", string_aa_key, "]"}, ARG[string_aa_key], local_data__.ARG[string_aa_key], what__, FLAG) ); ovm_auto_options_object.comparer.scope.unset_arg(string_aa_key); end end end OVM_COPY: begin if(!((FLAG)&OVM_NOCOPY) && (local_data__ !=null)) begin ARG.delete(); string_aa_key = ""; while(local_data__.ARG.next(string_aa_key)) ARG[string_aa_key] = local_data__.ARG[string_aa_key]; end end OVM_PRINT: ovm_print_aa_string_string2(ARG, ovm_auto_options_object.printer) endcase end end |
|
|
begin case (what__) OVM_COMPARE: if ( !((FLAG)&OVM_NOCOMPARE) && (tmp_data__ != null) ) begin int i__; $cast(local_data__, tmp_data__); if(ARG.size() != local_data__.ARG.size()) begin int s1__, s2__; m_sc.stringv = ""; s1__ = ARG.size(); s2__ = local_data__.ARG.size(); $swrite(m_sc.stringv, "lhs size = %0d : rhs size = %0d", s1__, s2__); ovm_auto_options_object.comparer.print_msg(m_sc.stringv); end for(i__=0; i__<ARG.size() && i__ if(ARG[i__] !== local_data__.``ARG[i__]) begin ovm_auto_options_object.comparer.scope.down_element(i__, null); case(OVM_RADIX&(FLAG)) OVM_BIN: $swrite(m_sc.stringv, "lhs = 'b%0b : rhs = 'b%0b", ARG[i__], local_data__.ARG[i__]); OVM_OCT: $swrite(m_sc.stringv, "lhs = 'o%0o : rhs = 'o%0o", ARG[i__], local_data__.ARG[i__]); OVM_DEC: $swrite(m_sc.stringv, "lhs = %0d : rhs = %0d", ARG[i__], local_data__.ARG[i__]); OVM_UNSIGNED: $swrite(m_sc.stringv, "lhs = %0d : rhs = %0d", ARG[i__], local_data__.ARG[i__]); OVM_HEX: $swrite(m_sc.stringv, "lhs = 'h%0x : rhs = 'h%0x", ARG[i__], local_data__.ARG[i__]); OVM_STRING: $swrite(m_sc.stringv, "lhs = %0s : rhs = %0s", ARG[i__], local_data__.ARG[i__]); OVM_TIME: $swrite(m_sc.stringv, "lhs = %0t : rhs = %0t", ARG[i__], local_data__.ARG[i__]); default: $swrite(m_sc.stringv, "lhs = %0d : rhs = %0d", ARG[i__], local_data__.ARG[i__]); endcase ovm_auto_options_object.comparer.print_msg(m_sc.stringv); ovm_auto_options_object.comparer.scope.up_element(null); end end end OVM_COPY: if(!((FLAG)&OVM_NOCOPY) && (tmp_data__ != null)) begin int i__; $cast(local_data__, tmp_data__); /*Resizing of array is done in ovm_field*/ for(i__=0; i__ < ARG``.size(); ++i__) begin ARG[i__] = local_data__.``ARG[i__] ; end end OVM_PRINT: begin if(((FLAG)&OVM_NOPRINT) == 0 && ovm_auto_options_object.printer.knobs.print_fields == 1) begin ovm_print_array_int3(ARG, ovm_radix_enum'((FLAG)&(OVM_RADIX)), ovm_auto_options_object.printer) end end OVM_RECORD: begin if(((FLAG)&OVM_NORECORD) == 0) begin m_ovm_record_array_int(ARG, ovm_radix_enum'((FLAG)&(OVM_RADIX)), ovm_auto_options_object.recorder) end end endcase end |
|
|
begin if((what__ & (FLAG)) || (what__ >= OVM_MACRO_EXTRAS)) begin ovm_object this_d__, from_d__; case (what__) OVM_COMPARE: if ( !((FLAG)&OVM_NOCOMPARE) && (tmp_data__ != null)) begin int i__; ovm_recursion_policy_enum orig_policy; orig_policy = ovm_auto_options_object.comparer.policy; if(((FLAG)&OVM_REFERENCE) != 0) begin ovm_auto_options_object.comparer.policy = OVM_REFERENCE; end $cast(local_data__, tmp_data__); if(ARG.size() != local_data__.``ARG.size()) begin int s1__, s2__; m_sc.stringv = ""; s1__ = ARG.size(); s2__ = local_data__.ARG.size(); $swrite(m_sc.stringv, "lhs size = %0d : rhs size = %0d", s1__, s2__); ovm_auto_options_object.comparer.print_msg(m_sc.stringv); end for(i__=0; i__<ARG.size() && i__ void'(ovm_auto_options_object.comparer.compare_object($psprintf(`"ARG[%0d]`",i__), ARG[i__], local_data__.ARG[i__])); ovm_auto_options_object.comparer.policy = orig_policy; end OVM_COPY: if(!((FLAG)&OVM_NOCOPY) && (tmp_data__ != null) ) begin int i__; $cast(local_data__, tmp_data__); /*Resizing of array is done in ovm_field_array* macro*/ for(i__=0; i__ < ARG``.size(); ++i__) begin DOSHALLOWCOPY(ARG[i__], local_data__.ARG[i__], FLAG) DODEEPCOPY(ARG[i__], FLAG) end end OVM_PRINT: if((((FLAG)&OVM_NOPRINT) == 0) && ovm_auto_options_object.printer.knobs.print_fields == 1) begin ovm_print_array_object3(ARG, ovm_auto_options_object.printer,FLAG) end OVM_RECORD: begin if((((FLAG)&OVM_NORECORD) == 0) && (((FLAG)&OVM_SHALLOW) == 0)) begin m_ovm_record_array_object(ARG,ovm_auto_options_object.recorder) end end endcase end end |
|
|
begin if((what__ & (FLAG)) || (what__ >= OVM_MACRO_EXTRAS)) begin case (what__) OVM_COMPARE: if ( !((FLAG)&OVM_NOCOMPARE) && (tmp_data__ != null) ) begin int i__; $cast(local_data__, tmp_data__); if(ARG.size() != local_data__.``ARG.size()) begin int s1__, s2__; m_sc.stringv = ""; s1__ = ARG.size(); s2__ = local_data__.ARG.size(); $swrite(m_sc.stringv, "lhs size = %0d : rhs size = %0d", s1__, s2__); ovm_auto_options_object.comparer.print_msg(m_sc.stringv); end for(i__=0; i__<ARG.size() && i__ if(ARG[i__] != local_data__.ARG[i__]) begin real ls__, rs__; ls__ = ARG[i__]; rs__ = local_data__.ARG[i__]; ovm_auto_options_object.comparer.scope.down_element(i__, null); $swrite(m_sc.stringv, "lhs = %0f : rhs = %0f", ls__, rs__); ovm_auto_options_object.comparer.print_msg(m_sc.stringv); ovm_auto_options_object.comparer.scope.up_element(null); end end OVM_COPY: if(!((FLAG)&OVM_NOCOPY) && (tmp_data__ != null) ) begin int i__; $cast(local_data__, tmp_data__); /*Resizing of array is done in ovm_field_array* macro*/ for(i__=0; i__ < ARG.size(); ++i__) ARG[i__] = local_data__.ARG[i__] ; end OVM_PRINT: begin if((FLAG)&OVM_NOPRINT != 0 && ovm_auto_options_object.printer.knobs.print_fields == 1) ovm_print_array_real2(ARG, ovm_auto_options_object.printer) end OVM_RECORD: begin if(((FLAG)&OVM_NORECORD) == 0 && !m_sc.array_warning_done) begin m_ovm_record_array_real(ARG, ovm_auto_options_object.recorder) end end endcase end end |
|
|
begin if((what__ & (FLAG)) || (what__ >= OVM_MACRO_EXTRAS)) begin case (what__) OVM_COMPARE: if ( !((FLAG)&OVM_NOCOMPARE) && (tmp_data__ != null) ) begin int i__; $cast(local_data__, tmp_data__); if(ARG.size() != local_data__.``ARG.size()) begin int s1__, s2__; m_sc.stringv = ""; s1__ = ARG.size(); s2__ = local_data__.ARG.size(); $swrite(m_sc.stringv, "lhs size = %0d : rhs size = %0d", s1__, s2__); ovm_auto_options_object.comparer.print_msg(m_sc.stringv); end for(i__=0; i__<ARG.size() && i__ if(ARG[i__] != local_data__.ARG[i__]) begin string ls__, rs__; ls__ = ARG[i__]; rs__ = local_data__.ARG[i__]; ovm_auto_options_object.comparer.scope.down_element(i__, null); $swrite(m_sc.stringv, "lhs = %0s : rhs = %0s", ls__, rs__); ovm_auto_options_object.comparer.print_msg(m_sc.stringv); ovm_auto_options_object.comparer.scope.up_element(null); end end OVM_COPY: if(!((FLAG)&OVM_NOCOPY) && (tmp_data__ != null) ) begin int i__; $cast(local_data__, tmp_data__); /*Resizing of array is done in ovm_field_array* macro*/ for(i__=0; i__ < ARG.size(); ++i__) ARG[i__] = local_data__.ARG[i__] ; end OVM_PRINT: begin if((FLAG)&OVM_NOPRINT != 0 && ovm_auto_options_object.printer.knobs.print_fields == 1) ovm_print_array_string2(ARG, ovm_auto_options_object.printer) end OVM_RECORD: begin if(((FLAG)&OVM_NORECORD) == 0 && !m_sc.array_warning_done) begin m_ovm_record_array_string(ARG, ovm_auto_options_object.recorder) end end endcase end end |
|
|
begin if(what__ == OVM_PRINT && ( (FLAG)&OVM_NOPRINT != 0) && ovm_auto_options_object.printer.knobs.print_fields == 1) ovm_auto_options_object.printer.print_generic(`"ARG`", "event", -1, "-"); else if((what__ == OVM_COMPARE) && ( (FLAG)&OVM_NOCOMPARE != 0) && local_data__ && ARG != local_data__.ARG) begin ovm_auto_options_object.comparer.print_msg(""); end else if((what__ == OVM_COPY) && local_data__ && ( (FLAG)&OVM_NOCOPY != 0 ) ) begin ARG = local_data__.ARG; end end |
|
|
begin int r__; ovm_object lhs__, rhs__; r__ = 0; if(ARG == null) lhs__ = null; else if(!$cast(lhs__,ARG)) begin ovm_object::m_sc.scratch1 = `"Cast failed for ARG to ovm_object type (ovm_field_object not implemented)`"; _global_reporter.ovm_report_warning("CSTFLD",ovm_object::m_sc.scratch1, OVM_NONE); end if(tmp_data__ != null) begin if($cast(local_data__, tmp_data__)) begin r__ = m_do_data_object(`"ARG`", lhs__, local_data__.ARG, what__, FLAG); end else if(tmp_data__!=null) begin ovm_object::m_sc.scratch1 = `"Type check failed for ARG for copy/compare`"; _global_reporter.ovm_report_error("TCKFLD", ovm_object::m_sc.scratch1, OVM_NONE); end end else begin r__ = m_do_data_object(`"ARG`", lhs__, null, what__, FLAG); if (what__ == OVM_UNPACK) begin m_sc.scope.up(ARG); if (lhs__ == null) ARG = null; else if (!$cast(ARG,lhs__)) ARG = null; m_sc.scope.down(`"ARG`",ARG); end end /* if return is 1 then upack of the object failed, don't want to continue. */ if(r__ == 1 && what__ == OVM_UNPACK) return; if((what__ == OVM_COPY) && (ovm_recursion_policy_enum'(r__) == OVM_SHALLOW)) begin ovm_object v__; m_sc.scope.up(ARG); v__ = ovm_global_copy_map.get(local_data__.ARG); if(v__ != null) begin $cast(ARG, v__); end else begin /* Can't do shallow copy right now due to */ /* an issue with abstract classes */ /* like ovm_object, so do a deep copy instead. */ if(local_data__.ARG==null) ARG = null; else if(ARG!=null) ARG.copy(local_data__.ARG); else begin ovm_object cobj; cobj = local_data__.ARG.clone(); if(cobj == null) ARG = null; else begin $cast(ARG, local_data__.ARG.clone()); ARG.set_name(`"ARG`"); end end end m_sc.scope.down(`"ARG`",ARG); end else if((what__ == OVM_COPY) && (ovm_recursion_policy_enum'(r__) == OVM_REFERENCE)) begin m_sc.scope.up(ARG); if((lhs__ == null)&&(local_data__.ARG != null)) begin if(!$cast(ARG,local_data__.ARG)) begin ovm_object::m_sc.scratch1 = `"Copy cast failed for ARG`"; _global_reporter.ovm_report_error("CSTFLD",ovm_object::m_sc.scratch1, OVM_NONE); end end else if(lhs__==null) ARG = null; else $cast(ARG, lhs__); m_sc.scope.down(`"ARG`",ARG); end end |
|
|
begin if((what__ & (FLAG)) || (what__ >= OVM_MACRO_EXTRAS)) begin case (what__) OVM_COMPARE: if ( !((FLAG)&OVM_NOCOMPARE) && (tmp_data__ != null) ) begin int i__; $cast(local_data__, tmp_data__); if(ARG.size() != local_data__.``ARG.size()) begin int s1__, s2__; m_sc.stringv = ""; s1__ = ARG.size(); s2__ = local_data__.ARG.size(); $swrite(m_sc.stringv, "lhs size = %0d : rhs size = %0d", s1__, s2__); ovm_auto_options_object.comparer.print_msg(m_sc.stringv); end for(i__=0; i__<ARG.size() && i__ if(ARG[i__] != local_data__.ARG[i__]) begin real ls__, rs__; ls__ = ARG[i__]; rs__ = local_data__.ARG[i__]; ovm_auto_options_object.comparer.scope.down_element(i__, null); $swrite(m_sc.stringv, "lhs = %0f : rhs = %0f", ls__, rs__); ovm_auto_options_object.comparer.print_msg(m_sc.stringv); ovm_auto_options_object.comparer.scope.up_element(null); end end OVM_COPY: if(!((FLAG)&OVM_NOCOPY) && (tmp_data__ != null) ) begin int i__; $cast(local_data__, tmp_data__); /*Resizing of array is done in ovm_field_array* macro*/ for(i__=0; i__ < ARG.size(); ++i__) ARG[i__] = local_data__.ARG[i__] ; end OVM_PRINT: begin if((FLAG)&OVM_NOPRINT != 0 && ovm_auto_options_object.printer.knobs.print_fields == 1) ovm_print_array_real2(ARG, ovm_auto_options_object.printer) end OVM_RECORD: begin if(((FLAG)&OVM_NORECORD) == 0 && !m_sc.array_warning_done) begin m_ovm_record_array_real(ARG, ovm_auto_options_object.recorder) end end endcase end end |
|
|
begin if((what__ & (FLAG)) || (what__ >= OVM_MACRO_EXTRAS)) begin if(what__ == OVM_PRINT && ((FLAG)&OVM_NOPRINT) == 0) ovm_print_sarray_int3(ARG, ovm_radix_enum'((FLAG)&(OVM_RADIX)), ovm_auto_options_object.printer) else if(tmp_data__!=null) begin foreach(ARG[i__]) if($cast(local_data__, tmp_data__)) begin void'(m_do_data($psprintf(`"ARG[%0d]`",i__), ARG[i__], local_data__.ARG[i__], what__, $bits(ARG[i__]), FLAG)); end end else begin foreach(ARG[i__]) if($cast(local_data__, tmp_data__)) begin void'(m_do_data($psprintf(`"ARG[%0d]`",i__), ARG[i__], 0, what__, $bits(ARG[i__]), FLAG)); end end end end |
|
|
begin if((what__ & (FLAG)) || (what__ >= OVM_MACRO_EXTRAS)) begin ovm_object lhs__; if(what__ == OVM_PRINT && ((FLAG)&OVM_NOPRINT) == 0) ovm_print_sarray_object3(ARG, ovm_auto_options_object.printer, FLAG) else if((what__ == OVM_COPY) && ((FLAG)&OVM_NOCOPY)==0) begin $cast(local_data__, tmp_data__); foreach(ARG[i__]) begin if(local_data__.ARG[i__] == null || (((FLAG)&OVM_REFERENCE) != 0)) ARG[i__] = local_data__.ARG[i__]; else if(((FLAG)&OVM_SHALLOW) != 0) ARG[i__] = new local_data__.ARG[i__]; else if(ARG[i__] != null) ARG[i__].copy(local_data__.ARG[i__]); else $cast(ARG[i__],local_data__.ARG[i__].clone()); end end else if((what__ != OVM_COPY) && (tmp_data__!=null)) begin $cast(local_data__, tmp_data__); foreach(ARG[i__]) begin lhs__ = ARG[i__]; if($cast(local_data__, tmp_data__)) void'(m_do_data_object($psprintf(`"ARG[%0d]`",i__), lhs__, local_data__.ARG[i__], what__, FLAG)); else void'(m_do_data_object($psprintf(`"ARG[%0d]`",i__), lhs__, null, what__, FLAG)); end end else if (what__ != OVM_COPY) begin foreach(ARG[i__]) begin lhs__ = ARG[i__]; void'(m_do_data_object($psprintf(`"ARG[%0d]`",i__), lhs__, null, what__, FLAG)); end end end end |
|
|
begin if((what__ & (FLAG)) || (what__ >= OVM_MACRO_EXTRAS)) begin case (what__) OVM_COMPARE: if ( !((FLAG)&OVM_NOCOMPARE) && (tmp_data__ != null) ) begin int i__; $cast(local_data__, tmp_data__); for(i__=0; i__<$size(ARG) && i__<$size(local_data__.ARG); ++i__) if(ARG[i__] != local_data__.ARG[i__]) begin real ls__, rs__; ls__ = ARG[i__]; rs__ = local_data__.ARG[i__]; ovm_auto_options_object.comparer.scope.down_element(i__, null); $swrite(m_sc.stringv, "lhs = %0f : rhs = %0f", ls__, rs__); ovm_auto_options_object.comparer.print_msg(m_sc.stringv); ovm_auto_options_object.comparer.scope.up_element(null); end end OVM_COPY: if(!((FLAG)&OVM_NOCOPY) && (tmp_data__ != null) ) begin int i__; $cast(local_data__, tmp_data__); /*Resizing of array is done in ovm_field_array* macro*/ for(i__=0; i__ < $size(ARG); ++i__) ARG[i__] = local_data__.ARG[i__] ; end OVM_PRINT: begin if((FLAG)&OVM_NOPRINT != 0 && ovm_auto_options_object.printer.knobs.print_fields == 1) ovm_print_array_real2(ARG, ovm_auto_options_object.printer) end OVM_RECORD: begin if(((FLAG)&OVM_NORECORD) == 0 && !m_sc.array_warning_done) begin m_ovm_record_sarray_real(ARG, ovm_auto_options_object.recorder) end end endcase end end |
|
|
begin if((what__ & (FLAG)) || (what__ >= OVM_MACRO_EXTRAS)) begin if(what__ == OVM_PRINT && ((FLAG)&OVM_NOPRINT) == 0) ovm_print_sarray_string2(ARG, ovm_auto_options_object.printer) else if(tmp_data__!=null) begin foreach(ARG[i__]) if($cast(local_data__, tmp_data__)) begin void'(m_do_data_string($psprintf(`"ARG[%0d]`",i__), ARG[i__], local_data__.ARG[i__], what__, FLAG)); end end else begin foreach(ARG[i__]) if($cast(local_data__, tmp_data__)) begin void'(m_do_data_string($psprintf(`"ARG[%0d]`",i__), ARG[i__], "", what__, FLAG)); end end end end |
|
|
begin int r__; if(local_data__ != null) begin if($cast(local_data__, tmp_data__)) begin r__ = m_do_data_string(`"ARG`", ARG, local_data__.ARG, what__, FLAG); end end else r__ = m_do_data_string(`"ARG`", ARG, "", what__, FLAG); end |
|
|
begin T lh__=ARG, rh__; if((what__ == OVM_PRINT) && (((FLAG)&OVM_NOPRINT) == 0) && (ovm_auto_options_object.printer.knobs.print_fields == 1)) begin ovm_auto_options_object.printer.print_generic(`"ARG`", `"T`", $bits(ARG), lh__.name()); end else if((what__ == OVM_RECORD) && (((FLAG)&OVM_NORECORD) == 0)) begin ovm_auto_options_object.recorder.record_string(`"ARG`",lh__.name()); end else if(tmp_data__!=null) begin if($cast(local_data__, tmp_data__)) begin case(what__) OVM_COPY: if(((FLAG)&OVM_NOCOPY) == 0) ARG = local_data__.ARG; OVM_COMPARE: if((((FLAG)&OVM_NOCOMPARE) == 0) && (ARG != local_data__.ARG)) begin rh__ = local_data__.ARG; ovm_auto_options_object.comparer.print_msg({"lhs = ", lh__.name(), " : rhs = ", rh__.name()}); end endcase end end else begin case(what__) OVM_PACK: if(((FLAG)&OVM_NOPACK) == 0) if((((FLAG)&OVM_ABSTRACT) && ovm_auto_options_object.packer.abstract) || (!((FLAG)&OVM_ABSTRACT) && ovm_auto_options_object.packer.physical)) begin ovm_auto_options_object.packer.pack_field_int(int'(ARG), $bits(ARG)); end OVM_UNPACK: begin if((((FLAG)&OVM_ABSTRACT) && ovm_auto_options_object.packer.abstract) || (!((FLAG)&OVM_ABSTRACT) && ovm_auto_options_object.packer.physical)) if(((FLAG)&OVM_NOPACK) == 0) begin ARG = T'(ovm_auto_options_object.packer.unpack_field_int($bits(ARG))); end end OVM_SETINT: begin if(ovm_is_match(str__ ,m_sc.scope.get_arg()) && (((FLAG)&OVM_READONLY) == 0)) begin print_field_match("set_int()", str__); ARG = T'(ovm_object::m_sc.bitstream); ovm_object::m_sc.status = 1; end end endcase end end |
|
|
case(what__) OVM_PACK: if(((FLAG)&OVM_NOPACK) == 0) begin if((((FLAG)&OVM_ABSTRACT) && ovm_auto_options_object.packer.abstract) || (!((FLAG)&OVM_ABSTRACT) && ovm_auto_options_object.packer.physical)) begin if(ovm_auto_options_object.packer.use_metadata == 1) ovm_auto_options_object.packer.pack_field_int(ARG.size(), 32); foreach(ARG[i]) ovm_auto_options_object.packer.pack_field(ARG[i], $bits(ARG[i])); end end OVM_UNPACK: if(((FLAG)&OVM_NOPACK) == 0) begin if((((FLAG)&OVM_ABSTRACT) && ovm_auto_options_object.packer.abstract) || (!((FLAG)&OVM_ABSTRACT) && ovm_auto_options_object.packer.physical)) begin if(ovm_auto_options_object.packer.use_metadata) begin int s_; s_ = ovm_auto_options_object.packer.unpack_field_int(32); while(ARG.size() < s_) ARG.push_back(0); while(ARG.size() > s_) void'(ARG.pop_front()); end foreach(ARG[i]) ARG[i] = ovm_auto_options_object.packer.unpack_field($bits(ARG[i])); end end endcase |
|
|
case(what__) OVM_PACK: if(((FLAG)&OVM_NOPACK) == 0) begin if((((FLAG)&OVM_ABSTRACT) && ovm_auto_options_object.packer.abstract) || (!((FLAG)&OVM_ABSTRACT) && ovm_auto_options_object.packer.physical)) begin if(ovm_auto_options_object.packer.use_metadata == 1) ovm_auto_options_object.packer.pack_field_int(ARG.size(), 32); foreach(ARG[i]) begin ovm_auto_options_object.packer.pack_object(ARG[i]); end end end OVM_UNPACK: if(((FLAG)&OVM_NOPACK) == 0) begin if((((FLAG)&OVM_ABSTRACT) && ovm_auto_options_object.packer.abstract) || (!((FLAG)&OVM_ABSTRACT) && ovm_auto_options_object.packer.physical)) begin if(ovm_auto_options_object.packer.use_metadata) begin int s_; s_ = ovm_auto_options_object.packer.unpack_field_int(32); if(ARG.size() < s_) _global_reporter.ovm_report_error("OBJUPK", $psprintf(`"Queue ARG cannot support the unpack operation, the unpack requires %0d elements, ARG has only %0d`", s_, ARG.size()), OVM_NONE); end foreach(ARG[i]) begin ovm_auto_options_object.packer.unpack_object(ARG[i]); if(ovm_auto_options_object.packer.use_metadata == 0 && ARG[i] == null) return; end end end endcase |
|
|
case(what__) OVM_PACK: if(((FLAG)&OVM_NOPACK) == 0) begin if((((FLAG)&OVM_ABSTRACT) && ovm_auto_options_object.packer.abstract) || (!((FLAG)&OVM_ABSTRACT) && ovm_auto_options_object.packer.physical)) begin if(ovm_auto_options_object.packer.use_metadata == 1) ovm_auto_options_object.packer.pack_field_int(ARG.size(), 32); foreach(ARG[i]) ovm_auto_options_object.packer.pack_real(ARG[i]); end end OVM_UNPACK: if(((FLAG)&OVM_NOPACK) == 0) begin if((((FLAG)&OVM_ABSTRACT) && ovm_auto_options_object.packer.abstract) || (!((FLAG)&OVM_ABSTRACT) && ovm_auto_options_object.packer.physical)) begin if(ovm_auto_options_object.packer.use_metadata) begin int s_; s_ = ovm_auto_options_object.packer.unpack_field_int(32); /* ARG = new[s_]; */ end foreach(ARG[i]) ARG[i] = ovm_auto_options_object.packer.unpack_real(); end end endcase |
|
|
case(what__) OVM_PACK: if(((FLAG)&OVM_NOPACK) == 0) begin if((((FLAG)&OVM_ABSTRACT) && ovm_auto_options_object.packer.abstract) || (!((FLAG)&OVM_ABSTRACT) && ovm_auto_options_object.packer.physical)) begin if(ovm_auto_options_object.packer.use_metadata == 1) ovm_auto_options_object.packer.pack_field_int(ARG.size(), 32); foreach(ARG[i]) ovm_auto_options_object.packer.pack_string(ARG[i]); end end OVM_UNPACK: if(((FLAG)&OVM_NOPACK) == 0) begin if((((FLAG)&OVM_ABSTRACT) && ovm_auto_options_object.packer.abstract) || (!((FLAG)&OVM_ABSTRACT) && ovm_auto_options_object.packer.physical)) begin if(ovm_auto_options_object.packer.use_metadata) begin int s_; s_ = ovm_auto_options_object.packer.unpack_field_int(32); while(ARG.size() < s_) ARG.push_back(""); while(ARG.size() > s_) void'(ARG.pop_front()); end foreach(ARG[i]) begin ARG[i] = ovm_auto_options_object.packer.unpack_string(-1); end end end endcase |
|
|
case(what__) OVM_PACK: if(((FLAG)&OVM_NOPACK) == 0) begin if((((FLAG)&OVM_ABSTRACT) && ovm_auto_options_object.packer.abstract) || (!((FLAG)&OVM_ABSTRACT) && ovm_auto_options_object.packer.physical)) begin foreach(ARG[i]) ovm_auto_options_object.packer.pack_real(ARG[i]); end end OVM_UNPACK: if(((FLAG)&OVM_NOPACK) == 0) begin if((((FLAG)&OVM_ABSTRACT) && ovm_auto_options_object.packer.abstract) || (!((FLAG)&OVM_ABSTRACT) && ovm_auto_options_object.packer.physical)) begin foreach(ARG[i]) ARG[i] = ovm_auto_options_object.packer.unpack_real(); end end endcase |
|
|
void'(ovm_object::m_do_set (str__, `"ARG`", ARG, what__, FLAG)); |
|
|
if((what__ >= OVM_START_FUNCS && what__ <= OVM_END_FUNCS) && (((FLAG)&OVM_READONLY) == 0)) begin bit wildcard_index__; INDEX_TYPE index__; string idx__; index__ = INDEX_TYPE'(ovm_get_array_index_int(str__, wildcard_index__)); if(what__==OVM_SET``ARRAY_TYPE) begin if(ovm_is_array(str__) ) begin if(wildcard_index__) begin if(ARRAY.first(index__)) do begin $swrite(idx__, m_sc.scope.get_arg(), "[", index__, "]"); if(ovm_is_match(str__, idx__)) begin ARRAY[index__] = RHS; m_sc.status = 1; end end while(ARRAY.next(index__)); end else if(ovm_is_match(str__, {m_sc.scope.get_arg(),$psprintf("[%0d]", index__)})) begin ARRAY[index__] = RHS; m_sc.status = 1; end end end end |
|
|
if((what__ >= OVM_START_FUNCS && what__ <= OVM_END_FUNCS) && (((FLAG)&OVM_READONLY) == 0)) begin bit wildcard_index__; INDEX_TYPE index__; string idx__; index__ = ovm_get_array_index_int(str__, wildcard_index__); if(what__==OVM_SET``ARRAY_TYPE) begin if(ovm_is_array(str__) ) begin if(wildcard_index__) begin if(ARRAY.first(index__)) do begin $swrite(idx__, m_sc.scope.get_arg(), "[", index__, "]"); if(ovm_is_match(str__, idx__)) begin ARRAY[index__] = RHS; m_sc.status = 1; end end while(ARRAY.next(index__)); end else if(ovm_is_match(str__, {m_sc.scope.get_arg(),$psprintf("[%0d]", index__)})) begin ARRAY[index__] = RHS; m_sc.status = 1; end end end end |
|
|
if((what__ >= OVM_START_FUNCS && what__ <= OVM_END_FUNCS) && (((FLAG)&OVM_READONLY) == 0)) begin bit wildcard_index__; INDEX_TYPE index__; index__ = ovm_get_array_index_``INDEX_TYPE(str__, wildcard_index__); if(what__==OVM_SETOBJ) begin if(ovm_is_array(str__) ) begin if(wildcard_index__) begin if(ARRAY.first(index__)) do begin if(ovm_is_match(str__, {m_sc.scope.get_arg(),$psprintf("[%0d]", index__)}) || ovm_is_match(str__, {m_sc.scope.get_arg(),$psprintf("[%0s]", index__)})) begin if (m_sc.object != null) $cast(ARRAY[index__], m_sc.object); m_sc.status = 1; end end while(ARRAY.next(index__)); end else if(ovm_is_match(str__, {m_sc.scope.get_arg(),$psprintf("[%0d]", index__)})) begin if (m_sc.object != null) $cast(ARRAY[index__], m_sc.object); m_sc.status = 1; end else if(ovm_is_match(str__, {m_sc.scope.get_arg(),$psprintf("[%0s]", index__)})) begin if (m_sc.object != null) $cast(ARRAY[index__], m_sc.object); m_sc.status = 1; end end end end |
|
|
if((what__ >= OVM_START_FUNCS && what__ <= OVM_END_FUNCS) && (((FLAG)&OVM_READONLY) == 0)) begin bit wildcard_index__; INDEX_TYPE index__; index__ = ovm_get_array_index_``INDEX_TYPE(str__, wildcard_index__); if(what__==OVM_SET``ARRAY_TYPE) begin if(ovm_is_array(str__) ) begin if(wildcard_index__) begin if(ARRAY.first(index__)) do begin if(ovm_is_match(str__, {m_sc.scope.get_arg(),$psprintf("[%0d]", index__)}) || ovm_is_match(str__, {m_sc.scope.get_arg(),$psprintf("[%0s]", index__)})) begin ARRAY[index__] = RHS; m_sc.status = 1; end end while(ARRAY.next(index__)); end else if(ovm_is_match(str__, {m_sc.scope.get_arg(),$psprintf("[%0d]", index__)})) begin ARRAY[index__] = RHS; m_sc.status = 1; end else if(ovm_is_match(str__, {m_sc.scope.get_arg(),$psprintf("[%0s]", index__)})) begin ARRAY[index__] = RHS; m_sc.status = 1; end end end end |
|
|
if((what__ >= OVM_START_FUNCS && what__ <= OVM_END_FUNCS) && (((FLAG)&OVM_READONLY) == 0)) begin int index__; bit wildcard_index__; index__ = ovm_get_array_index_int(str__, wildcard_index__); if(what__==OVM_SETINT) begin if(ovm_is_array(str__) ) begin if(wildcard_index__) begin for(int index__=0; index__<ARRAY.size(); ++index__) begin if(ovm_is_match(str__, {m_sc.scope.get_arg(),$psprintf("[%0d]", index__)})) begin ARRAY[index__] = T'(RHS); m_sc.status = 1; end end end else if(ovm_is_match(str__, {m_sc.scope.get_arg(),$psprintf("[%0d]", index__)})) begin ARRAY[index__] = T'(RHS); m_sc.status = 1; end else if(what__==OVM_SET && ovm_is_match(str__, m_sc.scope.get_arg())) begin int size__; size__ = m_sc.bitstream; ARRAY = new[size__](ARRAY); m_sc.status = 1; end end else if(what__==OVM_SET && ovm_is_match(str__, m_sc.scope.get_arg())) begin int size__; size__ = m_sc.bitstream; ARRAY = new[size__](ARRAY); m_sc.status = 1; end end else if(what__==OVM_SET && ovm_is_match(str__, m_sc.scope.get_arg())) begin int size__; size__ = m_sc.bitstream; ARRAY = new[size__](ARRAY); m_sc.status = 1; end end |
|
|
M_OVM_FIELD_SET_ARRAY_OBJECT_TYPE(ARG, FLAG) if((what__ >= OVM_START_FUNCS && what__ <= OVM_END_FUNCS) && (((FLAG)&OVM_READONLY) == 0)) begin ovm_object obj__; for(int index__=0; index__<ARG.size(); ++index__) begin if($cast(obj__,ARG[index__]) && (obj__!=null)) obj__.m_field_automation(null, what__, str__); end end |
|
|
if((what__ >= OVM_START_FUNCS && what__ <= OVM_END_FUNCS) && (((FLAG)&OVM_READONLY) == 0)) begin int index__; bit wildcard_index__; index__ = ovm_get_array_index_int(str__, wildcard_index__); if(what__==OVM_SETOBJ) begin if(ovm_is_array(str__) ) begin if(wildcard_index__) begin for(int index__=0; index__<ARRAY.size(); ++index__) begin if(ovm_is_match(str__, {m_sc.scope.get_arg(),$psprintf("[%0d]", index__)})) begin if (m_sc.object != null) begin $cast(ARRAY[index__], m_sc.object); end m_sc.status = 1; end end end else if(ovm_is_match(str__, {m_sc.scope.get_arg(),$psprintf("[%0d]", index__)})) begin if (m_sc.object != null) begin $cast(ARRAY[index__], m_sc.object); end m_sc.status = 1; end end end else if(what__==OVM_SET && !ovm_is_array(str__) && ovm_is_match(str__, m_sc.scope.get_arg())) begin int size__; size__ = m_sc.bitstream; ARRAY = new[size__](ARRAY); m_sc.status = 1; end end |
|
|
if((what__ >= OVM_START_FUNCS && what__ <= OVM_END_FUNCS) && (((FLAG)&OVM_READONLY) == 0)) begin int index__; bit wildcard_index__; index__ = ovm_get_array_index_int(str__, wildcard_index__); if(what__==OVM_SETINT) begin if(ovm_is_array(str__) ) begin if(wildcard_index__) begin for(int index__=0; index__<ARRAY.size(); ++index__) begin if(ovm_is_match(str__, {m_sc.scope.get_arg(),$sformatf("[%0d]", index__)})) begin ARRAY[index__] = RHS; m_sc.status = 1; end end end else if(ovm_is_match(str__, {m_sc.scope.get_arg(),$sformatf("[%0d]", index__)})) begin ARRAY[index__] = RHS; m_sc.status = 1; end else if(what__==OVM_SET && ovm_is_match(str__, m_sc.scope.get_arg())) begin int size__; size__ = m_sc.bitstream; ARRAY = new[size__](ARRAY); m_sc.status = 1; end end else if(what__==OVM_SET && ovm_is_match(str__, m_sc.scope.get_arg())) begin int size__; size__ = m_sc.bitstream; ARRAY = new[size__](ARRAY); m_sc.status = 1; end end else if(what__==OVM_SET && ovm_is_match(str__, m_sc.scope.get_arg())) begin int size__; size__ = m_sc.bitstream; ARRAY = new[size__](ARRAY); m_sc.status = 1; end end |
|
|
if((what__ >= OVM_START_FUNCS && what__ <= OVM_END_FUNCS) && (((FLAG)&OVM_READONLY) == 0)) begin int index__; bit wildcard_index__; index__ = ovm_get_array_index_int(str__, wildcard_index__); if(what__==OVM_SET``ARRAY_TYPE) begin if(ovm_is_array(str__) ) begin if(wildcard_index__) begin for(int index__=0; index__<ARRAY.size(); ++index__) begin if(ovm_is_match(str__, {m_sc.scope.get_arg(),$psprintf("[%0d]", index__)})) begin ARRAY[index__] = RHS; m_sc.status = 1; end end end else if(ovm_is_match(str__, {m_sc.scope.get_arg(),$psprintf("[%0d]", index__)})) begin ARRAY[index__] = RHS; m_sc.status = 1; end else if(what__==OVM_SET && ovm_is_match(str__, m_sc.scope.get_arg())) begin int size__; size__ = m_sc.bitstream; ARRAY = new[size__](ARRAY); m_sc.status = 1; end end else if(what__==OVM_SET && ovm_is_match(str__, m_sc.scope.get_arg())) begin int size__; size__ = m_sc.bitstream; ARRAY = new[size__](ARRAY); m_sc.status = 1; end end else if(what__==OVM_SET && ovm_is_match(str__, m_sc.scope.get_arg())) begin int size__; size__ = m_sc.bitstream; ARRAY = new[size__](ARRAY); m_sc.status = 1; end end |
|
|
/*Not implemented*/ |
|
|
begin ovm_object arg_obj__; int r__; /*return 1 if get succeeds*/ if(ARG != null) $cast(arg_obj__, ARG); r__ = ovm_object::m_do_set_object(str__, `"ARG`", arg_obj__, what__, FLAG); /*in case of a set, cast back */ if(r__ && (what__ == OVM_SETOBJ) && (arg_obj__ != null)) $cast(ARG, arg_obj__); else if(arg_obj__ == null) ARG = null; end |
|
|
if((what__ >= OVM_START_FUNCS && what__ <= OVM_END_FUNCS) && (((FLAG)&OVM_READONLY) == 0)) begin bit wildcard_index__; int index__; index__ = ovm_get_array_index_int(str__, wildcard_index__); if(what__==OVM_SETINT) begin if(ovm_is_array(str__) && (index__ != -1)) begin if(wildcard_index__) begin for(index__=0; index__<ARRAY.size(); ++index__) begin if(ovm_is_match(str__, {m_sc.scope.get_arg(),$psprintf("[%0d]", index__)})) begin ARRAY[index__] = T'(RHS); m_sc.status = 1; end end end else if(ovm_is_match(str__, {m_sc.scope.get_arg(),$psprintf("[%0d]", index__)})) begin ARRAY[index__] = T'(RHS); m_sc.status = 1; end end end end |
|
|
M_OVM_FIELD_SET_QUEUE_OBJECT_TYPE(ARG, FLAG) if((what__ >= OVM_START_FUNCS && what__ <= OVM_END_FUNCS) && (((FLAG)&OVM_READONLY) == 0)) begin ovm_object obj__; for(int index__=0; index__<ARG.size(); ++index__) begin if($cast(obj__,ARG[index__]) && (obj__!=null)) obj__.m_field_automation(null, what__, str__); end end |
|
|
if((what__ >= OVM_START_FUNCS && what__ <= OVM_END_FUNCS) && (((FLAG)&OVM_READONLY) == 0)) begin bit wildcard_index__; int index__; index__ = ovm_get_array_index_int(str__, wildcard_index__); if(what__==OVM_SETOBJ) begin if(ovm_is_array(str__) ) begin if(wildcard_index__) begin for(index__=0; index__<ARRAY.size(); ++index__) begin if(ovm_is_match(str__, {m_sc.scope.get_arg(),$psprintf("[%0d]", index__)})) begin if (m_sc.object != null) $cast(ARRAY[index__], m_sc.object); m_sc.status = 1; end end end else if(ovm_is_match(str__, {m_sc.scope.get_arg(),$psprintf("[%0d]", index__)})) begin if (m_sc.object != null) $cast(ARRAY[index__], m_sc.object); m_sc.status = 1; end end end end |
|
|
if((what__ >= OVM_START_FUNCS && what__ <= OVM_END_FUNCS) && (((FLAG)&OVM_READONLY) == 0)) begin int index__; bit wildcard_index__; index__ = ovm_get_array_index_int(str__, wildcard_index__); if(what__==OVM_SETINT) begin if(ovm_is_array(str__) ) begin if(wildcard_index__) begin foreach(ARRAY[index__]) begin if(ovm_is_match(str__, {m_sc.scope.get_arg(),$sformatf("[%0d]", index__)})) begin ARRAY[index__] = RHS; m_sc.status = 1; end end end else if(ovm_is_match(str__, {m_sc.scope.get_arg(),$sformatf("[%0d]", index__)})) begin ARRAY[index__] = RHS; m_sc.status = 1; end else if(what__==OVM_SET && ovm_is_match(str__, m_sc.scope.get_arg())) begin /* TODO: Do we need this block. */ m_sc.status = 1; end end else if(what__==OVM_SET && ovm_is_match(str__, m_sc.scope.get_arg())) begin /* TODO: Do we need this block. */ m_sc.status = 1; end end else if(what__==OVM_SET && ovm_is_match(str__, m_sc.scope.get_arg())) begin /* TODO: Do we need this block. */ m_sc.status = 1; end end |
|
|
if((what__ >= OVM_START_FUNCS && what__ <= OVM_END_FUNCS) && (((FLAG)&OVM_READONLY) == 0)) begin bit wildcard_index__; int index__; index__ = ovm_get_array_index_int(str__, wildcard_index__); if(what__==OVM_SET``ATYPE) begin if(ovm_is_array(str__) && (index__ != -1)) begin if(wildcard_index__) begin for(index__=0; index__<ARRAY.size(); ++index__) begin if(ovm_is_match(str__, {m_sc.scope.get_arg(),$psprintf("[%0d]", index__)})) begin ARRAY[index__] = RHS; m_sc.status = 1; end end end else if(ovm_is_match(str__, {m_sc.scope.get_arg(),$psprintf("[%0d]", index__)})) begin ARRAY[index__] = RHS; m_sc.status = 1; end end end end |
|
|
if((what__ >= OVM_START_FUNCS && what__ <= OVM_END_FUNCS) && (((FLAG)&OVM_READONLY) == 0)) begin int index__; bit wildcard_index__; index__ = ovm_get_array_index_int(str__, wildcard_index__); if(what__==OVM_SETINT) begin if(ovm_is_array(str__) ) begin if(wildcard_index__) begin foreach(ARRAY[index__]) begin if(ovm_is_match(str__, {m_sc.scope.get_arg(),$psprintf("[%0d]", index__)})) begin ARRAY[index__] = T'(RHS); m_sc.status = 1; end end end else if(ovm_is_match(str__, {m_sc.scope.get_arg(),$psprintf("[%0d]", index__)})) begin ARRAY[index__] = T'(RHS); m_sc.status = 1; end end end end |
|
|
M_OVM_FIELD_SET_SARRAY_OBJECT_TYPE(ARG, FLAG) if((what__ >= OVM_START_FUNCS && what__ <= OVM_END_FUNCS) && (((FLAG)&OVM_READONLY) == 0)) begin ovm_object obj__; foreach(ARG[index__]) begin if($cast(obj__,ARG[index__]) && (obj__!=null)) obj__.m_field_automation(null, what__, str__); end end |
|
|
if((what__ >= OVM_START_FUNCS && what__ <= OVM_END_FUNCS) && (((FLAG)&OVM_READONLY) == 0)) begin int index__; bit wildcard_index__; index__ = ovm_get_array_index_int(str__, wildcard_index__); if(what__==OVM_SETOBJ) begin if(ovm_is_array(str__) ) begin if(wildcard_index__) begin foreach(ARRAY[index__]) begin if(ovm_is_match(str__, {m_sc.scope.get_arg(),$psprintf("[%0d]", index__)})) begin if (m_sc.object != null) begin $cast(ARRAY[index__], m_sc.object); end else ARRAY[index__] = null; m_sc.status = 1; end end end else if(ovm_is_match(str__, {m_sc.scope.get_arg(),$psprintf("[%0d]", index__)})) begin if (m_sc.object != null) begin $cast(ARRAY[index__], m_sc.object); end else ARRAY[index__] = null; m_sc.status = 1; end end end end |
|
|
if((what__ >= OVM_START_FUNCS && what__ <= OVM_END_FUNCS) && (((FLAG)&OVM_READONLY) == 0)) begin int index__; bit wildcard_index__; index__ = ovm_get_array_index_int(str__, wildcard_index__); if(what__==OVM_SETINT) begin if(ovm_is_array(str__) ) begin if(wildcard_index__) begin foreach(ARRAY[index__]) begin if(ovm_is_match(str__, {m_sc.scope.get_arg(),$sformatf("[%0d]", index__)})) begin ARRAY[index__] = RHS; m_sc.status = 1; end end end else if(ovm_is_match(str__, {m_sc.scope.get_arg(),$sformatf("[%0d]", index__)})) begin ARRAY[index__] = RHS; m_sc.status = 1; end else if(what__==OVM_SET && ovm_is_match(str__, m_sc.scope.get_arg())) begin /* TODO: Do we need this block. */ m_sc.status = 1; end end else if(what__==OVM_SET && ovm_is_match(str__, m_sc.scope.get_arg())) begin /* TODO: Do we need this block. */ m_sc.status = 1; end end else if(what__==OVM_SET && ovm_is_match(str__, m_sc.scope.get_arg())) begin /* TODO: Do we need this block. */ m_sc.status = 1; end end |
|
|
if((what__ >= OVM_START_FUNCS && what__ <= OVM_END_FUNCS) && (((FLAG)&OVM_READONLY) == 0)) begin int index__; bit wildcard_index__; index__ = ovm_get_array_index_int(str__, wildcard_index__); if(what__==OVM_SET``ARRAY_TYPE) begin if(ovm_is_array(str__) ) begin if(wildcard_index__) begin foreach(ARRAY[index__]) begin if(ovm_is_match(str__, {m_sc.scope.get_arg(),$psprintf("[%0d]", index__)})) begin ARRAY[index__] = RHS; m_sc.status = 1; end end end else if(ovm_is_match(str__, {m_sc.scope.get_arg(),$psprintf("[%0d]", index__)})) begin ARRAY[index__] = RHS; m_sc.status = 1; end end end end |
|
|
void'(ovm_object::m_do_set_string (str__, `"ARG`", ARG, what__, FLAG)); |
|
|
|
|
begin if(RECORDER.tr_handle != 0) begin if(RADIX == OVM_ENUM) begin if(!m_sc.array_warning_done) begin m_sc.array_warning_done = 1; ovm_object::m_sc.scratch1 = `"Recording not supported for array enumerations: ARG`"; _global_reporter.ovm_report_warning("RCDNTS", ovm_object::m_sc.scratch1, OVM_NONE); end end else begin for(int i__=0; i__<ARG.size(); ++i__) RECORDER.record_field($psprintf(`"ARG[%0d]`",i__), ARG[i__], $bits(ARG[i__]), ovm_radix_enum'(RADIX)); end end end |
|
|
begin if(RECORDER.tr_handle != 0) begin ovm_object obj__; for(int i__=0; i__<ARG.size(); ++i__) begin if($cast(obj__, ARG[i__])) if(obj__ != null) begin m_sc.scope.down_element(i__, null); obj__.m_field_automation(null, what__, str__); m_sc.scope.up_element(null); end end end end |
|
|
begin if(RECORDER.tr_handle != 0) begin for(int i__=0; i__<ARG.size(); ++i__) RECORDER.record_field_real($sformatf(`"ARG[%0d]`", i__), ARG[i__]); end end |
|
|
begin if(RECORDER.tr_handle != 0) begin for(int i__=0; i__<ARG.size(); ++i__) RECORDER.record_string($psprintf(`"ARG[%0d]`", i__), ARG[i__]); end end |
|
|
begin int radix__; ovm_bitstream_t value; value = ARG; radix__ = ovm_radix_enum'((FLAG)&(OVM_RADIX)); if(recorder==null) recorder=ovm_auto_options_object.recorder; recorder.record_field(`"ARG`", ARG, radix__, $bits(ARG); end |
|
|
begin ovm_object v__; if(ARG != null) begin if($cast(v__,ARG)) begin ovm_record_object__(`"ARG`", v__, recorder); end end else begin m_ovm_record_any_object(ARG); end end |
|
|
begin if(RECORDER.tr_handle != 0) begin foreach(ARG[i__]) begin T lh__=ARG[i__]; RECORDER.record_string($psprintf(`"ARG[%0d]`",i__), lh__.name()); end end end |
|
|
begin if(RECORDER.tr_handle != 0) begin foreach(ARG[i__]) RECORDER.record_field_real($sformatf(`"ARG[%0d]`", i__), ARG[i__]); end end |
|
|
recorder.record_string(`"ARG`", ARG); |
|
|
begin T tmp__; while(ARG.size()>SIZE) void'(ARG.pop_back()); while(ARG.size() != SIZE) ARG.push_back(tmp__); end |
|
|
begin T tmp__; while(ARG.size()) void'(ARG.pop_front()); while(ARG.size() != SIZE) ARG.push_back(tmp__); end |
|
|
begin while(ARG.size()>SIZE) void'(ARG.pop_front()); while(ARG.size() != SIZE) ARG.push_back(null); end |
|
|
begin while(ARG.size()>SIZE) void'(ARG.pop_front()); while(ARG.size() != SIZE) ARG.push_back(null); end |
|
|
do urm_pkg_msg_imp("DEBUG",MESSAGE,ovm_pkg::OVM_URM_MSG_DEBUG,ovm_pkg::OVM_INFO,VERBOSITY,"",ovm_global_reporter) while (0) |
|
|
urm_msg_imp("DEBUG",MESSAGE,OVM_URM_MSG_DEBUG,OVM_INFO,VERBOSITY,get_full_name(),m_get_report_object()) |
|
|
function bit try_get (output TYPE arg); return imp.try_get(arg); endfunction function bit can_get(); return imp.can_get(); endfunction |
|
|
function bit try_get( output TYPE arg); if( !imp.try_get``SFX( arg)) return 0; return 1; endfunction function bit can_get(); return imp.can_get``SFX(); endfunction |
|
|
|
|
function bit try_peek (output TYPE arg); return imp.try_peek(arg); endfunction function bit can_peek(); return imp.can_peek(); endfunction |
|
|
function bit try_peek( output TYPE arg); if( !imp.try_peek``SFX( arg)) return 0; return 1; endfunction function bit can_peek(); return imp.can_peek``SFX(); endfunction |
|
|
function bit try_put (TYPE arg); return imp.try_put(arg); endfunction function bit can_put(); return imp.can_put(); endfunction |
|
|
function bit try_put( input TYPE arg); if( !imp.try_put``SFX( arg)) return 0; return 1; endfunction function bit can_put(); return imp.can_put``SFX(); endfunction |
|
|
function bit nb_transport (REQ req_arg, output RSP rsp_arg); return imp.nb_transport(req_arg, rsp_arg); endfunction |
|
|
function bit nb_transport( input REQ req_arg, output RSP rsp_arg); if(imp) return imp.nb_transport``SFX(req_arg, rsp_arg); endfunction |
|
|
|
class ovm_analysis_imp``SFX #(type T=int, type IMP=int) extends ovm_port_base #(tlm_if_base #(T,T)); OVM_IMP_COMMON(TLM_ANALYSIS_MASK,`"ovm_analysis_imp``SFX`",IMP) function void write( input T t); m_imp.write``SFX( t); endfunction endclass |
|
|
|
class ovm_blocking_get_imp``SFX #(type T=int, type IMP=int) extends ovm_port_base #(tlm_if_base #(T,T)); OVM_IMP_COMMON(TLM_BLOCKING_GET_MASK,`"ovm_blocking_get_imp``SFX`",IMP) BLOCKING_GET_IMP_SFX(SFX, m_imp, T, t) endclass |
|
|
class ovm_blocking_get_peek_imp``SFX #(type T=int, type IMP=int) extends ovm_port_base #(tlm_if_base #(T,T)); OVM_IMP_COMMON(TLM_BLOCKING_GET_PEEK_MASK,`"ovm_blocking_get_peek_imp``SFX`",IMP) BLOCKING_GET_IMP_SFX(SFX, m_imp, T, t) BLOCKING_PEEK_IMP_SFX(SFX, m_imp, T, t) endclass |
|
|
class ovm_blocking_master_imp``SFX #(type REQ=int, type RSP=int, type IMP=int, type REQ_IMP=IMP, type RSP_IMP=IMP) extends ovm_port_base #(tlm_if_base #(REQ, RSP)); typedef IMP this_imp_type; typedef REQ_IMP this_req_type; typedef RSP_IMP this_rsp_type; OVM_MS_IMP_COMMON(TLM_BLOCKING_MASTER_MASK,`"ovm_blocking_master_imp``SFX`") BLOCKING_PUT_IMP_SFX(SFX, m_req_imp, REQ, t) BLOCKING_GET_IMP_SFX(SFX, m_rsp_imp, RSP, t) BLOCKING_PEEK_IMP_SFX(SFX, m_rsp_imp, RSP, t) endclass |
|
|
class ovm_blocking_peek_imp``SFX #(type T=int, type IMP=int) extends ovm_port_base #(tlm_if_base #(T,T)); OVM_IMP_COMMON(TLM_BLOCKING_PEEK_MASK,`"ovm_blocking_peek_imp``SFX`",IMP) BLOCKING_PEEK_IMP_SFX(SFX, m_imp, T, t) endclass |
|
|
class ovm_blocking_put_imp``SFX #(type T=int, type IMP=int) extends ovm_port_base #(tlm_if_base #(T,T)); OVM_IMP_COMMON(TLM_BLOCKING_PUT_MASK,`"ovm_blocking_put_imp``SFX`",IMP) BLOCKING_PUT_IMP_SFX(SFX, m_imp, T, t) endclass |
|
|
class ovm_blocking_slave_imp``SFX #(type REQ=int, type RSP=int, type IMP=int, type REQ_IMP=IMP, type RSP_IMP=IMP) extends ovm_port_base #(tlm_if_base #(RSP, REQ)); typedef IMP this_imp_type; typedef REQ_IMP this_req_type; typedef RSP_IMP this_rsp_type; OVM_MS_IMP_COMMON(TLM_BLOCKING_SLAVE_MASK,`"ovm_blocking_slave_imp``SFX`") BLOCKING_PUT_IMP_SFX(SFX, m_rsp_imp, RSP, t) BLOCKING_GET_IMP_SFX(SFX, m_req_imp, REQ, t) BLOCKING_PEEK_IMP_SFX(SFX, m_req_imp, REQ, t) endclass |
|
|
class ovm_blocking_transport_imp``SFX #(type REQ=int, type RSP=int, type IMP=int) extends ovm_port_base #(tlm_if_base #(REQ, RSP)); OVM_IMP_COMMON(TLM_BLOCKING_TRANSPORT_MASK,`"ovm_blocking_transport_imp``SFX`",IMP) BLOCKING_TRANSPORT_IMP_SFX(SFX, m_imp, REQ, RSP, req, rsp) endclass |
|
|
|
|
/* null */
|
|
|
/* null */
|
|
|
Q = '{}; |
|
|
begin ovm_object::m_sc.scratch1 = `"Compare failed ARG`"; ovm_auto_options_object.comparer.result++; if(ovm_auto_options_object.comparer.result <= ovm_auto_options_object.comparer.show_max) begin ovm_object::m_sc.scratch1 = `"Miscompare for field ARG`"; _global_reporter.ovm_report_info("MISCMP", ovm_object::m_sc.scratch1, OVM_MEDIUM) end end |
|
|
function ovm_component create_component (string name, ovm_component parent); T tmp; tmp = new(.name(name), .parent(parent)); return tmp; endfunction static function T create(string name, ovm_component parent, string contxt=""); ovm_factory f; f = ovm_factory::get(); if (contxt == "" && parent != null) contxt = parent.get_full_name(); if(!$cast(create,f.create_component_by_type(get(),contxt,name,parent))) ovm_top.ovm_report_fatal("FACTFL", {"Factory did not return a component of type, ",type_name}, OVM_NONE); endfunction |
|
|
|
|
|
|
|
|
typedef ovm_component_registry #(T,S) type_id; static function type_id get_type(); return type_id::get(); endfunction virtual function ovm_object_wrapper get_object_type(); return type_id::get(); endfunction |
|
|
typedef ovm_component_registry #(T,`"S`") type_id; static function type_id get_type(); return type_id::get(); endfunction virtual function ovm_object_wrapper get_object_type(); return type_id::get(); endfunction |
|
|
typedef ovm_component_registry #(T) type_id; static function type_id get_type(); return type_id::get(); endfunction virtual function ovm_object_wrapper get_object_type(); return type_id::get(); endfunction |
|
|
|
|
|
|
|
end endfunction |
|
|
|
begin ovm_object_wrapper w_; w_ = OVM_SEQUENCE_ITEM.get_type(); $cast(OVM_SEQUENCE_ITEM , create_item(w_, m_sequencer, `"OVM_SEQUENCE_ITEM`")); end |
|
|
begin ovm_object_wrapper w_; w_ = OVM_SEQUENCE_ITEM.get_type(); $cast(OVM_SEQUENCE_ITEM , create_item(w_, SEQUENCER_REF, `"OVM_SEQUENCE_ITEM`")); end |
|
|
|
|
SEQUENCER p_sequencer; virtual function void m_set_p_sequencer(); super.m_set_p_sequencer(); if( !$cast(p_sequencer, m_sequencer)) ovm_report_fatal("DCLPSQ", $psprintf("%m %s Error casting p_sequencer, please verify that this sequence/sequence item is intended to execute on this type of sequencer", get_full_name()), OVM_NONE); endfunction |
|
|
protected bit m_set_sequences_called = 1; static protected string m_static_sequences[$]; static protected string m_static_remove_sequences[$]; static function bit add_typewide_sequence(string type_name); m_static_sequences.push_back(type_name); return 1; endfunction static function bit remove_typewide_sequence(string type_name); m_static_remove_sequences.push_back(type_name); for (int i = 0; i < m_static_sequences.size(); i++) begin if (m_static_sequences[i] == type_name) m_static_sequences.delete(i); end return 1; endfunction function void ovm_update_sequence_lib(); if(this.m_set_sequences_called) begin set_sequences_queue(m_static_sequences); this.m_set_sequences_called = 0; end for (int i = 0; i < m_static_remove_sequences.size(); i++) begin remove_sequence(m_static_remove_sequences[i]); end endfunction |
|
|
9200s
|
|
|
begin ovm_create(OVM_SEQUENCE_ITEM) start_item(OVM_SEQUENCE_ITEM); if(!OVM_SEQUENCE_ITEM.randomize()) begin ovm_report_warning("RNDFLD", "Randomization failed in ovm_do action"); end finish_item(OVM_SEQUENCE_ITEM); end |
|
|
ovm_do_obj_callbacks(CB,T,this,METHOD_CALL) |
|
|
|
|
begin ovm_callbacks #(T,CB) cbs = ovm_callbacks #(T,CB)::get_global_cbs(); ovm_queue #(CB) cbq; if (cbs.exists(OBJ)) begin /* Make a copy of the queue in case the user tries changing the queue */ /* inside the callback. For example, for a one-shot callback. */ cbq = cbs.get(OBJ); cbq = new cbq; for (int i=0; i if (cb.is_enabled()) cb.METHOD_CALL; end end end |
|
|
begin ovm_callbacks #(T,CB) cbs = ovm_callbacks #(T,CB)::get_global_cbs(); ovm_queue #(CB) cbq; if (cbs == null || !cbs.exists(OBJ)) return 1-VAL; cbq = cbs.get(OBJ); cbq = new cbq; for (int i=0; i if (cb.is_enabled() && cb.METHOD_CALL == VAL) return VAL; end return 1-VAL; end |
|
|
begin ovm_callbacks #(T,CB) cbs = ovm_callbacks #(T,CB)::get_global_cbs(); ovm_queue #(CB) cbq; cbq = new cbq; if (cbs.exists(OBJ)) begin cbq = cbs.get(OBJ); fork begin for (int i=0; i if (cb.is_enabled()) begin fork begin ovm_cb_trace(cb,OBJ,`"fork/join_none METHOD_CALL`") cb.METHOD_CALL; end join_none end end wait fork; end join end end |
|
|
begin ovm_create_on(OVM_SEQUENCE_ITEM, SEQUENCER_REF) start_item(OVM_SEQUENCE_ITEM); if (!OVM_SEQUENCE_ITEM.randomize()) begin ovm_report_warning("RNDFLD", "Randomization failed in ovm_do action"); end finish_item(OVM_SEQUENCE_ITEM); end |
|
|
begin ovm_create_on(OVM_SEQUENCE_ITEM, SEQUENCER_REF) start_item(OVM_SEQUENCE_ITEM, PRIORITY); if (!OVM_SEQUENCE_ITEM.randomize()) begin ovm_report_warning("RNDFLD", "Randomization failed in ovm_do action"); end finish_item(OVM_SEQUENCE_ITEM, PRIORITY); end |
|
|
begin ovm_create_on(OVM_SEQUENCE_ITEM, SEQUENCER_REF) start_item(OVM_SEQUENCE_ITEM, PRIORITY); if (!OVM_SEQUENCE_ITEM.randomize() with CONSTRAINTS ) begin ovm_report_warning("RNDFLD", "Randomization failed in ovm_do_with action"); end finish_item(OVM_SEQUENCE_ITEM, PRIORITY); end |
|
|
begin ovm_create_on(OVM_SEQUENCE_ITEM, SEQUENCER_REF) start_item(OVM_SEQUENCE_ITEM); if (!OVM_SEQUENCE_ITEM.randomize() with CONSTRAINTS ) begin ovm_report_warning("RNDFLD", "Randomization failed in ovm_do_with action"); end finish_item(OVM_SEQUENCE_ITEM); end |
|
|
begin ovm_create(OVM_SEQUENCE_ITEM) start_item(OVM_SEQUENCE_ITEM, PRIORITY); if (!OVM_SEQUENCE_ITEM.randomize()) begin ovm_report_warning("RNDFLD", "Randomization failed in ovm_do action"); end finish_item(OVM_SEQUENCE_ITEM, PRIORITY); end |
|
|
begin ovm_create(OVM_SEQUENCE_ITEM) start_item(OVM_SEQUENCE_ITEM, PRIORITY); if(!OVM_SEQUENCE_ITEM.randomize() with CONSTRAINTS ) begin ovm_report_warning("RNDFLD", "Randomization failed in ovm_do_with action"); end finish_item(OVM_SEQUENCE_ITEM, PRIORITY); end |
|
|
|
|
|
|
ovm_do_obj_task_callbacks(CB,T,this,METHOD_CALL) |
|
|
begin ovm_create(OVM_SEQUENCE_ITEM) start_item(OVM_SEQUENCE_ITEM); if(!OVM_SEQUENCE_ITEM.randomize() with CONSTRAINTS ) begin ovm_report_warning("RNDFLD", "Randomization failed in ovm_do_with action"); end finish_item(OVM_SEQUENCE_ITEM); end |
|
|
endpackage |
|
|
|
|
function new (string name, ovm_component parent, int min_size=1, int max_size=1); super.new (name, parent, OVM_EXPORT, min_size, max_size); m_if_mask = MASK; endfunction TLM_GET_TYPE_NAME(TYPE_NAME) |
|
|
|
|
|
|
|
ovm_field_aa_int_key(byte, ARG, FLAG) |
|
|
ovm_field_aa_int_key(byte unsigned, ARG, FLAG) |
|
|
begin if(what__==OVM_CHECK_FIELDS) m_do_field_check(`"ARG`"); m_sc.scope.down(`"ARG`", null); M_OVM_FIELD_DATA_AA_enum_key(KEY,ARG,FLAG) M_OVM_FIELD_SET_AA_INT_ENUMTYPE(KEY, INT, ARG, m_sc.bitstream, FLAG) m_sc.scope.up(null); end |
|
|
|
|
ovm_field_aa_int_key(int unsigned, ARG, FLAG) |
|
|
ovm_field_aa_int_key(integer, ARG, FLAG) |
|
|
ovm_field_aa_int_key(integer unsigned, ARG, FLAG) |
|
|
begin if(what__==OVM_CHECK_FIELDS) m_do_field_check(`"ARG`"); m_sc.scope.down(`"ARG`", null); M_OVM_FIELD_DATA_AA_int_key(KEY,ARG,FLAG) M_OVM_FIELD_SET_AA_INT_TYPE(KEY, INT, ARG, m_sc.bitstream, FLAG) m_sc.scope.up(null); end |
|
|
ovm_field_aa_int_key(longint, ARG, FLAG) |
|
|
ovm_field_aa_int_key(longint unsigned, ARG, FLAG) |
|
|
ovm_field_aa_int_key(shortint, ARG, FLAG) |
|
|
ovm_field_aa_int_key(shortint unsigned, ARG, FLAG) |
|
|
begin if(what__==OVM_CHECK_FIELDS) m_do_field_check(`"ARG`"); m_sc.scope.down(`"ARG`", null); M_OVM_FIELD_DATA_AA_int_string(ARG,FLAG) M_OVM_FIELD_SET_AA_TYPE(string, INT, ARG, m_sc.bitstream, FLAG) m_sc.scope.up(null); end |
|
|
begin if(what__==OVM_CHECK_FIELDS) m_do_field_check(`"ARG`"); m_sc.scope.down(`"ARG`", null); M_OVM_FIELD_DATA_AA_object_int(ARG,FLAG) M_OVM_FIELD_SET_AA_OBJECT_TYPE(int, ARG, FLAG) m_sc.scope.up(null); end |
|
|
begin if(what__==OVM_CHECK_FIELDS) m_do_field_check(`"ARG`"); m_sc.scope.down(`"ARG`", null); M_OVM_FIELD_DATA_AA_object_string(ARG,FLAG) M_OVM_FIELD_SET_AA_OBJECT_TYPE(string, ARG, FLAG) m_sc.scope.up(null); end |
|
|
begin if(what__==OVM_CHECK_FIELDS) m_do_field_check(`"ARG`"); m_sc.scope.down(`"ARG`", null); M_OVM_FIELD_DATA_AA_string_string(ARG,FLAG) M_OVM_FIELD_SET_AA_TYPE(string, STR, ARG, m_sc.stringv, FLAG) m_sc.scope.up(null); end |
|
|
begin ovm_field_qda_enum(T,ARG,FLAG) ovm_unpack_array_enum(T,ARG,FLAG) M_OVM_FIELD_SET_ARRAY_ENUM(T, ARG, m_sc.bitstream, FLAG) end |
|
|
begin if(what__==OVM_CHECK_FIELDS) m_do_field_check(`"ARG`"); m_sc.scope.down(`"ARG`",null); if(what__==OVM_COPY && !((FLAG)&OVM_NOCOPY)) begin if(local_data__!=null) begin ARG = new [local_data__.ARG.size()](local_data__.ARG); end else begin ARG.delete(); end end M_OVM_FIELD_DATA_ARRAY(ARG,FLAG) M_OVM_FIELD_ARRAY_INT_PACK(ARG,FLAG) M_OVM_FIELD_SET_ARRAY_TYPE(INT, ARG, m_sc.bitstream, FLAG) m_sc.scope.up(null); end |
|
|
begin if(what__==OVM_CHECK_FIELDS) m_do_field_check(`"ARG`"); m_sc.scope.down(`"ARG`", null); if(what__==OVM_COPY && !((FLAG)&OVM_NOCOPY)) begin if(local_data__!=null) begin if(ARG.size() != local_data__.ARG.size()) ARG = new[local_data__.ARG.size()](ARG); end else begin ARG.delete(); end end M_OVM_FIELD_DATA_ARRAY_OBJECT(ARG,FLAG) M_OVM_FIELD_ARRAY_OBJ_PACK(ARG,FLAG) M_OVM_FIELD_SET_ARRAY_OBJECT(ARG,FLAG) m_sc.scope.up(null); end |
|
|
begin if(what__==OVM_CHECK_FIELDS) m_do_field_check(`"ARG`"); m_sc.scope.down(`"ARG`",null); if(what__==OVM_COPY && !((FLAG)&OVM_NOCOPY)) begin if(local_data__!=null) begin ARG = new [local_data__.ARG.size()](local_data__.ARG); end else begin ARG.delete(); end end M_OVM_FIELD_DATA_ARRAY_REAL(ARG,FLAG) M_OVM_FIELD_ARRAY_REAL_PACK(ARG,FLAG) M_OVM_FIELD_SET_ARRAY_REAL(ARG, m_sc.bitstream, FLAG) m_sc.scope.up(null); end |
|
|
begin if(what__==OVM_CHECK_FIELDS) m_do_field_check(`"ARG`"); m_sc.scope.down(`"ARG`", null); if(what__==OVM_COPY && !((FLAG)&OVM_NOCOPY)) begin if(local_data__!=null) begin ARG = new[local_data__.ARG.size()]; end else begin ARG.delete(); end end M_OVM_FIELD_DATA_ARRAY_STRING(ARG,FLAG) M_OVM_FIELD_ARRAY_STR_PACK(ARG,FLAG) M_OVM_FIELD_SET_ARRAY_TYPE(STR, ARG, m_sc.stringv, FLAG) m_sc.scope.up(null); end |
|
|
|
|
begin if(what__==OVM_CHECK_FIELDS) m_do_field_check(`"ARG`"); m_sc.scope.down(`"ARG`", null); M_OVM_FIELD_DATA_EVENT(ARG,FLAG) m_sc.scope.up(null); end |
|
|
begin if(what__==OVM_CHECK_FIELDS) m_do_field_check(`"ARG`"); m_sc.scope.set_arg(`"ARG`"); M_OVM_FIELD_DATA(ARG,FLAG) M_OVM_FIELD_SET(ARG,FLAG) m_sc.scope.unset_arg(`"ARG`"); end |
|
|
if((ARG==null) || !m_sc.scope.in_hierarchy(ARG)) begin if(what__==OVM_CHECK_FIELDS) m_do_field_check(`"ARG`"); m_sc.scope.down(`"ARG`", ARG); M_OVM_FIELD_DATA_OBJECT(ARG,FLAG) M_OVM_FIELD_SET_OBJECT(ARG,FLAG) m_sc.scope.up(ARG); end |
|
|
begin T lh__, rh__; if(what__==OVM_CHECK_FIELDS) m_do_field_check(`"ARG`"); m_sc.scope.down(`"ARG`",null); if((what__ == OVM_PRINT) && !(OVM_NOPRINT&(FLAG))) ovm_print_qda_enum(ARG, ovm_auto_options_object.printer, array, T) else if((what__ == OVM_RECORD) && !(OVM_NORECORD&(FLAG))) m_ovm_record_qda_enum(T,ARG, ovm_auto_options_object.recorder) else if((what__ == OVM_COMPARE) && !(OVM_NOCOMPARE&(FLAG))) begin $cast(local_data__, tmp_data__); if(ARG.size() != local_data__.ARG.size()) begin int s1__, s2__; m_sc.stringv = ""; s1__ = ARG.size(); s2__ = local_data__.ARG.size(); $swrite(m_sc.stringv, "lhs size = %0d : rhs size = %0d", s1__, s2__); ovm_auto_options_object.comparer.print_msg(m_sc.stringv); end for(int i__=0; i__<ARG.size() && i__ if(ARG[i__] !== local_data__.ARG[i__]) begin lh__ = ARG[i__]; rh__ = local_data__.ARG[i__]; ovm_auto_options_object.comparer.scope.down_element(i__, null); $swrite(m_sc.stringv, "lhs = %0s : rhs = %0s", lh__.name(), rh__.name()); ovm_auto_options_object.comparer.print_msg(m_sc.stringv); ovm_auto_options_object.comparer.scope.up_element(null); end end if((what__ == OVM_COPY) && !(OVM_NOCOPY&(FLAG))) begin $cast(local_data__, tmp_data__); if(local_data__ != null) ARG = local_data__.ARG; end else if((what__ == OVM_PACK) && !(OVM_NOPACK&(FLAG))) begin if(ovm_auto_options_object.packer.use_metadata == 1) ovm_auto_options_object.packer.pack_field_int(ARG.size(), 32); foreach(ARG[i]) ovm_auto_options_object.packer.pack_field(int'(ARG[i]), $bits(ARG[i])); end m_sc.scope.up(null); end |
|
|
begin ovm_field_qda_enum(T,ARG,FLAG) ovm_unpack_queue_enum(T,ARG,FLAG) M_OVM_FIELD_SET_QUEUE_ENUM(T, ARG, m_sc.bitstream, FLAG) end |
|
|
begin if(what__==OVM_CHECK_FIELDS) m_do_field_check(`"ARG`"); m_sc.scope.down(`"ARG`", null); if(what__==OVM_COPY && !((FLAG)&OVM_NOCOPY)) begin if(local_data__!=null) begin M_RESIZE_QUEUE_NOCOPY(ovm_bitstream_t, ARG, local_data__.ARG.size()) end else begin M_RESIZE_QUEUE_NOCOPY(ovm_bitstream_t, ARG, 0) end end M_OVM_FIELD_DATA_ARRAY(ARG,FLAG) M_OVM_FIELD_QUEUE_INT_PACK(ARG,FLAG) M_OVM_FIELD_SET_QUEUE_TYPE(INT, ARG, m_sc.bitstream, FLAG) m_sc.scope.up(null); end |
|
|
begin if(what__==OVM_CHECK_FIELDS) m_do_field_check(`"ARG`"); m_sc.scope.down(`"ARG`", null); if(what__==OVM_COPY && !((FLAG)&OVM_NOCOPY)) begin if(local_data__!=null) begin M_RESIZE_QUEUE_OBJECT_NOCOPY(ARG, local_data__.ARG.size()) end else begin M_RESIZE_QUEUE_OBJECT_NOCOPY(ARG, 0) end end M_OVM_FIELD_DATA_ARRAY_OBJECT(ARG,FLAG) M_OVM_FIELD_QUEUE_OBJ_PACK(ARG,FLAG) M_OVM_FIELD_SET_QUEUE_OBJECT(ARG,FLAG) m_sc.scope.up(null); end |
|
|
begin if(what__==OVM_CHECK_FIELDS) m_do_field_check(`"ARG`"); m_sc.scope.down(`"ARG`",null); M_OVM_FIELD_DATA_QUEUE_REAL(ARG,FLAG) M_OVM_FIELD_QUEUE_REAL_PACK(ARG,FLAG) M_OVM_FIELD_SET_QUEUE_REAL(ARG, m_sc.bitstream, FLAG) m_sc.scope.up(null); end |
|
|
begin if(what__==OVM_CHECK_FIELDS) m_do_field_check(`"ARG`"); m_sc.scope.down(`"ARG`", null); if(what__==OVM_COPY && !((FLAG)&OVM_NOCOPY)) begin if(local_data__!=null) begin M_RESIZE_QUEUE_NOCOPY(string, ARG, local_data__.ARG.size()) end else begin M_RESIZE_QUEUE_NOCOPY(string, ARG, 0) end end M_OVM_FIELD_DATA_ARRAY_STRING(ARG,FLAG) M_OVM_FIELD_QUEUE_STR_PACK(ARG,FLAG) M_OVM_FIELD_SET_QUEUE_TYPE(STR, ARG, m_sc.stringv, FLAG) m_sc.scope.up(null); end |
|
|
begin if(what__==OVM_CHECK_FIELDS) m_do_field_check(`"ARG`"); m_sc.scope.set_arg(`"ARG`"); if((local_data__ != null) && $cast(local_data__, tmp_data__)) void'(m_do_data_real(`"ARG`", ARG, local_data__.ARG, what__, FLAG)); else void'(m_do_data_real(`"ARG`", ARG, 0, what__, FLAG)); m_sc.scope.unset_arg(`"ARG`"); end |
|
|
begin T lh__, rh__; if(what__==OVM_CHECK_FIELDS) m_do_field_check(`"ARG`"); m_sc.scope.down(`"ARG`",null); if((what__ == OVM_PRINT) && !(OVM_NOPRINT&(FLAG))) ovm_print_qda_enum(ARG, ovm_auto_options_object.printer, array, T) else if((what__ == OVM_COPY) && !(OVM_NOCOPY&(FLAG))) begin $cast(local_data__, tmp_data__); if(local_data__ != null) foreach(ARG[i]) ARG[i] = local_data__.ARG[i]; end else if((what__ == OVM_RECORD) && !(OVM_NORECORD&(FLAG))) m_ovm_record_qda_enum(T,ARG, ovm_auto_options_object.recorder) else if((what__ == OVM_COMPARE) && !(OVM_NOCOMPARE&(FLAG))) begin foreach(ARG[i__]) if(ARG[i__] !== local_data__.ARG[i__]) begin lh__ = ARG[i__]; rh__ = local_data__.ARG[i__]; ovm_auto_options_object.comparer.scope.down_element(i__, null); $swrite(m_sc.stringv, "lhs = %0s : rhs = %0s", lh__.name(), rh__.name()); ovm_auto_options_object.comparer.print_msg(m_sc.stringv); ovm_auto_options_object.comparer.scope.up_element(null); end end ovm_pack_unpack_sarray_enum(T,ARG,FLAG) M_OVM_FIELD_SET_SARRAY_ENUM(T, ARG, m_sc.bitstream, FLAG) m_sc.scope.up(null); end |
|
|
begin if(what__==OVM_CHECK_FIELDS) m_do_field_check(`"ARG`"); m_sc.scope.down(`"ARG`",null); M_OVM_FIELD_DATA_SARRAY(ARG,FLAG) M_OVM_FIELD_SET_SARRAY_TYPE(INT,ARG,m_sc.bitstream,FLAG) m_sc.scope.up(null); end |
|
|
begin if(what__==OVM_CHECK_FIELDS) m_do_field_check(`"ARG`"); m_sc.scope.down(`"ARG`",null); M_OVM_FIELD_DATA_SARRAY_OBJECT(ARG,FLAG) M_OVM_FIELD_SET_SARRAY_OBJECT(ARG,FLAG) m_sc.scope.up(null); end |
|
|
begin if(what__==OVM_CHECK_FIELDS) m_do_field_check(`"ARG`"); m_sc.scope.down(`"ARG`",null); M_OVM_FIELD_DATA_SARRAY_REAL(ARG,FLAG) M_OVM_FIELD_SARRAY_REAL_PACK(ARG,FLAG) M_OVM_FIELD_SET_SARRAY_REAL(ARG, m_sc.bitstream, FLAG) m_sc.scope.up(null); end |
|
|
begin if(what__==OVM_CHECK_FIELDS) m_do_field_check(`"ARG`"); m_sc.scope.down(`"ARG`", null); M_OVM_FIELD_DATA_SARRAY_STRING(ARG,FLAG) M_OVM_FIELD_SET_SARRAY_TYPE(STR, ARG, m_sc.stringv, FLAG) m_sc.scope.up(null); end |
|
|
begin if(what__==OVM_CHECK_FIELDS) m_do_field_check(`"ARG`"); m_sc.scope.down(`"ARG`",null); M_OVM_FIELD_DATA_STRING(ARG,FLAG) M_OVM_FIELD_SET_STRING(ARG,FLAG) m_sc.scope.up(null); end |
|
|
|
static bit m_fields_checked = 0; function void m_field_automation (ovm_object tmp_data__, int what__, string str__); begin T local_data__; /* Used for copy and compare */ typedef T ___local_type____; string string_aa_key; /* Used for associative array lookups */ /* Check the fields if not already checked */ if(what__ == OVM_CHECK_FIELDS) begin if(! ___local_type____``::m_fields_checked) ___local_type____``::m_fields_checked=1; else return; end if(ovm_auto_options_object.recorder != null) begin ovm_auto_options_object.recorder.scope = m_sc.scope; end /* Type is verified by ovm_object::compare() */ super.m_field_automation(tmp_data__, what__, str__); if(tmp_data__ != null) /* Allow objects in same hierarchy to be copied/compared */ if(!$cast(local_data__, tmp_data__)) return; if(what__ == OVM_CHECK_FIELDS) begin super.m_delete_field_array(); end |
|
|
end endfunction |
|
|
`__FILE__
|
|
|
2
|
|
|
|
class ovm_get_imp``SFX #(type T=int, type IMP=int) extends ovm_port_base #(tlm_if_base #(T,T)); OVM_IMP_COMMON(TLM_GET_MASK,`"ovm_get_imp``SFX`",IMP) BLOCKING_GET_IMP_SFX(SFX, m_imp, T, t) NONBLOCKING_GET_IMP_SFX(SFX, m_imp, T, t) endclass |
|
|
class ovm_get_peek_imp``SFX #(type T=int, type IMP=int) extends ovm_port_base #(tlm_if_base #(T,T)); OVM_IMP_COMMON(TLM_GET_PEEK_MASK,`"ovm_get_peek_imp``SFX`",IMP) BLOCKING_GET_IMP_SFX(SFX, m_imp, T, t) NONBLOCKING_GET_IMP_SFX(SFX, m_imp, T, t) BLOCKING_PEEK_IMP_SFX(SFX, m_imp, T, t) NONBLOCKING_PEEK_IMP_SFX(SFX, m_imp, T, t) endclass |
|
|
const static string type_name = `"T`"; virtual function string get_type_name (); return type_name; endfunction |
|
|
ovm_pkg::_global_reporter
|
|
|
ovm_pkg::ovm_global_urm_report_server
|
|
|
local IMP m_imp; function new (string name, IMP imp); super.new (name, imp, OVM_IMPLEMENTATION, 1, 1); m_imp = imp; m_if_mask = MASK; endfunction TLM_GET_TYPE_NAME(TYPE_NAME) |
|
|
|
|
|
`__LINE__
|
|
|
120
|
|
|
|
2
|
|
|
|
|
class ovm_master_imp``SFX #(type REQ=int, type RSP=int, type IMP=int, type REQ_IMP=IMP, type RSP_IMP=IMP) extends ovm_port_base #(tlm_if_base #(REQ, RSP)); typedef IMP this_imp_type; typedef REQ_IMP this_req_type; typedef RSP_IMP this_rsp_type; OVM_MS_IMP_COMMON(TLM_MASTER_MASK,`"ovm_master_imp``SFX`") BLOCKING_PUT_IMP_SFX(SFX, m_req_imp, REQ, t) NONBLOCKING_PUT_IMP_SFX(SFX, m_req_imp, REQ, t) BLOCKING_GET_IMP_SFX(SFX, m_rsp_imp, RSP, t) BLOCKING_PEEK_IMP_SFX(SFX, m_rsp_imp, RSP, t) NONBLOCKING_GET_IMP_SFX(SFX, m_rsp_imp, RSP, t) NONBLOCKING_PEEK_IMP_SFX(SFX, m_rsp_imp, RSP, t) endclass |
|
|
4096
|
|
|
|
|
|
1
|
|
|
|
|
|
local this_req_type m_req_imp; local this_rsp_type m_rsp_imp; function new (string name, this_imp_type imp, this_req_type req_imp = null, this_rsp_type rsp_imp = null); super.new (name, imp, OVM_IMPLEMENTATION, 1, 1); if(req_imp==null) $cast(req_imp, imp); if(rsp_imp==null) $cast(rsp_imp, imp); m_req_imp = req_imp; m_rsp_imp = rsp_imp; m_if_mask = MASK; endfunction TLM_GET_TYPE_NAME(TYPE_NAME) |
|
|
|
|
OVM
|
|
|
function ovm_named_object create_named_object (string name, ovm_named_object parent); T tmp; tmp = new(.name(name), .parent(parent)); return tmp; endfunction |
|
|
|
|
function new (string name, ovm_component parent); super.new(name, parent); endfunction |
|
|
function new (string name, ovm_component parent); super.new(name, parent); endfunction |
|
|
function new (string name=""); super.new(name); endfunction |
|
|
ovm_nonblocking_transport_imp_decl(SFX) |
|
|
class ovm_nonblocking_get_imp``SFX #(type T=int, type IMP=int) extends ovm_port_base #(tlm_if_base #(T,T)); OVM_IMP_COMMON(TLM_NONBLOCKING_GET_MASK,`"ovm_nonblocking_get_imp``SFX`",IMP) NONBLOCKING_GET_IMP_SFX(SFX, m_imp, T, t) endclass |
|
|
class ovm_nonblocking_get_peek_imp``SFX #(type T=int, type IMP=int) extends ovm_port_base #(tlm_if_base #(T,T)); OVM_IMP_COMMON(TLM_NONBLOCKING_GET_PEEK_MASK,`"ovm_nonblocking_get_peek_imp``SFX`",IMP) NONBLOCKING_GET_IMP_SFX(SFX, m_imp, T, t) NONBLOCKING_PEEK_IMP_SFX(SFX, m_imp, T, t) endclass |
|
|
class ovm_nonblocking_master_imp``SFX #(type REQ=int, type RSP=int, type IMP=int, type REQ_IMP=IMP, type RSP_IMP=IMP) extends ovm_port_base #(tlm_if_base #(REQ, RSP)); typedef IMP this_imp_type; typedef REQ_IMP this_req_type; typedef RSP_IMP this_rsp_type; OVM_MS_IMP_COMMON(TLM_NONBLOCKING_MASTER_MASK,`"ovm_nonblocking_master_imp``SFX`") NONBLOCKING_PUT_IMP_SFX(SFX, m_req_imp, REQ, t) NONBLOCKING_GET_IMP_SFX(SFX, m_rsp_imp, RSP, t) NONBLOCKING_PEEK_IMP_SFX(SFX, m_rsp_imp, RSP, t) endclass |
|
|
class ovm_nonblocking_peek_imp``SFX #(type T=int, type IMP=int) extends ovm_port_base #(tlm_if_base #(T,T)); OVM_IMP_COMMON(TLM_NONBLOCKING_PEEK_MASK,`"ovm_nonblocking_peek_imp``SFX`",IMP) NONBLOCKING_PEEK_IMP_SFX(SFX, m_imp, T, t) endclass |
|
|
class ovm_nonblocking_put_imp``SFX #(type T=int, type IMP=int) extends ovm_port_base #(tlm_if_base #(T,T)); OVM_IMP_COMMON(TLM_NONBLOCKING_PUT_MASK,`"ovm_nonblocking_put_imp``SFX`",IMP) NONBLOCKING_PUT_IMP_SFX( SFX, m_imp, T, t) endclass |
|
|
class ovm_nonblocking_slave_imp``SFX #(type REQ=int, type RSP=int, type IMP=int, type REQ_IMP=IMP, type RSP_IMP=IMP) extends ovm_port_base #(tlm_if_base #(RSP, REQ)); typedef IMP this_imp_type; typedef REQ_IMP this_req_type; typedef RSP_IMP this_rsp_type; OVM_MS_IMP_COMMON(TLM_NONBLOCKING_SLAVE_MASK,`"ovm_nonblocking_slave_imp``SFX`") NONBLOCKING_PUT_IMP_SFX(SFX, m_rsp_imp, RSP, t) NONBLOCKING_GET_IMP_SFX(SFX, m_req_imp, REQ, t) NONBLOCKING_PEEK_IMP_SFX(SFX, m_req_imp, REQ, t) endclass |
|
|
class ovm_nonblocking_transport_imp``SFX #(type REQ=int, type RSP=int, type IMP=int) extends ovm_port_base #(tlm_if_base #(REQ, RSP)); OVM_IMP_COMMON(TLM_NONBLOCKING_TRANSPORT_MASK,`"ovm_nonblocking_transport_imp``SFX`",IMP) NONBLOCKING_TRANSPORT_IMP_SFX(SFX, m_imp, REQ, RSP, req, rsp) endclass |
|
|
120
|
|
|
function ovm_object create (string name=""); T tmp; tmp = new(); if (name!="") tmp.set_name(name); return tmp; endfunction |
|
|
|
function ovm_object create_object (string name=""); T tmp; tmp = new(); if (name!="") tmp.set_name(name); return tmp; endfunction static function T create(string name="", ovm_component parent=null, string contxt=""); ovm_factory f; f = ovm_factory::get(); if (contxt == "" && parent != null) contxt = parent.get_full_name(); if(!$cast(create,f.create_object_by_type(get(),contxt,name))) ovm_top.ovm_report_fatal("FACTFL", {"Factory did not return an object of type, ",type_name}, OVM_NONE); endfunction |
|
|
|
|
|
|
|
|
typedef ovm_object_registry#(T,S) type_id; static function type_id get_type(); return type_id::get(); endfunction virtual function ovm_object_wrapper get_object_type(); return type_id::get(); endfunction |
|
|
typedef ovm_object_registry#(T,`"S`") type_id; static function type_id get_type(); return type_id::get(); endfunction virtual function ovm_object_wrapper get_object_type(); return type_id::get(); endfunction |
|
|
typedef ovm_object_registry #(T) type_id; static function type_id get_type(); return type_id::get(); endfunction virtual function ovm_object_wrapper get_object_type(); return type_id::get(); endfunction |
|
|
|
|
|
|
|
end endfunction |
|
|
|
if((what__ == OVM_PACK) && !(OVM_NOPACK&(FLAG))) begin if((((FLAG)&OVM_ABSTRACT) && ovm_auto_options_object.packer.abstract) || (!((FLAG)&OVM_ABSTRACT) && ovm_auto_options_object.packer.physical)) foreach(ARG[i]) ovm_auto_options_object.packer.pack_field(ARG[i],$bits(ARG[i])); end else if((what__ == OVM_UNPACK) && !(OVM_NOPACK&(FLAG))) begin if((((FLAG)&OVM_ABSTRACT) && ovm_auto_options_object.packer.abstract) || (!((FLAG)&OVM_ABSTRACT) && ovm_auto_options_object.packer.physical)) foreach(ARG[i]) ARG[i] = T'(ovm_auto_options_object.packer.unpack_field($bits(ARG[i]))); end |
|
|
package PKG; class ovm_bogus_class extends ovm::ovm_sequence; endclass |
|
|
OVM_STREAMBITS
|
|
|
|
|
class ovm_peek_imp``SFX #(type T=int, type IMP=int) extends ovm_port_base #(tlm_if_base #(T,T)); OVM_IMP_COMMON(TLM_PEEK_MASK,`"ovm_peek_imp``SFX`",IMP) BLOCKING_PEEK_IMP_SFX(SFX, m_imp, T, t) NONBLOCKING_PEEK_IMP_SFX(SFX, m_imp, T, t) endclass |
|
|
ovm_phase_func_decl(NAME,0)
|
|
|
class NAME``_phase #(type PARENT=int) extends ovm_phase; function new(); super.new(`"NAME`",TOP_DOWN,0); endfunction ovm_phase_type_name_decl(NAME) virtual function void call_func(ovm_component parent); PARENT m_parent; super.call_func(parent); if($cast(m_parent,parent)) begin if(has_executed(parent)) begin parent.ovm_report_warning("PHSEXEC", { "The phase ", get_name(), " has already executed. Either the phase was not reset, or there", " there is an invalid phase alias for this phase."}); return; end set_executed(parent); m_parent.NAME(); end endfunction endclass |
|
|
ovm_phase_func_decl(NAME,1)
|
|
|
ovm_phase_task_decl(NAME,0)
|
|
|
class NAME``_phase #(type PARENT=int) extends ovm_phase; function new(); super.new(`"NAME`",TOP_DOWN,1); endfunction ovm_phase_type_name_decl(NAME) virtual task call_task(ovm_component parent); PARENT m_parent; super.call_task(parent); if($cast(m_parent,parent)) begin if(has_executed(parent)) begin parent.ovm_report_warning("PHSEXEC", { "The phase ", get_name(), " has already executed. Either the phase was not reset, or there", " there is an invalid phase alias for this phase."}); return; end set_executed(parent); m_parent.NAME(); end endtask endclass |
|
|
ovm_phase_task_decl(NAME,1)
|
|
|
virtual function string get_type_name (); return `"NAME``_phase #(PARENT)`"; endfunction |
|
|
|
|
|
function new (string name, ovm_component parent, int min_size=1, int max_size=1); super.new (name, parent, OVM_PORT, min_size, max_size); m_if_mask = MASK; endfunction TLM_GET_TYPE_NAME(TYPE_NAME) |
|
|
begin ovm_printer p__; ovm_printer_knobs k__; if(P!=null) p__ = P; else p__ = ovm_default_printer; m_sc.stringv = "aa(int,int)"; for(int i=0; i m_sc.stringv[i] = "_"; p__.print_array_header (`"F`", F.num(), m_sc.stringv); k__ = p__.knobs; if((p__.knobs.depth == -1) || (p__.m_scope.depth() < p__.knobs.depth+1)) begin foreach(F[aa_key]) begin print_integral_field(F[aa_key], R, {"[", $psprintf("%0d",aa_key), "]"}, p__) end end p__.print_array_footer(F.num()); p__.print_footer(); end |
|
|
`ovm_print_aa_int_object_3(F, ovm_default_printer,FLAG) |
|
|
begin ovm_printer p__; ovm_printer_knobs k__; ovm_object u__; int key; if(P!=null) p__ = P; else p__ = ovm_default_printer; p__.print_array_header (`"F`", F.num(), "aa(object,int)"); k__ = p__.knobs; if((p__.knobs.depth == -1) || (p__.m_scope.depth() < p__.knobs.depth+1)) begin foreach(F[key]) begin $swrite(m_sc.stringv, "[%0d]", key); if(((FLAG)&OVM_REFERENCE)==0) p__.print_object(m_sc.stringv, F[key], "["); else p__.print_object_header(m_sc.stringv, F[key], "["); end end p__.print_array_footer(F.num()); p__.print_footer(); end |
|
|
ovm_print_aa_string_int3(F, R, ovm_default_printer) |
|
|
begin ovm_printer p__; ovm_printer_knobs k__; if(P!=null) p__ = P; else p__ = ovm_default_printer; p__.print_array_header (`"F`", F.num(), "aa(int,string)"); k__ = p__.knobs; if((p__.knobs.depth == -1) || (p__.m_scope.depth() < p__.knobs.depth+1)) begin foreach(F[string_aa_key]) print_integral_field(F[string_aa_key], R, {"[", string_aa_key, "]"}, p__) end p__.print_array_footer(F.num()); p__.print_footer(); end |
|
|
`ovm_print_aa_string_object_3(F, ovm_default_printer,FLAG) |
|
|
begin ovm_printer p__; ovm_printer_knobs k__; ovm_object u__; if(P!=null) p__ = P; else p__ = ovm_default_printer; p__.print_array_header (`"F`", F.num(), "aa(object,string)"); k__ = p__.knobs; if((p__.knobs.depth == -1) || (p__.m_scope.depth() < p__.knobs.depth+1)) begin foreach(F[string_aa_key]) begin if(((FLAG)&OVM_REFERENCE)==0) p__.print_object({"[", string_aa_key, "]"}, F[string_aa_key], "["); else p__.print_object_header({"[", string_aa_key, "]"}, F[string_aa_key], "["); end end p__.print_array_footer(F.num()); p__.print_footer(); end |
|
|
`ovm_print_aa_string_string_2(F, ovm_default_printer) |
|
|
begin ovm_printer p__; ovm_printer_knobs k__; if(P!=null) p__ = P; else p__ = ovm_default_printer; p__.print_array_header (`"F`", F.num(), "aa(string,string)"); k__ = p__.knobs; if((p__.knobs.depth == -1) || (p__.m_scope.depth() < p__.knobs.depth+1)) begin foreach(F[string_aa_key]) p__.print_string({"[", string_aa_key, "]"}, F[string_aa_key], "["); end p__.print_array_footer(F.num()); p__.print_footer(); end |
|
|
ovm_print_array_int3(F, R, ovm_default_printer) |
|
|
ovm_print_qda_int4(F, R, P, da) |
|
|
ovm_print_array_object3(F, ovm_default_printer,FLAG) |
|
|
ovm_print_object_qda4(F, P, da,FLAG) |
|
|
ovm_print_array_real2(F, ovm_default_printer) |
|
|
ovm_print_qda_real3(F, P, da) |
|
|
ovm_print_array_string2(F, ovm_default_printer) |
|
|
ovm_print_string_qda3(F, P, da) |
|
|
ovm_print_int3(F, R, ovm_default_printer) |
|
|
do begin ovm_printer p__; if(P!=null) p__ = P; else p__ = ovm_default_printer; print_integral_field(F, R, `"F`", p__) end while(0); |
|
|
begin ovm_comparer comparer; comparer = ovm_auto_options_object.comparer; if(comparer==null) comparer = ovm_default_comparer; comparer.result++; /* $swrite(comparer.miscompares,"%s%s: lhs = %s : rhs = %s\n",*/ /* comparer.miscompares, comparer.scope.get_arg(), LHS, RHS );*/ $swrite(comparer.miscompares,"%s%s: lhs = %0d : rhs = %0d\n", comparer.miscompares, comparer.scope.get_arg(), LHS, RHS ); end |
|
|
ovm_print_object2(F, ovm_default_printer) |
|
|
do begin ovm_printer p__; if(P!=null) p__ = P; else p__ = ovm_default_printer; p__.print_object(`"F`", F, "["); end while(0); |
|
|
do begin int curr, max__; ovm_printer p__; max__=0; curr=0; if(P!=null) p__ = P; else p__ = ovm_default_printer; foreach(F[i__]) max__++; p__.print_header(); p__.m_scope.set_arg(`"F`"); p__.print_array_header(`"F`", max__, `"T``(object)`"); if((p__.knobs.depth == -1) || (p__.knobs.depth+1 > p__.m_scope.depth())) begin for(curr=0; curr p__.print_object(p__.index_string(curr), F[curr], "["); else p__.print_object_header(p__.index_string(curr), F[curr], "["); end if(curr if(curr p__.print_array_range(p__.knobs.begin_elements, curr-1); end for(curr=curr; curr p__.print_object(p__.index_string(curr), F[curr], "["); else p__.print_object_header(p__.index_string(curr), F[curr], "["); end end end p__.print_array_footer(max__); p__.print_footer(); end while(0); |
|
|
ovm_print_object_queue3(F, ovm_default_printer,FLAG) |
|
|
|
|
begin ovm_printer p__; ovm_printer_knobs k__; int curr, max__; max__=0; curr=0; if(P!=null) p__ = P; else p__ = ovm_default_printer; foreach(F[i__]) max__++; p__.print_array_header (`"F`", max__,`"T``(``ET``)`"); k__ = p__.knobs; if((p__.knobs.depth == -1) || (p__.m_scope.depth() < p__.knobs.depth+1)) begin foreach(F[i__]) begin if(k__.begin_elements == -1 || k__.end_elements == -1 || curr < k__.begin_elements ) begin print_enum_field(ET, F[curr], p__.index_string(curr), p__) end else break; curr++; end if(curr if(curr p__.print_array_range(k__.begin_elements, curr-1); end for(curr=curr; curr end end end p__.print_array_footer(max__); p__.print_footer(); end |
|
|
begin ovm_printer p__; ovm_printer_knobs k__; int curr, max__; max__=0; curr=0; if(P!=null) p__ = P; else p__ = ovm_default_printer; foreach(F[i__]) max__++; p__.print_array_header (`"F`", max__,`"T``(integral)`"); k__ = p__.knobs; if((p__.knobs.depth == -1) || (p__.m_scope.depth() < p__.knobs.depth+1)) begin foreach(F[i__]) begin if(k__.begin_elements == -1 || k__.end_elements == -1 || curr < k__.begin_elements ) begin print_integral_field(F[curr], R, p__.index_string(curr), p__) end else break; curr++; end if(curr if(curr p__.print_array_range(k__.begin_elements, curr-1); end for(curr=curr; curr end end end p__.print_array_footer(max__); p__.print_footer(); end |
|
|
begin ovm_printer p__; ovm_printer_knobs k__; int curr, max__; max__=0; curr=0; if(P!=null) p__ = P; else p__ = ovm_default_printer; foreach(F[i__]) max__++; p__.print_array_header (`"F`", max__,`"T``(integral)`"); k__ = p__.knobs; if((p__.knobs.depth == -1) || (p__.m_scope.depth() < p__.knobs.depth+1)) begin foreach(F[i__]) begin if(k__.begin_elements == -1 || k__.end_elements == -1 || curr < k__.begin_elements ) begin p__.print_field_real(p__.index_string(curr), F[curr], "["); end else break; curr++; end if(curr if(curr p__.print_array_range(k__.begin_elements, curr-1); end for(curr=curr; curr end end end p__.print_array_footer(max__); p__.print_footer(); end |
|
|
ovm_print_queue_int3(F, R, ovm_default_printer) |
|
|
`ovm_print_qda_int3(F, R, P, queue) |
|
|
ovm_print_qda_int4(F, R, P, sa) |
|
|
ovm_print_sarray_object3(F, ovm_default_printer,FLAG) |
|
|
ovm_print_object_qda4(F, P, sa,FLAG) |
|
|
ovm_print_string_qda3(F, P, sa) |
|
|
ovm_print_string2(F, ovm_default_printer) |
|
|
do begin ovm_printer p__; if(P!=null) p__ = P; else p__ = ovm_default_printer; p__.print_string(`"F`", F, "["); end while(0); |
|
|
do begin int curr, max__; ovm_printer p__; max__=0; curr=0; foreach(F[i__]) max__++; if(P!=null) p__ = P; else p__ = ovm_default_printer; p__.print_header(); p__.m_scope.set_arg(`"F`"); p__.print_array_header(`"F`", max__, `"T``(string)`"); if((p__.knobs.depth == -1) || (p__.knobs.depth+1 > p__.m_scope.depth())) begin for(curr=0; curr end if(curr if(curr p__.print_array_range(p__.knobs.begin_elements, curr-1); end for(curr=curr; curr end end end p__.print_array_footer(max__); p__.print_footer(); end while(0); |
|
|
ovm_print_string_queue2(F, ovm_default_printer) |
|
|
|
|
|
|
class ovm_put_imp``SFX #(type T=int, type IMP=int) extends ovm_port_base #(tlm_if_base #(T,T)); OVM_IMP_COMMON(TLM_PUT_MASK,`"ovm_put_imp``SFX`",IMP) BLOCKING_PUT_IMP_SFX(SFX, m_imp, T, t) NONBLOCKING_PUT_IMP_SFX(SFX, m_imp, T, t) endclass |
|
|
|
begin start_item(OVM_SEQUENCE_ITEM); if (!OVM_SEQUENCE_ITEM.randomize()) begin ovm_report_warning("RNDFLD", "Randomization failed in ovm_rand_send action"); end finish_item(OVM_SEQUENCE_ITEM); end |
|
|
begin start_item(OVM_SEQUENCE_ITEM, PRIORITY); if (!OVM_SEQUENCE_ITEM.randomize()) begin ovm_report_warning("RNDFLD", "Randomization failed in ovm_rand_send action"); end finish_item(OVM_SEQUENCE_ITEM, PRIORITY); end |
|
|
begin start_item(OVM_SEQUENCE_ITEM, PRIORITY); if (!OVM_SEQUENCE_ITEM.randomize() with CONSTRAINTS ) begin ovm_report_warning("RNDFLD", "Randomization failed in ovm_rand_send_with action"); end finish_item(OVM_SEQUENCE_ITEM, PRIORITY); end |
|
|
begin start_item(OVM_SEQUENCE_ITEM); if (!OVM_SEQUENCE_ITEM.randomize() with CONSTRAINTS ) begin ovm_report_warning("RNDFLD", "Randomization failed in ovm_rand_send_with action"); end finish_item(OVM_SEQUENCE_ITEM); end |
|
|
|
|
|
static bit is_registered_with_sequencer = SEQUENCER``::add_typewide_sequence(`"TYPE_NAME`"); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
begin start_item(OVM_SEQUENCE_ITEM); finish_item(OVM_SEQUENCE_ITEM); end |
|
|
begin start_item(OVM_SEQUENCE_ITEM, PRIORITY); finish_item(OVM_SEQUENCE_ITEM, PRIORITY); end |
|
|
function new (string name, ovm_component parent, int min_size=0, int max_size=1); super.new (name, parent, OVM_PORT, min_size, max_size); m_if_mask = MASK; endfunction TLM_GET_TYPE_NAME(TYPE_NAME) |
|
|
|
|
import PKG_NAME``::*; PKG_NAME``::ovm_bogus_class M_``PKG_NAME``ovm_bogus_class |
|
|
|
|
ovm_register_sequence(TYPE_NAME, SEQUENCER) ovm_declare_p_sequencer(SEQUENCER) ovm_object_utils_begin(TYPE_NAME) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
begin if(what__ == OVM_FLAGS) begin end end |
|
|
class ovm_slave_imp``SFX #(type REQ=int, type RSP=int, type IMP=int, type REQ_IMP=IMP, type RSP_IMP=IMP) extends ovm_port_base #(tlm_if_base #(RSP, REQ)); typedef IMP this_imp_type; typedef REQ_IMP this_req_type; typedef RSP_IMP this_rsp_type; OVM_MS_IMP_COMMON(TLM_SLAVE_MASK,`"ovm_slave_imp``SFX`") BLOCKING_PUT_IMP_SFX(SFX, m_rsp_imp, RSP, t) NONBLOCKING_PUT_IMP_SFX(SFX, m_rsp_imp, RSP, t) BLOCKING_GET_IMP_SFX(SFX, m_req_imp, REQ, t) BLOCKING_PEEK_IMP_SFX(SFX, m_req_imp, REQ, t) NONBLOCKING_GET_IMP_SFX(SFX, m_req_imp, REQ, t) NONBLOCKING_PEEK_IMP_SFX(SFX, m_req_imp, REQ, t) endclass |
|
|
|
|
class ovm_transport_imp``SFX #(type REQ=int, type RSP=int, type IMP=int) extends ovm_port_base #(tlm_if_base #(REQ, RSP)); OVM_IMP_COMMON(TLM_TRANSPORT_MASK,`"ovm_transport_imp``SFX`",IMP) BLOCKING_TRANSPORT_IMP_SFX(SFX, m_imp, REQ, RSP, req, rsp) NONBLOCKING_TRANSPORT_IMP_SFX(SFX, m_imp, REQ, RSP, req, rsp) endclass |
|
|
if((what__ == OVM_UNPACK) && !(OVM_NOPACK&(FLAG))) begin if((((FLAG)&OVM_ABSTRACT) && ovm_auto_options_object.packer.abstract) || (!((FLAG)&OVM_ABSTRACT) && ovm_auto_options_object.packer.physical)) begin if(ovm_auto_options_object.packer.use_metadata) begin int s_; s_ = ovm_auto_options_object.packer.unpack_field_int(32); ARG = new[s_]; end foreach(ARG[i]) ARG[i] = T'(ovm_auto_options_object.packer.unpack_field($bits(ARG[i]))); end end |
|
|
if((what__ == OVM_UNPACK) && !(OVM_NOPACK&(FLAG))) begin if((((FLAG)&OVM_ABSTRACT) && ovm_auto_options_object.packer.abstract) || (!((FLAG)&OVM_ABSTRACT) && ovm_auto_options_object.packer.physical)) begin if(ovm_auto_options_object.packer.use_metadata) begin int s_; s_ = ovm_auto_options_object.packer.unpack_field_int(32); while(ARG.size() > s_) void'(ARG.pop_front()); while(ARG.size() < s_) ARG.push_back(T'(0)); end foreach(ARG[i]) ARG[i] = T'(ovm_auto_options_object.packer.unpack_field($bits(ARG[i]))); end end |
|
|
m_add_builtin_seqs(0); ovm_update_sequence_lib(); |
|
|
factory.set_inst_override_by_type( ovm_sequence_item::get_type(), USER_ITEM::get_type(), {get_full_name(), "*.item"}); m_add_builtin_seqs(1); ovm_update_sequence_lib(); |
|
|
ovm_pkg::ovm_urm_message
|
|
|
|
|
ovm_pkg::ovm_urm_report_server
|
|
|
ovm_pkg::ovm_urm_tmp_str
|
|
|
|
|
|
|
|
|
|
|
|
P.print_generic(NM, `"T`", $bits(F), F.name(), "["); |
|
|
P.print_field(NM, F, $bits(F), R, "["); |
|
|
|
|
"Sequencer interface function not implemented"
|
|
|
(1<<7)
|
|
|
(1<<0)
|
|
|
(1<<3)
|
|
|
(1<<2)
|
|
|
(1<<8)
|
|
|
task get_next_item(output REQ req_arg); imp.get_next_item(req_arg); endtask task try_next_item(output REQ req_arg); imp.try_next_item(req_arg); endtask function void item_done(input RSP rsp_arg = null); imp.item_done(rsp_arg); endfunction task wait_for_sequences(); imp.wait_for_sequences(); endtask function bit has_do_available(); return imp.has_do_available(); endfunction function void put_response(input RSP rsp_arg); imp.put_response(rsp_arg); endfunction task get(output REQ req_arg); imp.get(req_arg); endtask task peek(output REQ req_arg); imp.peek(req_arg); endtask task put(input RSP rsp_arg); imp.put(rsp_arg); endtask |
|
|
task get_next_item(output REQ req_arg); imp.get_next_item(req_arg); endtask task try_next_item(output REQ req_arg); imp.try_next_item(req_arg); endtask function void item_done(input RSP rsp_arg = null); imp.item_done(rsp_arg); endfunction task wait_for_sequences(); imp.wait_for_sequences(); endtask function bit has_do_available(); return imp.has_do_available(); endfunction function void put_response(input RSP rsp_arg); imp.put_response(rsp_arg); endfunction task get(output REQ req_arg); imp.get(req_arg); endtask task peek(output REQ req_arg); imp.peek(req_arg); endtask task put(input RSP rsp_arg); imp.put(rsp_arg); endtask |
|
|
|
|
|
|
(1<<6)
|
|
|
(1<<5)
|
|
|
"Sequencer interface task not implemented"
|
|
|
(1<<1)
|
|
|
|
|
(1<<4)
|
|
|
item
| |
Determine which prototype the UVM start_item task has * UVM 1.0ea was the first to use the new prototype
|
|
|
urm_msg_imp("DUT",MESSAGE,OVM_URM_MSG_DUT,OVM_ERROR,OVM_NONE,"",_global_reporter) |
|
|
urm_msg_imp("DEBUG",MESSAGE,OVM_URM_MSG_DEBUG,OVM_INFO,VERBOSITY,"",_global_reporter) |
|
|
(1<<14)
|
|
|
add_cb
|
|
|
static bit add_``TYPE``_to_seq_lib_``LIBTYPE = LIBTYPE::m_add_typewide_sequence(TYPE::get_type()); |
|
|
'b000010101010101
|
|
|
[ SVT_BATHTUB_LOWER_WT_DIST(minimum,maximum,sidewallpercent) ] :/ lowerwt, [ SVT_BATHTUB_MIDDLE_WT_DIST(minimum,maximum,sidewallpercent) ] :/ middlewt, [ SVT_BATHTUB_UPPER_WT_DIST(minimum,maximum,sidewallpercent) ] :/ upperwt | |
Creates a 'bathtub' shaped distribution with 'x'% of the (max-min) range as the width of the walls of the bathtub and (100 - 2'x')% of the width of the bottom of the tub; where 'x' equals the value of sidewallpercent (expressed as an integer).
Note: no checks are performed to make sure the bathtub sidewalls do not overlap. |
|
|
minimum : (minimum + (maximum - minimum)/sidewallpercent) | |
Defines the 'lower' portion of a bathtub constraint.
|
|
|
(minimum + ((maximum - minimum)/sidewallpercent)) : (maximum - ((maximum - minimum)/sidewallpercent)) | |
Defines the 'middle' portion of a bathtub constraint.
|
|
|
(maximum - ((maximum - minimum)/sidewallpercent)) : maximum | |
Defines the 'upper' portion of a bathtub constraint.
|
|
|
[ SVT_BIAS_LOWER_WT_DIST(minimum,maximum,biasdivisor) ] :/ lowerwt, [ SVT_BIAS_UPPER_WT_DIST(minimum,maximum,biasdivisor) ] :/ upperwt | |
Creates a 'biased' distribution with 1/biasdivisor of the overall range making up the lower portion of the range and the remainder making up the upper portion of the range.
|
|
|
minimum : (minimum + (maximum - minimum)/biasdivisor) | |
Defines the 'lower' portion of a bias constraint.
|
|
|
(minimum + (maximum - minimum)/biasdivisor) : maximum | |
Defines the 'upper' portion of a bias constraint.
|
|
|
'h1000000
|
|
|
|
|
svt_channel
| |
If not using VMM technology then create equivalent channel functionality, but assuming sequence_items
|
|
|
500
|
|
|
1007
|
|
|
1005
|
|
|
1011
|
|
|
1001
|
|
|
1000
| |
Values (constants) used as arguments for commands utilizing a severity argument
|
|
|
2
|
|
|
0
|
|
|
0
|
|
|
2
|
|
|
1008
| |
Values (constants) used as arguments for commands utilizing a verbosity argument
|
|
|
1003
|
|
|
1009
|
|
|
-1
| |
Null handle which can be used to indicate that a data search should take place at the top level object, and not a contained object
|
|
|
3
|
|
|
-2
| |
Reset handle which can be used to indicate that a reset has taken place and that the testbench should update in accordance with this event.
|
|
|
1
|
|
|
1
|
|
|
1004
|
|
|
1010
|
|
|
1006
|
|
|
1012
|
|
|
1002
|
|
|
7
|
|
|
4
|
|
|
2
|
|
|
6
|
|
|
5
|
|
|
0
|
|
|
3
|
|
|
1
|
|
|
9
|
|
|
svt_consensus
|
|
|
"SV"
|
|
|
Macro used to create a notification event instance for the current methodology
|
|
|
evowner.evname = evowner.event_pool.get(SVT_DATA_UTIL_ARG_TO_STRING(evname)); | |
Macro used to create a named notification event instance for the current methodology
|
|
|
Macro used to create a notification event instance in the indicated pool for the current methodology
|
|
|
ovm_object
|
|
|
ovm_sequence_item
|
|
|
pack
|
|
|
unpack
|
|
|
clone
|
|
|
print()
|
|
|
print
|
|
|
get_full_name
|
|
|
get_type_name
|
|
|
svt_sequence_item_base_iter
|
|
|
reporter
|
|
|
|
|
|
|
ovm
|
|
|
OVM
|
|
|
|
|
/** @cond SVDOC */ ovm_object_registry_internal(class_type_no_params,class_type_no_params) ovm_object_create_func(class_type) ovm_get_type_name_func(class_type) ovm_field_utils_begin(class_type) | |
Macro combining the ovm_object_utils_begin and ovm_object_param_utils_begin macro features. Mostly modeled after ovm_object_utils_begin but also designed to provide a 'non-parameterized' type name when registering the object with the factory. This type name, and the type it is associated with, corresponds to the 'default' parameterized object.
|
|
|
sprint()
|
|
|
sprint
|
|
|
event_pool
|
|
|
svt_event_pool
|
|
|
svt_sequence_item_base_queue_iter
|
|
|
svt_sequence_item_base_queue
|
|
|
|
svt_sequence_item_base
|
|
|
`"str`"
|
|
|
8
|
|
|
|
|
1
|
|
|
4
|
|
|
8
|
|
|
8
|
|
|
8
|
|
|
8
|
|
|
" |
|
|
|
|
`ifdef ovm_info_context do if ((clientfile != "") || (clientline != 0)) begin `ifdef OVM_REPORT_DISABLE_FILE clientfile = ""; `endif `ifdef OVM_REPORT_DISABLE_LINE clientline = 0; `endif if (reporter.ovm_report_enabled(OVM_HIGH,OVM_INFO,id)) reporter.ovm_report_info(id, msg, OVM_HIGH, clientfile, clientline); end else `ovm_info_context(id, msg, OVM_HIGH, reporter) while (0) `else svt_debug(id, msg) `endif |
|
|
2
|
|
|
|
|
int current_method_triggered_counter[string]; function bit has_user_cb(); `ifdef SVT_VMM_TECHNOLOGY for (int i = 0; (!has_user_cb && (i < compinst.callbacks.size())); i++) begin svt_xactor_callback svt_cb; if ($cast(svt_cb, compinst.callbacks[i])) has_user_cb = compinst.is_user_cb(svt_cb.get_name()); else /* Its not a SNPS callback, so must be a user callback. */ has_user_cb = 1; end `elsif SVT_UVM_TECHNOLOGY uvm_callback_iter#(T, CB) cb_iter = new(compinst); CB cb = cb_iter.first(); has_user_cb = 0; while (!has_user_cb && (cb != null)) begin has_user_cb = compinst.is_user_cb(cb.get_type_name()); cb = cb_iter.next(); end `elsif SVT_OVM_TECHNOLOGY ovm_callbacks#(T, CB) cbs = ovm_callbacks #(T,CB)::get_global_cbs(); ovm_queue#(CB) cbq = cbs.get(compinst); has_user_cb = 0; for (int i = 0; !has_user_cb && (cbq != null) && (i < cbq.size()); i++) begin CB cb = cbq.get(i); has_user_cb = compinst.is_user_cb(cb.get_type_name()); end `endif endfunction function string get_debug_opts_full_name(); get_debug_opts_full_name = compinst.SVT_DATA_GET_OBJECT_HIERNAME(); endfunction function bit is_debug_enabled(); is_debug_enabled = compinst.get_is_debug_enabled(); endfunction | |
This macro needs to be called by all classes that do callback logging in order to support logging. It should be called within the class declaration, so that the method is available to all cb_exec methods which are implemented within the class.
T -- The component type that the callbacks are registered with. CB -- The callback type that is registered with the component. compinst -- The component instance which the callbacks will be directed through, and which contains a valid 'is_user_cb' (i.e., typically inherited from the SVT component classes) implementation. |
|
|
"svt_debug.out"
|
|
|
"svt_model_log.fsdb"
|
|
|
svt_debug_opts_``PTYPE``_imp_port#(T, IMP, SVT_XVM(PTYPE``_imp)#(T, IMP)) | |
Macro used to create simple imp ports. Used when there is just one imp port of the given type on a component and suffixes are not necessary.
|
|
|
/** Object used to intercept and log sequence items going through the report when enabled. */ local svt_debug_opts_intercept_``PTYPE#(T,IMP,ETYPE) m_intercept; | |
Macro used to define the common fields in the imp port intercept objects.
|
|
|
svt_debug_opts_``PTYPE``_imp_port#(T, IMP, SVT_XVM(PTYPE``_imp``SFX)#(T, IMP)) | |
Macro used to create imp ports for exports with suffixes. Used when there are multiple imp ports of the same type on a component and the suffix is used to differentiate them.
|
|
|
"svt_debug.transcript"
|
|
|
OVM_HIGH
|
|
|
'h2000000
|
|
|
ovm_event evname; | |
Macro used to declare a notification event instance for the current methodology
|
|
|
'h400
|
|
|
0
| |
Values (constants) representing levels of recursion.
|
|
|
'b000000101010101
|
|
|
7
|
|
|
|
|
0.000001
|
|
|
begin integer sig_depth = 0; $fwrite(mcd_log_file, "# P %0d I %0d name %0d %0d %0d %s %s\n", port_number, width, in_signal_type, in_skew, sig_depth, ifName, clkName); end |
|
|
begin integer sig_depth = 0; integer xTime = 0; $fwrite(mcd_log_file, "# P %0d X %0d name %0d %0d %0d %0d %0d %0d %s %s\n", port_number, width, in_signal_type, out_signal_type, in_skew, out_skew, xTime, sig_depth, ifName, clkName); end |
|
|
begin integer sig_depth = 0; $fwrite(mcd_log_file, "# P %0d O %0d name %0d %0d %0d %s %s\n", port_number, width, out_signal_type, out_skew, sig_depth, ifName, clkName); end |
|
|
0
|
|
|
0
| |
Logging support: Used to log input port changes
|
|
|
1
|
|
|
1
|
|
|
delete_cb
|
|
|
svt_xvm_do_callbacks(T,CB,METHOD) |
|
|
svt_xvm_do_obj_callbacks(T,CB,OBJ,METHOD) |
|
|
'h8000000
|
|
|
if (testpass) errchk.pass(chkstats); else errchk.fail(chkstats,failmsg,faileffect); | |
Macro that can be used to execute a check, but allows for the deferral of the formatting of 'failmsg'
|
|
|
SVT_ERR_CHECK_EXECUTE(errchk,chkstats,testpass,failmsg,svt_err_check_stats::DEFAULT) |
|
|
SVT_ERR_CHECK_STATS_COV_PREFIX_EXTENDED_CLASS_DECL(svt,statsname) | |
This macro is provided for backwards compatibility. Clients should now use the SVT_ERR_CHECK_STATS_COV_PREFIX_EXTENDED_CLASS_DECL macro to avoid class name conflicts.
|
|
|
SVT_ERR_CHECK_STATS_COV_PREFIX_EXTENDED_CLASS_OVERRIDE(svt,statsname) | |
This macro is provided for backwards compatibility. Clients should now use the SVT_ERR_CHECK_STATS_COV_PREFIX_EXTENDED_CLASS_OVERRIDE macro to avoid class name conflicts.
|
|
|
/** Class declaration of error check stats coverage instance for the protocol check statsname */ class suiteprefix``_err_check_stats_cov_``statsname extends svt_err_check_stats_cov; `ifdef SVT_VMM_TECHNOLOGY `ifndef SVT_PRE_VMM_12 `vmm_typename(suiteprefix``_err_check_stats_cov_``statsname) `endif `endif `ifndef SVT_ERR_CHECK_STATS_COV_EXCLUDE_STATUS_CG covergroup status; option.per_instance = 1; option.goal = 100; pass : coverpoint status_bit iff (enable_pass_cov) { bins pass = {1}; `ifdef SVT_MULTI_SIM_IGNORE_BINS `ifndef SVT_ERR_CHECK_STATS_COV_DISABLE_IGNORE_BINS ignore_bins pass_i = {(enable_pass_cov == 1'b0) ? 1'b1 : 1'b0}; `endif `else ignore_bins pass_i = {1} iff (!enable_pass_cov); `endif } fail : coverpoint !status_bit iff (enable_fail_cov) { bins fail = {1}; `ifdef SVT_MULTI_SIM_IGNORE_BINS `ifndef SVT_ERR_CHECK_STATS_COV_DISABLE_IGNORE_BINS ignore_bins fail_i = {(enable_fail_cov == 1'b0) ? 1'b1 : 1'b0}; `endif `else ignore_bins fail_i = {1} iff (!enable_fail_cov); `endif } endgroup `endif extern function new(string name = ""); `ifndef SVT_VMM_TECHNOLOGY svt_xvm_object_utils(suiteprefix``_err_check_stats_cov_``statsname) `endif `ifdef SVT_VMM_TECHNOLOGY `ifndef SVT_PRE_VMM_12 extern virtual function suiteprefix``_err_check_stats_cov_``statsname allocate(); extern virtual function suiteprefix``_err_check_stats_cov_``statsname copy(); `endif `endif extern virtual function void sample_status(bit status_bit, string message = ""); extern virtual function void set_unique_id(string unique_id); extern static function void override(string inst_path); extern static function void direct_override(svt_err_check_stats stats); `ifdef SVT_VMM_TECHNOLOGY `ifndef SVT_PRE_VMM_12 `vmm_class_factory(suiteprefix``_err_check_stats_cov_``statsname) `endif `endif endclass function suiteprefix``_err_check_stats_cov_``statsname::new(string name = ""); super.new(name, 0); /* If client has disabled pass/fail coverage, then don't create the covergroup */ if ((svt_err_check_stats_cov::initial_enable_pass_cov != 0) || (svt_err_check_stats_cov::initial_enable_fail_cov != 0)) begin `ifndef SVT_ERR_CHECK_STATS_COV_EXCLUDE_STATUS_CG status = new(); `ifdef SVT_ERR_CHECK_STATS_COV_DISABLE_IGNORE_BINS /* NOTE: Some older versions of Incisive (i.e., prior to 12.10.005) require the goal to */ /* be a constant if it is set in the covergroup definition. So set it here instead. */ status.option.goal = 50*(enable_pass_cov+enable_fail_cov); `endif `endif `ifndef SVT_MULTI_SIM_COVERAGE_IFF_SHAPING shape_cov(); `endif end endfunction `ifdef SVT_VMM_TECHNOLOGY `ifndef SVT_PRE_VMM_12 function suiteprefix``_err_check_stats_cov_``statsname suiteprefix``_err_check_stats_cov_``statsname::allocate(); allocate = new(this.get_object_name()); endfunction function suiteprefix``_err_check_stats_cov_``statsname suiteprefix``_err_check_stats_cov_``statsname::copy(); copy = new(this.get_object_name()); copy.set_enable_pass_cov(this.enable_pass_cov); copy.set_enable_fail_cov(this.enable_fail_cov); endfunction `endif `endif function void suiteprefix``_err_check_stats_cov_``statsname::sample_status(bit status_bit, string message = ""); this.status_bit = status_bit; `ifndef SVT_ERR_CHECK_STATS_COV_EXCLUDE_STATUS_CG status.sample(); `endif endfunction function void suiteprefix``_err_check_stats_cov_``statsname::set_unique_id(string unique_id); `ifndef SVT_ERR_CHECK_STATS_COV_EXCLUDE_STATUS_CG /* Make sure the unique_id doesn't have any spaces in it -- otherwise get warnings */ `SVT_DATA_UTIL_REPLACE_PATTERN(unique_id," ", "_"); status.set_inst_name({unique_id,"_status"}); `endif endfunction function void suiteprefix``_err_check_stats_cov_``statsname::override(string inst_path); `ifdef SVT_VMM_TECHNOLOGY `ifndef SVT_PRE_VMM_12 /* Set initial pass/fail cov values to 0, since VMM is going to create a dummy instance and we don't want a dummy covergroup */ svt_err_check_stats_cov::initial_enable_pass_cov = 0; svt_err_check_stats_cov::initial_enable_fail_cov = 0; svt_err_check_stats_cov::override_with_new(inst_path, suiteprefix``_err_check_stats_cov_``statsname::this_type(),shared_log); svt_err_check_stats_cov::override_with_copy(inst_path, suiteprefix``_err_check_stats_cov_``statsname::this_type(),shared_log); /* Restore the initial pass/fail cov values to their favored defaults */ svt_err_check_stats_cov::initial_enable_pass_cov = 0; svt_err_check_stats_cov::initial_enable_fail_cov = 1; `endif `else svt_err_check_stats_cov::type_id::set_inst_override(suiteprefix``_err_check_stats_cov_``statsname::get_type(),inst_path); `endif endfunction function void suiteprefix``_err_check_stats_cov_``statsname::direct_override(svt_err_check_stats stats); `ifdef SVT_VMM_TECHNOLOGY `ifndef SVT_PRE_VMM_12 suiteprefix``_err_check_stats_cov_``statsname factory = null; /* Set initial pass/fail cov values to 0, since VMM is going to create a dummy instance and we don't want a dummy covergroup */ svt_err_check_stats_cov::initial_enable_pass_cov = 0; svt_err_check_stats_cov::initial_enable_fail_cov = 0; factory = new(); stats.register_cov_override(factory); /* Restore the initial pass/fail cov values to their favored defaults */ svt_err_check_stats_cov::initial_enable_pass_cov = 0; svt_err_check_stats_cov::initial_enable_fail_cov = 1; `endif `else stats.register_cov_override(suiteprefix``_err_check_stats_cov_``statsname::get_type()); `endif endfunction | |
This macro declares a class by the name The resulting class is extended from the svt_err_check_stats_cov.sv class. This class includes its own base class covergroup definition, as well as "allocate", "copy", "sample_status", and "set_unique_id" methods, which pertain to the "status" covergroup. It relies on an additional "override" strategy which involves a call to svt_err_check_stats :: register_cov_override. This call establishes an object wrapper for the svt_err_check_stats_cov class extension so that it can be used to create the new class type coverage is added to the svt_err_check_stats instance. Usage of the "override" method: 1. User creates the svt_err_check_stats class instance. 2. Calls the "register_check" method for the check. 3. Call the svt_err_check_stats :: register_cov_override method with an object wrapper for the svt_err_check_stats_cov class instance which provides the overide. Note that the override should normally be done by using the SVT_ERR_CHECK_STATS_COV_PREFIX_EXTENDED_CLASS_OVERRIDE macro. |
|
|
suiteprefix``_err_check_stats_cov_``statsname::direct_override(statsname); | |
Macro that can be used to setup the class override for a specific svt_err_check_stats class instance, identified by statsname, to use the corredponding coverage class defined using the SVT_ERR_CHECK_STATS_COV_PREFIX_EXTENDED_CLASS_DECL macro. Note that this macro relies on the statsname being used for both the 'check_id_str' provided to the original svt_err_check_stats constructor, as well as the name given to the svt_err_check_stats instance in the local scope.
|
|
|
|
|
|
`ifdef ovm_error_context do if ((clientfile != "") || (clientline != 0)) begin `ifdef OVM_REPORT_DISABLE_FILE clientfile = ""; `endif `ifdef OVM_REPORT_DISABLE_LINE clientline = 0; `endif if (reporter.ovm_report_enabled(OVM_NONE,OVM_ERROR,id)) reporter.ovm_report_error(id, msg, OVM_NONE, clientfile, clientline); end else `ovm_error_context(id, msg, reporter) while (0) `else svt_error(id, msg) `endif |
|
|
5
|
|
|
|
|
OVM_NONE
|
|
|
evowner.evname.is_on() | |
Macro used to check the is_on state for a notification event in the current methodology.
|
|
|
evowner.evname.get_trigger_data() | |
Macro used to use the notification event accessor function for the current methodology to retrieve the status for the notification event
|
|
|
((excep_list1 != null) && (excep_list1.num_exceptions != 0) && (!excep_list1.enable_combine) && (except_list2 != null) && (!except_list2.enable_combine)) | |
Does the appropriate logical compares to determine if 2 exception lists are NOT allowed to be merged/combined. Expected 'general' usage is shown below.
if (excep2_list == null) `svt_verbose("randomize_*_exception_list", "is null, no exceptions will be generated."); else if `SVT_EXCEPTION_LIST_COMBINE_NOT_OK(excep_list1,except_list2) begin `svt_verbose("randomize_*_exception_list", "cannot be combined with end else begin // Logic to do the randomization of the exceptions to be added // and then combine the two lists. // // If one list has (enable_combine == 1) then the final exception_list // is to have (enable_combine == 1) also. end |
|
|
The EA and 1.0 version of UVM include an array 'copy' issue that we need to workaround. Set a flag to indicate whether this workaround is needed
|
|
|
6
|
|
|
|
|
|
|
`ifdef ovm_fatal_context do if ((clientfile != "") || (clientline != 0)) begin `ifdef OVM_REPORT_DISABLE_FILE clientfile = ""; `endif `ifdef OVM_REPORT_DISABLE_LINE clientline = 0; `endif if (reporter.ovm_report_enabled(OVM_NONE,OVM_FATAL,id)) reporter.ovm_report_fatal(id, msg, OVM_NONE, clientfile, clientline); end else `ovm_fatal_context(id, msg, reporter) while (0) `else svt_fatal(id, msg) `endif |
|
|
OVM_NONE
|
|
|
ovm_field_aa_int_byte(ARG, FLAG) |
|
|
ovm_field_aa_int_byte_unsigned(ARG, FLAG) |
|
|
ovm_field_aa_int_int(ARG, FLAG) |
|
|
ovm_field_aa_int_int_unsigned(ARG, FLAG) |
|
|
ovm_field_aa_int_integer(ARG, FLAG) |
|
|
ovm_field_aa_int_integer_unsigned(ARG, FLAG) |
|
|
ovm_field_aa_int_key(KEY, ARG, FLAG) |
|
|
ovm_field_aa_int_longint(ARG, FLAG) |
|
|
`ovm_field_aa_string_int(ARG, FLAG) |
|
|
ovm_field_aa_int_shortint(ARG, FLAG) |
|
|
ovm_field_aa_int_shortint_unsigned(ARG, FLAG) |
|
|
ovm_field_aa_int_string(ARG,FLAG) |
|
|
ovm_field_aa_object_int(ARG, FLAG) |
|
|
ovm_field_aa_object_string(ARG,FLAG) |
|
|
`ovm_field_aa_string_int(ARG, FLAG) |
|
|
ovm_field_aa_string_string(ARG,FLAG) |
|
|
ovm_field_array_enum(T,ARG,FLAG) |
|
|
ovm_field_array_int(ARG,FLAG) |
|
|
ovm_field_array_object(ARG,FLAG) |
|
|
ovm_field_array_real(ARG,FLAG) |
|
|
ovm_field_array_string(ARG,FLAG) |
|
|
ovm_field_enum(T,ARG,FLAG) |
|
|
ovm_field_event(ARG,FLAG) |
|
|
ovm_field_object(ARG,FLAG|OVM_REFERENCE) |
|
|
ovm_field_aa_object_int(ARG, FLAG|OVM_REFERENCE) |
|
|
ovm_field_aa_object_string(ARG, FLAG|OVM_REFERENCE) |
|
|
ovm_field_array_object(ARG,FLAG|OVM_REFERENCE) |
|
|
ovm_field_sarray_object(ARG,FLAG|OVM_REFERENCE) |
|
|
ovm_field_int(ARG,FLAG) |
|
|
ovm_field_object(ARG,FLAG) |
|
|
ovm_field_queue_enum(T,ARG,FLAG) |
|
|
ovm_field_queue_object(ARG, FLAG|OVM_REFERENCE) |
|
|
ovm_field_queue_int(ARG,FLAG) |
|
|
ovm_field_queue_object(ARG,FLAG) |
|
|
ovm_field_queue_real(ARG,FLAG) |
|
|
ovm_field_queue_string(ARG,FLAG) |
|
|
|
|
`ifdef SVT_MULTI_SIM_REAL_COMPARE_TOO_PRECISE if (what__ == OVM_COMPARE) begin svt_sequence_item_base seq_item_base; if ($cast(seq_item_base, this)) begin seq_item_base.substitute_fuzzy_real_comparer(ovm_auto_options_object); end end `endif |
|
|
`ifdef SVT_MULTI_SIM_REAL_COMPARE_TOO_PRECISE if (what__ == OVM_COMPARE) begin svt_sequence_item_base seq_item_base; if ($cast(seq_item_base, this)) begin seq_item_base.restore_real_comparer(ovm_auto_options_object); end end `endif |
|
|
ovm_field_sarray_enum(T,ARG,FLAG) |
|
|
ovm_field_sarray_int(ARG,FLAG) |
|
|
ovm_field_sarray_object(ARG,FLAG) |
|
|
ovm_field_sarray_real(ARG,FLAG) |
|
|
ovm_field_sarray_string(ARG,FLAG) |
|
|
ovm_field_string(ARG,FLAG) |
|
|
0
|
|
|
0
|
|
|
1
|
|
|
256
|
|
|
256
|
|
|
1
|
|
|
1
|
|
|
0
|
|
|
begin $cast(_fsm, create_fsm(T::__type::get(), _name)); end | |
|
|
begin $cast(_st, m_create_state(T::__type::get())); _st.set_fsm(this); end | |
|
|
protected virtual function void m_incoming_states(ref svt_fsm_state_base state_q[$]); svt_fsm_state_base new_q[$] = _st; super.m_incoming_states(state_q); state_q = {state_q, new_q}; endfunction | |
Short-hand macro for defining the set of states than can transition into this state. Simply appends the specified array litteral of states to the list of incoming states specified by the base class. Must be specified within the state definition class, instead of explicitly implementing the svt_fsm_state_base :: m_incoming_states method.
|
|
|
`svt_type_factory_item(__T, svt_fsm_state_base) virtual function string get_class_name(); return SVT_DATA_UTIL_ARG_TO_STRING(__T); endfunction | |
Automatically include the required support code for the specified FSM state type. Must be called in the FSM state class.
|
|
|
The following define is provided to let clients know that this version of the FSM implementation includes support for different transition options, as defined by svt_fsm_state_base :: state_transition_options_enum. Prior to these options being available the only supported transition choice was svt_fsm_state_base :: EXTERNAL_INTERRUPT_NEXT.
With the addition of these options VIPs can improve their performance by updating to support and utilize the svt_fsm_state_base :: INTERNAL_INTERRUPT_NEXT transition choice. |
|
|
`svt_type_factory_item(__T, svt_fsm) | |
Automatically include the required support code for the specified FSM type. Must be called in the FSM class.
|
|
|
evstatus = svt_event_status(evowner,evname); | |
Macro used to get the notification event status
|
|
|
get_global_cbs
|
|
|
ison = svt_event_pool::get_event_is_on(evowner.event_pool, SVT_DATA_UTIL_ARG_TO_STRING(evname)); | |
Macro used to check the is_on state for a named notification event in the current methodology.
|
|
|
evstatus = svt_event_pool::get_event_trigger_data(evowner.event_pool, SVT_DATA_UTIL_ARG_TO_STRING(evname)); | |
Macro used to get the named notification event status
|
|
|
'h5000000
|
|
|
'h024
|
|
|
'h020
|
|
|
'h004
|
|
|
'h008
|
|
|
'h001
|
|
|
'h009
|
|
|
'h012
|
|
|
'h010
|
|
|
'h002
|
|
|
'h038
|
|
|
'h007
|
|
|
Executing this macro in an interface provides an interface accessible method that can be used to enable fsdb dumping of the interface.
The 'depth' argument can be used to define the depth of dumping which is to be enabled. The expectation is '1' for interfaces without any hierarchy. Hierarchical interfaces should provide a value corresponding to the overall interface depth. |
|
|
`ifdef SVT_FSDB_ENABLE bit enable_signal_log = 0; function void set_enable_signal_log(); enable_signal_log = 1; endfunction `else function void set_enable_signal_log(); /** Provide a no-op that clients can call safely when FSDB not enabled. */ endfunction `endif | |
Calling this macro in an interface or module declares a variable and a method for controlling whether FSDB dumping is enabled. Modules should call this macro directly. Interfaces use will call this macro indirectly when they use call SVT_IF_UTIL_SUPPORT_SIGNAL_LOGGING.
|
|
|
/** Full path to this interface or module instance */ string full_name; initial full_name = $sformatf("%m"); /** Simple method for getting the full path for an interface or module. */ function string get_full_name(); get_full_name = full_name; endfunction SVT_IF_UTIL_WAIT_ENABLE_SIGNAL_LOG(triggerpath,depth) | |
Calling this macro in a module or interface adds an initial block that will enable fsdb dumping of the module or interface when the enable_signal_log variable in the object indicated by 'triggerpath' is set. Modules should call this macro directly, in concert with SVT_IF_UTIL_SUPPORT_SIGNAL_LOGGING_DECL. Interfaces use this macro indirectly when they call SVT_IF_UTIL_SUPPORT_SIGNAL_LOGGING.
The client must set the enable_signal_log value in the object indicated by 'triggerpath' by calling the 'set_enable_signal_log' method on the object when it knows the module or interface dumping is desired. The 'depth' argument can be used to define the depth of dumping which is to be enabled. The expectation is that it will be '1' for all modules and for any interfaces without any hierarchy. Hierarchical interfaces should provide a value corresponding to the overall interface depth. |
|
|
/** Full path to this interface or module instance */ reg [80*8:1] full_name; initial full_name = $sformatf("%m"); /** Simple method for getting the full path for an interface or module. */ function reg [80*8:1] get_full_name(); get_full_name = full_name; endfunction SVT_IF_UTIL_WAIT_ENABLE_SIGNAL_LOG(triggerpath,1) | |
NOTE: The following macro is the same as SVT_IF_UTIL_SUPPORT_SIGNAL_LOGGING_IMPL, but has been designed to be acceptable in a VLOG module where verilog2001 syntax is being enforced for all VLOG modules. Note that on Questa we actually just defer to the base SVT_IF_UTIL_SUPPORT_SIGNAL_LOGGING_IMPL macro.
Calling this macro in a module adds an initial block that will enable fsdb dumping of the module or interface when the enable_signal_log variable in the object indicated by 'triggerpath' is set. Modules should call this macro directly, in concert with SVT_IF_UTIL_SUPPORT_SIGNAL_LOGGING_DECL. The client must set the enable_signal_log value in the object indicated by 'triggerpath' by calling the 'set_enable_signal_log' method on the object when it knows the module or interface dumping is desired. Note that unlike SVT_IF_UTIL_SUPPORT_SIGNAL_LOGGING_IMPL, since this macro is aimed at modules, it does not support a 'depth' option. |
|
|
`ifdef SVT_FSDB_ENABLE initial begin `ifdef QUESTA /* On questa accessing the concatenated string directly results in an 'argument is invalid' message. */ /* So we put '{"+fsdbfile+",SVT_DEBUG_OPTS_FSDB_FILE_NAME}' into a local 'fsdbfile_plus_filename' variable to avoid the error. */ static reg [80*8:1] fsdbfile_plus_filename = {"+fsdbfile+",SVT_DEBUG_OPTS_FSDB_FILE_NAME}; `endif wait(triggerpath``enable_signal_log == 1); `ifdef SVT_IF_UTIL_DISABLE_DEFAULT_FSDB /* Use the 'no_default' switch, available with Verdi 2016.06, to */ /* identify that the DEBUG_OPTS FSDB file should not become the */ /* default for all signal storage. This reserves the file for our */ /* interface/module signal information, and ensures that the user */ /* signal information is excluded. */ $fsdbDumpfile(SVT_DEBUG_OPTS_FSDB_FILE_NAME, "+no_default"); `endif `ifdef QUESTA $fsdbDumpvars(depth,$sformatf("%m"),"+all",fsdbfile_plus_filename); `else $fsdbDumpvars(depth,$sformatf("%m"),"+all",{"+fsdbfile+",SVT_DEBUG_OPTS_FSDB_FILE_NAME}); `endif end `endif | |
Utility macro used to setup an initial block to initiate FSDB signal logging once the client specified trigger has been fired. Acts as a no-op if FSDB support not enabled.
|
|
|
0
| |
Constants used to indicate the pass or fail effect for a check..
|
|
|
DEPRECATED: The original error check constants, stated in terms of fail, but used for both pass and fail.
|
|
|
|
|
This macro is used to flag issues which we want to catch during internal development, but which we are willing to live with at the customer site. In these situations its an 'error' internally, but just a verbose message externally.
|
|
|
|
This macro is used to flag issues which we want to catch during internal development, but which we are willing to live with at the customer site. In these situations its a 'warning' internally, but just a verbose message externally.
|
|
|
|
|
|
|
|
|
(DO_ALL & (((value) & SVT_NOPRINT) ? ~DO_PRINT : DO_ALL) & (((value) & SVT_NOCOPY) ? ~DO_COPY : DO_ALL) & (((value) & SVT_NOCOMPARE) ? ~DO_COMPARE : DO_ALL) & (((value) & SVT_NOPACK) ? ~(DO_PACK|DO_UNPACK) : DO_ALL)) |
|
|
1024
|
|
|
real'('hFFFF_FFFF)
|
|
|
4
|
|
|
3
|
|
|
9
|
|
|
8
|
|
|
7
|
|
|
3
|
|
|
4
|
|
|
0
|
|
|
10
|
|
|
5
|
|
|
6
|
|
|
1
|
|
|
2
|
|
|
'h8
|
|
|
'h2
|
|
|
'h3
|
|
|
'h1
|
|
|
'h80
|
|
|
1
| |
Indicates that the attribute operation should 'OR' values.
|
|
|
'h0
|
|
|
'h4
|
|
|
mem_core.get_is_4state()?mem_core.svr_4state.R:mem_core.svr_2state.R
|
|
|
if (mem_core.get_is_4state()) L=mem_core.svr_4state.R; else L=mem_core.svr_2state.R
|
|
|
if (mem_core.get_is_4state()) mem_core.svr_4state.R; else mem_core.svr_2state.R
|
|
|
3
|
|
|
'h40
|
|
|
1
|
|
|
0
| |
Constants for the compare options supported by backdoor classes
|
|
|
2
|
|
|
1'b0
|
|
|
1'b1
|
|
|
1'b0
|
|
|
1'b1
|
|
|
svt_mem class can use this macro to insure the debug messages they produce are filtered based on the 'SVT_MEM_ENABLE_INTERNAL_MESSAGING' define.
|
|
|
43
|
|
|
7
|
|
|
19
|
|
|
36
|
|
|
25
|
|
|
37
|
|
|
4
|
|
|
14
|
|
|
44
|
|
|
20
|
|
|
27
|
|
|
26
|
|
|
10
|
|
|
38
|
|
|
15
|
|
|
45
|
|
|
8
|
|
|
21
|
|
|
28
|
|
|
1
|
|
|
11
|
|
|
39
|
|
|
5
|
|
|
16
|
|
|
22
|
|
|
29
|
|
|
40
|
|
|
17
|
|
|
31
|
|
|
30
|
|
|
2
|
|
|
12
|
|
|
9
|
|
|
23
|
|
|
41
|
|
|
6
|
|
|
18
|
|
|
32
|
|
|
24
|
|
|
34
|
|
|
33
|
|
|
3
|
|
|
13
|
|
|
42
|
|
|
35
|
|
|
'h1
| |
Dump ALL locations in the address range. When not set only the written (i.e., via the bus, a poke, or a load) values will be included in the dump output.
|
|
|
'h10
| |
Append the contents to the existing file if found. For internal use only.
|
|
|
'h4
| |
Exclude the BEGIN from the file output. Used with append when BEGIN not required.
|
|
|
'h8
| |
Exclude the END from the file output. Used with append when END not required.
|
|
|
'h2
| |
Exclude the dump file text header. Note that with MIF this will exclude WIDTH and other settings.
|
|
|
'h8
|
|
|
'h10
|
|
|
3
|
|
|
6
|
|
|
5
|
|
|
2
|
|
|
8
|
|
|
0
|
|
|
7
|
|
|
4
|
|
|
1
|
|
|
0
| |
Constants for the initialize options supported by backdoor classes
|
|
|
2
|
|
|
1
|
|
|
6
|
|
|
'h20
|
|
|
5
|
|
|
3
|
|
|
4
|
|
|
'h4
|
|
|
'h1
| |
Write protect the memory locations in the load file
|
|
|
16
|
|
|
|
|
64
|
|
|
8
|
|
|
1024
|
|
|
|
|
1024
|
|
|
8
|
|
|
'h10
|
|
|
'h02
|
|
|
'h01
|
|
|
'h08
|
|
|
'h20
|
|
|
'h04
|
|
|
'h1
| |
Mask values for to the currently defined system memory manager operations.
|
|
|
'h2
|
|
|
0
|
|
|
1
|
|
|
'h0
|
|
|
'h0003
|
|
|
|
|
|
|
|
|
'hfffffffc
|
|
|
|
|
'h1
|
|
|
'h0002
|
|
|
'h0003
|
|
|
'h0004
|
|
|
'h0001
|
|
|
'h0007
|
|
|
'h0008
|
|
|
'h0006
|
|
|
'h0005
|
|
|
32'h00000010
|
|
|
32'h00000040
|
|
|
32'h00000020
|
|
|
32'h00000001
|
|
|
32'h00000002
|
|
|
32'h00000100
|
|
|
32'h00000200
|
|
|
32'h00080000
|
|
|
32'h00070000
|
|
|
32'h00070000
|
|
|
32'h00010000
|
|
|
32'h00030000
|
|
|
32'h00050000
|
|
|
32'h00040000
|
|
|
32'h00060000
|
|
|
32'h00020000
|
|
|
32'h00100000
|
|
|
32'h00020000
|
|
|
32'h00002000
|
|
|
32'h00040000
|
|
|
32'h00200000
|
|
|
32'h00001000
|
|
|
32'h00010000
|
|
|
32'h00008000
|
|
|
32'h00004000
|
|
|
|
|
|
|
|
|
(SVT_MEM_SA_STATUS_RD_RD_NO_WR | SVT_MEM_SA_STATUS_WR_LOSS | SVT_MEM_SA_STATUS_WR_SAME | SVT_MEM_SA_STATUS_WR_WR | SVT_MEM_SA_STATUS_RD_B4_WR | SVT_MEM_SA_STATUS_WR_PROT | SVT_MEM_SA_STATUS_ADR_ERR | SVT_MEM_SA_STATUS_DATA_ERR | SVT_MEM_SA_STATUS_ACCESS_LOCKED | SVT_MEM_SA_STATUS_ACCESS_ERROR | SVT_MEM_SA_STATUS_PARTIAL_RD | SVT_MEM_SA_STATUS_MISCOMPARE ) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
'h3
|
|
|
200
|
|
|
'h1
|
|
|
'h3
|
|
|
'h2
|
|
|
'h4
|
|
|
'h3
|
|
|
'h5
|
|
|
'h1
|
|
|
'h0
|
|
|
'h2
|
|
|
64
|
|
|
6
| |
Maximum number of physical addressing dimensions the memserver System Verilog component will handle Set to the maximum currently required by all known memserver clients
|
|
|
1
|
|
|
4
|
|
|
3
|
|
|
2
|
|
|
|
|
|
|
|
|
'h0
|
|
|
|
|
(((m)&SVT_MEM_SA_MODE_COHERENCE_MASK)>>6)
|
|
|
'h000000c0
|
|
|
(((val)&'h3)<<6)
|
|
|
'h00000004
|
|
|
'h00000002
|
|
|
(((m)&SVT_MEM_SA_MODE_SPACE_MASK)>>4)
|
|
|
(((val)&'h3)<<4)
|
|
|
'h00000008
|
|
|
'h00000001
|
|
|
(((m)&SVT_MEM_SA_MODE_SIM_SIZE_MASK)>>8)
|
|
|
'h00000300
|
|
|
(((val)&'h3)<<8)
|
|
|
'h00000030
|
|
|
0
|
|
|
0
|
|
|
2
|
|
|
1
|
|
|
'h1f
|
|
|
6
|
|
|
5
|
|
|
'h80
|
|
|
3
|
|
|
4
|
|
|
1
|
|
|
int unsigned ADDR [SVT_MEM_SA_CORE_PHYSICAL_DIMENSIONS_MAX]
|
|
|
32'h00000200
|
|
|
32'h00000100
|
|
|
32'h00000040
|
|
|
32'h20000000
|
|
|
32'h00000080
|
|
|
|
|
32'h40000000
|
|
|
32'h00000400
|
|
|
32'h80000000
|
|
|
32'h00002000
|
|
|
32'h00004000
|
|
|
32'h00000000
|
|
|
32'h00001000
|
|
|
32'h00000800
|
|
|
32'h00000010
|
|
|
32'h00000001
|
|
|
32'h00000002
|
|
|
32'h00000020
|
|
|
32'h00000004
|
|
|
32'h00000008
|
|
|
|
|
`ifdef SVT_VMM_TECHNOLOGY if (do_what == DO_COMPARE) begin if (!svt_mem_compare_hook(this.__vmm_rhs, this.__vmm_image)) begin this.__vmm_status = 0; end end `endif | |
Add some customized logic to compare the actual memory elements
|
|
|
`ifdef SVT_VMM_TECHNOLOGY if (do_what == DO_COPY) begin svt_mem_copy_hook(this.__vmm_rhs); end `endif | |
Add some customized logic to copy the actual memory elements
|
|
|
|
`define svt___current_suite __suite `define svt___current_vendor __name | |
Short-hand macro to define a suite-specific, vendor-specific catalog class and start populating part entries. May be used multiple times to create multiple catalog "pages".
Assumes the existence of a catalog class named svt_ |
|
|
`undef svt___current_suite `undef svt___current_vendor | |
Short-hand macro for closing a vendor part catalog "page".
|
|
|
svt_mem_vendor_part2(`svt___current_suite, `svt___current_vendor, __name, __descr, __depth, __width, __speed, __cfg) | |
Short-hand macro for defining a vendor part catalog entry. Must be used between `svt_mem_vendor_catalog_begin and
`undef svt___current_suite `undef svt___current_vendor macros |
|
|
svt_``__suite``_vendor_part __name``__in__``__suite``_``__vendor``_catalog = new(svt_``__suite``_vendor_catalog::get_vendor(`"__vendor`"), `"__name`", __descr, SVT_MEM_``__depth, SVT_MEM_``__width, SVT_MEM_``__speed, __cfg); |
|
|
svt_mem class can use this macro to insure the verbose messages they produce are filtered based on the 'SVT_MEM_ENABLE_INTERNAL_MESSAGING' define.
|
|
|
SVT_XVM_UC(ERROR)
|
|
|
SVT_XVM_UC(FATAL)
| |
Simple defines to make it easier to write portable FATAL/ERROR/WARNING requests.
|
|
|
svt_message_manager::facilitate_get_client_verbosity_level(prefmgrid,defmgrid) | |
Macro used to get the verbosity for the associated message manager.
|
|
|
SVT_XVM_UC(WARNING)
|
|
|
0
|
|
|
(1<<3)
|
|
|
(1<<1)
|
|
|
(1<<16)
|
|
|
(1<<9)
|
|
|
(1<<5)
|
|
|
(1<<7)
|
|
|
OVM_LOW
|
|
|
|
|
`ifdef ovm_info_context do if ((clientfile != "") || (clientline != 0)) begin `ifdef OVM_REPORT_DISABLE_FILE clientfile = ""; `endif `ifdef OVM_REPORT_DISABLE_LINE clientline = 0; `endif if (reporter.ovm_report_enabled(OVM_LOW,OVM_INFO,id)) reporter.ovm_report_info(id, msg, OVM_LOW, clientfile, clientline); end else `ovm_info_context(id, msg, OVM_LOW, reporter) while (0) `else svt_note(id, msg) `endif |
|
|
3
|
|
|
|
|
svt_notify
|
|
|
if (stateclass.notifyname == 0) begin stateclass.notifyname = stateclass.notify.configure(, notifykind); end else begin svt_fatal(SVT_DATA_UTIL_ARG_TO_STRING(methodname), $sformatf("Attempted to configure notify '%0s' twice. Unable to continue.", SVT_DATA_UTIL_ARG_TO_STRING(notifyname))); end | |
This macro can be used to configure a basic notification, independent of the base technology.
|
|
|
2
|
|
|
SVT_SOURCE_QUOTE_DESIGNWARE_HOME(suite/include/common.h)
|
|
|
SVT_SOURCE_QUOTE_DESIGNWARE_HOME(suite/include/common.svh)
|
|
|
SVT_SOURCE_QUOTE_DESIGNWARE_HOME(suite/include/common.vi)
|
|
|
SVT_SOURCE_QUOTE_DESIGNWARE_HOME(suite/include/common.vih)
|
|
|
SVT_SOURCE_QUOTE_DESIGNWARE_HOME(suite/model/bfm/include/common.vi)
|
|
|
SVT_SOURCE_QUOTE_DESIGNWARE_HOME(suite/model/bfm/include/module.v)
|
|
|
SVT_SOURCE_QUOTE_DESIGNWARE_HOME(suite/include/interface.sv)
|
|
|
SVT_SOURCE_QUOTE_DESIGNWARE_HOME(suite/include/module.v)
|
|
|
SVT_SOURCE_QUOTE_DESIGNWARE_HOME(suite/include/verilog/module.v)
|
|
|
SVT_SOURCE_QUOTE_DESIGNWARE_HOME(suite/include/verilog/module.vih)
|
|
|
SVT_SOURCE_QUOTE_DESIGNWARE_HOME(suite/src/verilog/module.v)
|
|
|
'h4000000
|
|
|
|
|
(1<<13)
|
|
|
1
| |
The use of variables on the left-hand side in non-blocking assignments can be problematic for global methods unless they are included in packages or modules. For example if the 'svt_wait_for_nba_region' method is simply loaded in the top level testbench, outside a module or package, VCS will generate the following error:
Error-[DTNBA] Dynamic type in non-blocking assignment..."nba"...Dynamic type (Automatic variable in this case) cannot be used on the left-hand side of non blocking assignment. As some SVT VIPs have committed to support the use of their VMM versions outside of a package, and since the 'svt_wait_for_nba_region' is not currently required to provide VMM support for any of the SVT VIPs, this method has been excluded in the VMM version of SVT. Since this feature has been identified as a necessity in UVM/OVM, and since we require that the VIP be loaded via package in these domains, this feature is fully supported in UVM/OVM. |
|
|
|
|
(1<<16)
|
|
|
'h1000
|
|
|
1
|
|
|
-1
| |
Constants used with operations such as byte_pack, compare, etc., to select the completeness of the action. RELEVANT for protocol specific fields, COMPLETE for all fields.
|
|
|
action
|
|
|
severity
|
|
|
/* Only request the wakeup if the event is currently on */ evowner.evname.reset(evowner.evname.is_on()); | |
Macro used to reset a notification event in the current methodology
|
|
|
svt_event_pool::reset_event(evowner.event_pool, SVT_DATA_UTIL_ARG_TO_STRING(evname)); | |
Macro used to reset a named notification event in the current methodology
|
|
|
/** Sequence library for ITEM transaction. */ class ITEM``_sequence_library extends svt_sequence_library#(ITEM); `ifdef SVT_UVM_TECHNOLOGY `uvm_object_utils(ITEM``_sequence_library) `uvm_sequence_library_utils(ITEM``_sequence_library) `else ovm_object_utils(ITEM``_sequence_library) `endif extern function new (string name = SVT_DATA_UTIL_ARG_TO_STRING(ITEM``_sequence_library)); endclass | |
THIS MACRO IS BEING DEPRECATED !!!
Clients should instead create sequence libraries manually, using the SVT_SEQUENCE_LIBRARY_SAFE_ADD_SEQUENCE macro to populate the library. |
|
|
function ITEM``_sequence_library::new(string name = SVT_DATA_UTIL_ARG_TO_STRING(ITEM``_sequence_library)); super.new(name, SVT_DATA_UTIL_ARG_TO_STRING(SUITE)); `ifdef SVT_UVM_TECHNOLOGY init_sequence_library(); `endif endfunction | |
THIS MACRO IS BEING DEPRECATED !!!
Clients should instead create sequence libraries manually, using the SVT_SEQUENCE_LIBRARY_SAFE_ADD_SEQUENCE macro to populate the library. |
|
|
begin seqtype seq = new(); if (seq.is_applicable(cfg)) begin this.add_sequence(seqtype::get_type()); count++; end end | |
Macro which can be used to add a sequence to a sequence library, after checking to make sure the sequence is valid relative to the sequence library cfg. When a sequence is added successfully the count variable provided by the caller is incremented to indicate the successful addition.
|
|
|
static protected ovm_object_wrapper m_typewide_sequences[$]; function void init_sequence_library(); foreach (TYPE::m_typewide_sequences[i]) sequences.push_back(TYPE::m_typewide_sequences[i]); endfunction static function void add_typewide_sequence(ovm_object_wrapper seq_type); if (m_static_check(seq_type)) TYPE::m_typewide_sequences.push_back(seq_type); endfunction static function bit m_add_typewide_sequence(ovm_object_wrapper seq_type); TYPE::add_typewide_sequence(seq_type); return 1; endfunction |
|
|
/** * This class is Sequencer that provides stimulus for the * #ITEM``_driver class. The #ITEM``_agent class is responsible * for connecting this SVT_XVM(sequencer) to the driver if the agent is configured as * SVT_XVM_UC(ACTIVE). */ class ITEM``_sequencer extends svt_sequencer#(ITEM); /** @cond PRIVATE */ /** Configuration object for this sequencer. */ local CFG_TYPE cfg; /** @endcond */ `ifdef SVT_UVM_TECHNOLOGY `uvm_component_utils(ITEM``_sequencer) `else ovm_sequencer_utils(ITEM``_sequencer) `endif /** * CONSTRUCTOR: Create a new agent instance * * @param name The name of this instance. Used to construct the hierarchy. * * @param parent The component that contains this intance. Used to construct * the hierarchy. */ extern function new (string name = SVT_DATA_UTIL_ARG_TO_STRING(ITEM``_sequencer), SVT_XVM(component) parent = null); /** Build phase */ `ifdef SVT_UVM_TECHNOLOGY extern virtual function void build_phase(uvm_phase phase); `else extern virtual function void build(); `endif /** * Updates the sequencer's configuration with data from the supplied object. * NOTE: * This operation is different than the reconfigure() methods for svt_driver and * svt_monitor classes. This method sets a reference to the original * rather than making a copy. */ extern virtual function void reconfigure(svt_configuration cfg); /** * Returns a reference of the sequencer's configuration object. * NOTE: * This operation is different than the get_cfg() methods for svt_driver and * svt_monitor classes. This method returns a reference to the configuration * rather than a copy. */ extern virtual function void get_cfg(ref svt_configuration cfg); endclass | |
Macro used to implement a sequencer for the supplied transaction.
|
|
|
Macro used to implement a sequencer for the supplied transaction. This macro should be called from an encrypted portion of the extended file.
|
|
|
function ITEM``_sequencer::new(string name = SVT_DATA_UTIL_ARG_TO_STRING(ITEM``_sequencer), SVT_XVM(component) parent = null); super.new(name, parent, SUITE_STRING); endfunction: new `ifdef SVT_UVM_TECHNOLOGY function void ITEM``_sequencer::build_phase(uvm_phase phase); string method_name = "build_phase"; super.build_phase(phase); `elsif SVT_OVM_TECHNOLOGY function void ITEM``_sequencer::build(); string method_name = "build"; super.build(); `endif begin if (cfg == null) begin if (svt_config_object_db#(CFG_TYPE)::get(this, "", "cfg", cfg) && (cfg != null)) begin /* If we got it from the config_db, then make a copy of it for use with the internally generated objects */ if(!($cast(this.cfg, cfg.clone()))) begin svt_fatal(method_name, $sformatf("Failed when attempting to cast '%0s'", SVT_DATA_UTIL_ARG_TO_STRING(CFG_TYPE))); end end else begin svt_fatal(method_name, $sformatf("'cfg' is null. An '%0s' object or derivative object must be set using the configuration infrastructure or via reconfigure.", SVT_DATA_UTIL_ARG_TO_STRING(CFG_TYPE))); end end end endfunction function void ITEM``_sequencer::reconfigure(svt_configuration cfg); if (!$cast(this.cfg, cfg)) begin svt_error("reconfigure", "Failed attempting to assign 'cfg' argument to sequencer 'cfg' field."); end endfunction function void ITEM``_sequencer::get_cfg(ref svt_configuration cfg); cfg = this.cfg; endfunction | |
Base macro used to implement a sequencer for the supplied transaction. This macro should be called from an encrypted portion of the extended file, and only if the client needs to provide a 'string' suite name. Clients should normally use the SVT_SEQUENCER_IMP macro instead.
|
|
|
'h800
|
|
|
1
|
|
|
"VCS"
|
|
|
SVT_SOURCE_QUOTE_DESIGNWARE_HOME(vip/suite/model/include/inclsvi.svi)
|
|
|
SVT_SOURCE_QUOTE_DESIGNWARE_HOME(vip/suite/model/include/inclsvi.svi)
|
|
|
SVT_SOURCE_QUOTE_DESIGNWARE_HOME(vip/suite/model/include/inclsvi.svi)
|
|
|
SVT_SOURCE_QUOTE_DESIGNWARE_HOME(vip/suite/model/include/inclsvi.svi)
|
|
|
SVT_SOURCE_QUOTE_DESIGNWARE_HOME(vip/svt/include/incpkg.pkg)
|
|
|
SVT_SOURCE_QUOTE_DESIGNWARE_HOME(vip/svt/include/incpkg.pkg)
|
|
|
SVT_SOURCE_QUOTE_DESIGNWARE_HOME(vip/svt/include/incpkg.pkg)
|
|
|
SVT_SOURCE_QUOTE_DESIGNWARE_HOME(vip/svt/include/incpkg.pkg)
|
|
|
SVT_SOURCE_QUOTE_DESIGNWARE_HOME(vip/svt/include/incpkg.pkg)
|
|
|
SVT_SOURCE_QUOTE_DESIGNWARE_HOME(vip/svt/include/incpkg.pkg)
|
|
|
SVT_SOURCE_QUOTE_DESIGNWARE_HOME(vip/svt/include/inclsvi.svi)
|
|
|
SVT_SOURCE_QUOTE_DESIGNWARE_HOME(vip/svt/include/inclsvi.svi)
|
|
|
SVT_SOURCE_QUOTE_DESIGNWARE_HOME(vip/svt/include/inclsvi.svi)
|
|
|
SVT_SOURCE_QUOTE_DESIGNWARE_HOME(vip/svt/include/inclsvi.svi)
|
|
|
SVT_SOURCE_QUOTE_DESIGNWARE_HOME(vip/svt/include/inclsvi.svi)
|
|
|
SVT_SOURCE_QUOTE_DESIGNWARE_HOME(vip/svt/include/inclsvi.svi)
|
|
|
SVT_SOURCE_QUOTE_DESIGNWARE_HOME(vip/svt/src/module.sv)
|
|
|
SVT_SOURCE_QUOTE_DESIGNWARE_HOME(vip/svt/src/srcsvi.svi)
|
|
|
SVT_SOURCE_QUOTE_DESIGNWARE_HOME(vip/suite/model/include/inclsvi.svi)
|
|
|
SVT_SOURCE_QUOTE_DESIGNWARE_HOME(vip/suite/model/include/inclsvi.svi)
|
|
|
SVT_SOURCE_QUOTE_DESIGNWARE_HOME(vip/suite/model/src/module.sv)
|
|
|
SVT_SOURCE_QUOTE_DESIGNWARE_HOME(vip/suite/model/src/srcsvi.svi)
|
|
|
SVT_SOURCE_QUOTE_DESIGNWARE_HOME(vip/suite/src/module.sv)
|
|
|
SVT_SOURCE_QUOTE_DESIGNWARE_HOME(vip/suite)
|
|
|
SVT_SOURCE_QUOTE_DESIGNWARE_HOME(vip/suite/src/srcsvi.svi)
|
|
|
`"/remote/sdgvips02/rajneesh/svt_rel_client/leafname`"
|
|
|
if (`SVT_STATUS_EVENT_IS_EMPTY(evowner,evname)) begin svt_error(SVT_DATA_UTIL_ARG_TO_STRING(funcname), $sformatf("Notify '%0s' has not been configured. Unable to continue.", SVT_DATA_UTIL_ARG_TO_STRING(evname))); funcname = 0; end | |
This macro can be used to check whether a notification event has been configured.
|
|
|
svt_event_is_on(evowner,evname) | |
Macro used to check the is_on state for a notification event in the current methodology.
|
|
|
svt_event_status(evowner,evname) | |
Macro used to use the event status accessor function for the current methodology to retrieve the status for a notification event
|
|
|
svt_get_event_status(evowner,evname,evstatus) | |
Macro used to get the notification event status
|
|
|
SVT_STATUS_EVENT_CHECK(funcname,this,evname) | |
This macro can be used to check whether a notification event has been configured. NOTE: This is kept around for backwards compatibility -- classes should be moving to SVT_STATUS_EVENT_CHECK.
|
|
|
SVT_STATUS_NOTIFY_CONFIGURE_BASE(methodname,stateclass,notifyname,svt_notify::ON_OFF) | |
This macro can be used to configure a basic notify, as supported by vmm_notify, avoiding redundant configuration of the notify. This macro assumes the client desires an ON/OFF notify.
|
|
|
`ifdef SVT_VMM_TECHNOLOGY if (stateclass.notifyname == 0) begin stateclass.notifyname = stateclass.notify.configure(, notifykind); `else if (stateclass.notifyname == null) begin SVT_XVM(event_pool) event_pool = stateclass.get_event_pool(); stateclass.notifyname = event_pool.get(SVT_DATA_UTIL_ARG_TO_STRING(notifyname)); `endif end else begin svt_fatal(SVT_DATA_UTIL_ARG_TO_STRING(methodname), $sformatf("Attempted to configure notify '%0s' twice. Unable to continue.", SVT_DATA_UTIL_ARG_TO_STRING(notifyname))); end | |
This base macro can be used to configure a basic notify, as supported by the underlying technology, avoiding redundant configuration of the notify. This macro must be supplied with all pertinent info, including an indication of the notify type.
|
|
|
SVT_STATUS_NOTIFY_CONFIGURE_NAMED_NOTIFY_BASE(methodname,stateclass,notifyname,svt_notify::ON_OFF) | |
This macro can be used to configure a named notify, as supported by `SVT_XVM(event_pool), avoiding redundant configuration of the notify. This macro assumes the client desires an ON/OFF notify.
|
|
|
`ifdef SVT_VMM_TECHNOLOGY if (stateclass.notifyname == 0) begin `ifdef SVT_MULTI_SIM_LOCAL_STATIC_VARIABLE_WITH_INITIALIZER_REQUIRES_STATIC_KEYWORD svt_notify typed_notify ; typed_notify = stateclass.get_notify(); `else svt_notify typed_notify = stateclass.get_notify(); `endif stateclass.notifyname = typed_notify.configure_named_notify(SVT_DATA_UTIL_ARG_TO_STRING(notifyname), , notifykind); `else if (stateclass.notifyname == null) begin SVT_XVM(event_pool) event_pool = stateclass.get_event_pool(); stateclass.notifyname = event_pool.get(SVT_DATA_UTIL_ARG_TO_STRING(notifyname)); `endif end else begin svt_fatal(SVT_DATA_UTIL_ARG_TO_STRING(methodname), $sformatf("Attempted to configure notify '%0s' twice. Unable to continue.", SVT_DATA_UTIL_ARG_TO_STRING(notifyname))); end | |
This macro can be used to configure a named notify, as supported by `SVT_XVM(event_pool), avoiding redundant configuration of the notify.
|
|
|
svt_reset_event(evowner,evname) | |
Macro used to reset a notification event in the current methodology
|
|
|
svt_trigger_copy_data_event(evowner,evname,evdata) | |
Macro used to signal a notification event and corresponding data for the current methodology, but with a 'copy' of the original data
|
|
|
svt_trigger_data_event(evowner,evname,evdata) | |
Macro used to signal a notification event and corresponding data for the current methodology
|
|
|
svt_trigger_event(evowner,evname) | |
Macro used to signal a notification event for the current methodology
|
|
|
svt_wait_event_off(evowner,evname) | |
Macro used to wait for an 'off' a notification event in the current methodology
|
|
|
svt_wait_event_on(evowner,evname) | |
Macro used to wait for an 'on' notification event in the current methodology
|
|
|
svt_wait_event_trigger(evowner,evname) | |
Macro used to wait for a notification event in the current methodology
|
|
|
'h6000000
|
|
|
7
|
|
|
6
|
|
|
0
|
|
|
5
|
|
|
3
|
|
|
2
|
|
|
32'h0000_4000 /* Flush Buffered Message */
|
|
|
32'h0000_FF00
|
|
|
32'h0000_0200 /* Don't display the Log Level */
|
|
|
32'h0000_0400 /* Neither Timestamp nor Log Level are displayed */
|
|
|
32'h0000_0300 /* Neither Timestamp nor Log Level are displayed */
|
|
|
32'h0000_0100 /* Don't display the timestamp */
|
|
|
32'h0000_2000 /* Start Buffered Message */
|
|
|
32'h0000_0800 /* This is a transaction msglog, write to trace file, ignoring log level */
|
|
|
4
|
|
|
1
|
|
|
"shared_svc_msg_mgr"
|
|
|
|
'h7000000
|
|
|
`ifdef SVT_VMM_TECHNOLOGY (timername.notify.is_on(timername.eventname)) `else (timername.eventname.is_on()) `endif | |
Macro used to check the is_on state for a notification event in the current methodology.
|
|
|
`ifdef SVT_VMM_TECHNOLOGY timername.notify.wait_for(timername.evname); `else timername.evname.wait_trigger(); `endif | |
Macro used to wait for a notification event in the current methodology
|
|
|
`ifdef SVT_VMM_TECHNOLOGY timername.notify.wait_for_off(timername.evname); `else timername.evname.wait_off(); `endif | |
Macro used to wait for an 'off' a notification event in the current methodology
|
|
|
`ifdef SVT_VMM_TECHNOLOGY timername.notify.wait_for(timername.evname); `else timername.evname.wait_on(); `endif | |
Macro used to wait for an 'on' notification event in the current methodology
|
|
|
3
|
|
|
15
|
|
|
9
|
|
|
6
|
|
|
18
|
|
|
12
|
|
|
2
|
|
|
14
|
|
|
8
|
|
|
5
|
|
|
17
|
|
|
11
|
|
|
1
|
|
|
13
|
|
|
7
|
|
|
4
|
|
|
16
|
|
|
10
|
|
|
0
| |
Macros defined to represent different timeunit values.
|
|
|
|
|
`ifdef ovm_info_context do if ((clientfile != "") || (clientline != 0)) begin `ifdef OVM_REPORT_DISABLE_FILE clientfile = ""; `endif `ifdef OVM_REPORT_DISABLE_LINE clientline = 0; `endif if (reporter.ovm_report_enabled(OVM_MEDIUM,OVM_INFO,id)) reporter.ovm_report_info(id, msg, OVM_MEDIUM, clientfile, clientline); end else `ovm_info_context(id, msg, OVM_MEDIUM, reporter) while (0) `else svt_trace(id, msg) `endif |
|
|
OVM_MEDIUM
|
|
|
4096
|
|
|
4096
|
|
|
4096
|
|
|
64
|
|
|
2
|
|
|
2
|
|
|
1
|
|
|
0
|
|
|
0
|
|
|
0
|
|
|
512
|
|
|
1
|
|
|
1
|
|
|
2
|
|
|
0
|
|
|
1
|
|
|
3
|
|
|
svt_sequence_item_base
|
|
|
end_time
|
|
|
svt_sequence_item::end_event
|
|
|
/** Exception list initiator for classname transaction */ class classname``_exception_list_initiator extends classname; rand classname``_exception_list rand_exception_list; `ifndef SVT_VMM_TECHNOLOGY /** Constructor */ function new(string name=""); super.new(name); endfunction svt_data_member_begin(classname``_exception_list_initiator) svt_data_member_end(classname``_exception_list_initiator) `endif /** pre_randomize method which can be insures rand_exception_list is non-null. */ function void pre_randomize(); super.pre_randomize(); if (this.rand_exception_list == null) this.rand_exception_list = new(); this.rand_exception_list.setup_randomized_exception(this.cfg, this); `ifdef SVT_MULTI_SIM_SKIPPED_PRE_RANDOMIZE this.rand_exception_list.populate_exceptions(); `endif endfunction /** pre_randomize method which removes the exception list if it is empty. */ function void post_randomize(); super.post_randomize(); if ((this.rand_exception_list != null) && (this.rand_exception_list.num_exceptions > 0)) begin this.exception_list = this.rand_exception_list; end else begin /* Clearing this.rand_exception_list can result in warning in some simulators, so leave it. */ /* this.rand_exception_list = null; */ this.exception_list = null; end endfunction endclass | |
Container which automates exception generation for a transaction.
|
|
|
( (start_ix == -1) ? 0 : start_ix ) | |
Macro used to figure out the first available index
|
|
|
( (end_ix == -1) ? SVT_TRANSACTION_ITER_TOP_LEVEL_QUEUE_SIZE-1 : end_ix ) | |
Macro used to figure out the last available index
|
|
|
( (iter_type == IMPLEMENTATION) ? this.iter_xact.implementation.size() : ((iter_type == TRACE) && (this.iter_xact.trace.size() == 0)) ? this.iter_xact.implementation.size() : ((iter_type == TRACE) && ((name_match == null) || scan_name_match_trace)) ? this.iter_xact.trace.size() : ((iter_type == TRACE) && (name_match.get_class_name() != iter_xact.get_class_name())) ? this.iter_xact.trace.size() : (iter_type == TRACE) ? this.iter_xact.implementation.size() : 0 ) | |
Macro used to access the queue size for the proper collection
|
|
|
( (iter_type == IMPLEMENTATION) ? this.iter_xact.implementation[top_level_ix] : ((iter_type == TRACE) && (this.iter_xact.trace.size() == 0)) ? this.iter_xact.implementation[top_level_ix] : ((iter_type == TRACE) && ((name_match == null) || scan_name_match_trace)) ? this.iter_xact.trace[top_level_ix] : ((iter_type == TRACE) && (name_match.get_class_name() != iter_xact.get_class_name())) ? this.iter_xact.trace[top_level_ix] : (iter_type == TRACE) ? this.iter_xact.implementation[top_level_ix] : null ) | |
Macro used to pull the data object from the proper collection
|
|
|
svt_sequence_item_iter
|
|
|
ovm_object
|
|
|
svt_sequence_item_report
|
|
|
`ifdef SVT_VMM_TECHNOLOGY if (do_what == DO_COPY) begin svt_transaction_copy_hook(this.__vmm_rhs); end `endif | |
Add some customized logic to copy implementation and trace queues
|
|
|
begin_time
|
|
|
svt_sequence_item::begin_event
|
|
|
svt_sequence_item
|
|
|
svt_disable_auto_item_record
|
|
|
evowner.evname.trigger(evdata.clone()); | |
Macro used to signal a notification event and corresponding data for the current methodology, but with a 'copy' of the original data
|
|
|
evowner.evname.trigger(evdata); | |
Macro used to signal a notification event and corresponding data for the current methodology
|
|
|
evowner.evname.trigger(); | |
Macro used to signal a notification event for the current methodology
|
|
|
svt_event_pool::trigger_event(evowner.event_pool, SVT_DATA_UTIL_ARG_TO_STRING(evname), evdata.clone()); | |
Macro used to signal a named notification event and corresponding data for the current methodology, but with a 'copy' of the original data
|
|
|
svt_event_pool::trigger_event(evowner.event_pool, SVT_DATA_UTIL_ARG_TO_STRING(evname), evdata); | |
Macro used to signal a named notification event and corresponding data for the current methodology
|
|
|
svt_event_pool::trigger_event(evowner.event_pool, SVT_DATA_UTIL_ARG_TO_STRING(evname)); | |
Macro used to signal a named notification event for the current methodology
|
|
|
10
|
|
|
"unset_inst"
| |
Default string used as the initial value in all instances to recognize instances whose names have and have not been set.
|
|
|
'h3000000
|
|
|
`ifdef SVT_UVM_ENABLE_FGP `ifdef SVT_UVM_TECHNOLOGY `ifndef SVT_MULTI_SIM_UNIDENTIFIED_PRAGMA (* snps_uvm_fgp_lock *) `endif `endif `endif | |
Declares FGP lock for a task/method
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
`ifdef ovm_info_context do if ((clientfile != "") || (clientline != 0)) begin `ifdef OVM_REPORT_DISABLE_FILE clientfile = ""; `endif `ifdef OVM_REPORT_DISABLE_LINE clientline = 0; `endif if (reporter.ovm_report_enabled(OVM_FULL,OVM_INFO,id)) reporter.ovm_report_info(id, msg, OVM_FULL, clientfile, clientline); end else `ovm_info_context(id, msg, OVM_FULL, reporter) while (0) `else svt_verbose(id, msg) `endif |
|
|
1
|
|
|
|
|
OVM_FULL
|
|
|
|
|
0
|
|
|
0
|
|
|
0
|
|
|
0
|
|
|
0
|
|
|
0
|
|
|
svt_voter
|
|
|
evowner.evname.wait_off(); | |
Macro used to wait for an 'off' notification event in the current methodology
|
|
|
evowner.evname.wait_on(); | |
Macro used to wait for an 'on' notification event in the current methodology
|
|
|
evowner.evname.wait_ptrigger(); | |
Macro used to wait for a 'persistent' notification event in the current methodology
|
|
|
evowner.evname.wait_trigger(); | |
Macro used to wait for a notification event in the current methodology
|
|
|
svt_event_pool::wait_event_off(evowner.event_pool, SVT_DATA_UTIL_ARG_TO_STRING(evname)); | |
Macro used to wait for an 'off' named notification event in the current methodology
|
|
|
svt_event_pool::wait_event_on(evowner.event_pool, SVT_DATA_UTIL_ARG_TO_STRING(evname)); | |
Macro used to wait for an 'on' named notification event in the current methodology
|
|
|
svt_event_pool::wait_event_trigger(evowner.event_pool, SVT_DATA_UTIL_ARG_TO_STRING(evname)); | |
Macro used to wait for a named notification event in the current methodology
|
|
|
|
|
`ifdef ovm_warning_context do if ((clientfile != "") || (clientline != 0)) begin `ifdef OVM_REPORT_DISABLE_FILE clientfile = ""; `endif `ifdef OVM_REPORT_DISABLE_LINE clientline = 0; `endif if (reporter.ovm_report_enabled(OVM_NONE,OVM_WARNING,id)) reporter.ovm_report_warning(id, msg, OVM_NONE, clientfile, clientline); end else `ovm_warning_context(id, msg, reporter) while (0) `else svt_warning(id, msg) `endif |
|
|
4
|
|
|
|
|
OVM_NONE
|
|
|
0
| |
Writer type constants used for controlling the writer format
|
|
|
3
|
|
|
1
|
|
|
2
|
|
|
ovm_``obj
|
|
|
OVM_ALL_ON
|
|
|
|
|
|
|
|
|
|
|
|
|
svt_xvm_create_on(SEQ_OR_ITEM, m_sequencer) |
|
|
$cast(SEQ_OR_ITEM, create_item(SEQ_OR_ITEM.get_type(), SEQR, `"SEQ_OR_ITEM`")); |
|
|
ovm_info(id, msg, OVM_HIGH) |
|
|
ovm_declare_p_sequencer(SEQUENCER)
|
|
|
svt_xvm_do_on_pri(SEQ_OR_ITEM, m_sequencer, -1) |
|
|
ovm_do_callbacks(CB,T,METHOD) |
|
|
ovm_do_obj_callbacks(CB,T,OBJ,METHOD) |
|
|
svt_xvm_do_on_pri(SEQ_OR_ITEM, SEQR, -1) |
|
|
begin svt_xvm_create_on(SEQ_OR_ITEM, SEQR) SEQ_OR_ITEM.priority_start(this, PRIORITY); if (!SEQ_OR_ITEM.randomize()) svt_xvm_warning("RNDFLD", "Randomization failed in ovm_do_on action") SEQ_OR_ITEM.priority_finish(this, PRIORITY); end |
|
|
begin svt_xvm_create_on(SEQ_OR_ITEM, SEQR) SEQ_OR_ITEM.priority_start(this, PRIORITY); if (!SEQ_OR_ITEM.randomize() with CONSTRAINTS ) svt_xvm_warning("RNDFLD", "Randomization failed in ovm_do_with action") SEQ_OR_ITEM.priority_finish(this, PRIORITY); end |
|
|
svt_xvm_do_on_pri_with(SEQ_OR_ITEM, SEQR, -1, CONSTRAINTS) |
|
|
svt_xvm_do_on_pri(SEQ_OR_ITEM, m_sequencer, PRIORITY) |
|
|
svt_xvm_do_on_pri_with(SEQ_OR_ITEM, m_sequencer, PRIORITY, CONSTRAINTS) |
|
|
svt_xvm_do_on_pri_with(SEQ_OR_ITEM, m_sequencer, -1, CONSTRAINTS) |
|
|
ovm_error(id, msg) |
|
|
ovm_fatal(id, msg) |
|
|
ovm_field_array_object(ARG,FLAG)
|
|
|
ovm_field_int(ARG,FLAG)
|
|
|
ovm_field_object(ARG,FLAG)
|
|
|
ovm_field_queue_int(ARG,FLAG)
|
|
|
class ovm_analysis_imp``SFX #(type T=int, type IMP=int) extends ovm_port_base #(tlm_if_base #(T,T)); int imp_ix = 0; OVM_IMP_COMMON(TLM_ANALYSIS_MASK,`"ovm_analysis_imp``SFX`",IMP) function void write( input T t); m_imp.write``SFX(imp_ix, t); endfunction endclass | |
Macro used to declare an analysis imp that supports an 'index' argument to the 'write'. The implementation object must provide the 'write_ |
|
|
class ovm_blocking_put_imp``SFX #(type T=int, type IMP=int) extends ovm_port_base #(tlm_if_base #(T,T)); int imp_ix = 0; OVM_IMP_COMMON(TLM_BLOCKING_PUT_MASK,`"ovm_blocking_put_imp``SFX`",IMP) task put(input T t); m_imp.put``SFX(imp_ix, t); endtask endclass | |
Macro used to declare a blocking put imp that supports an 'index' argument to the 'write'. The implementation object must provide the 'put_ |
|
|
ovm_info(id, msg, OVM_LOW) |
|
|
|
|
|
|
|
|
|
|
|
|
svt_xvm_rand_send_pri(SEQ_OR_ITEM, -1) |
|
|
begin SEQ_OR_ITEM.priority_start(this, PRIORITY); if (!SEQ_OR_ITEM.randomize()) svt_xvm_warning("RNDFLD", "Randomization failed in ovm_rand_send action") SEQ_OR_ITEM.priority_finish(this, PRIORITY); end |
|
|
begin SEQ_OR_ITEM.priority_start(this, PRIORITY); if (!SEQ_OR_ITEM.randomize() with CONSTRAINTS ) svt_xvm_warning("RNDFLD", "Randomization failed in ovm_rand_send_with action") SEQ_OR_ITEM.priority_finish(this, PRIORITY); end |
|
|
svt_xvm_rand_send_pri_with(SEQ_OR_ITEM, -1, CONSTRAINTS) |
|
|
OVM_REFERENCE
|
|
|
|
|
svt_xvm_send_pri(SEQ_OR_ITEM, -1) |
|
|
SEQ_OR_ITEM.priority_start(this, PRIORITY); SEQ_OR_ITEM.priority_finish(this, PRIORITY); |
|
|
ovm_info(id, msg, OVM_MEDIUM) |
|
|
typedef svt_callbacks#(T,CB) POOL |
|
|
OVM_``obj
|
|
|
ovm_info(id, msg, OVM_FULL) |
|
|
ovm_warning(id, msg) |
|
|
if `SVT_DATA_UTIL_X_OR_Z(portObj) begin $swrite(portStrValue, "%0b", portObj ); end else begin $swrite(portStrValue, "%0h", portObj ); end | |
Used in the command model class body for each callback to make it available at the command layer. Implements the inherited OO callback method. The base transactor should have defined a virtual method with the basic prototype "callback_method_name( callback_datatype data )". callback_name is of the form EVENT_CB_...
|
|
|
"TLM interface task not implemented"
|
|
|
(1<<8)
|
|
|
(1<<1)
|
|
|
|
|
|
|
(1<<2)
|
|
|
(1<<0)
|
|
|
|
|
(1<<3)
|
|
|
function new( string name , T imp , urm_port_policy policy=URM_ONE_OR_MORE_BOUND ); super.new(name,imp); endfunction |
|
|
"fifo channel function not implemented"
|
|
|
"fifo channel task not implemented"
|
|
|
|
|
|
|
virtual function string get_type_name(); return NAME; endfunction |
|
|
|
(1<<9)
|
|
|
|
|
(1<<5)
|
|
|
|
|
|
|
(1<<6)
|
|
|
(1<<4)
|
|
|
|
|
(1<<7)
|
|
|
|
|
function new( string name , ovm_component parent , urm_port_policy policy=URM_ONE_OR_MORE_BOUND ); super.new(name,parent,0,policy); endfunction |
|
|
|
|
(1<<10)
|
|
|
|
|
|
|
BLOCKING_TRANSPORT_IMP(imp, REQ, RSP, req_arg, rsp_arg) NONBLOCKING_TRANSPORT_IMP(imp, REQ, RSP, req_arg, rsp_arg) |
|
|
urm_msg_imp("DEBUG",MESSAGE,OVM_URM_MSG_DEBUG,OVM_INFO,OVM_DEBUG,get_full_name(),m_get_report_object()) |
|
|
function ovm_component create_component (string name, ovm_component parent); T tmp; urm_unit p; $cast(p, parent); tmp = new(.name(name), .parent(p)); return tmp; endfunction |
|
|
urm_msg_imp("DEBUG",MESSAGE,OVM_URM_MSG_DEBUG,OVM_INFO,OVM_DEBUG,get_full_name(),m_get_report_object()) |
|
|
urm_msg_imp("DEBUG",MESSAGE,OVM_URM_MSG_DEBUG,OVM_INFO,OVM_DEBUG,get_full_name(),m_get_report_object()) |
|
|
urm_msg_imp("URM",MESSAGE,OVM_URM_MSG_TOOL,OVM_ERROR,OVM_NONE,get_full_name(),m_get_report_object()) |
|
|
urm_msg_imp(ID,MESSAGE,OVM_URM_MSG_TOOL,OVM_ERROR,OVM_NONE,get_full_name(),m_get_report_object()) |
|
|
urm_msg_imp("URM",MESSAGE,OVM_URM_MSG_TOOL,OVM_FATAL,OVM_NONE,get_full_name(),m_get_report_object()) |
|
|
urm_msg_imp(ID,MESSAGE,OVM_URM_MSG_TOOL,OVM_FATAL,OVM_NONE,get_full_name(),m_get_report_object()) |
|
|
ovm_field_aa_int_byte(F, FL)
|
|
|
|
|
ovm_field_aa_int_int(F, FL)
|
|
|
|
|
ovm_field_aa_int_integer(F, FL)
|
|
|
|
|
ovm_field_aa_int_key(F, FL)
|
|
|
ovm_field_aa_int_longint(F, FL)
|
|
|
|
|
ovm_field_aa_int_shortint(F, FL)
|
|
|
|
|
ovm_field_aa_int_string(F, FL)
|
|
|
ovm_field_aa_object_int(F, FL)
|
|
|
ovm_field_aa_object_string(F, FL)
|
|
|
ovm_field_aa_string_string(F, FL)
|
|
|
ovm_field_array_int(F, FL)
|
|
|
ovm_field_array_object(F, FL)
|
|
|
ovm_field_array_string(F, FL)
|
|
|
ovm_field_event(F, FL)
|
|
|
ovm_field_int(F, FL)
|
|
|
ovm_field_object(F, FL)
|
|
|
ovm_field_queue_int(F, FL)
|
|
|
ovm_field_queue_object(F, FL)
|
|
|
ovm_field_queue_string(F, FL)
|
|
|
ovm_field_string(F, FL)
|
|
|
|
|
|
|
|
|
" |
|
|
urm_msg_imp("DEBUG",MESSAGE,OVM_URM_MSG_DEBUG,OVM_INFO,OVM_DEBUG,get_full_name(),m_get_report_object()) |
|
|
urm_msg_imp("URM",MESSAGE,OVM_URM_MSG_TOOL,OVM_INFO,OVM_NONE,get_full_name(),m_get_report_object()) |
|
|
urm_msg_imp("DEBUG",MESSAGE,OVM_URM_MSG_DEBUG,OVM_INFO,int'(D),get_full_name(),m_get_report_object()) |
|
|
urm_msg_imp("DEBUG",MESSAGE,OVM_URM_MSG_DEBUG,OVM_INFO,OVM_LOW,get_full_name(),m_get_report_object()) |
|
|
urm_msg_imp("DEBUG",MESSAGE,OVM_URM_MSG_DEBUG,OVM_INFO,OVM_MEDIUM,get_full_name(),m_get_report_object()) |
|
|
urm_msg_imp("DEBUG",MESSAGE,OVM_URM_MSG_DEBUG,OVM_INFO,OVM_HIGH,get_full_name(),m_get_report_object()) |
|
|
urm_msg_imp("DEBUG",MESSAGE,OVM_URM_MSG_DEBUG,OVM_INFO,OVM_FULL,get_full_name(),m_get_report_object()) |
|
|
urm_msg_imp(ID,MESSAGE,OVM_URM_MSG_TOOL,OVM_INFO,OVM_NONE,get_full_name(),m_get_report_object()) |
|
|
0
|
|
|
|
(ovm_verbosity'(m_rh.m_max_verbosity_level) >= (DETAIL)) |
|
|
begin $swrite(ovm_urm_tmp_str,"%m"); begin string image; ovm_report_object client; client = CLIENT; ovm_urm_report_server::m_set_report_hier(HIERARCHY); ovm_urm_report_server::m_set_report_scope(ovm_urm_tmp_str); ovm_urm_report_server::m_set_report_type(TYPE); image = $psprintf MESSAGE; ovm_global_urm_report_server.report( SEVERITY, client.get_full_name(), ID, image, VERBOSITY, urm_file, urm_line, client ); ovm_urm_report_server::m_reset_report_flags(); end end |
|
|
|
|
|
|
|
|
begin $swrite(ovm_urm_tmp_str,"%m"); begin string image; ovm_report_object client; client = CLIENT; ovm_urm_report_server::m_set_report_hier(ovm_urm_tmp_str); ovm_urm_report_server::m_set_report_scope(ovm_urm_tmp_str); ovm_urm_report_server::m_set_report_type(TYPE); image = $psprintf MESSAGE; ovm_global_urm_report_server.report( SEVERITY, client.get_full_name(), ID, image, VERBOSITY, urm_file, urm_line, client ); ovm_urm_report_server::m_reset_report_flags(); end end |
|
|
urm_msg_imp("DEBUG",MESSAGE,OVM_URM_MSG_DEBUG,OVM_INFO,OVM_DEBUG,"",_global_reporter) |
|
|
urm_msg_imp("DEBUG",MESSAGE,OVM_URM_MSG_DEBUG,OVM_INFO,OVM_DEBUG,"",_global_reporter) |
|
|
urm_msg_imp("DEBUG",MESSAGE,OVM_URM_MSG_DEBUG,OVM_INFO,OVM_DEBUG,"",_global_reporter) |
|
|
urm_msg_imp("URM",MESSAGE,OVM_URM_MSG_TOOL,OVM_ERROR,OVM_NONE,"",_global_reporter) |
|
|
urm_msg_imp(ID,MESSAGE,OVM_URM_MSG_TOOL,OVM_ERROR,OVM_NONE,"",_global_reporter) |
|
|
urm_msg_imp("URM",MESSAGE,OVM_URM_MSG_TOOL,OVM_FATAL,OVM_NONE,"",_global_reporter) |
|
|
urm_msg_imp(ID,MESSAGE,OVM_URM_MSG_TOOL,OVM_FATAL,OVM_NONE,"",_global_reporter) |
|
|
urm_msg_imp("DEBUG",MESSAGE,OVM_URM_MSG_DEBUG,OVM_INFO,OVM_DEBUG,"",_global_reporter) |
|
|
urm_msg_imp("URM",MESSAGE,OVM_URM_MSG_TOOL,OVM_INFO,OVM_NONE,"",_global_reporter) |
|
|
urm_msg_imp("DEBUG",MESSAGE,OVM_URM_MSG_DEBUG,OVM_INFO,int'(D),"",_global_reporter) |
|
|
urm_msg_imp("DEBUG",MESSAGE,OVM_URM_MSG_DEBUG,OVM_INFO,OVM_LOW,"",_global_reporter) |
|
|
urm_msg_imp("DEBUG",MESSAGE,OVM_URM_MSG_DEBUG,OVM_INFO,OVM_MEDIUM,"",_global_reporter) |
|
|
urm_msg_imp("DEBUG",MESSAGE,OVM_URM_MSG_DEBUG,OVM_INFO,OVM_HIGH,"",_global_reporter) |
|
|
urm_msg_imp("DEBUG",MESSAGE,OVM_URM_MSG_DEBUG,OVM_INFO,OVM_FULL,"",_global_reporter) |
|
|
urm_msg_imp(ID,MESSAGE,OVM_URM_MSG_TOOL,OVM_INFO,OVM_NONE,"",_global_reporter) |
|
|
(ovm_urm_report_server::get_global_verbosity() >= (DETAIL)) |
|
|
urm_msg_imp("URM",MESSAGE,OVM_URM_MSG_TOOL,OVM_WARNING,OVM_NONE,"",_global_reporter) |
|
|
urm_msg_imp(ID,MESSAGE,OVM_URM_MSG_TOOL,OVM_WARNING,OVM_NONE,"",_global_reporter) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class T``wrapper extends ovm_object_wrapper; virtual function string get_type_name (); return `"T`"; endfunction urm_component_factory_create_func(T) endclass |
|
|
urm_msg_imp("URM",MESSAGE,OVM_URM_MSG_TOOL,OVM_WARNING,OVM_NONE,get_full_name(),m_get_report_object()) |
|
|
urm_msg_imp(ID,MESSAGE,OVM_URM_MSG_TOOL,OVM_WARNING,OVM_NONE,get_full_name(),m_get_report_object()) |
|
|
|
Determine if set_item_context is implemented in ths version of OVM/UVM
|