UVM1.1 和 UVM1.2的不同

1.先看这个网页 https://www.doulos.com/knowhow/sysverilog/uvm/


UVM 1.0 was released on 28 Feb 2011 with the explicit endorsement of all the major simulator vendors. Since that time UVM has become the only show in town when it comes to standardized SystemVerilog verification methodologies. UVM has undergone a series of minor releases, which have fixed bugs and introduced new features.

The source code for the original 1.0 release, known as the UVM Base Class Library (BCL), evolved from the UVM Early Adopter release, which in turn was based on OVM version 2.1.1. The most obvious difference between OVM and UVM-EA was that all occurrence of the prefix "ovm_" were quite literally replaced with "uvm_", "OVM_" by "UVM_", "tlm_" by "uvm_tlm_", and so forth. The UVM-EA kit included a script to convert existing OVM source code. UVM-EA added a few new features on top of OVM 2.1.1, which itself added a few new features to OVM 2.0. The most noticeable additions in the 1.0 release were:

  • An end-of-test objection mechanism to ease the task of cleaning up at the end of a verification run
  • A callback mechanism that provides an alternative to the factory for customizing behavior
  • A report catcher to ease the task of customized report handling
  • heartbeat mechanisms to monitor the liveness of verification components.

The UVM 1.0x releases add the following features to the Early Adopter release

  • Register layer, based on the Register Abstraction Layer of VMM
  • Phasing extensions, meaning a subdivided run phase, user-defined phases, and user-defined relationships between phases
  • Sequence mechanism cleaned up, with the old sequence and sequencer macros deprecated
  • TLM-2.0 interfaces, based on the SystemC TLM-2.0 standard
  • Resource database, improving on the old set_config interface
  • End-of-test mechanism cleaned up
  • Command line processor, to give access to command line arguments

UVM 1.2 was released in June 2014 and has completed a period of public review. UVM 1.2 is somewhat controversial in that the experts disagree as to whether some of the new features introduced in UVM 1.2 represent a step forward or a step backward. The most conservative advice right now would be to wait-and-see. You do not need to adopt any of the features introduced in UVM-1.2 immediately, and it may be wiser to see how things shake down.

Click here for a Summary of Changes in UVM 1.2

UVM 1.2 includes some bug fixes and some improvements to the documentation, which are welcome changes, of course. There are two specific features of UVM 1.2 that you might like to know about right away. The starting_phase variable has been deprecated and replaced with two methods set_starting_phase and get_starting_phase, so you might like to start using these methods. Also, there is a new method uvm_objection::set_propagate_mode that can be used to switch off the hierarchical propagation of objections and thus speed up simulation in some circumstances. (The propagation of objections is usually redundant anyway.)

介绍了UVM1.X 的历史,然后1.2就出现了。但是专家们对1.2是有争议的,说 1.2的一些新feather不确定是 a step forward or a step backward。最后就是 wait-and-see。估计1.2a应该不远了吧。


2.再看这个网页https://www.doulos.com/knowhow/sysverilog/uvm/uvm-1.2/

真正的具体介绍了变了哪些


Summary of Changes in UVM 1.2


New and Changed Features

Variable uvm_sequence_base::starting_phase is deprecated and replaced by two new methods set_starting_phase and get_starting_phase, which prevent starting_phase from being modified in the middle of a phase. This change is not backward-compatible with UVM 1.1, though variable starting_phase, although deprecated, has not yet been removed from the base class library.

New method uvm_sequence_base::set_automatic_phase_objection causesraise_objection and drop_objection to be called automatically around a sequence, avoiding the need to call raise/drop_objection manually in one common situation.

Message system revamp to provide an object-based API to add properties to reports, with new macros `uvm_info_begin/`uvm_info_end and so on. Class uvm_report_server can now be extended and extended report servers can be chained.

Recording system revamp to provide an object-based API for class uvm_recorder.

Factory overrides can now be undone by explicitly restoring the default type.

The standard factory can be replaced with an alternative user-defined factory, e.g. to provide improved debug functionality.

The hierarchical propagation of objections, which is usually redundant, can be turned off using the new method uvm_objection::set_propagate_mode in order to speed up execution. The propagation of objections will eventually be deprecated.

The new method uvm_phase::get_objection_count gives a clean way to drop all objections, i.e.

phase.drop_objection(this, "msg", phase.get_objection_count(this));

New methods uvm_phase::get_adjacent_predecessor/successor_nodes for phase schedule introspection.

New callback class uvm_phase_cb to allow callbacks on phase transitions.

It is now mandatory that every class that extends uvm_object must have a constructor.

The class uvm_event is now parameterized with the type of the (optional) event payload.

Type uvm_bitstream_t has been replaced by type uvm_integral_t in policy objects and field macros.

New class uvm_reg_transaction_order_policy to specify the order of bus transactions in the case of wide register accesses.

The prefix UVM_ has been added to enum values of type uvm_sequence_state_enum anduvm_sequencer_arb_mode.

New version macros `UVM_MAJOR_REV, `UVM_MINOR_REV and so on.

Things Made Part of the Official Standard

The entry and exit criteria for the built-in run-time phases (e.g. reset_phase) have been documented in the class reference.

Class uvm_sequence_library is now documented and official.

Variables uvm_sequence::req and rsp are now documented and official.

Methods uvm_sequencer#()::get_next_item, try_next_item, item_done, get, peek, and putare now documented and official.

Deprecated Features

Methods set/get_config_int, set/get_config_string, set/get_config_object are deprecated.

Methods uvm_component::status, kill, and do_kill_all are deprecated.

Methods stop_request, global_stop_request, set_global_timeout, set_global_stop_timeout, and stop_timeout are deprecated.

Method uvm_componnent::stop_phase and variable enable_stop_interrupt are deprecated.

Variable uvm_test_done is deprecated.

Macros `uvm_sequence_utils, `uvm_declare_sequence_lib, and`uvm_update_sequence_lib are deprecated.

The configuration database parameters "default_sequence", "count", "max_random_count", and "max_random_depth" are deprecated.

The methods uvm_sequencer_base::add_sequence, get_seq_kind, and get_sequenceare deprecated.



There are new migration scripts to replace certain modified or deprecated features.

总之就是新加了一些feather,但是被deprecated 的更多。但是被deprecated 我基本上就没用过,现在就这么没了,就好像在我的生命中从来没存在过一样,管他呢,哈哈!!

3点感觉:

1)raise_objection and drop_objection之前还是挺好用的,也没体会到什么不方便啊。

2)server和recorder的改进,感觉log的后处理要真正结合Python or Perl 发挥威力了。

3)set_propagate_mode 不知道有多少好处呢,之前也没注意过这个。

你可能感兴趣的:(UVM)