- UVM reference flow
- UVM tutorial
- http://cluelogic.com/tag/vmm/UVM_AGENT
- virtual sequencer
- handle each sub sequencers when the platform contains multi sequences to drive the same DUT.
- avoid race conditions, transaction sequence, like multi threads system
- ex:
- jb_seq1 = same_flavored_jelly_beans_sequence::type_id::create( .name( "jb_seq1" ), .contxt( get_full_name() ) );
- jb_seq2 = same_flavored_jelly_beans_sequence::type_id::create( .name( "jb_seq2" ), .contxt( get_full_name() ) );
- case ( recipe )
- LEMON_MERINGUE_PIE: begin
- jb_seq1.flavor = jelly_bean_transaction::LEMON;
- jb_seq2.flavor = jelly_bean_transaction::COCONUT;
- jb_seq1.num_jelly_beans = 2;
- jb_seq2.num_jelly_beans = 2;
- configure
- set register , interface from top to down
- test_lib -> test_env -> test_cfg -> test_agent ...
- ex:
- initial begin
- uvm_config_db#( virtual jelly_bean_if )::set
- ( .cntxt( null ), .inst_name( "uvm_test_top" ), .field_name( "jb_if1" ), .value( jb_if1 ) );
- uvm_config_db#( virtual jelly_bean_if )::set
- ( .cntxt( null ), .inst_name( "uvm_test_top" ), .field_name( "jb_if2" ), .value( jb_if2 ) );
- run_test();
- end
- register abstract
- check register r/w limitation(only r/w), fields check, width check, coverage, assertion
- ex:
- flavor = uvm_reg_field::type_id::create( "flavor" );
- flavor.configure( .parent ( this ),
- .size ( 3 ),
- .lsb_pos ( 0 ),
- .access ( "WO" ),
- .volatile ( 0 ),
- .reset ( 0 ),
- .has_reset ( 1 ),
- .is_rand ( 1 ),
- .individually_accessible( 0 ) );
- assertion
- functional coverage
2013年6月25日 星期二
UVM notes 2
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言