sequence&sequencer&driver

上一篇 / 下一篇  2018-02-08 12:24:33

1.sequence机制
     uvm_task_phase,start_default_sequence调用seq.start(sqr)调用uvm_do。
start_phase_sequence,sequencer内部函数,启动default.非正常sequencer.start启动.匹配到default sequence,然后执行seq.start,调用body。
      进入到熟悉的uvm_do,这就牵涉到item的送取以及done的过程。
          简化就是 start_item(seq);
                          finish_item(seq);
                      
可以看到sequencer在这个地方的组件作用被弱化,只是调用了sequener的seq处理方法。送到seq_expert端口。结合tlm的fifo机制,不难理解,fifo从sequencer的port端口得到item,送到driver的port端口。连接关系:

       seq_port   ====  <export_fifo ---- export>  ====driver_port

virtual sequence.  ----多个virtual主要对应于多接口下发的数据存在一些时序先后关系。
   使用方法:
重新定义virtual sequence和sequencer。定义过程有一些约束,在定义virtual sequence的时候需要'uvm_declare_p_sequencer(vir_sequencer).赋值给p_sequencer.后续调用uvm_on的时候会用到。

       class vsequencer extends uvm_sequencer;
             'uvm_component_utils(v_sequencer);
             c_sequencer c_seqr;
             d_sequencer d_seqr;
        endclass
   class tc_base uvm_test;
       b_env env;
       vsequencer  vsqr;
        function build_phase(uvm_phase phase);
              v_sequencer::type_id::create("vsqr",this);
        endfunction
       function connect_phase();
                vsqr.c_sqr=env.d_vip.c_sqr;
                vsqr.d_sqr=env.d_vio.d_sqr;
       endfunction
    endclass  
class vseq extends uvm_sequence;
     'uvm_object_with();
     'uvm_declare_p_sequencer(v_sequencer);
  task body();
       c_seq cseq;
       d_seq  dseq;
        'uvm_do_on(cseq,p_sequencer.c_sqr);
         'uvm_do_on(dseq,p_sequencer.d_sqr);
    endtask
endclass

2.uvm小栗子及debug方法


TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2018-08-13  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 2096
  • 日志数: 13
  • 建立时间: 2018-01-29
  • 更新时间: 2018-05-29

RSS订阅

Open Toolbar
博聚网