Printing in UVM

In reply to dave_59:

Hi Dave ,

A few follow up questions

(1) I understand that print and print_topology are functions of different classes .
From Test i.e “uvm_test_top” via both this.print() and uvm_top.print_topology() ,
I observe same output i.e TB Structure .

However from user_env , this.print() would display hierarchy from env and the hierarchy below env
( i.e agent and it’s sub-components i.e driver and sequencer ) whereas
uvm_top.print_topology()would still show the entire TB hierarchy from uvm_test_top

So essentially ::
(a) print function inherited from uvm_object shows the TB hierarchy
from below that component and it’s sub - components .
(b)
uvm_top.print_topology() shows the entire TB hierarchy irrespective from where it’s called

From body() of user_sequence via this.print() the output is different ::


---------------------------------------------------------------------------
Name                           Type           Size  Value                  
---------------------------------------------------------------------------
seq_h                          user_seq       -     @637                   
  begin_time                   time           64    0                      
  depth                        int            32    'd1                    
  parent sequence (name)       string         0     ""                     
  parent sequence (full name)  string         0     ""                     
  sequencer                    string         23    uvm_test_top.env_h.seqr
  req                          user_seq_item  -     @642                   
  rsp                          rsp_ext_item   -     @646                   
--------------------------------------------------------------------------- 

( 2 ) Could you please elaborate on

   
       "Direct access has problems with time 0 initialization race conditions."
       
I  understand  that  static  property  initialization  is  undefined  in  LRM .
To  ensure  that  there  exists  a  Singleton  instance  of  factory ,  user  needs  to
call  factory  static  function  get . 

So  doesn't  this  eliminate  the  time 0 race  conditions ?