sequence啟動方式


1、在某個component(例如my_sequencer、my_env)的main_phase中手工啟動sequence:

     task  my_sequencer::main_phase(uvm_phase phase);

          my_sequence  seq;

          phase.raise_objection(this);

          seq=my_sequence::type_id::create("seq");

          seq.start(this);

          phase.drop_objection(this);

     endtask

 

task  my_env::main_phase(uvm_phase phase);

      my_sequence seq;

      phase.raise_objection(this);

      seq=my_sequence::type_id::create("seq");

      seq.start(i_agt.sqr);

       phase.drop_objection(this);

endtask

2、在某個component的build_phase中設置如下代碼即可:

例如my_env中:

virtual function void  build_phase(uvm_phase phase);

    super.build_phase(phase);

……

     uvm_config_db#(uvm_object_wrapper)::set(this,"i_agt.sqr.main_phase","default_sequence",my_sequence::type_id::get());

endfunction

例如top_tb中:

module  top_tb;

    ……

     initial begin

          uvm_config_db#(uvm_object_wrapper)::set(null,"uvm_test_top.i_agt.sqr.main_phase","default_sequence",my_sequence::type_id::get());

     end

endmodule

例如my_agent中:

function void my_agent::build_phase(uvm_phase phase);

     super.build_phase(phase);

……

      uvm_config_db#(uvm_object_wrapper)::set(this,"sqr.main_phase","default_sequence",my_sequence::type_id::get());

endfunction

 

以上兩種方式原理相同:

      在uvm_sequence這個基類中,有一個變量名為starting_phase,它的類型是uvm_phase。

      sequencer在啟動default_sequence時,會自動做如下相關操作:

task my_sequencer::main_phase(uvm_phase phase);

    .......

     seq.starting_phase=phase;

     seq.start(this);

    ......

endtask

       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM