Deprecating run-time phases?

The UVM guidelines in the Mentor cookbook appear to have recently updated the section on run-time phasing:

5.2 Guideline: Avoid the usage of reset_phase(), configure_phase(), main_phase(), shutdown_phase() and the pre_/post_ versions of those phases.

…and goes on to say that these phases will be removed in a future UVM release. I have been relying heavily on these phases in my uvm_test classes. What are the reasons for removing these phases and is there a timeframe for the release?

Thanks,
-Matt

We have always advised users not to use the UVM run time phases. Originally, it was because the use model was unclear and we thought that this was an area of the UVM where functionality might change as the phasing sub-committee made progress and we didn’t want users to be left with code that no longer worked.

The UVM phasing sub-committee has now been disbanded, with no real outcome after 18 months of deliberations. Towards the end of last year a user survey was run on the Accellera website and subsequently by Verilab in order to gauge user reaction to deprecating the phasing code.

The key word here is deprecation, the phasing code cannot be removed without impacting users, such as yourself. You could argue that the wording in this guideline is a little too strong, but it does reflect our overall position on phasing.

In reply to mperyer:

The previous guideline was:

5.2 Guideline: Only use reset_phase(), configure_phase(), main_phase(), shutdown_phase() and the pre_/post_ versions of those phases in a test.

But I think the important distinction for me is “deprecated” vs. “removed”. It sounds like run-time phases will still be allowed but not suggested and not supported with UVM_NO_DEPRECATED flags. Is that correct?

What is Mentor’s recommendation for coordinating between different components in the testbench?

I have found the phases very using for:

  • Blocking sequences from starting until after reset_phase
  • Running a configuration sequence (on the system bus agent) in configure_phase, and blocking other agents from starting sequences until main_phase. This allows the DUT to be configured properly before the test stimulus begins.

Thanks,
Doug