Macros defined for SVT:
|
|
|
|
Wait for a request from the reactive driver. Returns a REQ instance.
|
|
|
|
|
|
|
Clients wishing to pull in the UVM package manually have a couple of options for doing so.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1
|
|
|
|
|
|
|
|
|
|
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. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
begin case (what__) UVM_CHECK_FIELDS: __m_uvm_status_container.do_field_check(`"ARG`", this); UVM_COPY: begin if(!((FLAG)&UVM_NOCOPY)) ARG = local_data__.ARG; end UVM_COMPARE: begin if(!((FLAG)&UVM_NOCOMPARE)) begin if(ARG !== local_data__.ARG) begin if(__m_uvm_status_container.comparer.show_max == 1) begin __m_uvm_status_container.scope.set_arg(`"ARG`"); __m_uvm_status_container.comparer.print_msg(""); end else if(__m_uvm_status_container.comparer.show_max) begin ``if(ARG.size() != local_data__.ARG.size()) begin `` void'(__m_uvm_status_container.comparer.compare_field(`"ARG``.size`", ARG.size(), local_data__.ARG.size(), 32)); ``end ``else begin foreach(ARG[i]) begin if(ARG[i] !== local_data__.ARG[i]) begin __m_uvm_status_container.scope.set_arg_element(`"ARG`",i); $swrite(__m_uvm_status_container.stringv, "lhs = %0s : rhs = %0s", ARG[i].name(), local_data__.ARG[i].name()); __m_uvm_status_container.comparer.print_msg(__m_uvm_status_container.stringv); if(__m_uvm_status_container.comparer.result && (__m_uvm_status_container.comparer.show_max <= __m_uvm_status_container.comparer.result)) return; end end ``end end else if ((__m_uvm_status_container.comparer.physical&&((FLAG)&UVM_PHYSICAL)) || (__m_uvm_status_container.comparer.abstract&&((FLAG)&UVM_ABSTRACT)) || (!((FLAG)&UVM_PHYSICAL) && !((FLAG)&UVM_ABSTRACT)) ) __m_uvm_status_container.comparer.result++; if(__m_uvm_status_container.comparer.result && (__m_uvm_status_container.comparer.show_max <= __m_uvm_status_container.comparer.result)) return; end end end UVM_PACK: if(!((FLAG)&UVM_NOPACK)) begin ``if(__m_uvm_status_container.packer.use_metadata) __m_uvm_status_container.packer.pack_field_int(ARG.size(), 32); foreach(ARG[i]) __m_uvm_status_container.packer.pack_field_int(int'(ARG[i]), $bits(ARG[i])); end UVM_UNPACK: if(!((FLAG)&UVM_NOPACK)) begin ``int sz = ARG.size(); ``if(__m_uvm_status_container.packer.use_metadata) sz = __m_uvm_status_container.packer.unpack_field_int(32); ``if(sz != ARG.size()) begin `` T tmp__; `` `M_UVM_``TYPE``_RESIZE(ARG,tmp__) ``end foreach(ARG[i]) ARG[i] = T'(__m_uvm_status_container.packer.unpack_field_int($bits(ARG[i]))); end UVM_RECORD: ``m_uvm_record_qda_enum(ARG,FLAG,ARG.size()) UVM_PRINT: begin if(((FLAG)&UVM_NOPRINT) == 0) begin uvm_print_qda_enum(ARG, __m_uvm_status_container.printer, array, T) end end UVM_SETINT: begin __m_uvm_status_container.scope.set_arg(`"ARG`"); if(uvm_is_match(str__, __m_uvm_status_container.scope.get())) begin if((FLAG)&UVM_READONLY) begin uvm_report_warning("RDONLY", $sformatf("Readonly argument match %s is ignored", __m_uvm_status_container.get_full_scope_arg()), UVM_NONE); end ``else begin `` int sz = uvm_object::__m_uvm_status_container.bitstream; `` if (__m_uvm_status_container.print_matches) uvm_report_info("STRMTC", {"set_int()", ": Matched string ", str__, " to field ", __m_uvm_status_container.get_full_scope_arg()}, UVM_LOW); `` if(ARG.size() != sz) begin `` T tmp__; `` `M_UVM_``TYPE``_RESIZE(ARG,tmp__) `` end `` __m_uvm_status_container.status = 1; ``end end else if(!((FLAG)&UVM_READONLY)) begin bit wildcard_index__; int index__; index__ = uvm_get_array_index_int(str__, wildcard_index__); if(uvm_is_array(str__) && (index__ != -1)) begin if(wildcard_index__) begin for(index__=0; index__<ARG.size(); ++index__) begin if(uvm_is_match(str__, {__m_uvm_status_container.scope.get_arg(),$sformatf("[%0d]", index__)})) begin if (__m_uvm_status_container.print_matches) uvm_report_info("STRMTC", {"set_int()", ": Matched string ", str__, " to field ", __m_uvm_status_container.get_full_scope_arg(), $sformatf("[%0d]",index__)}, UVM_LOW); ARG[index__] = T'(uvm_object::__m_uvm_status_container.bitstream); __m_uvm_status_container.status = 1; end end end else if(uvm_is_match(str__, {__m_uvm_status_container.scope.get_arg(),$sformatf("[%0d]", index__)})) begin if(index__+1 > ARG.size()) begin int sz = index__; T tmp__; `M_UVM_``TYPE``_RESIZE(ARG,tmp__) end if (__m_uvm_status_container.print_matches) uvm_report_info("STRMTC", {"set_int()", ": Matched string ", str__, " to field ", __m_uvm_status_container.get_full_scope_arg()}, UVM_LOW); ARG[index__] = T'(uvm_object::__m_uvm_status_container.bitstream); __m_uvm_status_container.status = 1; end end end end endcase end |
|
|
ARG = new[sz](ARG); |
|
|
class PREFIX``PHASE``_phase extends uvm_bottomup_phase; virtual function void exec_func(uvm_component comp, uvm_phase phase); COMP comp_; if ($cast(comp_,comp)) comp_.``PHASE``_phase(phase); endfunction static PREFIX``PHASE``_phase m_inst; static const string type_name = `"PREFIX``PHASE``_phase`"; static function PREFIX``PHASE``_phase get(); if(m_inst == null) begin m_inst = new(); end return m_inst; endfunction protected function new(string name=`"PHASE`"); super.new(name); endfunction virtual function string get_type_name(); return type_name; endfunction endclass |
|
|
typedef uvm_component_registry #(T,`"S`") type_id; static function type_id get_type(); return type_id::get(); endfunction virtual function uvm_object_wrapper get_object_type(); return type_id::get(); endfunction |
|
|
typedef uvm_component_registry #(T) type_id; static function type_id get_type(); return type_id::get(); endfunction virtual function uvm_object_wrapper get_object_type(); return type_id::get(); endfunction |
|
|
begin begin KEY aa_key; case (what__) UVM_COMPARE: begin if(!((FLAG)&UVM_NOCOMPARE) && (tmp_data__ != null) ) begin $cast(local_data__, tmp_data__); if(ARG.num() != local_data__.ARG.num()) begin int s1__, s2__; __m_uvm_status_container.stringv = ""; s1__ = ARG.num(); s2__ = local_data__.ARG.num(); $swrite(__m_uvm_status_container.stringv, "lhs size = %0d : rhs size = %0d", s1__, s2__); __m_uvm_status_container.comparer.print_msg(__m_uvm_status_container.stringv); end if(ARG.first(aa_key)) do begin void'(__m_uvm_status_container.comparer.compare_field_int({`"ARG[`",aa_key.name(),"]"}, ARG[aa_key], local_data__.ARG[aa_key], $bits(ARG[aa_key]), uvm_radix_enum'((FLAG)&UVM_RADIX) )); end while(ARG.next(aa_key)); end end UVM_COPY: begin if(!((FLAG)&UVM_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 UVM_PRINT: if(!((FLAG)&UVM_NOPRINT)) begin uvm_printer p__ = __m_uvm_status_container.printer; p__.print_array_header (`"ARG`", ARG.num(),`"aa_``KEY`"); if((p__.knobs.depth == -1) || (__m_uvm_status_container.printer.m_scope.depth() < p__.knobs.depth+1)) begin if(ARG.first(aa_key)) do begin __m_uvm_status_container.printer.print_int( {"[",aa_key.name(),"]"}, ARG[aa_key], $bits(ARG[aa_key]), uvm_radix_enum'((FLAG)&UVM_RADIX), "[" ); end while(ARG.next(aa_key)); end p__.print_array_footer(ARG.num()); end endcase end end |
|
|
begin begin case (what__) UVM_COMPARE: begin if(!((FLAG)&UVM_NOCOMPARE) && (tmp_data__ != null) ) begin $cast(local_data__, tmp_data__); if(ARG.num() != local_data__.ARG.num()) begin int s1__, s2__; __m_uvm_status_container.stringv = ""; s1__ = ARG.num(); s2__ = local_data__.ARG.num(); $swrite(__m_uvm_status_container.stringv, "lhs size = %0d : rhs size = %0d", s1__, s2__); __m_uvm_status_container.comparer.print_msg(__m_uvm_status_container.stringv); end string_aa_key = ""; while(ARG.next(string_aa_key)) begin string s; __m_uvm_status_container.scope.set_arg({"[",string_aa_key,"]"}); s = {`"ARG[`",string_aa_key,"]"}; if($bits(ARG[string_aa_key]) <= 64) void'(__m_uvm_status_container.comparer.compare_field_int(s, ARG[string_aa_key], local_data__.ARG[string_aa_key], $bits(ARG[string_aa_key]), uvm_radix_enum'((FLAG)&UVM_RADIX))); else void'(__m_uvm_status_container.comparer.compare_field(s, ARG[string_aa_key], local_data__.ARG[string_aa_key], $bits(ARG[string_aa_key]), uvm_radix_enum'((FLAG)&UVM_RADIX))); __m_uvm_status_container.scope.unset_arg(string_aa_key); end end end UVM_COPY: begin if(!((FLAG)&UVM_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 UVM_PRINT: if(!((FLAG)&UVM_NOPRINT)) begin `uvm_print_aa_``KEY``_``TYPE``3(ARG, uvm_radix_enum'((FLAG)&(UVM_RADIX)), __m_uvm_status_container.printer) end endcase end end |
|
|
begin begin KEY aa_key; case (what__) UVM_COMPARE: begin if(!((FLAG)&UVM_NOCOMPARE) && (tmp_data__ != null) ) begin $cast(local_data__, tmp_data__); if(ARG.num() != local_data__.ARG.num()) begin int s1__, s2__; __m_uvm_status_container.stringv = ""; s1__ = ARG.num(); s2__ = local_data__.ARG.num(); $swrite(__m_uvm_status_container.stringv, "lhs size = %0d : rhs size = %0d", s1__, s2__); __m_uvm_status_container.comparer.print_msg(__m_uvm_status_container.stringv); end if(ARG.first(aa_key)) do begin string s; $swrite(string_aa_key, "%0d", aa_key); __m_uvm_status_container.scope.set_arg({"[",string_aa_key,"]"}); s = {`"ARG[`",string_aa_key,"]"}; if($bits(ARG[aa_key]) <= 64) void'(__m_uvm_status_container.comparer.compare_field_int(s, ARG[aa_key], local_data__.ARG[aa_key], $bits(ARG[aa_key]), uvm_radix_enum'((FLAG)&UVM_RADIX))); else void'(__m_uvm_status_container.comparer.compare_field(s, ARG[aa_key], local_data__.ARG[aa_key], $bits(ARG[aa_key]), uvm_radix_enum'((FLAG)&UVM_RADIX))); __m_uvm_status_container.scope.unset_arg(string_aa_key); end while(ARG.next(aa_key)); end end UVM_COPY: begin if(!((FLAG)&UVM_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 UVM_PRINT: if(!((FLAG)&UVM_NOPRINT)) begin uvm_print_aa_int_key4(KEY,ARG, uvm_radix_enum'((FLAG)&(UVM_RADIX)), __m_uvm_status_container.printer) end endcase end end |
|
|
M_UVM_FIELD_DATA_AA_generic(int, string, ARG, FLAG) |
|
|
begin int key__; begin case (what__) UVM_COMPARE: begin if(!((FLAG)&UVM_NOCOMPARE) && (tmp_data__ != null) ) begin $cast(local_data__, tmp_data__); if(ARG.num() != local_data__.ARG.num()) begin int s1__, s2__; __m_uvm_status_container.stringv = ""; s1__ = ARG.num(); s2__ = local_data__.ARG.num(); $swrite(__m_uvm_status_container.stringv, "lhs size = %0d : rhs size = %0d", s1__, s2__); __m_uvm_status_container.comparer.print_msg(__m_uvm_status_container.stringv); end if(ARG.first(key__)) begin do begin uvm_object lhs; uvm_object rhs; lhs = ARG[key__]; rhs = local_data__.ARG[key__]; __m_uvm_status_container.scope.down_element(key__); if(rhs != lhs) begin bit refcmp; refcmp = ((FLAG)& UVM_SHALLOW) && !(__m_uvm_status_container.comparer.policy == UVM_DEEP); if(!refcmp && !(__m_uvm_status_container.comparer.policy == UVM_REFERENCE)) begin if(((rhs == null) && (lhs != null)) || ((lhs==null) && (rhs!=null))) begin __m_uvm_status_container.comparer.print_msg_object(lhs, rhs); end else begin if (lhs != null) void'(lhs.compare(rhs, __m_uvm_status_container.comparer)); end end else begin __m_uvm_status_container.comparer.print_msg_object(lhs, rhs); end end __m_uvm_status_container.scope.up_element(); end while(ARG.next(key__)); end end end UVM_COPY: begin if(!((FLAG)&UVM_NOCOPY) && (tmp_data__ != null) ) begin $cast(local_data__, tmp_data__); ARG.delete(); if(local_data__.ARG.first(key__)) do begin if((FLAG)&UVM_REFERENCE) ARG[key__] = local_data__.ARG[key__]; /*else if((FLAG)&UVM_SHALLOW)*/ /* ARG[key__] = new local_data__.ARG[key__];*/ else begin uvm_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 UVM_PRINT: if(!((FLAG)&UVM_NOPRINT)) begin uvm_print_aa_int_object3(ARG, __m_uvm_status_container.printer,FLAG) end endcase end end |
|
|
begin begin case (what__) UVM_COMPARE: begin if(!((FLAG)&UVM_NOCOMPARE) && (tmp_data__ != null) ) begin $cast(local_data__, tmp_data__); if(ARG.num() != local_data__.ARG.num()) begin int s1__, s2__; __m_uvm_status_container.stringv = ""; s1__ = ARG.num(); s2__ = local_data__.ARG.num(); $swrite(__m_uvm_status_container.stringv, "lhs size = %0d : rhs size = %0d", s1__, s2__); __m_uvm_status_container.comparer.print_msg(__m_uvm_status_container.stringv); end string_aa_key = ""; while(ARG.next(string_aa_key)) begin uvm_object lhs; uvm_object rhs; lhs = ARG[string_aa_key]; rhs = local_data__.ARG[string_aa_key]; __m_uvm_status_container.scope.down({"[",string_aa_key,"]"}); if(rhs != lhs) begin bit refcmp; refcmp = ((FLAG)& UVM_SHALLOW) && !(__m_uvm_status_container.comparer.policy == UVM_DEEP); if(!refcmp && !(__m_uvm_status_container.comparer.policy == UVM_REFERENCE)) begin if(((rhs == null) && (lhs != null)) || ((lhs==null) && (rhs!=null))) begin __m_uvm_status_container.comparer.print_msg_object(lhs, rhs); end else begin if (lhs != null) void'(lhs.compare(rhs, __m_uvm_status_container.comparer)); end end else begin __m_uvm_status_container.comparer.print_msg_object(lhs, rhs); end end __m_uvm_status_container.scope.up_element(); end end end UVM_COPY: begin if(!((FLAG)&UVM_NOCOPY) && (tmp_data__ != null) ) begin $cast(local_data__, tmp_data__); ARG.delete(); if(local_data__.ARG.first(string_aa_key)) do if((FLAG)&UVM_REFERENCE) ARG[string_aa_key] = local_data__.ARG[string_aa_key]; /*else if((FLAG)&UVM_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 UVM_PRINT: if(!((FLAG)&UVM_NOPRINT)) begin uvm_print_aa_string_object3(ARG, __m_uvm_status_container.printer,FLAG) end endcase end end |
|
|
begin begin case (what__) UVM_COPY: begin if(!((FLAG)&UVM_NOCOPY) && (local_data__ !=null)) ARG = local_data__.ARG ; end UVM_PRINT: if(!((FLAG)&UVM_NOPRINT)) begin uvm_print_aa_string_string2(ARG, __m_uvm_status_container.printer) end UVM_COMPARE: begin if(!((FLAG)&UVM_NOCOMPARE) && (tmp_data__ != null) ) begin $cast(local_data__, tmp_data__); if(ARG.num() != local_data__.ARG.num()) begin int s1__, s2__; __m_uvm_status_container.stringv = ""; s1__ = ARG.num(); s2__ = local_data__.ARG.num(); $swrite(__m_uvm_status_container.stringv, "lhs size = %0d : rhs size = %0d", s1__, s2__); __m_uvm_status_container.comparer.print_msg(__m_uvm_status_container.stringv); end string_aa_key = ""; while(ARG.next(string_aa_key)) begin string s__ = ARG[string_aa_key]; __m_uvm_status_container.scope.set_arg({"[",string_aa_key,"]"}); if(ARG[string_aa_key] != local_data__.ARG[string_aa_key]) begin __m_uvm_status_container.stringv = { "lhs = \"", s__, "\" : rhs = \"", local_data__.ARG[string_aa_key], "\""}; __m_uvm_status_container.comparer.print_msg(__m_uvm_status_container.stringv); end __m_uvm_status_container.scope.unset_arg(string_aa_key); end end end endcase end end |
|
|
begin case (what__) UVM_CHECK_FIELDS: __m_uvm_status_container.do_field_check(`"ARG`", this); UVM_COPY: begin if (local_data__ == null) return; if(!((FLAG)&UVM_NOCOPY)) ARG = local_data__.ARG; end UVM_COMPARE: begin if (local_data__ == null) return; if(!((FLAG)&UVM_NOCOMPARE)) begin if(ARG !== local_data__.ARG) begin if(__m_uvm_status_container.comparer.show_max == 1) begin __m_uvm_status_container.scope.set_arg(`"ARG`"); __m_uvm_status_container.comparer.print_msg(""); end else if(__m_uvm_status_container.comparer.show_max) begin `` if(ARG.size() != local_data__.ARG.size()) begin `` void'(__m_uvm_status_container.comparer.compare_field(`"ARG``.size`", ARG.size(), local_data__.ARG.size(), 32)); `` end else begin foreach(ARG[i]) begin if(ARG[i] !== local_data__.ARG[i]) begin __m_uvm_status_container.scope.set_arg_element(`"ARG`",i); void'(__m_uvm_status_container.comparer.compare_field("", ARG[i], local_data__.ARG[i], $bits(ARG[i]))); end end end end else if ((__m_uvm_status_container.comparer.physical&&((FLAG)&UVM_PHYSICAL)) || (__m_uvm_status_container.comparer.abstract&&((FLAG)&UVM_ABSTRACT)) || (!((FLAG)&UVM_PHYSICAL) && !((FLAG)&UVM_ABSTRACT)) ) __m_uvm_status_container.comparer.result++; if(__m_uvm_status_container.comparer.result && (__m_uvm_status_container.comparer.show_max <= __m_uvm_status_container.comparer.result)) return; end end end UVM_PACK: if(!((FLAG)&UVM_NOPACK)) begin `` if(__m_uvm_status_container.packer.use_metadata) __m_uvm_status_container.packer.pack_field_int(ARG.size(), 32); foreach(ARG[i]) if($bits(ARG[i]) <= 64) __m_uvm_status_container.packer.pack_field_int(ARG[i], $bits(ARG[i])); else __m_uvm_status_container.packer.pack_field(ARG[i], $bits(ARG[i])); end UVM_UNPACK: if(!((FLAG)&UVM_NOPACK)) begin `` int sz = ARG.size(); `` if(__m_uvm_status_container.packer.use_metadata) sz = __m_uvm_status_container.packer.unpack_field_int(32); if(sz != ARG.size()) begin `M_UVM_``TYPE``_RESIZE (ARG,0) end foreach(ARG[i]) if($bits(ARG[i]) <= 64) ARG[i] = __m_uvm_status_container.packer.unpack_field_int($bits(ARG[i])); else ARG[i] = __m_uvm_status_container.packer.unpack_field($bits(ARG[i])); end UVM_RECORD: m_uvm_record_qda_int(ARG, FLAG, ARG.size()) UVM_PRINT: begin if(((FLAG)&UVM_NOPRINT) == 0) begin uvm_print_array_int3(ARG, uvm_radix_enum'((FLAG)&(UVM_RADIX)), __m_uvm_status_container.printer) end end UVM_SETINT: begin __m_uvm_status_container.scope.set_arg(`"ARG`"); if(uvm_is_match(str__, __m_uvm_status_container.scope.get())) begin if((FLAG)&UVM_READONLY) begin uvm_report_warning("RDONLY", $sformatf("Readonly argument match %s is ignored", __m_uvm_status_container.get_full_scope_arg()), UVM_NONE); end `` else begin `` int sz = uvm_object::__m_uvm_status_container.bitstream; `` if (__m_uvm_status_container.print_matches) uvm_report_info("STRMTC", {"set_int()", ": Matched string ", str__, " to field ", __m_uvm_status_container.get_full_scope_arg()}, UVM_LOW); `` if(ARG.size() != sz) begin `` `M_UVM_``TYPE``_RESIZE(ARG,0) `` end `` __m_uvm_status_container.status = 1; `` end end else if(!((FLAG)&UVM_READONLY)) begin bit wildcard_index__; int index__; index__ = uvm_get_array_index_int(str__, wildcard_index__); if(uvm_is_array(str__) && (index__ != -1)) begin if(wildcard_index__) begin for(index__=0; index__<ARG.size(); ++index__) begin if(uvm_is_match(str__, {__m_uvm_status_container.scope.get_arg(),$sformatf("[%0d]", index__)})) begin if (__m_uvm_status_container.print_matches) uvm_report_info("STRMTC", {"set_int()", ": Matched string ", str__, " to field ", __m_uvm_status_container.get_full_scope_arg(), $sformatf("[%0d]",index__)}, UVM_LOW); ARG[index__] = uvm_object::__m_uvm_status_container.bitstream; __m_uvm_status_container.status = 1; end end end else if(uvm_is_match(str__, {__m_uvm_status_container.scope.get_arg(),$sformatf("[%0d]", index__)})) begin if(index__+1 > ARG.size()) begin int sz = index__; int tmp__; `M_UVM_``TYPE``_RESIZE(ARG,tmp__) end if (__m_uvm_status_container.print_matches) uvm_report_info("STRMTC", {"set_int()", ": Matched string ", str__, " to field ", __m_uvm_status_container.get_full_scope_arg()}, UVM_LOW); ARG[index__] = uvm_object::__m_uvm_status_container.bitstream; __m_uvm_status_container.status = 1; end end end end endcase end |
|
|
begin case (what__) UVM_CHECK_FIELDS: __m_uvm_status_container.do_field_check(`"ARG`", this); UVM_COPY: begin if(local_data__ == null) return; if(!((FLAG)&UVM_NOCOPY)) begin if(((FLAG)&UVM_REFERENCE)) ARG = local_data__.ARG; else begin int sz = local_data__.ARG.size(); `M_UVM_``TYPE``_RESIZE(ARG,null) foreach(ARG[i]) begin if(ARG[i] != null && local_data__.ARG[i] != null) ARG[i].copy(local_data__.ARG[i]); else if(ARG[i] == null && local_data__.ARG[i] != null) $cast(ARG[i], local_data__.ARG[i].clone()); else ARG[i] = null; end end end end UVM_COMPARE: begin if(local_data__ == null) return; if(!((FLAG)&UVM_NOCOMPARE)) begin if(((FLAG)&UVM_REFERENCE) && (__m_uvm_status_container.comparer.show_max <= 1) && (ARG !== local_data__.ARG) ) begin if(__m_uvm_status_container.comparer.show_max == 1) begin __m_uvm_status_container.scope.set_arg(`"ARG`"); __m_uvm_status_container.comparer.print_msg(""); end else if ((__m_uvm_status_container.comparer.physical&&((FLAG)&UVM_PHYSICAL)) || (__m_uvm_status_container.comparer.abstract&&((FLAG)&UVM_ABSTRACT)) || (!((FLAG)&UVM_PHYSICAL) && !((FLAG)&UVM_ABSTRACT)) ) __m_uvm_status_container.comparer.result++; if(__m_uvm_status_container.comparer.result && (__m_uvm_status_container.comparer.show_max <= __m_uvm_status_container.comparer.result)) return; end else begin string s; if(ARG.size() != local_data__.ARG.size()) begin if(__m_uvm_status_container.comparer.show_max == 1) begin __m_uvm_status_container.scope.set_arg(`"ARG`"); __m_uvm_status_container.comparer.print_msg($sformatf("size mismatch: lhs: %0d rhs: %0d", ARG.size(), local_data__.ARG.size())); end end for(int i=0; i<ARG.size() && i if(ARG[i] != null && local_data__.ARG[i] != null) begin $swrite(s,`"ARG[%0d]`",i); void'(__m_uvm_status_container.comparer.compare_object(s, ARG[i], local_data__.ARG[i])); end if(__m_uvm_status_container.comparer.result && (__m_uvm_status_container.comparer.show_max <= __m_uvm_status_container.comparer.result)) return; end end end end UVM_PACK: if(!((FLAG)&UVM_NOPACK)) begin if(__m_uvm_status_container.packer.use_metadata) __m_uvm_status_container.packer.pack_field_int(ARG.size(), 32); foreach(ARG[i]) __m_uvm_status_container.packer.pack_object(ARG[i]); end UVM_UNPACK: if(!((FLAG)&UVM_NOPACK)) begin int sz = ARG.size(); if(__m_uvm_status_container.packer.use_metadata) sz = __m_uvm_status_container.packer.unpack_field_int(32); if(sz != ARG.size()) begin `M_UVM_``TYPE``_RESIZE(ARG,null) end foreach(ARG[i]) __m_uvm_status_container.packer.unpack_object(ARG[i]); end UVM_RECORD: m_uvm_record_qda_object(ARG,FLAG,ARG.size()) UVM_PRINT: begin if(((FLAG)&UVM_NOPRINT) == 0) begin uvm_print_array_object3(ARG, __m_uvm_status_container.printer,FLAG) end end UVM_SETINT: begin __m_uvm_status_container.scope.set_arg(`"ARG`"); if(uvm_is_match(str__, __m_uvm_status_container.scope.get())) begin if((FLAG)&UVM_READONLY) begin uvm_report_warning("RDONLY", $sformatf("Readonly argument match %s is ignored", __m_uvm_status_container.get_full_scope_arg()), UVM_NONE); end else begin int sz = uvm_object::__m_uvm_status_container.bitstream; if (__m_uvm_status_container.print_matches) uvm_report_info("STRMTC", {"set_int()", ": Matched string ", str__, " to field ", __m_uvm_status_container.get_full_scope_arg()}, UVM_LOW); if(ARG.size() != sz) begin `M_UVM_``TYPE``_RESIZE(ARG,null) end __m_uvm_status_container.status = 1; end end else if(!((FLAG)&UVM_READONLY)) begin foreach(ARG[i]) begin string s; $swrite(s,`"ARG[%0d]`",i); __m_uvm_status_container.scope.set_arg(s); if(uvm_is_match(str__, __m_uvm_status_container.scope.get())) begin uvm_report_warning("STRMTC", {"set_int()", ": Match ignored for string ", str__, ". Cannot set object to int value."}); end else if(ARG[i]!=null && !((FLAG)&UVM_REFERENCE)) begin int cnt; for(cnt=0; cnt end if(cnt!=str__.len()) begin __m_uvm_status_container.scope.down(s); ARG[i].__m_uvm_field_automation(null, UVM_SETINT, str__); __m_uvm_status_container.scope.up(); end end end end end UVM_SETSTR: begin __m_uvm_status_container.scope.set_arg(`"ARG`"); if(uvm_is_match(str__, __m_uvm_status_container.scope.get())) begin if((FLAG)&UVM_READONLY) begin uvm_report_warning("RDONLY", $sformatf("Readonly argument match %s is ignored", __m_uvm_status_container.get_full_scope_arg()), UVM_NONE); end else begin uvm_report_warning("STRMTC", {"set_str()", ": Match ignored for string ", str__, ". Cannot set array of objects to string value."}); end end else if(!((FLAG)&UVM_READONLY)) begin foreach(ARG[i]) begin string s; $swrite(s,`"ARG[%0d]`",i); __m_uvm_status_container.scope.set_arg(s); if(uvm_is_match(str__, __m_uvm_status_container.scope.get())) begin uvm_report_warning("STRMTC", {"set_str()", ": Match ignored for string ", str__, ". Cannot set object to string value."}); end else if(ARG[i]!=null && !((FLAG)&UVM_REFERENCE)) begin int cnt; for(cnt=0; cnt end if(cnt!=str__.len()) begin __m_uvm_status_container.scope.down(s); ARG[i].__m_uvm_field_automation(null, UVM_SETSTR, str__); __m_uvm_status_container.scope.up(); end end end end end UVM_SETOBJ: begin string s; if(!((FLAG)&UVM_READONLY)) begin bit wildcard_index__; int index__; __m_uvm_status_container.scope.set_arg(`"ARG`"); index__ = uvm_get_array_index_int(str__, wildcard_index__); if(uvm_is_array(str__) && (index__ != -1)) begin if(wildcard_index__) begin for(index__=0; index__<ARG.size(); ++index__) begin if(uvm_is_match(str__, {__m_uvm_status_container.scope.get_arg(),$sformatf("[%0d]", index__)})) begin if (__m_uvm_status_container.print_matches) uvm_report_info("STRMTC", {"set_int()", ": Matched string ", str__, " to field ", __m_uvm_status_container.get_full_scope_arg(), $sformatf("[%0d]",index__)}, UVM_LOW); $cast(ARG[index__], uvm_object::__m_uvm_status_container.object); __m_uvm_status_container.status = 1; end end end else if(uvm_is_match(str__, {__m_uvm_status_container.get_full_scope_arg(),$sformatf("[%0d]", index__)})) begin if(index__+1 > ARG.size()) begin int sz = index__+1; `M_UVM_``TYPE``_RESIZE(ARG,null) end if (__m_uvm_status_container.print_matches) uvm_report_info("STRMTC", {"set_int()", ": Matched string ", str__, " to field ", __m_uvm_status_container.get_full_scope_arg()}, UVM_LOW); $cast(ARG[index__], uvm_object::__m_uvm_status_container.object); __m_uvm_status_container.status = 1; end end else if(!((FLAG)&UVM_REFERENCE)) begin int cnt; foreach(ARG[i]) begin if (ARG[i]!=null) begin string s; $swrite(s,`"ARG[%0d]`",i); for(cnt=0; cnt end if(cnt!=str__.len()) begin __m_uvm_status_container.scope.down(s); ARG[i].__m_uvm_field_automation(null, UVM_SETOBJ, str__); __m_uvm_status_container.scope.up(); end end end end end end endcase end |
|
|
begin case (what__) UVM_CHECK_FIELDS: __m_uvm_status_container.do_field_check(`"ARG`", this); UVM_COPY: begin if (local_data__ == null) return; if(!((FLAG)&UVM_NOCOPY)) ARG = local_data__.ARG; end UVM_COMPARE: begin if (local_data__ == null) return; if(!((FLAG)&UVM_NOCOMPARE)) begin if(ARG != local_data__.ARG) begin if(__m_uvm_status_container.comparer.show_max == 1) begin __m_uvm_status_container.scope.set_arg(`"ARG`"); __m_uvm_status_container.comparer.print_msg(""); end else if(__m_uvm_status_container.comparer.show_max) begin if(ARG.size() != local_data__.ARG.size()) begin void'(__m_uvm_status_container.comparer.compare_field(`"ARG_size`", ARG.size(), local_data__.ARG.size(), 32)); end else begin foreach(ARG[i]) begin if(ARG[i] != local_data__.ARG[i]) begin __m_uvm_status_container.scope.set_arg_element(`"ARG`",i); void'(__m_uvm_status_container.comparer.compare_field_real(`"ARG`", ARG[i], local_data__.ARG[i])); end end end end else if ((__m_uvm_status_container.comparer.physical&&((FLAG)&UVM_PHYSICAL)) || (__m_uvm_status_container.comparer.abstract&&((FLAG)&UVM_ABSTRACT)) || (!((FLAG)&UVM_PHYSICAL) && !((FLAG)&UVM_ABSTRACT)) ) __m_uvm_status_container.comparer.result++; if(__m_uvm_status_container.comparer.result && (__m_uvm_status_container.comparer.show_max <= __m_uvm_status_container.comparer.result)) return; end end end UVM_PACK: if(!((FLAG)&UVM_NOPACK)) begin if(__m_uvm_status_container.packer.use_metadata) __m_uvm_status_container.packer.pack_field_int(ARG.size(), 32); foreach(ARG[i]) begin __m_uvm_status_container.packer.pack_field_int($realtobits(ARG[i]), 64); end end UVM_UNPACK: if(!((FLAG)&UVM_NOPACK)) begin int sz = ARG.size(); if(__m_uvm_status_container.packer.use_metadata) sz = __m_uvm_status_container.packer.unpack_field_int(32); if(sz != ARG.size()) begin `M_UVM_``TYPE``_RESIZE (ARG,0) end foreach(ARG[i]) begin ARG[i] = $bitstoreal(__m_uvm_status_container.packer.unpack_field_int(64)); end end UVM_RECORD: m_uvm_record_qda_real(ARG, FLAG, ARG.size()) UVM_PRINT: begin if(((FLAG)&UVM_NOPRINT) == 0) begin uvm_print_qda_real3(ARG, __m_uvm_status_container.printer, T) end end UVM_SETINT: begin __m_uvm_status_container.scope.set_arg(`"ARG`"); if(uvm_is_match(str__, __m_uvm_status_container.scope.get())) begin if((FLAG)&UVM_READONLY) begin uvm_report_warning("RDONLY", $sformatf("Readonly argument match %s is ignored", __m_uvm_status_container.get_full_scope_arg()), UVM_NONE); end else begin int sz = uvm_object::__m_uvm_status_container.bitstream; if (__m_uvm_status_container.print_matches) uvm_report_info("STRMTC", {"set_int()", ": Matched string ", str__, " to field ", __m_uvm_status_container.get_full_scope_arg()}, UVM_LOW); if(ARG.size() != sz) begin `M_UVM_``TYPE``_RESIZE(ARG,0) end __m_uvm_status_container.status = 1; end end else if(!((FLAG)&UVM_READONLY)) begin foreach(ARG[i]) begin __m_uvm_status_container.scope.set_arg_element(`"ARG`",i); if(uvm_is_match(str__, __m_uvm_status_container.scope.get())) begin if (__m_uvm_status_container.print_matches) uvm_report_info("STRMTC", {"set_int()", ": Matched string ", str__, " to field ", __m_uvm_status_container.get_full_scope_arg()}, UVM_LOW); ARG[i] = uvm_object::__m_uvm_status_container.bitstream; __m_uvm_status_container.status = 1; end end end end endcase end |
|
|
begin case (what__) UVM_CHECK_FIELDS: __m_uvm_status_container.do_field_check(`"ARG`", this); UVM_COPY: begin if(local_data__ == null) return; if(!((FLAG)&UVM_NOCOPY)) ARG = local_data__.ARG; end UVM_COMPARE: begin if(local_data__ == null) return; if(!((FLAG)&UVM_NOCOMPARE)) begin if(ARG != local_data__.ARG) begin if(__m_uvm_status_container.comparer.show_max == 1) begin __m_uvm_status_container.scope.set_arg(`"ARG`"); __m_uvm_status_container.comparer.print_msg(""); end else if(__m_uvm_status_container.comparer.show_max) begin if(ARG.size() != local_data__.ARG.size()) begin void'(__m_uvm_status_container.comparer.compare_field(`"ARG``.size`", ARG.size(), local_data__.ARG.size(), 32)); end else begin foreach(ARG[i]) begin if(ARG[i] != local_data__.ARG[i]) begin __m_uvm_status_container.scope.set_arg_element(`"ARG`",i); void'(__m_uvm_status_container.comparer.compare_string("", ARG[i], local_data__.ARG[i])); end end end end else if ((__m_uvm_status_container.comparer.physical&&((FLAG)&UVM_PHYSICAL)) || (__m_uvm_status_container.comparer.abstract&&((FLAG)&UVM_ABSTRACT)) || (!((FLAG)&UVM_PHYSICAL) && !((FLAG)&UVM_ABSTRACT)) ) __m_uvm_status_container.comparer.result++; if(__m_uvm_status_container.comparer.result && (__m_uvm_status_container.comparer.show_max <= __m_uvm_status_container.comparer.result)) return; end end end UVM_PACK: if(!((FLAG)&UVM_NOPACK)) begin if(__m_uvm_status_container.packer.use_metadata) __m_uvm_status_container.packer.pack_field_int(ARG.size(), 32); foreach(ARG[i]) __m_uvm_status_container.packer.pack_string(ARG[i]); end UVM_UNPACK: if(!((FLAG)&UVM_NOPACK)) begin int sz = ARG.size(); if(__m_uvm_status_container.packer.use_metadata) sz = __m_uvm_status_container.packer.unpack_field_int(32); if(sz != ARG.size()) begin `M_UVM_``TYPE``_RESIZE(ARG,"") end foreach(ARG[i]) ARG[i] = __m_uvm_status_container.packer.unpack_string(); end UVM_RECORD: m_uvm_record_qda_string(ARG,FLAG,ARG.size()) UVM_PRINT: begin if(((FLAG)&UVM_NOPRINT) == 0) begin uvm_print_array_string2(ARG, __m_uvm_status_container.printer) end end UVM_SETINT: begin __m_uvm_status_container.scope.set_arg(`"ARG`"); if(uvm_is_match(str__, __m_uvm_status_container.scope.get())) begin if((FLAG)&UVM_READONLY) begin uvm_report_warning("RDONLY", $sformatf("Readonly argument match %s is ignored", __m_uvm_status_container.get_full_scope_arg()), UVM_NONE); end else begin int sz = uvm_object::__m_uvm_status_container.bitstream; if (__m_uvm_status_container.print_matches) uvm_report_info("STRMTC", {"set_int()", ": Matched string ", str__, " to field ", __m_uvm_status_container.get_full_scope_arg()}, UVM_LOW); if(ARG.size() != sz) begin `M_UVM_``TYPE``_RESIZE(ARG,"") end __m_uvm_status_container.status = 1; end end end UVM_SETSTR: begin if(!((FLAG)&UVM_READONLY)) begin bit wildcard_index__; int index__; __m_uvm_status_container.scope.set_arg(`"ARG`"); index__ = uvm_get_array_index_int(str__, wildcard_index__); if(uvm_is_array(str__) && (index__ != -1)) begin if(wildcard_index__) begin for(index__=0; index__<ARG.size(); ++index__) begin if(uvm_is_match(str__, {__m_uvm_status_container.scope.get_arg(),$sformatf("[%0d]", index__)})) begin if (__m_uvm_status_container.print_matches) uvm_report_info("STRMTC", {"set_int()", ": Matched string ", str__, " to field ", __m_uvm_status_container.get_full_scope_arg(), $sformatf("[%0d]",index__)}, UVM_LOW); ARG[index__] = uvm_object::__m_uvm_status_container.stringv; __m_uvm_status_container.status = 1; end end end else if(uvm_is_match(str__, {__m_uvm_status_container.scope.get_arg(),$sformatf("[%0d]", index__)})) begin if(index__+1 > ARG.size()) begin int sz = index__; string tmp__; `M_UVM_``TYPE``_RESIZE(ARG,tmp__) end if (__m_uvm_status_container.print_matches) uvm_report_info("STRMTC", {"set_int()", ": Matched string ", str__, " to field ", __m_uvm_status_container.get_full_scope_arg()}, UVM_LOW); ARG[index__] = uvm_object::__m_uvm_status_container.stringv; __m_uvm_status_container.status = 1; end end end end endcase end |
|
|
if((what__ >= UVM_START_FUNCS && what__ <= UVM_END_FUNCS) && (((FLAG)&UVM_READONLY) == 0)) begin bit wildcard_index__; INDEX_TYPE index__; string idx__; index__ = INDEX_TYPE'(uvm_get_array_index_int(str__, wildcard_index__)); if(what__==UVM_SET``ARRAY_TYPE) begin __m_uvm_status_container.scope.down(`"ARRAY`"); if(uvm_is_array(str__) ) begin if(wildcard_index__) begin if(ARRAY.first(index__)) do begin $swrite(idx__, __m_uvm_status_container.scope.get(), "[", index__, "]"); if(uvm_is_match(str__, idx__)) begin ARRAY[index__] = RHS; __m_uvm_status_container.status = 1; end end while(ARRAY.next(index__)); end else if(uvm_is_match(str__, {__m_uvm_status_container.scope.get(),$sformatf("[%0d]", index__)})) begin ARRAY[index__] = RHS; __m_uvm_status_container.status = 1; end end __m_uvm_status_container.scope.up(); end end |
|
|
if((what__ >= UVM_START_FUNCS && what__ <= UVM_END_FUNCS) && (((FLAG)&UVM_READONLY) == 0)) begin bit wildcard_index__; INDEX_TYPE index__; string idx__; index__ = uvm_get_array_index_int(str__, wildcard_index__); if(what__==UVM_SET``ARRAY_TYPE) begin __m_uvm_status_container.scope.down(`"ARRAY`"); if(uvm_is_array(str__) ) begin if(wildcard_index__) begin if(ARRAY.first(index__)) do begin $swrite(idx__, __m_uvm_status_container.scope.get(), "[", index__, "]"); if(uvm_is_match(str__, idx__)) begin ARRAY[index__] = RHS; __m_uvm_status_container.status = 1; end end while(ARRAY.next(index__)); end else if(uvm_is_match(str__, {__m_uvm_status_container.scope.get(),$sformatf("[%0d]", index__)})) begin ARRAY[index__] = RHS; __m_uvm_status_container.status = 1; end end __m_uvm_status_container.scope.up(); end end |
|
|
if((what__ >= UVM_START_FUNCS && what__ <= UVM_END_FUNCS) && (((FLAG)&UVM_READONLY) == 0)) begin bit wildcard_index__; INDEX_TYPE index__; index__ = uvm_get_array_index_``INDEX_TYPE(str__, wildcard_index__); if(what__==UVM_SETOBJ) begin __m_uvm_status_container.scope.down(`"ARRAY`"); if(uvm_is_array(str__) ) begin if(wildcard_index__) begin if(ARRAY.first(index__)) do begin if(uvm_is_match(str__, {__m_uvm_status_container.scope.get(),$sformatf("[%0d]", index__)}) || uvm_is_match(str__, {__m_uvm_status_container.scope.get(),$sformatf("[%0s]", index__)})) begin if (__m_uvm_status_container.object != null) $cast(ARRAY[index__], __m_uvm_status_container.object); __m_uvm_status_container.status = 1; end end while(ARRAY.next(index__)); end else if(uvm_is_match(str__, {__m_uvm_status_container.scope.get(),$sformatf("[%0d]", index__)})) begin if (__m_uvm_status_container.object != null) $cast(ARRAY[index__], __m_uvm_status_container.object); __m_uvm_status_container.status = 1; end else if(uvm_is_match(str__, {__m_uvm_status_container.scope.get(),$sformatf("[%0s]", index__)})) begin if (__m_uvm_status_container.object != null) $cast(ARRAY[index__], __m_uvm_status_container.object); __m_uvm_status_container.status = 1; end end __m_uvm_status_container.scope.up(); end end |
|
|
if((what__ >= UVM_START_FUNCS && what__ <= UVM_END_FUNCS) && (((FLAG)&UVM_READONLY) == 0)) begin bit wildcard_index__; INDEX_TYPE index__; index__ = uvm_get_array_index_``INDEX_TYPE(str__, wildcard_index__); if(what__==UVM_SET``ARRAY_TYPE) begin __m_uvm_status_container.scope.down(`"ARRAY`"); if(uvm_is_array(str__) ) begin if(wildcard_index__) begin if(ARRAY.first(index__)) do begin if(uvm_is_match(str__, {__m_uvm_status_container.scope.get(),$sformatf("[%0d]", index__)}) || uvm_is_match(str__, {__m_uvm_status_container.scope.get(),$sformatf("[%0s]", index__)})) begin ARRAY[index__] = RHS; __m_uvm_status_container.status = 1; end end while(ARRAY.next(index__)); end else if(uvm_is_match(str__, {__m_uvm_status_container.scope.get(),$sformatf("[%0d]", index__)})) begin ARRAY[index__] = RHS; __m_uvm_status_container.status = 1; end else if(uvm_is_match(str__, {__m_uvm_status_container.scope.get(),$sformatf("[%0s]", index__)})) begin ARRAY[index__] = RHS; __m_uvm_status_container.status = 1; end end __m_uvm_status_container.scope.up(); end end |
|
|
const static string type_name = `"T`"; virtual function string get_type_name (); return type_name; endfunction |
|
|
function uvm_object create (string name=""); T tmp; `ifdef UVM_OBJECT_MUST_HAVE_CONSTRUCTOR if (name=="") tmp = new(); else tmp = new(name); `else tmp = new(); if (name!="") tmp.set_name(name); `endif return tmp; endfunction |
|
|
typedef uvm_object_registry#(T,`"S`") type_id; static function type_id get_type(); return type_id::get(); endfunction virtual function uvm_object_wrapper get_object_type(); return type_id::get(); endfunction |
|
|
typedef uvm_object_registry #(T) type_id; static function type_id get_type(); return type_id::get(); endfunction virtual function uvm_object_wrapper get_object_type(); return type_id::get(); endfunction |
|
|
while(ARG.size() while(ARG.size()>sz) void'(ARG.pop_front()); |
|
|
if(!((FLAG)&UVM_NORECORD)) begin __m_uvm_status_container.recorder.record_field(`"ARG`", ARG, $bits(ARG), uvm_radix_enum'((FLAG)&(UVM_RADIX))); end |
|
|
if(!((FLAG)&UVM_NORECORD)) begin __m_uvm_status_container.recorder.record_object(`"ARG`", ARG); end |
|
|
begin if(!((FLAG)&UVM_NORECORD) && (__m_uvm_status_container.recorder.tr_handle != 0)) begin int sz__ = SZ; if(sz__ == 0) begin __m_uvm_status_container.recorder.record_field(`"ARG``.size`", 0, 32, UVM_DEC); end else if(sz__ < 10) begin foreach(ARG[i]) begin __m_uvm_status_container.scope.set_arg_element(`"ARG`",i); __m_uvm_status_container.recorder.record_string(__m_uvm_status_container.scope.get(), ARG[i].name()); end end else begin for(int i=0; i<5; ++i) begin __m_uvm_status_container.scope.set_arg_element(`"ARG`", i); __m_uvm_status_container.recorder.record_string(__m_uvm_status_container.scope.get(), ARG[i].name()); end for(int i=sz__-5; i __m_uvm_status_container.recorder.record_string(__m_uvm_status_container.scope.get(), ARG[i].name()); end end end end |
|
|
begin if(!((FLAG)&UVM_NORECORD)) begin int sz__ = SZ; if(sz__ == 0) begin __m_uvm_status_container.recorder.record_field(`"ARG`", 0, 32, UVM_DEC); end else if(sz__ < 10) begin foreach(ARG[i]) begin __m_uvm_status_container.scope.set_arg_element(`"ARG`",i); __m_uvm_status_container.recorder.record_field(__m_uvm_status_container.scope.get(), ARG[i], $bits(ARG[i]), uvm_radix_enum'((FLAG)&UVM_RADIX)); end end else begin for(int i=0; i<5; ++i) begin __m_uvm_status_container.scope.set_arg_element(`"ARG`", i); __m_uvm_status_container.recorder.record_field(__m_uvm_status_container.scope.get(), ARG[i], $bits(ARG[i]), uvm_radix_enum'((FLAG)&UVM_RADIX)); end for(int i=sz__-5; i __m_uvm_status_container.recorder.record_field(__m_uvm_status_container.scope.get(), ARG[i], $bits(ARG[i]), uvm_radix_enum'((FLAG)&UVM_RADIX)); end end end end |
|
|
begin if(!((FLAG)&UVM_NORECORD)) begin int sz__ = SZ; string s; if(sz__ == 0 ) begin __m_uvm_status_container.recorder.record_field(`"ARG``.size`", 0, 32, UVM_DEC); end if(sz__ < 10) begin foreach(ARG[i]) begin $swrite(s,`"ARG[%0d]`", i); __m_uvm_status_container.recorder.record_object(s, ARG[i]); end end else begin for(int i=0; i<5; ++i) begin $swrite(s,`"ARG[%0d]`", i); __m_uvm_status_container.recorder.record_object(s, ARG[i]); end for(int i=sz__-5; i __m_uvm_status_container.recorder.record_object(s, ARG[i]); end end end end |
|
|
begin if(!((FLAG)&UVM_NORECORD)) begin int sz__ = SZ; if(sz__ == 0) begin __m_uvm_status_container.recorder.record_field(`"ARG``.size`", 0, 32, UVM_DEC); end else if(sz__ < 10) begin foreach(ARG[i]) begin __m_uvm_status_container.scope.set_arg_element(`"ARG`",i); __m_uvm_status_container.recorder.record_field_real(__m_uvm_status_container.scope.get(), ARG[i]); end end else begin for(int i=0; i<5; ++i) begin __m_uvm_status_container.scope.set_arg_element(`"ARG`", i); __m_uvm_status_container.recorder.record_field_real(__m_uvm_status_container.scope.get(), ARG[i]); end for(int i=sz__-5; i __m_uvm_status_container.recorder.record_field_real(__m_uvm_status_container.scope.get(), ARG[i]); end end end end |
|
|
begin int sz__ = SZ; if(!((FLAG)&UVM_NORECORD)) begin if(sz__ == 0) begin __m_uvm_status_container.recorder.record_field(`"ARG``.size`", 0, 32, UVM_DEC); end else if(sz__ < 10) begin foreach(ARG[i]) begin __m_uvm_status_container.scope.set_arg_element(`"ARG`",i); __m_uvm_status_container.recorder.record_string(__m_uvm_status_container.scope.get(), ARG[i]); end end else begin for(int i=0; i<5; ++i) begin __m_uvm_status_container.scope.set_arg_element(`"ARG`", i); __m_uvm_status_container.recorder.record_string(__m_uvm_status_container.scope.get(), ARG[i]); end for(int i=sz__-5; i __m_uvm_status_container.recorder.record_string(__m_uvm_status_container.scope.get(), ARG[i]); end end end end |
|
|
if(!((FLAG)&UVM_NORECORD)) begin __m_uvm_status_container.recorder.record_string(`"ARG`", STR); end |
|
|
static bit is_registered_with_sequencer = SEQUENCER``::add_typewide_sequence(`"TYPE_NAME`"); |
|
|
/* fixed arrays can not be resized; do nothing */ |
|
|
class PREFIX``PHASE``_phase extends uvm_task_phase; virtual task exec_task(uvm_component comp, uvm_phase phase); COMP comp_; if ($cast(comp_,comp)) comp_.``PHASE``_phase(phase); endtask local static PREFIX``PHASE``_phase m_inst; static const string type_name = `"PREFIX``PHASE``_phase`"; static function PREFIX``PHASE``_phase get(); if(m_inst == null) begin m_inst = new; end return m_inst; endfunction protected function new(string name=`"PHASE`"); super.new(name); endfunction virtual function string get_type_name(); return type_name; endfunction endclass |
|
|
class PREFIX``PHASE``_phase extends uvm_topdown_phase; virtual function void exec_func(uvm_component comp, uvm_phase phase); COMP comp_; if ($cast(comp_,comp)) comp_.``PHASE``_phase(phase); endfunction local static PREFIX``PHASE``_phase m_inst; static const string type_name = `"PREFIX``PHASE``_phase`"; static function PREFIX``PHASE``_phase get(); if(m_inst == null) begin m_inst = new(); end return m_inst; endfunction protected function new(string name=`"PHASE`"); super.new(name); endfunction virtual function string get_type_name(); return type_name; endfunction endclass |
|
|
item
| |
Determine which prototype the UVM start_item task has * UVM 1.0ea was the first to use the new prototype
|
|
|
(1<<14)
|
|
|
uvm_add_to_seq_lib(TYPE,LIBTYPE) |
|
|
'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.
|
|
|
UVM_BIN
|
|
|
|
|
svt_channel
| |
If not using VMM technology then create equivalent channel functionality, but assuming sequence_items
|
|
|
svt_uvm_cmd_assistant
|
|
|
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
|
|
|
uvm_object
|
|
|
uvm_sequence_item
|
|
|
pack
|
|
|
unpack
|
|
|
clone
|
|
|
print()
|
|
|
print
|
|
|
get_full_name
|
|
|
get_type_name
|
|
|
svt_sequence_item_base_iter
|
|
|
reporter
|
|
|
|
|
|
|
uvm
|
|
|
UVM
|
|
|
|
|
/** @cond SVDOC */ m_uvm_object_registry_internal(class_type_no_params,class_type_no_params) m_uvm_object_create_func(class_type) m_uvm_get_type_name_func(class_type) uvm_field_utils_begin(class_type) | |
Macro combining the uvm_object_utils_begin and uvm_object_param_utils_begin macro features. Mostly modeled after uvm_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 uvm_info_context do uvm_info_context(id, msg, UVM_HIGH, reporter) while (0) `else do if (reporter.uvm_report_enabled(UVM_HIGH,UVM_INFO,id)) reporter.uvm_report_info(id, msg, UVM_HIGH, uvm_file, uvm_line); while (0) `endif |
|
|
`ifdef uvm_info_context do if ((clientfile != "") || (clientline != 0)) begin `ifdef UVM_REPORT_DISABLE_FILE clientfile = ""; `endif `ifdef UVM_REPORT_DISABLE_LINE clientline = 0; `endif if (reporter.uvm_report_enabled(UVM_HIGH,UVM_INFO,id)) reporter.uvm_report_info(id, msg, UVM_HIGH, clientfile, clientline); end else uvm_info_context(id, msg, UVM_HIGH, reporter) while (0) `else /* This can lose the clientfile/clientline information in non-context situations, */ /* but since we believe the exposure is minimal we have chosen to live with this. */ 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"
|
|
|
UVM_HIGH
|
|
|
UVM_DEC
|
|
|
uvm_event evname; | |
Macro used to declare a notification event instance for the current methodology
|
|
|
UVM_DEEP
|
|
|
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
|
|
|
svt_xvm_do_callbacks(T,CB,METHOD) |
|
|
svt_xvm_do_obj_callbacks(T,CB,OBJ,METHOD) |
|
|
UVM_ENUM
|
|
|
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 uvm_error_context do uvm_error_context(id, msg, reporter) while (0) `else do if (reporter.uvm_report_enabled(UVM_NONE,UVM_ERROR,id)) reporter.uvm_report_error(id, msg, UVM_NONE, uvm_file, uvm_line); while (0) `endif |
|
|
`ifdef uvm_error_context do if ((clientfile != "") || (clientline != 0)) begin `ifdef UVM_REPORT_DISABLE_FILE clientfile = ""; `endif `ifdef UVM_REPORT_DISABLE_LINE clientline = 0; `endif if (reporter.uvm_report_enabled(UVM_NONE,UVM_ERROR,id)) reporter.uvm_report_error(id, msg, UVM_NONE, clientfile, clientline); end else uvm_error_context(id, msg, reporter) while (0) `else /* This can lose the clientfile/clientline information in non-context situations, */ /* but since we believe the exposure is minimal we have chosen to live with this. */ svt_error(id, msg) `endif |
|
|
5
|
|
|
|
|
UVM_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 |
|
|
6
|
|
|
|
|
`ifdef uvm_fatal_context do uvm_fatal_context(id, msg, reporter) while (0) `else do if (reporter.uvm_report_enabled(UVM_NONE,UVM_FATAL,id)) reporter.uvm_report_fatal(id, msg, UVM_NONE, uvm_file, uvm_line); while (0) `endif |
|
|
`ifdef uvm_fatal_context do if ((clientfile != "") || (clientline != 0)) begin `ifdef UVM_REPORT_DISABLE_FILE clientfile = ""; `endif `ifdef UVM_REPORT_DISABLE_LINE clientline = 0; `endif if (reporter.uvm_report_enabled(UVM_NONE,UVM_FATAL,id)) reporter.uvm_report_fatal(id, msg, UVM_NONE, clientfile, clientline); end else uvm_fatal_context(id, msg, reporter) while (0) `else /* This can lose the clientfile/clientline information in non-context situations, */ /* but since we believe the exposure is minimal we have chosen to live with this. */ svt_fatal(id, msg) `endif |
|
|
UVM_NONE
|
|
|
uvm_field_aa_int_byte(ARG, FLAG) |
|
|
uvm_field_aa_int_byte_unsigned(ARG, FLAG) |
|
|
uvm_field_aa_int_int(ARG, FLAG) |
|
|
uvm_field_aa_int_int_unsigned(ARG, FLAG) |
|
|
uvm_field_aa_int_integer(ARG, FLAG) |
|
|
uvm_field_aa_int_integer_unsigned(ARG, FLAG) |
|
|
uvm_field_aa_int_key(KEY, ARG, FLAG) |
|
|
uvm_field_aa_int_longint(ARG, FLAG) |
|
|
`uvm_field_aa_string_int(ARG, FLAG) |
|
|
uvm_field_aa_int_shortint(ARG, FLAG) |
|
|
uvm_field_aa_int_shortint_unsigned(ARG, FLAG) |
|
|
uvm_field_aa_int_string(ARG,FLAG) |
|
|
uvm_field_aa_object_int(ARG, FLAG) |
|
|
uvm_field_aa_object_string(ARG,FLAG) |
|
|
`uvm_field_aa_string_int(ARG, FLAG) |
|
|
uvm_field_aa_string_string(ARG,FLAG) |
|
|
uvm_field_array_enum(T,ARG,FLAG) |
|
|
uvm_field_array_int(ARG,FLAG) |
|
|
uvm_field_array_object(ARG,FLAG) |
|
|
uvm_field_array_real(ARG,FLAG) |
|
|
uvm_field_array_string(ARG,FLAG) |
|
|
uvm_field_enum(T,ARG,FLAG) |
|
|
uvm_field_event(ARG,FLAG) |
|
|
uvm_field_object(ARG,FLAG|UVM_REFERENCE) |
|
|
uvm_field_aa_object_int(ARG, FLAG|UVM_REFERENCE) |
|
|
uvm_field_aa_object_string(ARG, FLAG|UVM_REFERENCE) |
|
|
uvm_field_array_object(ARG,FLAG|UVM_REFERENCE) |
|
|
uvm_field_sarray_object(ARG,FLAG|UVM_REFERENCE) |
|
|
uvm_field_int(ARG,FLAG) |
|
|
uvm_field_object(ARG,FLAG) |
|
|
uvm_field_queue_enum(T,ARG,FLAG) |
|
|
uvm_field_queue_object(ARG, FLAG|UVM_REFERENCE) |
|
|
uvm_field_queue_int(ARG,FLAG) |
|
|
uvm_field_queue_object(ARG,FLAG) |
|
|
M_UVM_FIELD_QDA_REAL(QUEUE,ARG,FLAG,da) |
|
|
uvm_field_queue_string(ARG,FLAG) |
|
|
|
|
`ifdef SVT_MULTI_SIM_REAL_COMPARE_TOO_PRECISE if (what__ == UVM_COMPARE) begin svt_sequence_item_base seq_item_base; if ($cast(seq_item_base, this)) begin seq_item_base.substitute_fuzzy_real_comparer(__m_uvm_status_container); end end `endif |
|
|
`ifdef SVT_MULTI_SIM_REAL_COMPARE_TOO_PRECISE if (what__ == UVM_COMPARE) begin svt_sequence_item_base seq_item_base; if ($cast(seq_item_base, this)) begin seq_item_base.restore_real_comparer(__m_uvm_status_container); end end `endif |
|
|
uvm_field_sarray_enum(T,ARG,FLAG) |
|
|
uvm_field_sarray_int(ARG,FLAG) |
|
|
uvm_field_sarray_object(ARG,FLAG) |
|
|
uvm_field_sarray_real(ARG,FLAG) |
|
|
uvm_field_sarray_string(ARG,FLAG) |
|
|
uvm_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
|
|
|
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
|
|
|
UVM_HEX
|
|
|
'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.
|
|
|
`ifdef uvm_info_context do uvm_info_context(id, msg, UVM_NONE, reporter) while (0) `else do /* The check to see if the report is enabled is skipped because we always want to generate this message. */ reporter.uvm_report_info(id, msg, UVM_NONE, uvm_file, uvm_line); while (0) `endif |
|
|
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)
|
|
|
UVM_LOW
|
|
|
`ifdef uvm_info_context do uvm_info_context(id, msg, UVM_LOW, reporter) while (0) `else do if (reporter.uvm_report_enabled(UVM_LOW,UVM_INFO,id)) reporter.uvm_report_info(id, msg, UVM_LOW, uvm_file, uvm_line); while (0) `endif |
|
|
`ifdef uvm_info_context do if ((clientfile != "") || (clientline != 0)) begin `ifdef UVM_REPORT_DISABLE_FILE clientfile = ""; `endif `ifdef UVM_REPORT_DISABLE_LINE clientline = 0; `endif if (reporter.uvm_report_enabled(UVM_LOW,UVM_INFO,id)) reporter.uvm_report_info(id, msg, UVM_LOW, clientfile, clientline); end else uvm_info_context(id, msg, UVM_LOW, reporter) while (0) `else /* This can lose the clientfile/clientline information in non-context situations, */ /* but since we believe the exposure is minimal we have chosen to live with this. */ 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)
|
|
|
UVM_OCT
|
|
|
|
|
(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)
|
|
|
UVM_REFERENCE
|
|
|
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.
|
|
|
/* 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.
|
|
|
|
|
/** * 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.
|
|
|
UVM_SHALLOW
|
|
|
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
|
|
|
UVM_STRING
|
|
|
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"
|
|
|
|
UVM_TIME
|
|
|
`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 uvm_info_context do uvm_info_context(id, msg, UVM_MEDIUM, reporter) while (0) `else do if (reporter.uvm_report_enabled(UVM_MEDIUM,UVM_INFO,id)) reporter.uvm_report_info(id, msg, UVM_MEDIUM, uvm_file, uvm_line); while (0) `endif |
|
|
`ifdef uvm_info_context do if ((clientfile != "") || (clientline != 0)) begin `ifdef UVM_REPORT_DISABLE_FILE clientfile = ""; `endif `ifdef UVM_REPORT_DISABLE_LINE clientline = 0; `endif if (reporter.uvm_report_enabled(UVM_MEDIUM,UVM_INFO,id)) reporter.uvm_report_info(id, msg, UVM_MEDIUM, clientfile, clientline); end else uvm_info_context(id, msg, UVM_MEDIUM, reporter) while (0) `else /* This can lose the clientfile/clientline information in non-context situations, */ /* but since we believe the exposure is minimal we have chosen to live with this. */ svt_trace(id, msg) `endif |
|
|
UVM_MEDIUM
|
|
|
4096
|
|
|
4096
|
|
|
4096
|
|
|
64
|
|
|
2
|
|
|
2
|
|
|
1
|
|
|
0
|
|
|
0
|
|
|
0
|
|
|
512
|
|
|
1
|
|
|
1
|
|
|
2
|
|
|
0
|
|
|
1
|
|
|
3
|
|
|
svt_sequence_item_base
|
|
|
end_time
|
|
|
uvm_transaction::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
|
|
|
uvm_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
|
|
|
uvm_transaction::begin_event
|
|
|
svt_sequence_item
|
|
|
UVM_DISABLE_AUTO_ITEM_RECORDING
|
|
|
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.
|
|
|
UVM_UNSIGNED
|
|
|
-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
|
|
|
-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.
|
|
|
`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 uvm_info_context do uvm_info_context(id, msg, UVM_FULL, reporter) while (0) `else do if (reporter.uvm_report_enabled(UVM_FULL,UVM_INFO,id)) reporter.uvm_report_info(id, msg, UVM_FULL, uvm_file, uvm_line); while (0) `endif |
|
|
`ifdef uvm_info_context do if ((clientfile != "") || (clientline != 0)) begin `ifdef UVM_REPORT_DISABLE_FILE clientfile = ""; `endif `ifdef UVM_REPORT_DISABLE_LINE clientline = 0; `endif if (reporter.uvm_report_enabled(UVM_FULL,UVM_INFO,id)) reporter.uvm_report_info(id, msg, UVM_FULL, clientfile, clientline); end else uvm_info_context(id, msg, UVM_FULL, reporter) while (0) `else /* This can lose the clientfile/clientline information in non-context situations, */ /* but since we believe the exposure is minimal we have chosen to live with this. */ svt_verbose(id, msg) `endif |
|
|
1
|
|
|
|
|
UVM_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 uvm_warning_context do uvm_warning_context(id, msg, reporter) while(0) `else do if (reporter.uvm_report_enabled(UVM_NONE,UVM_WARNING,id)) reporter.uvm_report_warning(id, msg, UVM_NONE, uvm_file, uvm_line); while (0) `endif |
|
|
`ifdef uvm_warning_context do if ((clientfile != "") || (clientline != 0)) begin `ifdef UVM_REPORT_DISABLE_FILE clientfile = ""; `endif `ifdef UVM_REPORT_DISABLE_LINE clientline = 0; `endif if (reporter.uvm_report_enabled(UVM_NONE,UVM_WARNING,id)) reporter.uvm_report_warning(id, msg, UVM_NONE, clientfile, clientline); end else uvm_warning_context(id, msg, reporter) while (0) `else /* This can lose the clientfile/clientline information in non-context situations, */ /* but since we believe the exposure is minimal we have chosen to live with this. */ svt_warning(id, msg) `endif |
|
|
4
|
|
|
|
|
UVM_NONE
|
|
|
0
| |
Writer type constants used for controlling the writer format
|
|
|
3
|
|
|
1
|
|
|
2
|
|
|
uvm_``obj
|
|
|
UVM_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`")); |
|
|
uvm_info(id, msg, UVM_HIGH) |
|
|
uvm_declare_p_sequencer(SEQUENCER)
|
|
|
svt_xvm_do_on_pri(SEQ_OR_ITEM, m_sequencer, -1) |
|
|
uvm_do_callbacks(T,CB,METHOD) |
|
|
uvm_do_obj_callbacks(T,CB,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.get_do_not_randomize() && !SEQ_OR_ITEM.randomize()) svt_xvm_warning("RNDFLD", "Randomization failed in uvm_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.get_do_not_randomize() && !SEQ_OR_ITEM.randomize() with CONSTRAINTS ) svt_xvm_warning("RNDFLD", "Randomization failed in uvm_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) |
|
|
uvm_error(id, msg) |
|
|
uvm_fatal(id, msg) |
|
|
uvm_field_array_object(ARG,FLAG)
|
|
|
uvm_field_int(ARG,FLAG)
|
|
|
uvm_field_object(ARG,FLAG)
|
|
|
uvm_field_queue_int(ARG,FLAG)
|
|
|
class uvm_analysis_imp``SFX #(type T=int, type IMP=int) extends uvm_port_base #(uvm_tlm_if_base #(T,T)); int imp_ix = 0; UVM_IMP_COMMON(UVM_TLM_ANALYSIS_MASK,`"uvm_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 uvm_blocking_put_imp``SFX #(type T=int, type IMP=int) extends uvm_port_base #(uvm_tlm_if_base #(T,T)); int imp_ix = 0; UVM_IMP_COMMON(UVM_TLM_BLOCKING_PUT_MASK,`"uvm_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_ |
|
|
uvm_info(id, msg, UVM_LOW) |
|
|
|
|
|
|
m_uvm_object_registry_internal(T,T) m_uvm_object_create_func(T) `ifndef SVT_UVM_1800_2_2017_OR_HIGHER m_uvm_get_type_name_func(T) `else `uvm_type_name_decl(`"T`") `endif |
|
|
|
|
|
|
svt_xvm_rand_send_pri(SEQ_OR_ITEM, -1) |
|
|
begin SEQ_OR_ITEM.priority_start(this, PRIORITY); if (!SEQ_OR_ITEM.get_do_not_randomize() && !SEQ_OR_ITEM.randomize()) svt_xvm_warning("RNDFLD", "Randomization failed in uvm_rand_send action") SEQ_OR_ITEM.priority_finish(this, PRIORITY); end |
|
|
begin SEQ_OR_ITEM.priority_start(this, PRIORITY); if (!SEQ_OR_ITEM.get_do_not_randomize() && !SEQ_OR_ITEM.randomize() with CONSTRAINTS ) svt_xvm_warning("RNDFLD", "Randomization failed in uvm_rand_send_with action") SEQ_OR_ITEM.priority_finish(this, PRIORITY); end |
|
|
svt_xvm_rand_send_pri_with(SEQ_OR_ITEM, -1, CONSTRAINTS) |
|
|
UVM_REFERENCE
|
|
|
uvm_register_cb(T,CB) |
|
|
svt_xvm_send_pri(SEQ_OR_ITEM, -1) |
|
|
SEQ_OR_ITEM.priority_start(this, PRIORITY); SEQ_OR_ITEM.priority_finish(this, PRIORITY); |
|
|
uvm_info(id, msg, UVM_MEDIUM) |
|
|
typedef uvm_callbacks#(T,CB) POOL |
|
|
UVM_``obj
|
|
|
uvm_info(id, msg, UVM_FULL) |
|
|
uvm_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_...
|
|
|
static bit add_``TYPE``_to_seq_lib_``LIBTYPE = LIBTYPE::m_add_typewide_sequence(TYPE::get_type()); |
|
|
class uvm_analysis_imp``SFX #(type T=int, type IMP=int) extends uvm_port_base #(uvm_tlm_if_base #(T,T)); UVM_IMP_COMMON(UVM_TLM_ANALYSIS_MASK,`"uvm_analysis_imp``SFX`",IMP) function void write( input T t); m_imp.write``SFX( t); endfunction endclass |
|
|
|
task get (output TYPE arg); imp.get(arg); endtask |
|
|
class uvm_blocking_get_imp``SFX #(type T=int, type IMP=int) extends uvm_port_base #(uvm_tlm_if_base #(T,T)); UVM_IMP_COMMON(UVM_TLM_BLOCKING_GET_MASK,`"uvm_blocking_get_imp``SFX`",IMP) UVM_BLOCKING_GET_IMP_SFX(SFX, m_imp, T, t) endclass |
|
|
task get( output TYPE arg); imp.get``SFX( arg); endtask |
|
|
|
|
class uvm_blocking_get_peek_imp``SFX #(type T=int, type IMP=int) extends uvm_port_base #(uvm_tlm_if_base #(T,T)); UVM_IMP_COMMON(UVM_TLM_BLOCKING_GET_PEEK_MASK,`"uvm_blocking_get_peek_imp``SFX`",IMP) UVM_BLOCKING_GET_IMP_SFX(SFX, m_imp, T, t) UVM_BLOCKING_PEEK_IMP_SFX(SFX, m_imp, T, t) endclass |
|
|
class uvm_blocking_master_imp``SFX #(type REQ=int, type RSP=int, type IMP=int, type REQ_IMP=IMP, type RSP_IMP=IMP) extends uvm_port_base #(uvm_tlm_if_base #(REQ, RSP)); typedef IMP this_imp_type; typedef REQ_IMP this_req_type; typedef RSP_IMP this_rsp_type; UVM_MS_IMP_COMMON(UVM_TLM_BLOCKING_MASTER_MASK,`"uvm_blocking_master_imp``SFX`") UVM_BLOCKING_PUT_IMP_SFX(SFX, m_req_imp, REQ, t) UVM_BLOCKING_GET_IMP_SFX(SFX, m_rsp_imp, RSP, t) UVM_BLOCKING_PEEK_IMP_SFX(SFX, m_rsp_imp, RSP, t) endclass |
|
|
task peek (output TYPE arg); imp.peek(arg); endtask |
|
|
class uvm_blocking_peek_imp``SFX #(type T=int, type IMP=int) extends uvm_port_base #(uvm_tlm_if_base #(T,T)); UVM_IMP_COMMON(UVM_TLM_BLOCKING_PEEK_MASK,`"uvm_blocking_peek_imp``SFX`",IMP) UVM_BLOCKING_PEEK_IMP_SFX(SFX, m_imp, T, t) endclass |
|
|
task peek( output TYPE arg);imp.peek``SFX( arg); endtask |
|
|
task put (TYPE arg); imp.put(arg); endtask |
|
|
class uvm_blocking_put_imp``SFX #(type T=int, type IMP=int) extends uvm_port_base #(uvm_tlm_if_base #(T,T)); UVM_IMP_COMMON(UVM_TLM_BLOCKING_PUT_MASK,`"uvm_blocking_put_imp``SFX`",IMP) UVM_BLOCKING_PUT_IMP_SFX(SFX, m_imp, T, t) endclass |
|
|
task put( input TYPE arg); imp.put``SFX( arg); endtask |
|
|
class uvm_blocking_slave_imp``SFX #(type REQ=int, type RSP=int, type IMP=int, type REQ_IMP=IMP, type RSP_IMP=IMP) extends uvm_port_base #(uvm_tlm_if_base #(RSP, REQ)); typedef IMP this_imp_type; typedef REQ_IMP this_req_type; typedef RSP_IMP this_rsp_type; UVM_MS_IMP_COMMON(UVM_TLM_BLOCKING_SLAVE_MASK,`"uvm_blocking_slave_imp``SFX`") UVM_BLOCKING_PUT_IMP_SFX(SFX, m_rsp_imp, RSP, t) UVM_BLOCKING_GET_IMP_SFX(SFX, m_req_imp, REQ, t) UVM_BLOCKING_PEEK_IMP_SFX(SFX, m_req_imp, REQ, t) endclass |
|
|
task transport (REQ req_arg, output RSP rsp_arg); imp.transport(req_arg, rsp_arg); endtask |
|
|
class uvm_blocking_transport_imp``SFX #(type REQ=int, type RSP=int, type IMP=int) extends uvm_port_base #(uvm_tlm_if_base #(REQ, RSP)); UVM_IMP_COMMON(UVM_TLM_BLOCKING_TRANSPORT_MASK,`"uvm_blocking_transport_imp``SFX`",IMP) UVM_BLOCKING_TRANSPORT_IMP_SFX(SFX, m_imp, REQ, RSP, req, rsp) endclass |
|
|
task transport( input REQ req_arg, output RSP rsp_arg); imp.transport``SFX(req_arg, rsp_arg); endtask |
|
|
m_uvm_bottomup_phase(PHASE,uvm_component,uvm_) |
|
|
m_uvm_task_phase(PHASE,uvm_component,uvm_) |
|
|
m_uvm_topdown_phase(PHASE,uvm_component,uvm_) |
|
|
|
|
/* null */
|
|
|
/* null */
|
|
|
|
|
|
|
|
typedef uvm_component_registry #(T,S) type_id; static function type_id get_type(); return type_id::get(); endfunction virtual function uvm_object_wrapper get_object_type(); return type_id::get(); endfunction |
|
|
|
|
|
|
end endfunction |
|
|
uvm_create_on(SEQ_OR_ITEM, m_sequencer) |
|
|
begin uvm_object_wrapper w_; w_ = SEQ_OR_ITEM.get_type(); $cast(SEQ_OR_ITEM , create_item(w_, SEQR, `"SEQ_OR_ITEM`")); end |
|
|
|
|
SEQUENCER p_sequencer; virtual function void m_set_p_sequencer(); super.m_set_p_sequencer(); if( !$cast(p_sequencer, m_sequencer)) uvm_fatal("DCLPSQ", $sformatf("%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())) 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 uvm_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
|
|
|
9200s
|
|
|
#(TIME);
|
|
|
uvm_do_on_pri_with(SEQ_OR_ITEM, m_sequencer, -1, {}) |
|
|
uvm_do_obj_callbacks(T,CB,this,METHOD) |
|
|
|
|
begin uvm_callback_iter#(T,CB) iter = new(OBJ); CB cb = iter.first(); while(cb != null) begin uvm_cb_trace_noobj(cb,$sformatf(`"Executing callback method 'METHOD' for callback %s (CB) from %s (T)`",cb.get_name(), OBJ.get_full_name())) cb.METHOD; cb = iter.next(); end end |
|
|
begin uvm_callback_iter#(T,CB) iter = new(OBJ); CB cb = iter.first(); while(cb != null) begin if (cb.METHOD == VAL) begin uvm_cb_trace_noobj(cb,$sformatf(`"Executed callback method 'METHOD' for callback %s (CB) from %s (T) : returned value VAL (other callbacks will be ignored)`",cb.get_name(), OBJ.get_full_name())) return VAL; end uvm_cb_trace_noobj(cb,$sformatf(`"Executed callback method 'METHOD' for callback %s (CB) from %s (T) : did not return value VAL`",cb.get_name(), OBJ.get_full_name())) cb = iter.next(); end return 1-VAL; end |
|
|
uvm_do_on_pri_with(SEQ_OR_ITEM, SEQR, -1, {}) |
|
|
uvm_do_on_pri_with(SEQ_OR_ITEM, SEQR, PRIORITY, {}) |
|
|
begin uvm_sequence_base __seq; uvm_create_on(SEQ_OR_ITEM, SEQR) if (!$cast(__seq,SEQ_OR_ITEM)) start_item(SEQ_OR_ITEM, PRIORITY); if ((__seq == null || !__seq.do_not_randomize) && !SEQ_OR_ITEM.randomize() with CONSTRAINTS ) begin uvm_warning("RNDFLD", "Randomization failed in uvm_do_with action") end if (!$cast(__seq,SEQ_OR_ITEM)) finish_item(SEQ_OR_ITEM, PRIORITY); else __seq.start(SEQR, this, PRIORITY, 0); end |
|
|
uvm_do_on_pri_with(SEQ_OR_ITEM, SEQR, -1, CONSTRAINTS) |
|
|
uvm_do_on_pri_with(SEQ_OR_ITEM, m_sequencer, PRIORITY, {}) |
|
|
uvm_do_on_pri_with(SEQ_OR_ITEM, m_sequencer, PRIORITY, CONSTRAINTS) |
|
|
|
|
|
|
uvm_do_on_pri_with(SEQ_OR_ITEM, m_sequencer, -1, CONSTRAINTS) |
|
|
|
endpackage |
|
|
|
|
|
|
function new (string name, uvm_component parent, int min_size=1, int max_size=1); super.new (name, parent, UVM_EXPORT, min_size, max_size); m_if_mask = MASK; endfunction UVM_TLM_GET_TYPE_NAME(TYPE_NAME) |
|
|
|
|
|
|
uvm_field_aa_int_key(byte, ARG, FLAG) |
|
|
uvm_field_aa_int_key(byte unsigned, ARG, FLAG) |
|
|
begin if(what__==UVM_CHECK_FIELDS) __m_uvm_status_container.do_field_check(`"ARG`", this); M_UVM_FIELD_DATA_AA_enum_key(KEY,ARG,FLAG) M_UVM_FIELD_SET_AA_INT_ENUMTYPE(KEY, INT, ARG, __m_uvm_status_container.bitstream, FLAG) end |
|
|
|
|
uvm_field_aa_int_key(int unsigned, ARG, FLAG) |
|
|
uvm_field_aa_int_key(integer, ARG, FLAG) |
|
|
uvm_field_aa_int_key(integer unsigned, ARG, FLAG) |
|
|
begin if(what__==UVM_CHECK_FIELDS) __m_uvm_status_container.do_field_check(`"ARG`", this); M_UVM_FIELD_DATA_AA_int_key(KEY,ARG,FLAG) M_UVM_FIELD_SET_AA_INT_TYPE(KEY, INT, ARG, __m_uvm_status_container.bitstream, FLAG) end |
|
|
uvm_field_aa_int_key(longint, ARG, FLAG) |
|
|
uvm_field_aa_int_key(longint unsigned, ARG, FLAG) |
|
|
uvm_field_aa_int_key(shortint, ARG, FLAG) |
|
|
uvm_field_aa_int_key(shortint unsigned, ARG, FLAG) |
|
|
begin if(what__==UVM_CHECK_FIELDS) __m_uvm_status_container.do_field_check(`"ARG`", this); M_UVM_FIELD_DATA_AA_int_string(ARG,FLAG) M_UVM_FIELD_SET_AA_TYPE(string, INT, ARG, __m_uvm_status_container.bitstream, FLAG) end |
|
|
begin if(what__==UVM_CHECK_FIELDS) __m_uvm_status_container.do_field_check(`"ARG`", this); M_UVM_FIELD_DATA_AA_object_int(ARG,FLAG) M_UVM_FIELD_SET_AA_OBJECT_TYPE(int, ARG, FLAG) end |
|
|
begin if(what__==UVM_CHECK_FIELDS) __m_uvm_status_container.do_field_check(`"ARG`", this); M_UVM_FIELD_DATA_AA_object_string(ARG,FLAG) M_UVM_FIELD_SET_AA_OBJECT_TYPE(string, ARG, FLAG) end |
|
|
begin if(what__==UVM_CHECK_FIELDS) __m_uvm_status_container.do_field_check(`"ARG`", this); M_UVM_FIELD_DATA_AA_string_string(ARG,FLAG) M_UVM_FIELD_SET_AA_TYPE(string, STR, ARG, __m_uvm_status_container.stringv, FLAG) end |
|
|
M_FIELD_QDA_ENUM(ARRAY,T,ARG,FLAG) |
|
|
M_UVM_FIELD_QDA_INT(ARRAY,ARG,FLAG) |
|
|
M_UVM_FIELD_QDA_OBJECT(ARRAY,ARG,FLAG) |
|
|
M_UVM_FIELD_QDA_REAL(ARRAY,ARG,FLAG,da) |
|
|
M_UVM_FIELD_QDA_STRING(ARRAY,ARG,FLAG) |
|
|
begin case (what__) UVM_CHECK_FIELDS: __m_uvm_status_container.do_field_check(`"ARG`", this); UVM_COPY: begin if(local_data__ == null) return; if(!((FLAG)&UVM_NOCOPY)) ARG = local_data__.ARG; end UVM_COMPARE: begin if(local_data__ == null) return; if(!((FLAG)&UVM_NOCOMPARE)) begin if(ARG !== local_data__.ARG) begin __m_uvm_status_container.scope.set_arg(`"ARG`"); $swrite(__m_uvm_status_container.stringv, "lhs = %0s : rhs = %0s", ARG.name(), local_data__.ARG.name()); __m_uvm_status_container.comparer.print_msg(__m_uvm_status_container.stringv); if(__m_uvm_status_container.comparer.result && (__m_uvm_status_container.comparer.show_max <= __m_uvm_status_container.comparer.result)) return; end end end UVM_PACK: if(!((FLAG)&UVM_NOPACK)) begin __m_uvm_status_container.packer.pack_field(ARG, $bits(ARG)); end UVM_UNPACK: if(!((FLAG)&UVM_NOPACK)) begin ARG = T'(__m_uvm_status_container.packer.unpack_field_int($bits(ARG))); end UVM_RECORD: m_uvm_record_string(ARG, ARG.name(), FLAG) UVM_PRINT: if(!((FLAG)&UVM_NOPRINT)) begin __m_uvm_status_container.printer.print_generic(`"ARG`", `"T`", $bits(ARG), ARG.name()); end UVM_SETINT: begin __m_uvm_status_container.scope.set_arg(`"ARG`"); if(uvm_is_match(str__, __m_uvm_status_container.scope.get())) begin if((FLAG)&UVM_READONLY) begin uvm_report_warning("RDONLY", $sformatf("Readonly argument match %s is ignored", __m_uvm_status_container.get_full_scope_arg()), UVM_NONE); end else begin if (__m_uvm_status_container.print_matches) uvm_report_info("STRMTC", {"set_int()", ": Matched string ", str__, " to field ", __m_uvm_status_container.get_full_scope_arg()}, UVM_LOW); ARG = T'(uvm_object::__m_uvm_status_container.bitstream); __m_uvm_status_container.status = 1; end end end endcase end |
|
|
begin case (what__) UVM_COPY: begin if(local_data__ == null) return; if(!((FLAG)&UVM_NOCOPY)) ARG = local_data__.ARG; end UVM_COMPARE: begin if(local_data__ == null) return; if(!((FLAG)&UVM_NOCOMPARE)) begin if(ARG != local_data__.ARG) begin __m_uvm_status_container.scope.down(`"ARG`"); __m_uvm_status_container.comparer.print_msg(""); if(__m_uvm_status_container.comparer.result && (__m_uvm_status_container.comparer.show_max <= __m_uvm_status_container.comparer.result)) return; end end end UVM_PACK: if(!((FLAG)&UVM_NOPACK)) begin end UVM_UNPACK: if(!((FLAG)&UVM_NOPACK)) begin end UVM_RECORD: begin end UVM_PRINT: if(!((FLAG)&UVM_NOPRINT)) begin __m_uvm_status_container.printer.print_generic(`"ARG`", "event", -1, ""); end UVM_SETINT: begin end endcase end |
|
|
begin case (what__) UVM_CHECK_FIELDS: begin __m_uvm_status_container.do_field_check(`"ARG`", this); end UVM_COPY: begin if(local_data__ == null) return; if(!((FLAG)&UVM_NOCOPY)) ARG = local_data__.ARG; end UVM_COMPARE: begin if(local_data__ == null) return; if(!((FLAG)&UVM_NOCOMPARE)) begin if(ARG !== local_data__.ARG) begin void'(__m_uvm_status_container.comparer.compare_field(`"ARG`", ARG, local_data__.ARG, $bits(ARG))); if(__m_uvm_status_container.comparer.result && (__m_uvm_status_container.comparer.show_max <= __m_uvm_status_container.comparer.result)) return; end end end UVM_PACK: if(!((FLAG)&UVM_NOPACK)) begin if($bits(ARG) <= 64) __m_uvm_status_container.packer.pack_field_int(ARG, $bits(ARG)); else __m_uvm_status_container.packer.pack_field(ARG, $bits(ARG)); end UVM_UNPACK: if(!((FLAG)&UVM_NOPACK)) begin if($bits(ARG) <= 64) ARG = __m_uvm_status_container.packer.unpack_field_int($bits(ARG)); else ARG = __m_uvm_status_container.packer.unpack_field($bits(ARG)); end UVM_RECORD: m_uvm_record_int(ARG, FLAG) UVM_PRINT: if(!((FLAG)&UVM_NOPRINT)) begin __m_uvm_status_container.printer.print_int(`"ARG`", ARG, $bits(ARG), uvm_radix_enum'((FLAG)&UVM_RADIX)); end UVM_SETINT: begin bit matched; __m_uvm_status_container.scope.set_arg(`"ARG`"); matched = uvm_is_match(str__, __m_uvm_status_container.scope.get()); if(matched) begin if((FLAG)&UVM_READONLY) begin uvm_report_warning("RDONLY", $sformatf("Readonly argument match %s is ignored", __m_uvm_status_container.get_full_scope_arg()), UVM_NONE); end else begin if (__m_uvm_status_container.print_matches) uvm_report_info("STRMTC", {"set_int()", ": Matched string ", str__, " to field ", __m_uvm_status_container.get_full_scope_arg()}, UVM_LOW); ARG = uvm_object::__m_uvm_status_container.bitstream; uvm_object::__m_uvm_status_container.status = 1; end end __m_uvm_status_container.scope.unset_arg(`"ARG`"); end endcase end |
|
|
begin case (what__) UVM_CHECK_FIELDS: __m_uvm_status_container.do_field_check(`"ARG`", this); UVM_COPY: begin if(local_data__ == null) return; if(!((FLAG)&UVM_NOCOPY)) begin if((FLAG)&UVM_REFERENCE || local_data__.ARG == null) ARG = local_data__.ARG; else begin uvm_object l_obj; if(local_data__.ARG.get_name() == "") local_data__.ARG.set_name(`"ARG`"); l_obj = local_data__.ARG.clone(); if(l_obj == null) begin uvm_fatal("FAILCLN", $sformatf("Failure to clone %s.ARG, thus the variable will remain null.", local_data__.get_name())); end else begin $cast(ARG, l_obj); ARG.set_name(local_data__.ARG.get_name()); end end end end UVM_COMPARE: begin if(local_data__ == null) return; if(!((FLAG)&UVM_NOCOMPARE)) begin void'(__m_uvm_status_container.comparer.compare_object(`"ARG`", ARG, local_data__.ARG)); if(__m_uvm_status_container.comparer.result && (__m_uvm_status_container.comparer.show_max <= __m_uvm_status_container.comparer.result)) return; end end UVM_PACK: if(!((FLAG)&UVM_NOPACK)) begin if(((FLAG)&UVM_NOPACK) == 0 && ((FLAG)&UVM_REFERENCE) == 0) __m_uvm_status_container.packer.pack_object(ARG); end UVM_UNPACK: if(!((FLAG)&UVM_NOPACK)) begin if(((FLAG)&UVM_NOPACK) == 0 && ((FLAG)&UVM_REFERENCE) == 0) __m_uvm_status_container.packer.unpack_object(ARG); end UVM_RECORD: m_uvm_record_object(ARG,FLAG) UVM_PRINT: begin if(!((FLAG)&UVM_NOPRINT)) begin if(((FLAG)&UVM_REFERENCE) != 0) __m_uvm_status_container.printer.print_object_header(`"ARG`", ARG); else __m_uvm_status_container.printer.print_object(`"ARG`", ARG); end end UVM_SETINT: begin if((ARG != null) && (((FLAG)&UVM_READONLY)==0) && (((FLAG)&UVM_REFERENCE)==0)) begin __m_uvm_status_container.scope.down(`"ARG`"); ARG.__m_uvm_field_automation(null, UVM_SETINT, str__); __m_uvm_status_container.scope.up(); end end UVM_SETSTR: begin if((ARG != null) && (((FLAG)&UVM_READONLY)==0) && (((FLAG)&UVM_REFERENCE)==0)) begin __m_uvm_status_container.scope.down(`"ARG`"); ARG.__m_uvm_field_automation(null, UVM_SETSTR, str__); __m_uvm_status_container.scope.up(); end end UVM_SETOBJ: begin __m_uvm_status_container.scope.set_arg(`"ARG`"); if(uvm_is_match(str__, __m_uvm_status_container.scope.get())) begin if((FLAG)&UVM_READONLY) begin uvm_report_warning("RDONLY", $sformatf("Readonly argument match %s is ignored", __m_uvm_status_container.get_full_scope_arg()), UVM_NONE); end else begin if (__m_uvm_status_container.print_matches) uvm_report_info("STRMTC", {"set_object()", ": Matched string ", str__, " to field ", __m_uvm_status_container.get_full_scope_arg()}, UVM_LOW); if($cast(ARG,uvm_object::__m_uvm_status_container.object)) uvm_object::__m_uvm_status_container.status = 1; end end else if(ARG!=null && ((FLAG)&UVM_READONLY) == 0) begin int cnt; for(cnt=0; cnt end if(cnt!=str__.len()) begin __m_uvm_status_container.scope.down(`"ARG`"); ARG.__m_uvm_field_automation(null, UVM_SETOBJ, str__); __m_uvm_status_container.scope.up(); end end end endcase end |
|
|
M_FIELD_QDA_ENUM(QUEUE,T,ARG,FLAG) |
|
|
M_UVM_FIELD_QDA_INT(QUEUE,ARG,FLAG) |
|
|
M_UVM_FIELD_QDA_OBJECT(QUEUE,ARG,FLAG) |
|
|
M_UVM_FIELD_QDA_STRING(QUEUE,ARG,FLAG) |
|
|
begin case (what__) UVM_CHECK_FIELDS: __m_uvm_status_container.do_field_check(`"ARG`", this); UVM_COPY: begin if(local_data__ == null) return; if(!((FLAG)&UVM_NOCOPY)) ARG = local_data__.ARG; end UVM_COMPARE: begin if(local_data__ == null) return; if(!((FLAG)&UVM_NOCOMPARE)) begin if(ARG != local_data__.ARG) begin void'(__m_uvm_status_container.comparer.compare_field_real(`"ARG`", ARG, local_data__.ARG)); if(__m_uvm_status_container.comparer.result && (__m_uvm_status_container.comparer.show_max <= __m_uvm_status_container.comparer.result)) return; end end end UVM_PACK: if(!((FLAG)&UVM_NOPACK)) begin __m_uvm_status_container.packer.pack_field_int($realtobits(ARG), 64); end UVM_UNPACK: if(!((FLAG)&UVM_NOPACK)) begin ARG = $bitstoreal(__m_uvm_status_container.packer.unpack_field_int(64)); end UVM_RECORD: if(!((FLAG)&UVM_NORECORD)) begin __m_uvm_status_container.recorder.record_field_real(`"ARG`", ARG); end UVM_PRINT: if(!((FLAG)&UVM_NOPRINT)) begin __m_uvm_status_container.printer.print_real(`"ARG`", ARG); end UVM_SETINT: begin __m_uvm_status_container.scope.set_arg(`"ARG`"); if(uvm_is_match(str__, __m_uvm_status_container.scope.get())) begin if((FLAG)&UVM_READONLY) begin uvm_report_warning("RDONLY", $sformatf("Readonly argument match %s is ignored", __m_uvm_status_container.get_full_scope_arg()), UVM_NONE); end else begin if (__m_uvm_status_container.print_matches) uvm_report_info("STRMTC", {"set_int()", ": Matched string ", str__, " to field ", __m_uvm_status_container.get_full_scope_arg()}, UVM_LOW); ARG = $bitstoreal(uvm_object::__m_uvm_status_container.bitstream); __m_uvm_status_container.status = 1; end end end endcase end |
|
|
begin case (what__) UVM_CHECK_FIELDS: __m_uvm_status_container.do_field_check(`"ARG`", this); UVM_COPY: begin if(local_data__ == null) return; if(!((FLAG)&UVM_NOCOPY)) ARG = local_data__.ARG; end UVM_COMPARE: begin if(local_data__ == null) return; if(!((FLAG)&UVM_NOCOMPARE)) begin if(ARG !== local_data__.ARG) begin if(__m_uvm_status_container.comparer.show_max == 1) begin __m_uvm_status_container.scope.set_arg(`"ARG`"); __m_uvm_status_container.comparer.print_msg(""); end else if(__m_uvm_status_container.comparer.show_max) begin foreach(ARG[i]) begin if(ARG[i] !== local_data__.ARG[i]) begin __m_uvm_status_container.scope.set_arg_element(`"ARG`",i); $swrite(__m_uvm_status_container.stringv, "lhs = %0s : rhs = %0s", ARG[i].name(), local_data__.ARG[i].name()); __m_uvm_status_container.comparer.print_msg(__m_uvm_status_container.stringv); if(__m_uvm_status_container.comparer.result && (__m_uvm_status_container.comparer.show_max <= __m_uvm_status_container.comparer.result)) return; end end end else if ((__m_uvm_status_container.comparer.physical&&((FLAG)&UVM_PHYSICAL)) || (__m_uvm_status_container.comparer.abstract&&((FLAG)&UVM_ABSTRACT)) || (!((FLAG)&UVM_PHYSICAL) && !((FLAG)&UVM_ABSTRACT)) ) __m_uvm_status_container.comparer.result++; if(__m_uvm_status_container.comparer.result && (__m_uvm_status_container.comparer.show_max <= __m_uvm_status_container.comparer.result)) return; end end end UVM_PACK: if(!((FLAG)&UVM_NOPACK)) begin foreach(ARG[i]) __m_uvm_status_container.packer.pack_field_int(int'(ARG[i]), $bits(ARG[i])); end UVM_UNPACK: if(!((FLAG)&UVM_NOPACK)) begin foreach(ARG[i]) ARG[i] = T'(__m_uvm_status_container.packer.unpack_field_int($bits(ARG[i]))); end UVM_RECORD: m_uvm_record_qda_enum(ARG, FLAG, $size(ARG)) UVM_PRINT: begin if(((FLAG)&UVM_NOPRINT) == 0) begin uvm_print_qda_enum(ARG, __m_uvm_status_container.printer, array, T) end end UVM_SETINT: begin __m_uvm_status_container.scope.set_arg(`"ARG`"); if(uvm_is_match(str__, __m_uvm_status_container.scope.get())) begin if((FLAG)&UVM_READONLY) begin uvm_report_warning("RDONLY", $sformatf("Readonly argument match %s is ignored", __m_uvm_status_container.get_full_scope_arg()), UVM_NONE); end else begin uvm_report_warning("RDONLY", $sformatf("%s: static arrays cannot be resized via configuraton.", __m_uvm_status_container.get_full_scope_arg()), UVM_NONE); end end else if(!((FLAG)&UVM_READONLY)) begin foreach(ARG[i]) begin __m_uvm_status_container.scope.set_arg_element(`"ARG`",i); if(uvm_is_match(str__, __m_uvm_status_container.scope.get())) begin if (__m_uvm_status_container.print_matches) uvm_report_info("STRMTC", {"set_int()", ": Matched string ", str__, " to field ", __m_uvm_status_container.get_full_scope_arg()}, UVM_LOW); ARG[i] = T'(uvm_object::__m_uvm_status_container.bitstream); __m_uvm_status_container.status = 1; end end end end endcase end |
|
|
begin case (what__) UVM_CHECK_FIELDS: __m_uvm_status_container.do_field_check(`"ARG`", this); UVM_COPY: begin if(local_data__ == null) return; if(!((FLAG)&UVM_NOCOPY)) ARG = local_data__.ARG; end UVM_COMPARE: begin if(local_data__ == null) return; if(!((FLAG)&UVM_NOCOMPARE)) begin if(ARG !== local_data__.ARG) begin if(__m_uvm_status_container.comparer.show_max == 1) begin __m_uvm_status_container.scope.set_arg(`"ARG`"); __m_uvm_status_container.comparer.print_msg(""); end else if(__m_uvm_status_container.comparer.show_max) begin foreach(ARG[i]) begin if(ARG[i] !== local_data__.ARG[i]) begin __m_uvm_status_container.scope.set_arg_element(`"ARG`",i); void'(__m_uvm_status_container.comparer.compare_field("", ARG[i], local_data__.ARG[i], $bits(ARG[i]))); end end end else if ((__m_uvm_status_container.comparer.physical&&((FLAG)&UVM_PHYSICAL)) || (__m_uvm_status_container.comparer.abstract&&((FLAG)&UVM_ABSTRACT)) || (!((FLAG)&UVM_PHYSICAL) && !((FLAG)&UVM_ABSTRACT)) ) __m_uvm_status_container.comparer.result++; if(__m_uvm_status_container.comparer.result && (__m_uvm_status_container.comparer.show_max <= __m_uvm_status_container.comparer.result)) return; end end end UVM_PACK: if(!((FLAG)&UVM_NOPACK)) begin foreach(ARG[i]) if($bits(ARG[i]) <= 64) __m_uvm_status_container.packer.pack_field_int(ARG[i], $bits(ARG[i])); else __m_uvm_status_container.packer.pack_field(ARG[i], $bits(ARG[i])); end UVM_UNPACK: if(!((FLAG)&UVM_NOPACK)) begin foreach(ARG[i]) if($bits(ARG[i]) <= 64) ARG[i] = __m_uvm_status_container.packer.unpack_field_int($bits(ARG[i])); else ARG[i] = __m_uvm_status_container.packer.unpack_field($bits(ARG[i])); end UVM_RECORD: m_uvm_record_qda_int(ARG, FLAG, $size(ARG)) UVM_PRINT: if(!((FLAG)&UVM_NOPRINT)) begin if(((FLAG)&UVM_NOPRINT) == 0) begin uvm_print_sarray_int3(ARG, uvm_radix_enum'((FLAG)&(UVM_RADIX)), __m_uvm_status_container.printer) end end UVM_SETINT: begin __m_uvm_status_container.scope.set_arg(`"ARG`"); if(uvm_is_match(str__, __m_uvm_status_container.scope.get())) begin if((FLAG)&UVM_READONLY) begin uvm_report_warning("RDONLY", $sformatf("Readonly argument match %s is ignored", __m_uvm_status_container.get_full_scope_arg()), UVM_NONE); end else begin uvm_report_warning("RDONLY", $sformatf("%s: static arrays cannot be resized via configuraton.", __m_uvm_status_container.get_full_scope_arg()), UVM_NONE); end end else if(!((FLAG)&UVM_READONLY)) begin foreach(ARG[i]) begin __m_uvm_status_container.scope.set_arg_element(`"ARG`",i); if(uvm_is_match(str__, __m_uvm_status_container.scope.get())) begin if (__m_uvm_status_container.print_matches) uvm_report_info("STRMTC", {"set_int()", ": Matched string ", str__, " to field ", __m_uvm_status_container.get_full_scope_arg()}, UVM_LOW); ARG[i] = uvm_object::__m_uvm_status_container.bitstream; __m_uvm_status_container.status = 1; end end end end endcase end |
|
|
begin case (what__) UVM_CHECK_FIELDS: __m_uvm_status_container.do_field_check(`"ARG`", this); UVM_COPY: begin if(local_data__ == null) return; if(!((FLAG)&UVM_NOCOPY)) begin if(((FLAG)&UVM_REFERENCE)) ARG = local_data__.ARG; else foreach(ARG[i]) begin if(ARG[i] != null && local_data__.ARG[i] != null) ARG[i].copy(local_data__.ARG[i]); else if(ARG[i] == null && local_data__.ARG[i] != null) $cast(ARG[i], local_data__.ARG[i].clone()); else ARG[i] = null; end end end UVM_COMPARE: begin if(local_data__ == null) return; if(!((FLAG)&UVM_NOCOMPARE)) begin if(((FLAG)&UVM_REFERENCE) && (__m_uvm_status_container.comparer.show_max <= 1) && (ARG !== local_data__.ARG) ) begin if(__m_uvm_status_container.comparer.show_max == 1) begin __m_uvm_status_container.scope.set_arg(`"ARG`"); __m_uvm_status_container.comparer.print_msg(""); end else if ((__m_uvm_status_container.comparer.physical&&((FLAG)&UVM_PHYSICAL)) || (__m_uvm_status_container.comparer.abstract&&((FLAG)&UVM_ABSTRACT)) || (!((FLAG)&UVM_PHYSICAL) && !((FLAG)&UVM_ABSTRACT)) ) __m_uvm_status_container.comparer.result++; if(__m_uvm_status_container.comparer.result && (__m_uvm_status_container.comparer.show_max <= __m_uvm_status_container.comparer.result)) return; end else begin string s; foreach(ARG[i]) begin if(ARG[i] != null && local_data__.ARG[i] != null) begin $swrite(s,`"ARG[%0d]`",i); void'(__m_uvm_status_container.comparer.compare_object(s, ARG[i], local_data__.ARG[i])); end if(__m_uvm_status_container.comparer.result && (__m_uvm_status_container.comparer.show_max <= __m_uvm_status_container.comparer.result)) return; end end end end UVM_PACK: if(!((FLAG)&UVM_NOPACK)) begin foreach(ARG[i]) __m_uvm_status_container.packer.pack_object(ARG[i]); end UVM_UNPACK: if(!((FLAG)&UVM_NOPACK)) begin foreach(ARG[i]) __m_uvm_status_container.packer.unpack_object(ARG[i]); end UVM_RECORD: m_uvm_record_qda_object(ARG,FLAG,$size(ARG)) UVM_PRINT: begin if(((FLAG)&UVM_NOPRINT) == 0) begin uvm_print_sarray_object3(ARG, __m_uvm_status_container.printer, FLAG) end end UVM_SETINT: begin string s; if(!((FLAG)&UVM_READONLY)) begin foreach(ARG[i]) begin $swrite(s,`"ARG[%0d]`",i); __m_uvm_status_container.scope.set_arg(s); if(uvm_is_match(str__, __m_uvm_status_container.scope.get())) begin if (__m_uvm_status_container.print_matches) uvm_report_info("STRMTC", {"set_object()", ": Matched string ", str__, " to field ", __m_uvm_status_container.get_full_scope_arg()}, UVM_LOW); if($cast(ARG[i],uvm_object::__m_uvm_status_container.object)) uvm_object::__m_uvm_status_container.status = 1; end else if(ARG[i]!=null && !((FLAG)&UVM_REFERENCE)) begin int cnt; for(cnt=0; cnt end if(cnt!=str__.len()) begin __m_uvm_status_container.scope.down(s); ARG[i].__m_uvm_field_automation(null, UVM_SETINT, str__); __m_uvm_status_container.scope.up(); end end end end end UVM_SETSTR: begin string s; if(!((FLAG)&UVM_READONLY)) begin foreach(ARG[i]) begin $swrite(s,`"ARG[%0d]`",i); __m_uvm_status_container.scope.set_arg(s); if(uvm_is_match(str__, __m_uvm_status_container.scope.get())) begin if (__m_uvm_status_container.print_matches) uvm_report_info("STRMTC", {"set_object()", ": Matched string ", str__, " to field ", __m_uvm_status_container.get_full_scope_arg()}, UVM_LOW); if($cast(ARG[i],uvm_object::__m_uvm_status_container.object)) uvm_object::__m_uvm_status_container.status = 1; end else if(ARG[i]!=null && !((FLAG)&UVM_REFERENCE)) begin int cnt; for(cnt=0; cnt end if(cnt!=str__.len()) begin __m_uvm_status_container.scope.down(s); ARG[i].__m_uvm_field_automation(null, UVM_SETSTR, str__); __m_uvm_status_container.scope.up(); end end end end end UVM_SETOBJ: begin string s; if(!((FLAG)&UVM_READONLY)) begin foreach(ARG[i]) begin $swrite(s,`"ARG[%0d]`",i); __m_uvm_status_container.scope.set_arg(s); if(uvm_is_match(str__, __m_uvm_status_container.scope.get())) begin if (__m_uvm_status_container.print_matches) uvm_report_info("STRMTC", {"set_object()", ": Matched string ", str__, " to field ", __m_uvm_status_container.get_full_scope_arg()}, UVM_LOW); if($cast(ARG[i],uvm_object::__m_uvm_status_container.object)) uvm_object::__m_uvm_status_container.status = 1; end else if(ARG[i]!=null && !((FLAG)&UVM_REFERENCE)) begin int cnt; for(cnt=0; cnt end if(cnt!=str__.len()) begin __m_uvm_status_container.scope.down(s); ARG[i].__m_uvm_field_automation(null, UVM_SETOBJ, str__); __m_uvm_status_container.scope.up(); end end end end end endcase end |
|
|
begin case (what__) UVM_CHECK_FIELDS: __m_uvm_status_container.do_field_check(`"ARG`", this); UVM_COPY: begin if (local_data__ == null) return; if(!((FLAG)&UVM_NOCOPY)) ARG = local_data__.ARG; end UVM_COMPARE: begin if (local_data__ == null) return; if(!((FLAG)&UVM_NOCOMPARE)) begin if(ARG != local_data__.ARG) begin if(__m_uvm_status_container.comparer.show_max == 1) begin __m_uvm_status_container.scope.set_arg(`"ARG`"); __m_uvm_status_container.comparer.print_msg(""); end else if(__m_uvm_status_container.comparer.show_max) begin foreach(ARG[i]) begin if(ARG[i] != local_data__.ARG[i]) begin __m_uvm_status_container.scope.set_arg_element(`"ARG`",i); void'(__m_uvm_status_container.comparer.compare_field_real(`"ARG`", ARG[i], local_data__.ARG[i])); end end end else if ((__m_uvm_status_container.comparer.physical&&((FLAG)&UVM_PHYSICAL)) || (__m_uvm_status_container.comparer.abstract&&((FLAG)&UVM_ABSTRACT)) || (!((FLAG)&UVM_PHYSICAL) && !((FLAG)&UVM_ABSTRACT)) ) __m_uvm_status_container.comparer.result++; if(__m_uvm_status_container.comparer.result && (__m_uvm_status_container.comparer.show_max <= __m_uvm_status_container.comparer.result)) return; end end end UVM_PACK: if(!((FLAG)&UVM_NOPACK)) begin foreach(ARG[i]) begin __m_uvm_status_container.packer.pack_field_int($realtobits(ARG[i]), 64); end end UVM_UNPACK: if(!((FLAG)&UVM_NOPACK)) begin foreach(ARG[i]) begin ARG[i] = $bitstoreal(__m_uvm_status_container.packer.unpack_field_int(64)); end end UVM_RECORD: m_uvm_record_qda_real(ARG, FLAG, $size(ARG)) UVM_PRINT: if(!((FLAG)&UVM_NOPRINT)) begin if(((FLAG)&UVM_NOPRINT) == 0) begin uvm_print_qda_real3(ARG, __m_uvm_status_container.printer, T) end end UVM_SETINT: begin __m_uvm_status_container.scope.set_arg(`"ARG`"); if(uvm_is_match(str__, __m_uvm_status_container.scope.get())) begin if((FLAG)&UVM_READONLY) begin uvm_report_warning("RDONLY", $sformatf("Readonly argument match %s is ignored", __m_uvm_status_container.get_full_scope_arg()), UVM_NONE); end else begin uvm_report_warning("RDONLY", $sformatf("%s: static arrays cannot be resized via configuraton.", __m_uvm_status_container.get_full_scope_arg()), UVM_NONE); end end else if(!((FLAG)&UVM_READONLY)) begin foreach(ARG[i]) begin __m_uvm_status_container.scope.set_arg_element(`"ARG`",i); if(uvm_is_match(str__, __m_uvm_status_container.scope.get())) begin if (__m_uvm_status_container.print_matches) uvm_report_info("STRMTC", {"set_int()", ": Matched string ", str__, " to field ", __m_uvm_status_container.get_full_scope_arg()}, UVM_LOW); ARG[i] = uvm_object::__m_uvm_status_container.bitstream; __m_uvm_status_container.status = 1; end end end end endcase end |
|
|
begin case (what__) UVM_CHECK_FIELDS: __m_uvm_status_container.do_field_check(`"ARG`", this); UVM_COPY: begin if(local_data__ == null) return; if(!((FLAG)&UVM_NOCOPY)) ARG = local_data__.ARG; end UVM_COMPARE: begin if(local_data__ == null) return; if(!((FLAG)&UVM_NOCOMPARE)) begin if(ARG != local_data__.ARG) begin if(__m_uvm_status_container.comparer.show_max == 1) begin __m_uvm_status_container.scope.set_arg(`"ARG`"); __m_uvm_status_container.comparer.print_msg(""); end else if(__m_uvm_status_container.comparer.show_max) begin foreach(ARG[i]) begin if(ARG[i] != local_data__.ARG[i]) begin __m_uvm_status_container.scope.set_arg_element(`"ARG`",i); void'(__m_uvm_status_container.comparer.compare_string("", ARG[i], local_data__.ARG[i])); end end end else if ((__m_uvm_status_container.comparer.physical&&((FLAG)&UVM_PHYSICAL)) || (__m_uvm_status_container.comparer.abstract&&((FLAG)&UVM_ABSTRACT)) || (!((FLAG)&UVM_PHYSICAL) && !((FLAG)&UVM_ABSTRACT)) ) __m_uvm_status_container.comparer.result++; if(__m_uvm_status_container.comparer.result && (__m_uvm_status_container.comparer.show_max <= __m_uvm_status_container.comparer.result)) return; end end end UVM_PACK: if(!((FLAG)&UVM_NOPACK)) begin foreach(ARG[i]) __m_uvm_status_container.packer.pack_string(ARG[i]); end UVM_UNPACK: if(!((FLAG)&UVM_NOPACK)) begin foreach(ARG[i]) ARG[i] = __m_uvm_status_container.packer.unpack_string(); end UVM_RECORD: begin /* Issue with $size for sarray with strings */ int sz; foreach(ARG[i]) sz=i; m_uvm_record_qda_string(ARG, FLAG, sz) end UVM_PRINT: begin if(((FLAG)&UVM_NOPRINT) == 0) begin uvm_print_sarray_string2(ARG, __m_uvm_status_container.printer) end end UVM_SETSTR: begin __m_uvm_status_container.scope.set_arg(`"ARG`"); if(uvm_is_match(str__, __m_uvm_status_container.scope.get())) begin if((FLAG)&UVM_READONLY) begin uvm_report_warning("RDONLY", $sformatf("Readonly argument match %s is ignored", __m_uvm_status_container.get_full_scope_arg()), UVM_NONE); end else begin uvm_report_warning("RDONLY", {__m_uvm_status_container.get_full_scope_arg(), ": static arrays cannot be resized via configuraton."}, UVM_NONE); end end else if(!((FLAG)&UVM_READONLY)) begin foreach(ARG[i]) begin __m_uvm_status_container.scope.set_arg_element(`"ARG`",i); if(uvm_is_match(str__, __m_uvm_status_container.scope.get())) begin if (__m_uvm_status_container.print_matches) uvm_report_info("STRMTC", {"set_int()", ": Matched string ", str__, " to field ", __m_uvm_status_container.get_full_scope_arg()}, UVM_LOW); ARG[i] = uvm_object::__m_uvm_status_container.stringv; __m_uvm_status_container.status = 1; end end end end endcase end |
|
|
begin case (what__) UVM_CHECK_FIELDS: __m_uvm_status_container.do_field_check(`"ARG`", this); UVM_COPY: begin if(local_data__ == null) return; if(!((FLAG)&UVM_NOCOPY)) ARG = local_data__.ARG; end UVM_COMPARE: begin if(local_data__ == null) return; if(!((FLAG)&UVM_NOCOMPARE)) begin if(ARG != local_data__.ARG) begin void'(__m_uvm_status_container.comparer.compare_string(`"ARG`", ARG, local_data__.ARG)); if(__m_uvm_status_container.comparer.result && (__m_uvm_status_container.comparer.show_max <= __m_uvm_status_container.comparer.result)) return; end end end UVM_PACK: if(!((FLAG)&UVM_NOPACK)) begin __m_uvm_status_container.packer.pack_string(ARG); end UVM_UNPACK: if(!((FLAG)&UVM_NOPACK)) begin ARG = __m_uvm_status_container.packer.unpack_string(); end UVM_RECORD: m_uvm_record_string(ARG, ARG, FLAG) UVM_PRINT: if(!((FLAG)&UVM_NOPRINT)) begin __m_uvm_status_container.printer.print_string(`"ARG`", ARG); end UVM_SETSTR: begin __m_uvm_status_container.scope.set_arg(`"ARG`"); if(uvm_is_match(str__, __m_uvm_status_container.scope.get())) begin if((FLAG)&UVM_READONLY) begin uvm_report_warning("RDONLY", $sformatf("Readonly argument match %s is ignored", __m_uvm_status_container.get_full_scope_arg()), UVM_NONE); end else begin if (__m_uvm_status_container.print_matches) uvm_report_info("STRMTC", {"set_str()", ": Matched string ", str__, " to field ", __m_uvm_status_container.get_full_scope_arg()}, UVM_LOW); ARG = uvm_object::__m_uvm_status_container.stringv; __m_uvm_status_container.status = 1; end end end endcase end |
|
|
function void __m_uvm_field_automation (uvm_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 */ uvm_object __current_scopes[$]; if(what__ inside {UVM_SETINT,UVM_SETSTR,UVM_SETOBJ}) begin if(__m_uvm_status_container.m_do_cycle_check(this)) begin return; end else __current_scopes=__m_uvm_status_container.m_uvm_cycle_scopes; end super.__m_uvm_field_automation(tmp_data__, what__, str__); /* Type is verified by uvm_object::compare() */ if(tmp_data__ != null) /* Allow objects in same hierarchy to be copied/compared */ if(!$cast(local_data__, tmp_data__)) return; |
|
|
if(what__ inside {UVM_SETINT,UVM_SETSTR,UVM_SETOBJ}) begin void'(__current_scopes.pop_back()); __m_uvm_status_container.m_uvm_cycle_scopes = __current_scopes; end end endfunction |
|
|
`__FILE__
|
|
|
d
|
|
|
|
|
"TLM interface function not implemented"
|
|
|
|
|
class uvm_get_imp``SFX #(type T=int, type IMP=int) extends uvm_port_base #(uvm_tlm_if_base #(T,T)); UVM_IMP_COMMON(UVM_TLM_GET_MASK,`"uvm_get_imp``SFX`",IMP) UVM_BLOCKING_GET_IMP_SFX(SFX, m_imp, T, t) UVM_NONBLOCKING_GET_IMP_SFX(SFX, m_imp, T, t) endclass |
|
|
|
|
class uvm_get_peek_imp``SFX #(type T=int, type IMP=int) extends uvm_port_base #(uvm_tlm_if_base #(T,T)); UVM_IMP_COMMON(UVM_TLM_GET_PEEK_MASK,`"uvm_get_peek_imp``SFX`",IMP) UVM_BLOCKING_GET_IMP_SFX(SFX, m_imp, T, t) UVM_NONBLOCKING_GET_IMP_SFX(SFX, m_imp, T, t) UVM_BLOCKING_PEEK_IMP_SFX(SFX, m_imp, T, t) UVM_NONBLOCKING_PEEK_IMP_SFX(SFX, m_imp, T, t) endclass |
|
|
|
1024
|
|
|
|
local IMP m_imp; function new (string name, IMP imp); super.new (name, imp, UVM_IMPLEMENTATION, 1, 1); m_imp = imp; m_if_mask = MASK; endfunction UVM_TLM_GET_TYPE_NAME(TYPE_NAME) |
|
|
|
|
|
|
`__LINE__
|
|
|
120
|
|
|
|
1
|
|
|
|
|
class uvm_master_imp``SFX #(type REQ=int, type RSP=int, type IMP=int, type REQ_IMP=IMP, type RSP_IMP=IMP) extends uvm_port_base #(uvm_tlm_if_base #(REQ, RSP)); typedef IMP this_imp_type; typedef REQ_IMP this_req_type; typedef RSP_IMP this_rsp_type; UVM_MS_IMP_COMMON(UVM_TLM_MASTER_MASK,`"uvm_master_imp``SFX`") UVM_BLOCKING_PUT_IMP_SFX(SFX, m_req_imp, REQ, t) UVM_NONBLOCKING_PUT_IMP_SFX(SFX, m_req_imp, REQ, t) UVM_BLOCKING_GET_IMP_SFX(SFX, m_rsp_imp, RSP, t) UVM_BLOCKING_PEEK_IMP_SFX(SFX, m_rsp_imp, RSP, t) UVM_NONBLOCKING_GET_IMP_SFX(SFX, m_rsp_imp, RSP, t) UVM_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, UVM_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 UVM_TLM_GET_TYPE_NAME(TYPE_NAME) |
|
|
UVM
|
|
|
function new (string name, uvm_component parent); super.new(name, parent); endfunction |
|
|
|
|
function bit try_get (output TYPE arg); return imp.try_get(arg); endfunction function bit can_get(); return imp.can_get(); endfunction |
|
|
class uvm_nonblocking_get_imp``SFX #(type T=int, type IMP=int) extends uvm_port_base #(uvm_tlm_if_base #(T,T)); UVM_IMP_COMMON(UVM_TLM_NONBLOCKING_GET_MASK,`"uvm_nonblocking_get_imp``SFX`",IMP) UVM_NONBLOCKING_GET_IMP_SFX(SFX, m_imp, T, t) endclass |
|
|
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 |
|
|
|
|
class uvm_nonblocking_get_peek_imp``SFX #(type T=int, type IMP=int) extends uvm_port_base #(uvm_tlm_if_base #(T,T)); UVM_IMP_COMMON(UVM_TLM_NONBLOCKING_GET_PEEK_MASK,`"uvm_nonblocking_get_peek_imp``SFX`",IMP) UVM_NONBLOCKING_GET_IMP_SFX(SFX, m_imp, T, t) UVM_NONBLOCKING_PEEK_IMP_SFX(SFX, m_imp, T, t) endclass |
|
|
class uvm_nonblocking_master_imp``SFX #(type REQ=int, type RSP=int, type IMP=int, type REQ_IMP=IMP, type RSP_IMP=IMP) extends uvm_port_base #(uvm_tlm_if_base #(REQ, RSP)); typedef IMP this_imp_type; typedef REQ_IMP this_req_type; typedef RSP_IMP this_rsp_type; UVM_MS_IMP_COMMON(UVM_TLM_NONBLOCKING_MASTER_MASK,`"uvm_nonblocking_master_imp``SFX`") UVM_NONBLOCKING_PUT_IMP_SFX(SFX, m_req_imp, REQ, t) UVM_NONBLOCKING_GET_IMP_SFX(SFX, m_rsp_imp, RSP, t) UVM_NONBLOCKING_PEEK_IMP_SFX(SFX, m_rsp_imp, RSP, t) endclass |
|
|
function bit try_peek (output TYPE arg); return imp.try_peek(arg); endfunction function bit can_peek(); return imp.can_peek(); endfunction |
|
|
class uvm_nonblocking_peek_imp``SFX #(type T=int, type IMP=int) extends uvm_port_base #(uvm_tlm_if_base #(T,T)); UVM_IMP_COMMON(UVM_TLM_NONBLOCKING_PEEK_MASK,`"uvm_nonblocking_peek_imp``SFX`",IMP) UVM_NONBLOCKING_PEEK_IMP_SFX(SFX, m_imp, T, t) endclass |
|
|
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 |
|
|
class uvm_nonblocking_put_imp``SFX #(type T=int, type IMP=int) extends uvm_port_base #(uvm_tlm_if_base #(T,T)); UVM_IMP_COMMON(UVM_TLM_NONBLOCKING_PUT_MASK,`"uvm_nonblocking_put_imp``SFX`",IMP) UVM_NONBLOCKING_PUT_IMP_SFX( SFX, m_imp, T, t) endclass |
|
|
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 |
|
|
class uvm_nonblocking_slave_imp``SFX #(type REQ=int, type RSP=int, type IMP=int, type REQ_IMP=IMP, type RSP_IMP=IMP) extends uvm_port_base #(uvm_tlm_if_base #(RSP, REQ)); typedef IMP this_imp_type; typedef REQ_IMP this_req_type; typedef RSP_IMP this_rsp_type; UVM_MS_IMP_COMMON(UVM_TLM_NONBLOCKING_SLAVE_MASK,`"uvm_nonblocking_slave_imp``SFX`") UVM_NONBLOCKING_PUT_IMP_SFX(SFX, m_rsp_imp, RSP, t) UVM_NONBLOCKING_GET_IMP_SFX(SFX, m_req_imp, REQ, t) UVM_NONBLOCKING_PEEK_IMP_SFX(SFX, m_req_imp, REQ, t) endclass |
|
|
function bit nb_transport (REQ req_arg, output RSP rsp_arg); return imp.nb_transport(req_arg, rsp_arg); endfunction |
|
|
class uvm_nonblocking_transport_imp``SFX #(type REQ=int, type RSP=int, type IMP=int) extends uvm_port_base #(uvm_tlm_if_base #(REQ, RSP)); UVM_IMP_COMMON(UVM_TLM_NONBLOCKING_TRANSPORT_MASK,`"uvm_nonblocking_transport_imp``SFX`",IMP) UVM_NONBLOCKING_TRANSPORT_IMP_SFX(SFX, m_imp, REQ, RSP, req, rsp) endclass |
|
|
function bit nb_transport( input REQ req_arg, output RSP rsp_arg); if(imp) return imp.nb_transport``SFX(req_arg, rsp_arg); endfunction |
|
|
120
|
|
|
|
|
|
|
|
typedef uvm_object_registry#(T,S) type_id; static function type_id get_type(); return type_id::get(); endfunction virtual function uvm_object_wrapper get_object_type(); return type_id::get(); endfunction |
|
|
|
|
|
|
end endfunction |
|
|
|
uvm_pack_arrayN(VAR,$bits(VAR[0])) |
|
|
|
|
uvm_pack_enumN(VAR,$bits(VAR)) |
|
|
uvm_pack_intN(VAR,SIZE) |
|
|
uvm_pack_intN(VAR,$bits(VAR)) |
|
|
begin if (packer.big_endian) begin longint tmp__ = VAR; for (int i=0; i<SIZE; i++) packer.m_bits[packer.count + i] = tmp__[SIZE-1-i]; end else begin packer.m_bits[packer.count +: SIZE] = VAR; end packer.count += SIZE; end |
|
|
uvm_pack_queueN(VAR,$bits(VAR[0])) |
|
|
uvm_pack_arrayN(VAR,SIZE) |
|
|
uvm_pack_intN($realtobits(VAR),64) |
|
|
uvm_pack_sarrayN(VAR,$bits(VAR[0])) |
|
|
|
|
|
|
package PKG; class uvm_bogus_class extends uvm::uvm_sequence; endclass |
|
|
UVM_STREAMBITS
|
|
|
|
|
class uvm_peek_imp``SFX #(type T=int, type IMP=int) extends uvm_port_base #(uvm_tlm_if_base #(T,T)); UVM_IMP_COMMON(UVM_TLM_PEEK_MASK,`"uvm_peek_imp``SFX`",IMP) UVM_BLOCKING_PEEK_IMP_SFX(SFX, m_imp, T, t) UVM_NONBLOCKING_PEEK_IMP_SFX(SFX, m_imp, T, t) endclass |
|
|
|
|
|
|
function new (string name, uvm_component parent, int min_size=1, int max_size=1); super.new (name, parent, UVM_PORT, min_size, max_size); m_if_mask = MASK; endfunction UVM_TLM_GET_TYPE_NAME(TYPE_NAME) |
|
|
begin uvm_printer p__; uvm_printer_knobs k__; if(P!=null) p__ = P; else p__ = uvm_default_printer; __m_uvm_status_container.stringv = "aa(int,int)"; for(int i=0; i<__m_uvm_status_container.stringv.len(); ++i) if(__m_uvm_status_container.stringv[i] == " ") __m_uvm_status_container.stringv[i] = "_"; p__.print_array_header (`"F`", F.num(), __m_uvm_status_container.stringv); k__ = p__.knobs; if((p__.knobs.depth == -1) || (p__.m_scope.depth() < p__.knobs.depth+1)) begin foreach(F[aa_key]) begin uvm_print_int4(F[aa_key], R, {"[", $sformatf("%0d",aa_key), "]"}, p__) end end p__.print_array_footer(F.num()); end |
|
|
`uvm_print_aa_int_object_3(F, uvm_default_printer,FLAG) |
|
|
begin uvm_printer p__; uvm_printer_knobs k__; uvm_object u__; int key; if(P!=null) p__ = P; else p__ = uvm_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_uvm_status_container.stringv, "[%0d]", key); if(((FLAG)&UVM_REFERENCE)==0) p__.print_object(__m_uvm_status_container.stringv, F[key], "["); else p__.print_object_header(__m_uvm_status_container.stringv, F[key], "["); end end p__.print_array_footer(F.num()); end |
|
|
uvm_print_aa_string_int3(F, R, uvm_default_printer) |
|
|
begin uvm_printer p__; uvm_printer_knobs k__; if(P!=null) p__ = P; else p__ = uvm_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]) uvm_print_int4(F[string_aa_key], R, {"[", string_aa_key, "]"}, p__) end p__.print_array_footer(F.num()); end |
|
|
`uvm_print_aa_string_object_3(F, uvm_default_printer,FLAG) |
|
|
begin uvm_printer p__; uvm_printer_knobs k__; uvm_object u__; if(P!=null) p__ = P; else p__ = uvm_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)&UVM_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()); end |
|
|
`uvm_print_aa_string_string_2(F, uvm_default_printer) |
|
|
begin uvm_printer p__; uvm_printer_knobs k__; if(P!=null) p__ = P; else p__ = uvm_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()); end |
|
|
uvm_print_array_int3(F, R, uvm_default_printer) |
|
|
uvm_print_qda_int4(F, R, P, da) |
|
|
uvm_print_array_object3(F, uvm_default_printer,FLAG) |
|
|
uvm_print_object_qda4(F, P, da,FLAG) |
|
|
uvm_print_array_real2(F, uvm_default_printer) |
|
|
uvm_print_qda_real3(F, P, da) |
|
|
uvm_print_array_string2(F, uvm_default_printer) |
|
|
uvm_print_string_qda3(F, P, da) |
|
|
P.print_generic(NM, `"T`", $bits(F), F.name(), "["); |
|
|
uvm_print_int3(F, R, uvm_default_printer) |
|
|
do begin uvm_printer p__; if(P!=null) p__ = P; else p__ = uvm_default_printer; uvm_print_int4(F, R, `"F`", p__) end while(0); |
|
|
P.print_int(NM, F, $bits(F), R, "["); |
|
|
uvm_print_object2(F, uvm_default_printer) |
|
|
do begin uvm_printer p__; if(P!=null) p__ = P; else p__ = uvm_default_printer; p__.print_object(`"F`", F, "["); end while(0); |
|
|
do begin int curr, max__; uvm_printer p__; max__=0; curr=0; if(P!=null) p__ = P; else p__ = uvm_default_printer; foreach(F[i]) max__ = i+1; 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__); end while(0); |
|
|
uvm_print_object_queue3(F, uvm_default_printer,FLAG) |
|
|
|
|
begin uvm_printer p__; uvm_printer_knobs k__; int curr, max__; max__=0; curr=0; if(P!=null) p__ = P; else p__ = uvm_default_printer; foreach(F[i]) max__ = i+1; 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 uvm_print_enum(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__); end |
|
|
begin uvm_printer p__; uvm_printer_knobs k__; int curr, max__; max__=0; curr=0; if(P!=null) p__ = P; else p__ = uvm_default_printer; foreach(F[i]) max__ = i+1; 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 uvm_print_int4(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__); end |
|
|
begin uvm_printer p__; uvm_printer_knobs k__; int curr, max__; max__=0; curr=0; if(P!=null) p__ = P; else p__ = uvm_default_printer; foreach(F[i__]) max__++; p__.print_array_header (`"F`", max__,`"T``(real)`"); 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_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__); end |
|
|
uvm_print_queue_int3(F, R, uvm_default_printer) |
|
|
`uvm_print_qda_int3(F, R, P, queue) |
|
|
uvm_print_qda_int4(F, R, P, sa) |
|
|
uvm_print_sarray_object3(F, uvm_default_printer,FLAG) |
|
|
uvm_print_object_qda4(F, P, sa,FLAG) |
|
|
uvm_print_string_qda3(F, P, sa) |
|
|
uvm_print_string2(F, uvm_default_printer) |
|
|
do begin uvm_printer p__; if(P!=null) p__ = P; else p__ = uvm_default_printer; p__.print_string(`"F`", F, "["); end while(0); |
|
|
do begin int curr, max__; uvm_printer p__; max__=0; curr=0; foreach(F[i]) max__ = i+1; if(P!=null) p__ = P; else p__ = uvm_default_printer; 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__); end while(0); |
|
|
uvm_print_string_queue2(F, uvm_default_printer) |
|
|
|
|
|
|
|
class uvm_put_imp``SFX #(type T=int, type IMP=int) extends uvm_port_base #(uvm_tlm_if_base #(T,T)); UVM_IMP_COMMON(UVM_TLM_PUT_MASK,`"uvm_put_imp``SFX`",IMP) UVM_BLOCKING_PUT_IMP_SFX(SFX, m_imp, T, t) UVM_NONBLOCKING_PUT_IMP_SFX(SFX, m_imp, T, t) endclass |
|
|
|
uvm_rand_send_pri_with(SEQ_OR_ITEM, -1, {}) |
|
|
uvm_rand_send_pri_with(SEQ_OR_ITEM, PRIORITY, {}) |
|
|
begin uvm_sequence_base __seq; if (!$cast(__seq,SEQ_OR_ITEM)) start_item(SEQ_OR_ITEM, PRIORITY); else __seq.set_item_context(this,SEQ_OR_ITEM.get_sequencer()); if ((__seq == null || !__seq.do_not_randomize) && !SEQ_OR_ITEM.randomize() with CONSTRAINTS ) begin uvm_warning("RNDFLD", "Randomization failed in uvm_rand_send_with action") end if (!$cast(__seq,SEQ_OR_ITEM)) finish_item(SEQ_OR_ITEM, PRIORITY); else __seq.start(__seq.get_sequencer(), this, PRIORITY, 0); end |
|
|
uvm_rand_send_pri_with(SEQ_OR_ITEM, -1, CONSTRAINTS) |
|
|
|
|
if (recorder != null && recorder.tr_handle != 0) begin if (recorder.get_type_name() != "uvm_recorder") begin uvm_record_attribute(recorder.tr_handle,NAME,VALUE) end else recorder.m_set_attribute(recorder.tr_handle,NAME,$sformatf("%p",VALUE)); end |
|
|
recorder.m_set_attribute(recorder.tr_handle,NAME, $sformatf({"%0",uvm_radix_to_string(RADIX)},VALUE)); |
|
|
begin bit[63:0] ival = $realtobits(VALUE); recorder.m_set_attribute(recorder.tr_handle,NAME,ival); end |
|
|
recorder.m_set_attribute(recorder.tr_handle,NAME,VALUE); |
|
|
recorder.m_set_attribute(recorder.tr_handle,NAME, $sformatf("%0u",VALUE&((1<<64)-1))); |
|
|
64
|
|
|
((UVM_REG_DATA_WIDTH-1)/8+1)
|
|
|
32
|
|
|
64
|
|
|
|
static local bit m_register_cb_``CB = uvm_callbacks#(T,CB)::m_register_pair(`"T`",`"CB`"); |
|
|
|
|
|
|
|
static function this_subtype get_by_name(string scope, string name, bit rpterr = 1); this_subtype t; uvm_resource_base b = uvm_resource#(base_type)::get_by_name(scope, name, rpterr); if(!$cast(t, b)) uvm_fatal("BADCAST", "cannot cast resource to resource subtype"); return t; endfunction static function this_subtype get_by_type(string scope = "", uvm_resource_base type_handle); this_subtype t; uvm_resource_base b = uvm_resource#(base_type)::get_by_type(scope, type_handle); if(!$cast(t, b)) uvm_fatal("BADCAST", "cannot cast resource to resource subtype"); return t; endfunction |
|
|
uvm_send_pri(SEQ_OR_ITEM, -1) |
|
|
begin uvm_sequence_base __seq; if (!$cast(__seq,SEQ_OR_ITEM)) begin start_item(SEQ_OR_ITEM, PRIORITY); finish_item(SEQ_OR_ITEM, PRIORITY); end else __seq.start(__seq.get_sequencer(), this, PRIORITY, 0); end |
|
|
"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 |
|
|
|
|
|
|
(1<<6)
|
|
|
(1<<5)
|
|
|
"Sequencer interface task not implemented"
|
|
|
(1<<1)
|
|
|
|
|
(1<<4)
|
|
|
function new (string name, uvm_component parent, int min_size=0, int max_size=1); super.new (name, parent, UVM_PORT, min_size, max_size); m_if_mask = MASK; endfunction UVM_TLM_GET_TYPE_NAME(TYPE_NAME) |
|
|
import PKG_NAME``::*; PKG_NAME``::uvm_bogus_class M_``PKG_NAME``uvm_bogus_class |
|
|
static protected uvm_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(uvm_object_wrapper seq_type); if (m_static_check(seq_type)) TYPE::m_typewide_sequences.push_back(seq_type); endfunction static function void add_typewide_sequences(uvm_object_wrapper seq_types[$]); foreach (seq_types[i]) TYPE::add_typewide_sequence(seq_types[i]); endfunction static function bit m_add_typewide_sequence(uvm_object_wrapper seq_type); TYPE::add_typewide_sequence(seq_type); return 1; endfunction |
|
|
|
|
m_uvm_register_sequence(TYPE_NAME, SEQUENCER) uvm_declare_p_sequencer(SEQUENCER) uvm_object_utils_begin(TYPE_NAME) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static local bit m_register_``T``ST = uvm_derived_callbacks#(T,ST)::register_super_type(`"T`",`"ST`"); |
|
|
class uvm_slave_imp``SFX #(type REQ=int, type RSP=int, type IMP=int, type REQ_IMP=IMP, type RSP_IMP=IMP) extends uvm_port_base #(uvm_tlm_if_base #(RSP, REQ)); typedef IMP this_imp_type; typedef REQ_IMP this_req_type; typedef RSP_IMP this_rsp_type; UVM_MS_IMP_COMMON(UVM_TLM_SLAVE_MASK,`"uvm_slave_imp``SFX`") UVM_BLOCKING_PUT_IMP_SFX(SFX, m_rsp_imp, RSP, t) UVM_NONBLOCKING_PUT_IMP_SFX(SFX, m_rsp_imp, RSP, t) UVM_BLOCKING_GET_IMP_SFX(SFX, m_req_imp, REQ, t) UVM_BLOCKING_PEEK_IMP_SFX(SFX, m_req_imp, REQ, t) UVM_NONBLOCKING_GET_IMP_SFX(SFX, m_req_imp, REQ, t) UVM_NONBLOCKING_PEEK_IMP_SFX(SFX, m_req_imp, REQ, t) endclass |
|
|
"TLM interface task not implemented"
|
|
|
(1<<8)
|
|
|
(1<<2)
|
|
|
task b_transport(T t, uvm_tlm_time delay); if (delay == null) begin uvm_error("UVM/TLM/NULLDELAY", {get_full_name(), ".b_transport() called with 'null' delay"}) return; end imp.b_transport(t, delay); endtask |
|
|
(1<<1)
|
|
|
|
|
|
|
(1<<2)
|
|
|
(1<<0)
|
|
|
|
|
(1<<3)
|
|
|
"fifo channel function not implemented"
|
|
|
"fifo channel task not implemented"
|
|
|
"TLM-2 interface function not implemented"
|
|
|
|
|
|
|
virtual function string get_type_name(); return NAME; endfunction |
|
|
|
(1<<9)
|
|
|
|
|
(1<<1)
|
|
|
(1<<0)
|
|
|
function uvm_tlm_sync_e nb_transport_bw(T t, ref P p, input uvm_tlm_time delay); if (delay == null) begin uvm_error("UVM/TLM/NULLDELAY", {get_full_name(), ".nb_transport_bw() called with 'null' delay"}) return UVM_TLM_COMPLETED; end return imp.nb_transport_bw(t, p, delay); endfunction |
|
|
function uvm_tlm_sync_e nb_transport_fw(T t, ref P p, input uvm_tlm_time delay); if (delay == null) begin uvm_error("UVM/TLM/NULLDELAY", {get_full_name(), ".nb_transport_fw() called with 'null' delay"}) return UVM_TLM_COMPLETED; end return imp.nb_transport_fw(t, p, delay); endfunction |
|
|
(1<<5)
|
|
|
|
|
|
|
(1<<6)
|
|
|
(1<<4)
|
|
|
|
|
(1<<7)
|
|
|
|
|
|
|
(1<<10)
|
|
|
|
|
"TLM-2 interface task not implemented"
|
|
|
|
|
UVM_BLOCKING_TRANSPORT_IMP(imp, REQ, RSP, req_arg, rsp_arg) UVM_NONBLOCKING_TRANSPORT_IMP(imp, REQ, RSP, req_arg, rsp_arg) |
|
|
class uvm_transport_imp``SFX #(type REQ=int, type RSP=int, type IMP=int) extends uvm_port_base #(uvm_tlm_if_base #(REQ, RSP)); UVM_IMP_COMMON(UVM_TLM_TRANSPORT_MASK,`"uvm_transport_imp``SFX`",IMP) UVM_BLOCKING_TRANSPORT_IMP_SFX(SFX, m_imp, REQ, RSP, req, rsp) UVM_NONBLOCKING_TRANSPORT_IMP_SFX(SFX, m_imp, REQ, RSP, req, rsp) endclass |
|
|
$typename(X)
|
|
|
uvm_unpack_arrayN(VAR,$bits(VAR[0])) |
|
|
begin int sz__; if (packer.use_metadata) uvm_unpack_intN(sz__,32) VAR = new[sz__]; uvm_unpack_sarrayN(VAR,SIZE) end |
|
|
uvm_unpack_enumN(VAR,$bits(VAR),TYPE) |
|
|
|
|
uvm_unpack_intN(VAR,$bits(VAR)) |
|
|
begin if (packer.big_endian) begin int cnt__ = packer.count + SIZE; uvm_bitstream_t tmp__ = VAR; for (int i=0; i<SIZE; i++) tmp__[i] = packer.m_bits[cnt__ - i - 1]; VAR = tmp__; end else begin VAR = packer.m_bits[packer.count +: SIZE]; end packer.count += SIZE; end |
|
|
uvm_unpack_queueN(VAR,$bits(VAR[0])) |
|
|
begin int sz__; if (packer.use_metadata) uvm_unpack_intN(sz__,32) while (VAR.size() > sz__) void'(VAR.pop_back()); for (int i=0; i end |
|
|
begin longint unsigned real_bits64__; uvm_unpack_intN(real_bits64__,64) VAR = $bitstoreal(real_bits64__); end |
|
|
uvm_unpack_sarrayN(VAR,$bits(VAR[0])) |
|
|
|
|
begin bit [7:0] chr__; VAR = ""; do begin chr__ = packer.m_bits[packer.count+:8]; packer.count += 8; if (chr__ != 0) VAR = {VAR, string'(chr__)}; end while (chr__ != 0); end |
|
|
m_add_builtin_seqs(0); uvm_update_sequence_lib(); |
|
|
factory.set_inst_override_by_type( uvm_sequence_item::get_type(), USER_ITEM::get_type(), {get_full_name(), "*.item"}); m_add_builtin_seqs(1); uvm_update_sequence_lib(); |
|
|
m_uvm_bottomup_phase(PHASE,COMP,PREFIX) |
|
|
m_uvm_task_phase(PHASE,COMP,PREFIX) |
|
|
m_uvm_topdown_phase(PHASE,COMP,PREFIX) |
|
|
|
|
|
|
|
|
|