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 ?