2011年6月25日 星期六

UVM Register(八)

uvm_reg_sequence

This class provides base functionality for both user-defined RegModel test sequences and “register translation sequences”.

拿來作test pattern之用

























直接看圖可以知道uvm_reg_sequence連接到bus_sequence

由UVM library查出

class uvm_reg_sequence #(type BASE=uvm_sequence #(uvm_reg_item)) extends BASE;

`uvm_object_param_utils(uvm_reg_sequence #(BASE))

所以uvm_reg_sequence是繼承自uvm_sequence

一個還不錯的Makefile簡介

Makefile 語法簡介

參考網站
http://tetralet.luna.com.tw/index.php?op=ViewArticle&articleId=185

我個人是覺得寫個蠻簡潔易懂的

Makefile 的 ifdef

參考網站
http://www.linuxsir.org/main/doc/gnumake/GNUmake_v3.80-zh_CN_html/make-07.html

其它Makefile的完整章節在
http://www.linuxsir.org/main/doc/gnumake/GNUmake_v3.80-zh_CN_html/index.html#content

3 关键字“ifdef

关键字“ifdef”用来判断一个变量是否已经定义。格式为:

`ifdef VARIABLE-NAME'

1

bar =

foo = $(bar)

ifdef foo

frobozz = yes

else

frobozz = no

endif

2

foo =

ifdef foo

frobozz = yes

else

frobozz = no

endif

1中的结果是:“frobozz = yes”;而例2的结果是:“frobozz = no”。其原因就是在例1中,变量“foo”的定义是“foo = $(bar)”。虽然变量“bar”的值为空,但是“ifdef”判断的结果是真。因此当我们需要判断一个变量的值是否为空的情况时,需要使用“ifeq”(或者“ifneq”)而不是“ifdef”。可参考前两个小节的内容。

2011年6月24日 星期五

UVM Register(七)

uvm_reg_block的其它基本使用function

lock_model

virtual function void lock_model()

Lock a model and build the address map.

Recursively lock an entire register model and build the address maps to enable the uvm_reg_map::get_reg_by_offset() and uvm_reg_map::get_mem_by_offset() methods.

Once locked, no further structural changes, such as adding registers or memories, can be made.

It is not possible to unlock a model.鎖住了就不能再設定了


set_hdl_path_root

function void set_hdl_path_root ( string path,

string kind = "RTL" )

Specify a root HDL path

Set the specified path as the absolute HDL path to the block instance for the specified design abstraction. This absolute root path is preppended to all hierarchical paths under this block. The HDL path of any ancestor block is ignored. This method overrides any incremental path for the same design abstraction specified using add_hdl_path.

指向對映這個uvm_reg_block的實體設計的path

這個path必須自行指定,例如

string hdl_root = "tb_top.dut";
regmodel.set_hdl_path_root(hdl_root);



UVM Register(六)

uvm_reg_map

An address map is a collection of registers and memories accessible via a specific physical interface. Address maps can be composed into higher-level address maps.


基本上uvm_reg_map是搭配uvm_reg_block一起使用

因此uvm_reg_block內部有一個default_map的變數就是uvm_reg_map的type

搭配上除了create_map()之外,另外還有兩個function就是add_reg()及add_mem()

virtual function void add_reg ( uvm_reg rg,

uvm_reg_addr_t offset, // 這個對映的uvm_reg的起始位置


string rights = "RW",

bit unmapped = 0,

uvm_reg_frontdoor frontdoor = null )


virtual function void add_mem ( uvm_mem mem,

uvm_reg_addr_t
offset, // 這個對映的uvm_mem的起始位置


string rights = "RW",

bit unmapped = 0,

uvm_reg_frontdoor frontdoor = null )


使用範例如下
// define default map
default_map = create_map("default_map", 'h0, 4, UVM_LITTLE_ENDIAN, 1);
default_map.add_reg(ID, 'h0, "RW");
default_map.add_reg(DATA, 'h24, "RW");
foreach (SOCKET[i])
default_map.add_reg(SOCKET[i], 'h1000 + 16 * i, "RW");

default_map.add_mem(RAM, 'h2000, "RW");

2011年6月23日 星期四

UVM Register(五)

uvm_reg_block的基本設定

Block abstraction base class

A block represents a design hierarchy. It can contain registers, register files, memories and sub-blocks.

A block has one or more address maps, each corresponding to a physical interface on the block.












在裡面包含了uvm_reg_field, uvm_mem, uvm_reg...


一個簡單的uvm_reg_block範例

class dut_regmodel extends uvm_reg_block;

rand dut_ID ID; // uvm_reg
rand dut_DATA DATA;// uvm_reg

rand dut_SOCKET SOCKET[256]; // uvm_reg, array type

rand dut_RAM RAM; // uvm_mem

function new(string name = "slave");
super.new(name,UVM_NO_COVERAGE);
endfunction

virtual function void build();

// create
ID = dut_ID::type_id::create("ID");
DATA = dut_DATA::type_id::create("DATA");
foreach (SOCKET[i])
SOCKET[i] = dut_SOCKET::type_id::create($sformatf("SOCKET[%0d]",i));
RAM = dut_RAM::type_id::create("DMA_RAM");

// configure
ID.configure(this,null,"ID");
ID.build();
DATA.configure(this,null,"DATA");
DATA.build();
foreach (SOCKET[i]) begin
SOCKET[i].configure(this,null,$sformatf("SOCKET[%0d]",i));
SOCKET[i].build();
end
RAM.configure(this,"DMA");

// define default map, 因為uvm_reg_block內部有一個預設的uvm_reg_map叫default_map

//對每一個uvm_reg_block 都必須將map設定好,可使用內定function default_map來創建map

default_map = create_map("default_map", 'h0, 4, UVM_LITTLE_ENDIAN, 1);
default_map.add_reg(ID, 'h0, "RW");
default_map.add_reg(DATA, 'h24, "RW");
foreach (SOCKET[i])
default_map.add_reg(SOCKET[i], 'h1000 + 16 * i, "RW");
default_map.add_mem(RAM, 'h2000, "RW");

endfunction

`uvm_object_utils(dut_regmodel)

endclass : dut_regmodel


uvm_reg_map的create_map要放在uvm_reg_block用

virtual function uvm_reg_map create_map(
string name,


uvm_reg_addr_t base_addr,


int unsigned n_bytes,// 一次讀寫的bytes數



uvm_endianness_e endian,


bit byte_addressing = )


UVM Register(四)

uvm_mem 定義如同uvm_reg,只是uvm_mem是作為一個memory之用

使用範例
class dut_RAM extends uvm_mem;

function new(string name = "dut_RAM");
super.new(name,'h400,32,"RW",UVM_NO_COVERAGE);//0x400的mem array, x 32bits
endfunction

`uvm_object_utils(dut_RAM)

endclass


new method

new

function new (
string name,


longint unsigned size, // total memory size



int unsigned n_bits, // 每一個位址所含的bits數




string access = "RW",


int has_coverage = UVM_NO_COVERAGE )

2011年6月22日 星期三

EDA Standard List

full ranking of IEEE EDA standards

1 IEEE 1364-2001 Verilog Hardware Description Language
2 IEEE 1800-2009 SystemVerilog–Unified Hardware Design, Specification, and Verification Language
3 IEEE 1076-2002 VHDL Language Reference Manual
4 IEEE 1076-1993 VHDL Language Reference Manual
5 IEEE 1499-1998 Interface for Hardware Description Models of Electronic Components
6 IEEE 1364-1995 Hardware Description Language Based on the Verilog® Hardware Description Language
7 IEEE 1800-2005 SystemVerilog: Unified Hardware Design, Specification and Verification Language
8 IEEE 1076.2-1996 VHDL Mathematical Packages
9 IEEE 1076.1-1999 VHDL Analog and Mixed-Signal Extensions
10 IEEE 1685-2009 IP-XACT, Standard Structure for Packaging, Integrating, and Reusing IP within Tool Flows
11 IEEE 1850-2005 Property Specification Language (PSL)
12 IEEE 1076c-2007 VHDL Language Reference Manual – Procedural Language Application Interface
13 IEEE 1164-1993 Multivalue Logic System for VHDL Model Interoperability (Std_logic_1164)
14 IEEE 1850-2010 Property Specification Language (PSL)
15 IEEE 1076.6-2004 VHDL Register Transfer Level (RTL) Synthesis
16 IEEE 1801-2009 Design and Verification of Low Power Integrated Circuits
17 IEEE 1481-2009 Integrated Circuit (IC) Open Library Architecture (OLA)
18 IEEE 1076.4-1995 VITAL Application-Specific Integrated Circuit (ASIC) Modeling Specification
19 IEEE/IEC 61691-5-2004 IEC 61691-5 Ed.1 (IEEE Std 1076.4(TM)-2000): Behavioural Languages – Part 5: Standard VITAL ASIC (Application Specific Integrated Circuit) Modeling Specification
20 IEEE 1647-2008 Functional Verification Language e
21 IEEE 1076.1.1-2011 VHDL Analog and Mixed-Signal Extensions — Packages for Multiple Energy Domain Support
22 IEEE/IEC 61691-7-2009 Behavioural languages – Part 7: SystemC Language Reference Manual
23 IEEE 1076-1987 VHDL Language Reference Manual
24 IEEE 1076.1.1-2004 VHDL Analog and Mixed-Signal Extensions—Packages for Multiple Energy Domain Support
25 IEEE 1076.3-1997 VHDL Synthesis Packages
26 IEEE/IEC 61523-3-2004 IEC 61523-3 Ed.1 (IEEE Std 1497(TM)-2001): Delay and Power Calculation Standards – Part 3: Standard Delay Format (SDF) for the Electronic Design Process
27 IEEE 1076/INT-1991 Interpretations: IEEE Std 1076-1987, IEEE Standard VHDL Language Reference Manual
28 IEEE/IEC 62531-2007 IEC 62531 Ed. 1 (2007-11) (IEEE Std 1850-2005): Standard for Property Specification Language (PSL)
29 IEEE 1076.6-1999 VHDL Register Transfer Level Synthesis
30 IEEE 1647-2006 Functional Verification Language “e”
31 IEEE/IEC 61691-6-2009 Behavioural languages – Part 6: VHDL Analog and Mixed-Signal Extensions
32 IEEE 1666-2005 SystemC® Language Reference Manual
33 IEEE/IEC 61691-1-1-2004 IEC 61691-1-1 Ed.1 (IEEE Std 1076(TM)-2002): Behavioural Languages – Part 1-1: VHDL Language Reference Manual
34 IEEE 1364-2005 Verilog Hardware Description Language
35 IEEE/IEC 61691-4-2004 IEC 61691-4 Ed.1 (IEEE Std 1364(TM)-2001): Behavioural Languages – Part 4: Verilog® Hardware Description Language
36 IEEE 1076.4-2000 VITAL ASIC (Application Specific Integrated Circuit) Modeling Specification

uvm_transaction

uvm_transaction is a typedef of uvm_sequence_item.

uvm_sequence_item是從
uvm_transaction繼承而來的

所以用法也一樣
但是少了
Reporting Interface
因此不能用
uvm_report_info
uvm_report_warning
uvm_report_error
uvm_report_fatal

或者說少了
uvm_sequence_item所定義的一些function


參考用法如下
class packet extends uvm_transaction;

`ifndef NO_RAND
rand
`endif
int addr;

`uvm_object_utils_begin(packet)
`uvm_field_int(addr, UVM_ALL_ON)
`uvm_object_utils_end

constraint c { addr >= 0 && addr < 'h100; }

endclass


2011年6月21日 星期二

UVM _decl的用法

以 uvm_analysis_imp為例

`uvm_analysis_imp_decl(_rcvd_pkt)
`uvm_analysis_imp_decl(_sent_pkt)

宣告了兩個
2 imports,而這兩個是原來UVM library沒有的



使用方法(再scoreboard 中,然後包含Packtet 這個queue)

Packet exp_que[$];

uvm_analysis_imp_rcvd_pkt #(Packet,Scoreboard) Rcvr2Sb_port;
uvm_analysis_imp_sent_pkt #(Packet,Scoreboard) Drvr2Sb_port;

function new(string name, uvm_component parent);
super.new(name, parent);
Rcvr2Sb_port = new("Rcvr2Sb", this);
Drvr2Sb_port = new("Drvr2Sb", this);
endfunction : new


以下是一個完整的參考例
`include "uvm_pkg.sv"

package my_analysis_imps_pkg;
import uvm_pkg::*;
`include "uvm_macros.svh"
`uvm_analysis_imp_decl(_inport1)
`uvm_analysis_imp_decl(_inport2)
`uvm_analysis_imp_decl(_outport1)
`uvm_analysis_imp_decl(_outport2)
endpackage : my_analysis_imps_pkg

package my_tx_pkg;
import uvm_pkg::*;
`include "uvm_macros.svh"
class mytx extends uvm_sequence_item;
rand bit [7:0] addr;
rand bit [7:0] data;

`uvm_object_utils_begin(mytx);
`uvm_field_int(addr, UVM_DEFAULT);
`uvm_field_int(data, UVM_DEFAULT);
`uvm_object_utils_end

function new(string name="mytx");
super.new(name);
endfunction : new

function mytx transform1();
// transform function #1
return(this);
endfunction : transform1

function mytx transform2();
// transform function #2
return(this);
endfunction : transform2

endclass : mytx
endpackage: my_tx_pkg

package scoreboard_pkg;
import uvm_pkg::*;
`include "uvm_macros.svh"
import my_analysis_imps_pkg::*;
import my_tx_pkg::*;

mytx q1[$], q2[$];
class myscoreboard extends uvm_component;
uvm_analysis_imp_inport1 #(mytx, myscoreboard) in_export_1;
uvm_analysis_imp_inport2 #(mytx, myscoreboard) in_export_2;
uvm_analysis_imp_outport1 #(mytx, myscoreboard) out_export_1;
uvm_analysis_imp_outport2 #(mytx, myscoreboard) out_export_2;

function new(string name, uvm_component parent);
super.new(name, parent);
in_export_1 = new("in_export_1", this);
in_export_2 = new("in_export_2", this);
out_export_1 = new("out_export_1", this);
out_export_1 = new("out_export_1", this);
endfunction : new

function void write_inport1(mytx t);
q1.push_back(t);
endfunction : write_inport1

function void write_inport2(mytx t);
q2.push_back(t);
endfunction : write_inport2

function void write_outport1(mytx t);
mytx t1, t2;
t1 = q1.pop_front();
t2 = t.transform1(); // execute some transformation function
if (!t1.compare(t.transform1()))
`uvm_error("SBFAIL", $psprintf("Expected: %s Got: %s", t1.sprint(), t2.sprint()))
endfunction : write_outport1

function void write_outport2(mytx t);
mytx t1, t2;
t1 = q2.pop_front();
t2 = t.transform2(); // execute some transformation function
if (!t1.compare(t.transform2()))
`uvm_error("SBFAIL", $psprintf("Expected: %s Got: %s", t1.sprint(), t2.sprint()))
endfunction : write_outport2
endclass : myscoreboard
endpackage : scoreboard_pkg


UVM Register(三)

UVM register 的Data type

uvm_reg_data_t

2-state data value with `UVM_REG_DATA_WIDTH bits

uvm_reg_data_logic_t

4-state data value with `UVM_REG_DATA_WIDTH bits

uvm_reg_addr_t

2-state address value with `UVM_REG_ADDR_WIDTH bits

uvm_reg_addr_logic_t

4-state address value with `UVM_REG_ADDR_WIDTH bits

uvm_reg_byte_en_t

2-state byte_enable value with `UVM_REG_BYTENABLE_WIDTH bits

uvm_reg_cvr_t

Coverage model value set with `UVM_REG_CVR_WIDTH bits.

Symbolic values for individual coverage models are defined by the uvm_coverage_model_e type.

The following bits in the set are assigned as follows

0-7UVM pre-defined coverage models
8-15Coverage models defined by EDA vendors, implemented in a register model generator.
16-23User-defined coverage models
24..Reserved

uvm_hdl_path_slice

Slice of an HDL path

Struct that specifies the HDL variable that corresponds to all or a portion of a register.

pathPath to the HDL variable.
.Offset of the LSB in the register that this variable implements
sizeNumber of bits (toward the MSB) that this variable implements

If the HDL variable implements all of the register, offset and size are specified as -1. For example:

r1.add_hdl_path('{ '{"r1", -1, -1} });

UVM Register(二)

一個簡當的uvm_reg 及 uvm_reg_field 的使用

class dut_SOCKET extends uvm_reg;

rand uvm_reg_field IP;
rand uvm_reg_field PORT;

function new(string name = "dut_ADDR"); //雖然class名是dut_SOCKET,但是使用的name卻是這個
super.new(name,64,UVM_NO_COVERAGE); // 定義這個uvm_reg使用的長度
endfunction: new

virtual function void build();
this.IP = uvm_reg_field::type_id::create("value"); //兩個string name皆為value
this.PORT = uvm_reg_field::type_id::create("value");

this.IP.configure(this, 48, 0, "RW", 0, 48'h0, 1, 0, 1);
this.PORT.configure(this, 16, 48, "RW", 0, 16'h0, 1, 0, 1);

// 此處兩個uvm_reg_field被packet 起來, IP放在0~47的bits上,PORT放在接下來的16bits
endfunction

`uvm_object_utils(dut_SOCKET)

endclass

相關function

uvm_reg

new

function new (
string name = "",

int unsigned n_bits,



int has_coverage

)



uvm_reg_field

function void configure(
uvm_reg parent,

int unsigned size,

int unsigned lsb_pos, // 在此uvm_reg下起始的packet bits位置


string access,


bit volatile,


uvm_reg_data_t reset,


bit has_reset,


bit is_rand,


bit individually_accessible )

2011年6月20日 星期一

UVM Register(一)

要了解 UVM Register,先看一下
General Register Verification Environment





加上UVM_Model

將Design package起來的例子

簡單的package方法

`ifndef APB__SV
`define APB__SV

`include "apb_if.sv"

package apb_pkg;

import uvm_pkg::*;

typedef virtual apb_if apb_vif;

typedef class apb_agent;

`include "apb_rw.sv"
`include "apb_config.sv"
`include "apb_master.sv"
`include "apb_monitor.sv"
`include "apb_sequencer.sv"
`include "apb_agent.sv"
endpackage

`endif


使用方法如下


`include "apb.sv" // 這是上面package的檔案
`include "dut.sv"

module tb_top;
...
endmoudle

fsdb技巧(二)

在Verdi下
一個簡單的Memory Dump方法

$fsdbDumpfile("tb_top.fsdb");
$fsdbDumpvars(0, tb_top,"+mda"); //將所有的Memory都Dump出來
$fsdbDumpMDA(tb_top.dut.SOCKET); //只將SOCKET這個array給Dump出來
$fsdbDumpflush ;

2011年6月19日 星期日

UVM 對比OVM 比較大的改進部分

- Register modeling with uvm_reg. Provides the base classes for creating
register verification models and stimulating and checking the DUT
registers. Also includes backdoor access to DUT registers.

- Runtime phases. Provides the ability to section the run phase into
multiple run time phases. Components can further be sectioned into
seperate domains for fine grained phase synchronization. And, it is
possible to jump from phases either forward or backward giving full
control of the phasing control flow.

- TLM 2 SystemVerilog implementation. Provides a SystemVerilog
implementation for many of the classes from TLM 2, including (but not
limited to), generic payload and sockets.

- Resource and configuration database. Extends the configuration mechanism
to allow generic datatypes to be used for configuration. And, allows for
resources to be disassociated from the verification hierarchy.

- Command line processor. Provides access to all simulator command line
arguments (similar to the SystemVerilog $value$plusargs but with access to
all argument matches, not just first matches).

- Sequence library. This functionality replaces the string based sequence
library that was available in UVM 1.0EA. The sequence library is not yet
part of the standard. It is a late addition to serve as a replacement for
the deprecated string based sequence library.

- Regular expression matching. The glob style expression matching from UVM
1.0EA has been enhanced to allow for posix regular expression matching on
top of the glob style matching.

** Note: the regular expression matching, HDL backdoor and command line
processor all require DPI import functions. The c++ file,
$UVM_HOME/src/dpi/uvm_dpi.cc provides the necessary implementation code.


** API changes and backward incompatibilities with UVM 1.0EA

- The API for defining user-defined phases is changed. If a user is
using user defined phases, they will either need to change to use
the new runtime phases, or they will need to create their own
custom phases using the new phasing API.

- The run phase semantic is changed to match the semantics of the new
runtime phases. The run phase is now immediately ready to end unless a
component has explicitly raised the phase_done objection for the run phase
during the first nba region of the phase, whereas, in the past the run
phase would not be ready to end unless there was an explicit call to
global_stop_request() or a test_done objection was raised/dropped. The OVM
semantic can be used if the option +UVM_USE_OVM_RUN_SEMANTIC is specified.
Note: the use of the OVM semantic is deprecated and is intended only
as a temporary convenience for migration purposes.

- The stop mechanism, including the uvm_component::stop() callback and
the stop_request function is deprecated. Users should use the
uvm_component::phase_ready_to_end() callback for similar
capability.

- The use of the default_sequence and the `uvm_sequence_utils,
`uvm_declare_sequence_lib, `uvm_update_sequence_lib,
`uvm_update_sequence_lib_and_item and `uvm_sequencer_utils are deprecated.
It is suggested that users move to the new uvm_sequence_library for the
same functionality.

- The default_sequence may be used as a deprecated mechanism to start a
sequence for the run phase, but it is suggested that users switch to
using the phase specific default_sequence for the run phase.

- Some policy object, printer/comparer knobs and functions removed. For
example, the table printer now auto-sizes based on column widths so the
knobs for controlling the column widths no longer apply.

- Phase function/task names have a new signature. The old signature will
continue to work, but is deprecated. The new signature includes _phase in
the name and takes the uvm_phase as an argument. For example:

function void connect();
becomes
function void connect_phase(uvm_phase phase);


** New Features - added since OVM 2.1.1

- uvm_callbacks added support for typewide callbacks by using a null
object identifier.

- Added better runtime type checking for callbacks to ensure that
callbacks are only registered with objects that can use them.

* added type-callback registration macro, `uvm_register_cb.
* added ability to specify inheritence hierarchy of objects using
callbacks via the `uvm_set_super_type macro.

- Added the ability to register callbacks to uvm_components by
name with the uvm_callbacks#(T,CB)::add_by_name() method.

- uvm_report_catcher callback mechanism for reports. Allows messages to
be processed and potentially changed. Catcher callbacks can be added
globally or to specific report objects using the uvm_callbacks add
methods.

- Added a uvm_heartbeat class which allows environments to set up
heartbeat criteria to monitor the liveness of the components in the
hierarchy.

- Added the ability to configure the global timeout using the configuration
mechanism. ovm_top.set_config("","timeout",) will set the
timeout value for the task based phases.

- Added tracing to the objection mechanism. The tracing can be enabled
procedurally with uvm_objection::trace_mode() or can be set via the
command line with +UVM_OBJECTION_TRACE.

- Added raised, dropped, and all_dropped callbacks to the uvm_objection
class. This allows external callbacks to be attached to objections
(not just via the virtual methods in the component class).

UVM 1.1 release

可以在 http://www.accellera.org/activities/vip 下載

UVM 1.1與1.0不同之處
整理如下

** API Changes

3313 Added `ifndef UVM_NO_DEPRECATED around all deprecated to allow users
to check for 1.0 compliance with command line +define.
3399 Change internal defines to include UVM prefix to avoid conflict with
user code.
3402 Fix auto-config when calling build directly on a component. Explicit
calling of build has been deprecated.
3449 Change uvm_reg_indirect_data fields index and data to be protected
instead of local to allow derived class access.
3453 Add plusargs +UVM_RESOURCE_DB_TRACE and +UVM_CONFIG_DB_TRACE for
turning configuration tracing on/off.
3457 Add pointer to uvm_reg_item info in uvm_reg_bus_op.
3458 Add pre_start/post_start callback to uvm_sequence which is called
for all sequences. The pre/post_body callback is only called for
root sequences.
3493 The default value of uvm_reg_block::create_map() has been changed to
1 for consistency with other APIs. ** NOTE ** model generators which
rely on the default value MUST be changed to explicity call create_map
with a value of 0 now, or they will get incorrect results.
3526 Added uvm_reg_map::get_n_bytes_in_lau() to return the addressing
width.
3536 Change uvm_config_db #(T)::get and uvm_resource_db#(T)::read_by_name
to use inout instead of ref to allow implicit type conversions.

** Deprecated APIs

3500 The following methods in uvm_component are deprecated as they do not
work with the new phasing system: kill, status, suspend and resume.
3501 uvm_component::stop() and uvm_component::stop_phase() are deprecated.

** Bug Fixes

3390 Fix reading of resources which have the same name but different type.
3391 Fix uvm_top.enable_print_topology, flag was being ignored.
3393 Allow components to be created during the connect phase.
3400 Fix uvm_objection.wait_for in all_dropped of uvm_top.
3412 Fix auto-config of queue elements for null elements.
3413 Fix uvm_resource#(T)::write() auditing to use correct name.
3422 Fix memory leak in uvm_regex.cc.
3424 Fix deep copy when sub-object is null.
3425 Change order of call to do_copy and macro copy automation to be
consistent with other methods (compare, print, etc.).
3426 Fix configuring a default sequence to null (i.e. no sequence).
3429 Fix incorrect order of uvm_is_match arguments in factory registration.
3431 Fix column sizing for the uvm_factory::print() method.
3436 Remove redundant static cast to class used in task
uvm_phase::execute_phase.
3443 Only update registers when needed on an update.
3456 Base address of address map not used when calculating physical
addresses.
3460 Fix spurious warnings when registering more than one type of callback
with a component.
3470 Fix copy and compare of queues and arrays of objects.
3480 Fix example /examples/simple/basic_examples/module.
3481 Fix auto config when wild cards are used in the field name
3488 Fix run() and post_shutdown() end to be syncronized.
3496 Fix instance path for uvm_test_top component creation in run_test so
that instance overrides can be applied to it.
3497 Fix auto-config precedence ordering to match manual configuration.
3498 Fix auto-config of string associative arrays.
3502 Fix resource tracing/auditing to capture failed lookups.
3506 Fix concurrent drop_objection propagations to not clobber each other.
3509 Fix static init race conditions in uvm_callbacks.
3510 Change end_of_elaboration errors to cause fatal.
3518 Objections raised after PHASE_READY_TO_END but before PHASE_ENDED are
ignored
3529 Fix broken response path for register sequences not providing parent
argument to read/write.
3532 Fix jump forward to not artificially mark phases as 'DONE'.
3533 Added error for phase jumps from non-active phases.
3535 Fix ASCII recording of uvm_recorder.
3572 Phase state should not be READY_TO_END until all ready_to_end()
callbacks return without having re-raised an objection

** Documentation Fixes

3395 Refinements for User Guide.
3406 Update description of uvm_resource_pool::set().
3433 Fix description of report_*_hook invocation order in uvm_report_object.
3444 Fix documentation for uvm_object::copy.
3445 Fix documentation for uvm_report_object::die.
3467 Removed documentation of uvm_component::set_name as it is not
intended to be called directly by the user.
3482 Remove reference to uvm_random_sequence and uvm_exhaustive sequences.
3499 Removed references to deprecated global_stop_request.
3507 Provide complete descripton of transaction begin_event and end_event.
3511 Fix documentation in UG around usage of starting_phase in
sequences.

一個參考用的Computer Web

計算機科學 方面有一些可以參考
http://blog.evisio.net/?p=1405