VCS 内置 UVM-1.2:uvm_objection.svh:1252(uvm_info_context("TEST_DONE", "All end-of-test objections have been dropped. Calling stop tasks", UVM_FULL, ...))、uvm_objection.svh:1276(uvm_info_context("TEST_DONE", {"'run' phase is ready to proceed to the 'extract' phase"}, UVM_LOW, ...))
// so 'disable fork' can be used.if(m_cleared==0)begin`uvm_info_context("TEST_DONE","All end-of-test objections have been dropped. Calling stop tasks",UVM_FULL,m_top);forkbegin// guardforkbeginm_executing_stop_processes=1;m_do_stop_all(m_top);wait(m_n_stop_threads==0);m_executing_stop_processes=0;endbeginif(stop_timeout==0)wait(stop_timeout!=0);`uvm_delay(stop_timeout)`uvm_error("STOP_TIMEOUT",
endjoin// guard`uvm_info_context("TEST_DONE",{"'run' phase is ready ","to proceed to the 'extract' phase"},UVM_LOW,m_top)endif(m_events.exists(obj))->m_events[obj].all_dropped;m_top_all_dropped=1;endtask// Function- raise_objection DEPRECATED//// Calls <uvm_objection::raise_objection> after calling <qualify>. // If the ~object~ is not provided or is ~null~, then the implicit top-level
stringnm=is_raise?"raise_objection":"drop_objection";stringdesc=description==""?"":{" (\"",description,"\")"};if(!($cast(c,obj)||$cast(s,obj)))beginuvm_report_error("TEST_DONE_NOHIER",{"A non-hierarchical object, '",obj.get_full_name(),"' (",obj.get_type_name(),") was used in a call ","to uvm_test_done.",nm,"(). For this objection, a sequence ","or component is required.",desc});endendfunction// Below are basic data operations needed for all uvm_objects// for factory registration, printing, comparing, etc.typedefuvm_object_registry#(uvm_test_done_objection,"uvm_test_done")type_id;//@uvm-compat for compatibility with 1.2staticfunctiontype_idget_type();returntype_id::get();endfunction