Jump to content

Leaderboard


Popular Content

Showing content with the highest reputation on 12/01/2015 in all areas

  1. 1 point
    Thanks a lot, /uwe. That was very helpful. My notes, for when I encounter this again: 1) from uvm_component.svh (note: "Any threads spawned in this callback are not affected when the phase ends.") // Function: phase_started // // Invoked at the start of each phase. The ~phase~ argument specifies // the phase being started. Any threads spawned in this callback are // not affected when the phase ends. extern virtual function void phase_started (uvm_phase phase); // phase_started // ------------- // phase_started() and phase_ended() are extra callbacks called at the // beginning and end of each phase, respectively. Since they are // called for all phases the phase is passed in as an argument so the // extender can decide what to do, if anything, for each phase. function void uvm_component::phase_started(uvm_phase phase); endfunction 2) from uvm_task_phase.svh (note: "Once the phase completes, any remaining forked ... threads are forcibly and immediately killed.") //------------------------------------------------------------------------------ // // Class: uvm_task_phase // //------------------------------------------------------------------------------ // Base class for all task phases. // It forks a call to <uvm_phase::exec_task()> // for each component in the hierarchy. // // The completion of the task does not imply, nor is it required for, // the end of phase. Once the phase completes, any remaining forked // <uvm_phase::exec_task()> threads are forcibly and immediately killed. // // By default, the way for a task phase to extend over time is if there is
  2. 1 point
    hi, the answer is "it depends". - threads started inside or as a child-thread of xyz_phase() are terminated before phase progression - threads started inside phase_started() are NOT terminated automatically and continue to run until normal end or explicit termination. /uwe
×