Of Camels and Committees - Amazon S3 · Of Camels and Committees: ... 12K lines of new code.....

26
Of Camels and Committees: Standardization Should Enable Innovation, Not Strangle It Tom Fitzpatrick Verification Evangelist, Mentor Graphics Dave Rich Verification Architect, Mentor Graphics

Transcript of Of Camels and Committees - Amazon S3 · Of Camels and Committees: ... 12K lines of new code.....

Of Camels and Committees: Standardization Should Enable Innovation,

Not Strangle It

Tom Fitzpatrick Verification Evangelist, Mentor Graphics

Dave Rich Verification Architect, Mentor Graphics

The First Commandment For Effective Standards

“Cooperate on Standards Compete on Products”

- Karen Bartleson

TF, Of Camels and Committees, DVCon 2014 2

Standards Not Always Efficient

TF, Of Camels and Committees, DVCon 2014 3

Another Perspective

“Only by providing something almost universally agreed to be genuinely useful can we make progress. A standard committee is no place for single-issue fanatics.”

- Bjarne Stroustrup Developer of C++

Stroustrup, Bjarne, and Wong, William, “Interview: Bharne Stroustrup Discusses C++,” http://electronicdesign.com/dev-tools/interview-bjarne-stroustrup-discusses-c

TF, Of Camels and Committees, DVCon 2014 4

Standardization Can Remove Choice

TF, Of Camels and Committees, DVCon 2014 5

Solver Innovation: Einstein Puzzle Nationality

House Color

Pet

Drink

Smoke

TF, Of Camels and Committees, DVCon 2014 6

Multiple Sources = Bloat

• Why have two ways to do the same thing? – Worse: almost the same thing

• Once something is in a standard, it’s almost impossible to remove it

always @* C = A & B;

always_comb C = A & B;

• Verilog 1364-2001 • Evaluated when RHS

changes

• SUPERLOG • Evaluated when RHS

changes and at time 0 • Use this one

TF, Of Camels and Committees, DVCon 2014 7

More SystemVerilog Bloat

• program blocks left over from Vera – Starts executing at time 0 – Simulation terminates when last program exits

• Not needed for UVM

– Defined new timing semantics to avoid test/design race conditions

• Mimics semantics of PLI application

– Still subject to races in the testbench • clocking block handles test/design races

– Doesn’t affect timing/semantics of testbench TF, Of Camels and Committees, DVCon 2014 8

Standardization in Base Class Libraries

0%

10%

20%

30%

40%

AccelleraUVM

OVM MentorAVM

SynopsysVMM

SynopsysRVM

CadenceeRM

CadenceURM

Other

Non

-FPG

A St

udy

Part

icip

ants

Testbench Methodologies and Base-Class Libraries

2010

2012

486% UVM growth between 2010 and 2012 46% UVM projected growth in the next twelve months

Source: Wilson Research Group and Mentor Graphics, 2012 Functional Verification Study

TF, Of Camels and Committees, DVCon 2014 9

User Feedback is Critical

• New code should benefit users – Phasing still doesn’t work – “Top Priority” – Don’t repeat mistakes

• UVM1.2 introduces 13 backward-incompatible changes – Considerable performance degradation – No extended user feedback period

Classes Files Lines UVM1.0-p1 288 125 65534 UVM1.1 311 131 66660 UVM1.1a 322 135 67307 UVM1.1b 317 134 67724 UVM1.1c 317 135 67969 UVM1.1d 316 133 67965 UVM1.2* 350 144 75445

TF, Of Camels and Committees, DVCon 2014 10

*(added 12K lines, removed 4K)

~60 Bugs fixed ...BUT... ~20-30 new bugs are statistically likely in those 12K lines of new code..

Planned Changes In Functionality • According to the UVM bug database, these 12

were the only significant enhancements planned for UVM-1.2 :

• 4032 BCL (Verilab) Not possible to undo a factory override. • 4389 BCL (Nvidia) Deprecate hierarchical propagation of objections; interim mode bit • 4442 UG (Synopsys) Layering sequences are not scalable.

Should use layering driver + passthru sequence instead. • 3154 BCL (Synopsys) Refactoring message infrastructure to pass messages as objects. • 4570 BCL (Synopsys) Messaging System Revamp • 4793 BCL (Cadence) Introduce Visitor Pattern into UVM • 3366 Phasing (Synopsys) all phases cannot share one timeout value • 4541 Phasing (Nvidia) request for an API to allow user to attach a phase sequence

to a specific phase by name. • 4716 Phasing Clean up "jump" logic • 4622 Phasing (Cisco) uvm_phase::unsync() does not work • 4545 Ref (Synopsys) Add release number to main page • 4394 Cmdline (Synopsys) Add Command Line Option to Not Print FILE:LINE

in `uvm_info() Messages Only

Actual Changes (from Release Notes)

Release 1.2 contains enhancements and fixes to errata. UVM 1.2 fixes the following enhancements and issues reported under the Mantis bug-

tracking system. Issues affecting the reference documentation (API changes or semantic changes) are preceded with an plus sign (+). Issues affecting backward compatibility are precedded with an asterisk (*)

For detailed information on a specific issue, refer to the Mantis database at

http://www.eda.org/svdb/view.php?id=<id>, where <id> is the Mantis id. In increasing Mantis numerical order: (+) Mantis 3407: uvm_event should be a param class (*) Mantis 3472: Deprecated set/get_config_int/string/object Mantis 3557: Names of phases (e.g. "main" for main_phase) now documented (+) Mantis 3586: Added support for run-time disabling of auto item recording (+) Mantis 3693: Added uvm_enum_wrapper#(T) type, and functionality to set

enumerations by string name. This allows for enum fields to be configured using uvm_config_db#(string)::set, as well as from the command line using +uvm_set_config_string.

(+) Mantis 3741: Added command-line functionality to setting default_sequence (+uvm_set_default_sequence)

Mantis 3783: all messaging is now routed via uvm_report_server Mantis 3887: allows the factory to be replaced in order to trace create or override calls

as well as to identify unused overrides (+) Mantis 3893: allows for the hierarchical propagation of uvm_objections to be

disabled via set_propagate_mode. Mantis 3901: Feature request to prevent objection from throwing decrement-below-

zero error if the count is 0 Mantis 4032: Added the ability to undo a factory override. Mantis 4091: Added missing top-level block name to uvm_reg_file::get_fullname() Mantis 4160: uvm_comparer not using verbosity setting for print_msg Mantis 4181: transaction order unclear and cant be changed when bus/reg size differ Mantis 4253: Volatile register fields will cause a write() even if mirrored and desired

values are the same. (*) Mantis 4269: Added UVM_ prefix to enumerated values Mantis 4306: Correction of documentation record_field_int -> record_field Mantis 4307: Correction of documentation DEC -> UVM_DEC (+) Mantis 4366: uvm_sequence_library documentation missing from generate html Mantis 4378: Proper documentation of set_inst_override_by_name and

set_type_override_by_name in uvm_component. Mantis 4382: Add document for UVM_UNFORMAT2/4 and

UVM_REAL/REAL_DEC/REAL_EXP (+) Mantis 4389: mode bit for propagation of objections was added via Mantis 3893 Mantis 4391: removed redundant code in uvm_port_base (*) Mantis 4416 : The confusing uvm_severity_type was deprecated, and replaced

internally using uvm_severity. The 1.1 -> 1.2 conversion script can be used to replace any occurances in user code.

Mantis 4418 : Clarified meaning of specified verbosity when using set_report_verbosity Mantis 4425: BUSY flag now cleared when register model is reset. (+) Mantis 4430: default sequences are now killed during PHASE_ENDED (*) Mantis 4431: Enhance uvm_sequence::starting_phase The "starting_phase" variable

is now data access protected within uvm_sequence_base, and the user must use the "get_starting_phase" and "set_starting_phase" accesors. This prevents possible fatal errors

and deadlocks caused when a starting_phase is changed after it has already been evaluated. The bin/uvm11-to-uvm12.pl helper script can be used to perform a simple search-and-replace within the user code, updating it to the new methods.

(+) Mantis 4432: Provide auto-object-to-phase in uvm_sequence_base (+) Mantis 4433: Remove unnecessary uvm_objection instances within non-

uvm_task_phase nodes (+) Mantis 4434: Added get_objection_count to uvm_phase (+) Mantis 4439: Documented put_response() on the uvm_seq_pull_port Mantis 4440: Now possible to jump during phase_ended() (+) Mantis 4469: The ability to programatically traverse the phase graph was added via

get_adjacent_predecessor_nodes and get_adjacent_successor_nodes inside of uvm_phase

(+) Mantis 4476: uvm_sequence::req and uvm_sequence::rsp now documented. Mantis 4488: Potential zero-time loop when user does not correctly implement

vm_sequence::wait_for_relevant() now throws an error (+) Mantis 4513: Added user-defined memory allocation policy to uvm_vreg::allocate() (+) Mantis 4516: Proper prioritization of default sequences (+) Mantis 4517: Added phase transition callbacks (*) Mantis 4518: Classes extended from uvm_object now require an explicit constructor

with a string-type name argument. This functionality was optionally enabled in prior versions by defining the `UVM_OBJECT_MUST_HAVE_CONSTRUCTOR symbol (Mantis 3770). This functionality is now the default. Should the obsolete functionality be required, define the `UVM_OBJECT_DO_NOT_NEED_CONSTRUCTOR symbol.

(+) Mantis 4519: Added uvm_phase::set_jump_phase() and uvm_phase::end_prematurely(),

which together implement uvm_phase::jump(). Mantis 4532: uvm_reg_access_seq ignoring regs with one RO field Mantis 4533: static data in DPI may survive reset Mantis 4542: uvm_test_done is now const to prevent changes Mantis 4550: clarified that TLM port transaction types are not restricted to

class/uvm_objects (+) Mantis 4553: Introduces NOACCESS field access in uvm_reg_field.svh; removed error

msgs from get_access(), and augmented by using NOACCESS when map and field have conflicting access values.

Mantis 4548: cleanup dpi coding issues Mantis 4566: uvm_comparer now detects any queue size mismatch when

comparer.show_max != 1 Mantis 4567 : fixed do_predict call overwriting the NOT_OK status with OK status on

backdoor writes to RO reg (+)(*) Mantis 4570: Messaging System Revamp - Makes message object-based and

enable user to derive from the message object and attach additional fields to messaging infrastructure and reporting format. In addition, an option is provided to record the messages and the attached fields.

Mantis 4572: packing of ints with 64+bits and array unpack broken Mantis 4587: Added length, byte_enable, byte_length fixes for reg2bus to adhere to

tlm_gp rules Mantis 4588: changes in hw_reset_seq to ensure sub-blocks are excluded when relevant

NO_REG_TEST attribute is set Mantis 4590: implemented capability to allow VHDL UVM_REG backdoor access using

VCS. Users need to pass elaboration swtich with arguments to enable Mixed-Language API's -cflags "-DVCSMX"

(*) Mantis 4606: uvm_report server is not chainable/extendable uvm_report_server can now be extended, chained using delegate pattern

Mantis 4617: bad example in documentation uvm_report_cb::add_by_name (*) Mantis 4618: resource lookup broken when fieldname has wildcards. meta

characters in the fieldname are not interpreted anymore as glob/regex. Mantis 4621: printing of int will mask Z values with X Mantis 4622: uvm_phase::unsync() now actually removes the sync relationship Mantis 4643: uvm_dpi_get_next_arg_c doesnt fully adhere to 1800lrm (*) Mantis 4649: Improve memory performance for 'bitstream' interfaces for

report/record/compare/pack etc. The implementation now supports a less memory-expensive uvm_integral_t which is sized as a 64b packed logic vector. This type is used in the "*_field_int()" methods for reporting/recording/comparing and packing/unpacking. As a side effect, for consisteny "print_int" was renamed to "print_field", however print_int is being left in the implementation for backwards compatibility purposes.

Mantis 4666: uvm_config_db::set expects to be invoked in process context Mantis 4677: uvm_global_copy_map removed (+) Mantis 4686: updated documentation to indicate the uvm_reg(_field)::predict is

updating mirrored AND desired values Mantis 4690: mehod -> method in uvm_sequence_base documentation Mantis 4711: Fixed LRM violation Mantis 4731: Fixed initialization race introduced by Mantis 4606. Mantis 4732: Provides new phase state 'UVM_PHASE_UNINITIALIZED' to indicate phase

state prior to a phase existing in a schedule. Mantis 4734: Fixed bug in uvm_reg_map::get_size() Mantis 4738: Fixed bug wherein messages from built-in UVM dpi code were not being

routed through standard UVM messaging. Mantis 4743: uvm_sequencer::get_next_item/try_next_item/item_done/get/peek/put

may now be called directly. (*) Mantis 4744: Makes recording system object based. Introduced new

uvm_tr_stream and uvm_tr_database classes. (*) Mantis 4766: Fix broken `uvm_record_field / attribute interaction. The fix for this

mantis involved creating a new method 'use_record_attribute' in uvm_recorder. The new method allows for a conditional usage of the `uvm_record_attribute macro, allowing users to create their own recorders without interfering with vendor-specific recorders

(+) Mantis 4767: Fixed the `uvm_pack and `uvm_unpack macros which bypassed the packer policy methods. Additionally, added pack_bits/bytes/ints and unpack_bits/bytes/ints to allow easier compatibility with the SystemVerilog stream operator.

Mantis 4772: separated hdl vendor dpi backends into one file per vendor (*) Mantis 4783: The `uvm_record_* macros no longer call undocumented member

methods of uvm_recorder. (+) Mantis 4786: Corrected the documentation of print_real (+) Mantis 4784: documenting the `uvm_record_(int,string,real,time) macros

50% of those are API changes

Release 1.2 contains enhancements and fixes to errata. UVM 1.2 fixes the following enhancements and issues reported under the Mantis bug-

tracking system. Issues affecting the reference documentation (API changes or semantic changes) are preceded with an plus sign (+). Issues affecting backward compatibility are precedded with an asterisk (*)

For detailed information on a specific issue, refer to the Mantis database at

http://www.eda.org/svdb/view.php?id=<id>, where <id> is the Mantis id. In increasing Mantis numerical order: (+) Mantis 3407: uvm_event should be a param class (*) Mantis 3472: Deprecated set/get_config_int/string/object Mantis 3557: Names of phases (e.g. "main" for main_phase) now documented (+) Mantis 3586: Added support for run-time disabling of auto item recording (+) Mantis 3693: Added uvm_enum_wrapper#(T) type, and functionality to set

enumerations by string name. This allows for enum fields to be configured using uvm_config_db#(string)::set, as well as from the command line using +uvm_set_config_string.

(+) Mantis 3741: Added command-line functionality to setting default_sequence (+uvm_set_default_sequence)

Mantis 3783: all messaging is now routed via uvm_report_server Mantis 3887: allows the factory to be replaced in order to trace create or override calls

as well as to identify unused overrides (+) Mantis 3893: allows for the hierarchical propagation of uvm_objections to be

disabled via set_propagate_mode. Mantis 3901: Feature request to prevent objection from throwing decrement-below-

zero error if the count is 0 Mantis 4032: Added the ability to undo a factory override. Mantis 4091: Added missing top-level block name to uvm_reg_file::get_fullname() Mantis 4160: uvm_comparer not using verbosity setting for print_msg Mantis 4181: transaction order unclear and cant be changed when bus/reg size differ Mantis 4253: Volatile register fields will cause a write() even if mirrored and desired

values are the same. (*) Mantis 4269: Added UVM_ prefix to enumerated values Mantis 4306: Correction of documentation record_field_int -> record_field Mantis 4307: Correction of documentation DEC -> UVM_DEC (+) Mantis 4366: uvm_sequence_library documentation missing from generate html Mantis 4378: Proper documentation of set_inst_override_by_name and

set_type_override_by_name in uvm_component. Mantis 4382: Add document for UVM_UNFORMAT2/4 and

UVM_REAL/REAL_DEC/REAL_EXP (+) Mantis 4389: mode bit for propagation of objections was added via Mantis 3893 Mantis 4391: removed redundant code in uvm_port_base (*) Mantis 4416 : The confusing uvm_severity_type was deprecated, and replaced

internally using uvm_severity. The 1.1 -> 1.2 conversion script can be used to replace any occurances in user code.

Mantis 4418 : Clarified meaning of specified verbosity when using set_report_verbosity Mantis 4425: BUSY flag now cleared when register model is reset. (+) Mantis 4430: default sequences are now killed during PHASE_ENDED (*) Mantis 4431: Enhance uvm_sequence::starting_phase The "starting_phase" variable

is now data access protected within uvm_sequence_base, and the user must use the "get_starting_phase" and "set_starting_phase" accesors. This prevents possible fatal errors

and deadlocks caused when a starting_phase is changed after it has already been evaluated. The bin/uvm11-to-uvm12.pl helper script can be used to perform a simple search-and-replace within the user code, updating it to the new methods.

(+) Mantis 4432: Provide auto-object-to-phase in uvm_sequence_base (+) Mantis 4433: Remove unnecessary uvm_objection instances within non-

uvm_task_phase nodes (+) Mantis 4434: Added get_objection_count to uvm_phase (+) Mantis 4439: Documented put_response() on the uvm_seq_pull_port Mantis 4440: Now possible to jump during phase_ended() (+) Mantis 4469: The ability to programatically traverse the phase graph was added via

get_adjacent_predecessor_nodes and get_adjacent_successor_nodes inside of uvm_phase

(+) Mantis 4476: uvm_sequence::req and uvm_sequence::rsp now documented. Mantis 4488: Potential zero-time loop when user does not correctly implement

vm_sequence::wait_for_relevant() now throws an error (+) Mantis 4513: Added user-defined memory allocation policy to uvm_vreg::allocate() (+) Mantis 4516: Proper prioritization of default sequences (+) Mantis 4517: Added phase transition callbacks (*) Mantis 4518: Classes extended from uvm_object now require an explicit constructor

with a string-type name argument. This functionality was optionally enabled in prior versions by defining the `UVM_OBJECT_MUST_HAVE_CONSTRUCTOR symbol (Mantis 3770). This functionality is now the default. Should the obsolete functionality be required, define the `UVM_OBJECT_DO_NOT_NEED_CONSTRUCTOR symbol.

(+) Mantis 4519: Added uvm_phase::set_jump_phase() and uvm_phase::end_prematurely(),

which together implement uvm_phase::jump(). Mantis 4532: uvm_reg_access_seq ignoring regs with one RO field Mantis 4533: static data in DPI may survive reset Mantis 4542: uvm_test_done is now const to prevent changes Mantis 4550: clarified that TLM port transaction types are not restricted to

class/uvm_objects (+) Mantis 4553: Introduces NOACCESS field access in uvm_reg_field.svh; removed error

msgs from get_access(), and augmented by using NOACCESS when map and field have conflicting access values.

Mantis 4548: cleanup dpi coding issues Mantis 4566: uvm_comparer now detects any queue size mismatch when

comparer.show_max != 1 Mantis 4567 : fixed do_predict call overwriting the NOT_OK status with OK status on

backdoor writes to RO reg (+)(*) Mantis 4570: Messaging System Revamp - Makes message object-based and

enable user to derive from the message object and attach additional fields to messaging infrastructure and reporting format. In addition, an option is provided to record the messages and the attached fields.

Mantis 4572: packing of ints with 64+bits and array unpack broken Mantis 4587: Added length, byte_enable, byte_length fixes for reg2bus to adhere to

tlm_gp rules Mantis 4588: changes in hw_reset_seq to ensure sub-blocks are excluded when relevant

NO_REG_TEST attribute is set Mantis 4590: implemented capability to allow VHDL UVM_REG backdoor access using

VCS. Users need to pass elaboration swtich with arguments to enable Mixed-Language API's -cflags "-DVCSMX"

(*) Mantis 4606: uvm_report server is not chainable/extendable uvm_report_server can now be extended, chained using delegate pattern

Mantis 4617: bad example in documentation uvm_report_cb::add_by_name (*) Mantis 4618: resource lookup broken when fieldname has wildcards. meta

characters in the fieldname are not interpreted anymore as glob/regex. Mantis 4621: printing of int will mask Z values with X Mantis 4622: uvm_phase::unsync() now actually removes the sync relationship Mantis 4643: uvm_dpi_get_next_arg_c doesnt fully adhere to 1800lrm (*) Mantis 4649: Improve memory performance for 'bitstream' interfaces for

report/record/compare/pack etc. The implementation now supports a less memory-expensive uvm_integral_t which is sized as a 64b packed logic vector. This type is used in the "*_field_int()" methods for reporting/recording/comparing and packing/unpacking. As a side effect, for consisteny "print_int" was renamed to "print_field", however print_int is being left in the implementation for backwards compatibility purposes.

Mantis 4666: uvm_config_db::set expects to be invoked in process context Mantis 4677: uvm_global_copy_map removed (+) Mantis 4686: updated documentation to indicate the uvm_reg(_field)::predict is

updating mirrored AND desired values Mantis 4690: mehod -> method in uvm_sequence_base documentation Mantis 4711: Fixed LRM violation Mantis 4731: Fixed initialization race introduced by Mantis 4606. Mantis 4732: Provides new phase state 'UVM_PHASE_UNINITIALIZED' to indicate phase

state prior to a phase existing in a schedule. Mantis 4734: Fixed bug in uvm_reg_map::get_size() Mantis 4738: Fixed bug wherein messages from built-in UVM dpi code were not being

routed through standard UVM messaging. Mantis 4743: uvm_sequencer::get_next_item/try_next_item/item_done/get/peek/put

may now be called directly. (*) Mantis 4744: Makes recording system object based. Introduced new

uvm_tr_stream and uvm_tr_database classes. (*) Mantis 4766: Fix broken `uvm_record_field / attribute interaction. The fix for this

mantis involved creating a new method 'use_record_attribute' in uvm_recorder. The new method allows for a conditional usage of the `uvm_record_attribute macro, allowing users to create their own recorders without interfering with vendor-specific recorders

(+) Mantis 4767: Fixed the `uvm_pack and `uvm_unpack macros which bypassed the packer policy methods. Additionally, added pack_bits/bytes/ints and unpack_bits/bytes/ints to allow easier compatibility with the SystemVerilog stream operator.

Mantis 4772: separated hdl vendor dpi backends into one file per vendor (*) Mantis 4783: The `uvm_record_* macros no longer call undocumented member

methods of uvm_recorder. (+) Mantis 4786: Corrected the documentation of print_real (+) Mantis 4784: documenting the `uvm_record_(int,string,real,time) macros

25% Break Back-Compatibility

Release 1.2 contains enhancements and fixes to errata. UVM 1.2 fixes the following enhancements and issues reported under the Mantis bug-

tracking system. Issues affecting the reference documentation (API changes or semantic changes) are preceded with an plus sign (+). Issues affecting backward compatibility are precedded with an asterisk (*)

For detailed information on a specific issue, refer to the Mantis database at

http://www.eda.org/svdb/view.php?id=<id>, where <id> is the Mantis id. In increasing Mantis numerical order: (+) Mantis 3407: uvm_event should be a param class (*) Mantis 3472: Deprecated set/get_config_int/string/object Mantis 3557: Names of phases (e.g. "main" for main_phase) now documented (+) Mantis 3586: Added support for run-time disabling of auto item recording (+) Mantis 3693: Added uvm_enum_wrapper#(T) type, and functionality to set

enumerations by string name. This allows for enum fields to be configured using uvm_config_db#(string)::set, as well as from the command line using +uvm_set_config_string.

(+) Mantis 3741: Added command-line functionality to setting default_sequence (+uvm_set_default_sequence)

Mantis 3783: all messaging is now routed via uvm_report_server Mantis 3887: allows the factory to be replaced in order to trace create or override calls

as well as to identify unused overrides (+) Mantis 3893: allows for the hierarchical propagation of uvm_objections to be

disabled via set_propagate_mode. Mantis 3901: Feature request to prevent objection from throwing decrement-below-

zero error if the count is 0 Mantis 4032: Added the ability to undo a factory override. Mantis 4091: Added missing top-level block name to uvm_reg_file::get_fullname() Mantis 4160: uvm_comparer not using verbosity setting for print_msg Mantis 4181: transaction order unclear and cant be changed when bus/reg size differ Mantis 4253: Volatile register fields will cause a write() even if mirrored and desired

values are the same. (*) Mantis 4269: Added UVM_ prefix to enumerated values Mantis 4306: Correction of documentation record_field_int -> record_field Mantis 4307: Correction of documentation DEC -> UVM_DEC (+) Mantis 4366: uvm_sequence_library documentation missing from generate html Mantis 4378: Proper documentation of set_inst_override_by_name and

set_type_override_by_name in uvm_component. Mantis 4382: Add document for UVM_UNFORMAT2/4 and

UVM_REAL/REAL_DEC/REAL_EXP (+) Mantis 4389: mode bit for propagation of objections was added via Mantis 3893 Mantis 4391: removed redundant code in uvm_port_base (*) Mantis 4416 : The confusing uvm_severity_type was deprecated, and replaced

internally using uvm_severity. The 1.1 -> 1.2 conversion script can be used to replace any occurances in user code.

Mantis 4418 : Clarified meaning of specified verbosity when using set_report_verbosity Mantis 4425: BUSY flag now cleared when register model is reset. (+) Mantis 4430: default sequences are now killed during PHASE_ENDED (*) Mantis 4431: Enhance uvm_sequence::starting_phase The "starting_phase" variable

is now data access protected within uvm_sequence_base, and the user must use the "get_starting_phase" and "set_starting_phase" accesors. This prevents possible fatal errors

and deadlocks caused when a starting_phase is changed after it has already been evaluated. The bin/uvm11-to-uvm12.pl helper script can be used to perform a simple search-and-replace within the user code, updating it to the new methods.

(+) Mantis 4432: Provide auto-object-to-phase in uvm_sequence_base (+) Mantis 4433: Remove unnecessary uvm_objection instances within non-

uvm_task_phase nodes (+) Mantis 4434: Added get_objection_count to uvm_phase (+) Mantis 4439: Documented put_response() on the uvm_seq_pull_port Mantis 4440: Now possible to jump during phase_ended() (+) Mantis 4469: The ability to programatically traverse the phase graph was added via

get_adjacent_predecessor_nodes and get_adjacent_successor_nodes inside of uvm_phase

(+) Mantis 4476: uvm_sequence::req and uvm_sequence::rsp now documented. Mantis 4488: Potential zero-time loop when user does not correctly implement

vm_sequence::wait_for_relevant() now throws an error (+) Mantis 4513: Added user-defined memory allocation policy to uvm_vreg::allocate() (+) Mantis 4516: Proper prioritization of default sequences (+) Mantis 4517: Added phase transition callbacks (*) Mantis 4518: Classes extended from uvm_object now require an explicit constructor

with a string-type name argument. This functionality was optionally enabled in prior versions by defining the `UVM_OBJECT_MUST_HAVE_CONSTRUCTOR symbol (Mantis 3770). This functionality is now the default. Should the obsolete functionality be required, define the `UVM_OBJECT_DO_NOT_NEED_CONSTRUCTOR symbol.

(+) Mantis 4519: Added uvm_phase::set_jump_phase() and uvm_phase::end_prematurely(),

which together implement uvm_phase::jump(). Mantis 4532: uvm_reg_access_seq ignoring regs with one RO field Mantis 4533: static data in DPI may survive reset Mantis 4542: uvm_test_done is now const to prevent changes Mantis 4550: clarified that TLM port transaction types are not restricted to

class/uvm_objects (+) Mantis 4553: Introduces NOACCESS field access in uvm_reg_field.svh; removed error

msgs from get_access(), and augmented by using NOACCESS when map and field have conflicting access values.

Mantis 4548: cleanup dpi coding issues Mantis 4566: uvm_comparer now detects any queue size mismatch when

comparer.show_max != 1 Mantis 4567 : fixed do_predict call overwriting the NOT_OK status with OK status on

backdoor writes to RO reg (+)(*) Mantis 4570: Messaging System Revamp - Makes message object-based and

enable user to derive from the message object and attach additional fields to messaging infrastructure and reporting format. In addition, an option is provided to record the messages and the attached fields.

Mantis 4572: packing of ints with 64+bits and array unpack broken Mantis 4587: Added length, byte_enable, byte_length fixes for reg2bus to adhere to

tlm_gp rules Mantis 4588: changes in hw_reset_seq to ensure sub-blocks are excluded when relevant

NO_REG_TEST attribute is set Mantis 4590: implemented capability to allow VHDL UVM_REG backdoor access using

VCS. Users need to pass elaboration swtich with arguments to enable Mixed-Language API's -cflags "-DVCSMX"

(*) Mantis 4606: uvm_report server is not chainable/extendable uvm_report_server can now be extended, chained using delegate pattern

Mantis 4617: bad example in documentation uvm_report_cb::add_by_name (*) Mantis 4618: resource lookup broken when fieldname has wildcards. meta

characters in the fieldname are not interpreted anymore as glob/regex. Mantis 4621: printing of int will mask Z values with X Mantis 4622: uvm_phase::unsync() now actually removes the sync relationship Mantis 4643: uvm_dpi_get_next_arg_c doesnt fully adhere to 1800lrm (*) Mantis 4649: Improve memory performance for 'bitstream' interfaces for

report/record/compare/pack etc. The implementation now supports a less memory-expensive uvm_integral_t which is sized as a 64b packed logic vector. This type is used in the "*_field_int()" methods for reporting/recording/comparing and packing/unpacking. As a side effect, for consisteny "print_int" was renamed to "print_field", however print_int is being left in the implementation for backwards compatibility purposes.

Mantis 4666: uvm_config_db::set expects to be invoked in process context Mantis 4677: uvm_global_copy_map removed (+) Mantis 4686: updated documentation to indicate the uvm_reg(_field)::predict is

updating mirrored AND desired values Mantis 4690: mehod -> method in uvm_sequence_base documentation Mantis 4711: Fixed LRM violation Mantis 4731: Fixed initialization race introduced by Mantis 4606. Mantis 4732: Provides new phase state 'UVM_PHASE_UNINITIALIZED' to indicate phase

state prior to a phase existing in a schedule. Mantis 4734: Fixed bug in uvm_reg_map::get_size() Mantis 4738: Fixed bug wherein messages from built-in UVM dpi code were not being

routed through standard UVM messaging. Mantis 4743: uvm_sequencer::get_next_item/try_next_item/item_done/get/peek/put

may now be called directly. (*) Mantis 4744: Makes recording system object based. Introduced new

uvm_tr_stream and uvm_tr_database classes. (*) Mantis 4766: Fix broken `uvm_record_field / attribute interaction. The fix for this

mantis involved creating a new method 'use_record_attribute' in uvm_recorder. The new method allows for a conditional usage of the `uvm_record_attribute macro, allowing users to create their own recorders without interfering with vendor-specific recorders

(+) Mantis 4767: Fixed the `uvm_pack and `uvm_unpack macros which bypassed the packer policy methods. Additionally, added pack_bits/bytes/ints and unpack_bits/bytes/ints to allow easier compatibility with the SystemVerilog stream operator.

Mantis 4772: separated hdl vendor dpi backends into one file per vendor (*) Mantis 4783: The `uvm_record_* macros no longer call undocumented member

methods of uvm_recorder. (+) Mantis 4786: Corrected the documentation of print_real (+) Mantis 4784: documenting the `uvm_record_(int,string,real,time) macros

Troublesome New UVM Features: UVM Messaging

• 20 new macros added • Add multiple fields to a message • Different actions per field • 20% performance penalty

– Just to process existing messages – without using new features

1.1d 1.2

TF, Of Camels and Committees, DVCon 2014 15

Troublesome New UVM Features: UVM Transaction Recording

• Text-based reporting in the standard – Replaced by vendor-specific implementation for tools

• NOT Backward Compatible – Requires additional work by vendors to support 1.1d and 1.2

• 65% performance penalty in 1.2 vs. 1.1d – Recording overhead 76% in 1.1d – Recording overhead 126% in 1.2

1.1d 1.2

TF, Of Camels and Committees, DVCon 2014 16

Use of Embedded CPUs Increasing

0

0.5

1

1.5

2

2.5

0%

10%

20%

30%

40%

50%

60%

70%

80%

90%

2004 2007 2010 2012Zero 1 2 3 4

5 1 or more 2 or more Mean

• Mean # of CPUs: – 2004: 1.06 – 2012: 2.25

• % Designs with >= 1 CPUs – 2004: 52% – 2012: 79%

• % Designs with >= 2 CPUs – 2004: 17% – 2012: 57%

212%

152%

335%

Source: Wilson Research Group and Mentor Graphics, 2012 Functional Verification Study

TF, Of Camels and Committees, DVCon 2014 17

UVM Targeting the Past?

0

0.5

1

1.5

2

2.5

0%

10%

20%

30%

40%

50%

60%

70%

80%

90%

2004 2007 2010 2012Zero 1 2 3 4 5 1 or more 2 or more Mean

UVM 1.0EA May 2010

VIP-TSC Formed May 2008

OVM 1.0 Jan 2008

OVM 2.0 Sep 2008

Source: Wilson Research Group and Mentor Graphics, 2012 Functional Verification Study

TF, Of Camels and Committees, DVCon 2014 18

AVM, eRM VRM VMM

Aim at the Right Target

• Verification has clearly moved beyond block-level – Multi-core – Complex interconnect

• Constrained-random sequences don’t cut it anymore – Impossible to write constraint

equations for cache coherency

• Need higher level of abstraction

TF, Of Camels and Committees, DVCon 2014 19

Real Reuse Requires Abstraction

• Begin with the End in Mind • UVM ideally suited for structural reuse

– Factory, config, build_phase(), connect_phase()

• Stimulus reuse requires abstract specification – Retargetable to UVM

sequences and software

TF, Of Camels and Committees, DVCon 2014 20

Master Agent

Block

Slave IF

Extern Agent /VIP

Phy

FuncCov

• Begin with the End in Mind • UVM ideally suited for structural reuse

– Factory, config, build_phase(), connect_phase()

• Stimulus reuse requires abstract specification – Retargetable to UVM

sequences and software

• Coordinate SW with external stimuli

CPU

Real Reuse Requires Abstraction

TF, Of Camels and Committees, DVCon 2014 21

Passive Agent

Block

Slave IF

Extern Agent /VIP

Phy

FuncCov

• Begin with the End in Mind • UVM ideally suited for structural reuse

– Factory, config, build_phase(), connect_phase()

• Stimulus reuse requires abstract specification – Retargetable to UVM

sequences and software

• Coordinate SW with external stimuli

CPU

Real Reuse Requires Abstraction

TF, Of Camels and Committees, DVCon 2014 22

Passive Agent

Block

Slave IF

Extern Agent /VIP

Phy

FuncCov

CPU CPU

CPU CPU

• Begin with the End in Mind • UVM ideally suited for structural reuse

– Factory, config, build_phase(), connect_phase()

• Stimulus reuse requires abstract specification – Retargetable to UVM

sequences and software

• Coordinate SW with external stimuli

CPU

Real Reuse Requires Abstraction

TF, Of Camels and Committees, DVCon 2014 23

Passive Agent

Block

Slave IF

Extern Agent /VIP

Phy

FuncCov

CPU CPU

CPU CPU

Block

Slave IF

Extern Agent /VIP

Phy

Block

Slave IF

Extern Agent /VIP

Phy

The Problem Has Changed • System-level verification requires more than UVM

– Software execution coordinated with external stimuli – Constrained-random isn’t enough anymore – Stimulus specification, generation and analysis need

higher level of abstraction

• UVM 1.1d is a structural innovation platform – Flexibility to specify the environment – Allow innovative technology to drive verification

• UVM 1.2 is not really necessary – Certainly not without extended user feedback period

TF, Of Camels and Committees, DVCon 2014 24

The Answer is NOT:

TF, Of Camels and Committees, DVCon 2014 25

More Cowbell!

Thank You

TF, Of Camels and Committees, DVCon 2014 26