This post concludes our date with sequences in UVM with a
quick overview on modifications related to sequences in UVM1.2. UVM that came
out with an EA version in 2010 received mass adoption and has matured by the
day since then. The working group is all set with another major release(UVM1.2)
that should be out anytime. It opened up for public review during DVCON 2014.
You may want to dabble with this release and share your feedback here. Given
the wide adoption and maturity level, the plan further is to probably take it
to IEEE. Victor from eda playground shared interesting insights on what’s new
in the UVM1.2 release. Given below are 4
important changes related to sequences in UVM1.2 –
#1 Setting
default sequence from command line [Mantis – 3741]
A new plusarg has been added to the command line to allow
setting of default_sequence that the sequencer executes during
the start phase. With
this change the user can have 1 test with default sequence that can be modified
from command line thereby avoiding redundant test development just for changing
the default sequence. You can also run regressions by replacing the default
sequence with a sequence library (remember sequence library is derived from
uvm_sequence).
How was
this done in UVM1.1?
uvm_config_db#(uvm_object_wrapper)::set(this,“<seqr_path>.<phase>”,“default_sequence”,<sequence>::type_id::get());
Additional
control in UVM1.2?
+uvm_set_default_sequence
= <seqr>,<phase>,<sequence>
How does
it affect current code?
Existing
code works without change while you move to UVM1.2. Users are free to choose
either of the above. If both are present in the code the result may be a
function of phase.
#2 Guarded
starting_phase [Mantis – 4431]
The uvm_sequence_base::starting_phase variable is now protected
and accessible only via set_starting_phase() and get_starting_phase() methods. One
cannot set this variable again if retrieved using get method. The primary reason for this
update was that any modification to the starting_phase variable in the code would lead to errors that
were hard to debug.
How was
this done in UVM1.1?
starting_phase as a variable was used to set phase, compare phase, raise
& drop objections
How does
it work in UVM1.2?
Use pre-defined methods set_starting_phase() & get_starting_phase()
How does
it affect current code?
While moving to UVM1.2, if the code uses starting_phase variable then one can expect compile errors. The Accellera UVM team is generous enough to provide a script as
part of the release that searches the starting_phase variable and replaces it
with pre-defined methods based on how the variable is used in the code.
#3 Automatic
raise & drop objection [Mantis – 4432]
set_automatic_phase_objection() method is added to raise and
drop objections based on the starting_phase of the sequence thereby avoiding
manual code. This change is mainly for ease of use.
How was
this done in UVM1.1?
starting_phase.raise_objection(this);
…
starting_phase.drop_objection(this);
How does
it work in UVM1.2?
set_automatic_phase_objection(1);
How does
it affect current code?
The existing
code would need modification. As mentioned above, use the script provided by
Accellera UVM team as part of the release.
#4 enum
changes [Mantis – 4269]
A lot of verification code today involves a mix of different
languages, methodologies and code developed by different teams. In UVM1.1
the enum values related to sequences didn’t have a unique signature and this
lead to compilation errors when the uvm_pkg was wildcard imported into a scope
that already had enum declarations with same name. To avoid this, those enum
values are now prefixed with UVM_ string.
How was
this done in UVM1.1?
UVM_ prefix missing in enum values for uvm_sequence_state_enum and uvm_sequencer_arb_mode
What
changed in UVM1.2?
uvm_sequence_state_enum
and uvm_sequencer_arb_mode enum values now have UVM_ prefix
How does
it affect current code?
The
existing code would give compile errors and you would need to update
the values manually.
So when should you move to UVM1.2?
If you are not and early adopter and doesn't enjoy playing with new release, you
can hold on for some time; otherwise go ahead, download the release and give it
a shot with your code.
Recommended reading -
No comments:
Post a Comment