> 技术文档 > virtual sequence and virtual sequancer

virtual sequence and virtual sequancer


遇到的问题:

1. config_db的set的位置放置错误

set必须在components初始化前(build_phase ) 给出。然后自己写的config_db放在了configure_phase里面。导致set的数据一直给不到。

所以建议大家把config_db放在在top的initial block内,肯定不会出问题。

调试config_db的方法。在vcs的complire和sim 参数上增加

+UVM_CONFIG_DB_TRACE

2. sequence的bodytask的继承

在使用virtualsequance时 ,会建立vir_base_sequance.sv 在内部

①声明

·uvm_declare_p_sequencer(virtual sequancer)

定义本地sequencer ,本地的sequancer的定义与virtual sequancer内sequancer一 一对应,也就是virtual sequancer内部sequencer集合:

virtualsequancer内部的sequence可以直接

uvm_sequencer#(item) sequencer1 ;

uvm_sequencer#(item) sequencer1 ;

或者 :

extern_sequencer1 sequencer1;

extern_sequencer2 sequencer1;

sequence.sv vir_sequencer uvm_sequencer#(itema) sqer1; uvm_sequencer#(itema) sqer1; uvm_sequencer#(itema) sqer2; uvm_sequencer#(itema) sqer2;

再编写extern_sequencer1.sv 和extern_sequencer2.sv

这里推荐第一种写法。

③ bodytask内连接 :

如果本地的virtual_sequance存在嵌套,则需要2个sequance :一个base virtual sequence实现p_sequancer ,定义localsequencer ,在body内连接 : local_sequancer = p_sequancer.sequencer ;另外一个sequence继承自base virtual sequence ,定于本地sequence 在body内,继承super.body(),启动sequance 。

NOTE:之前没有继承,导致p_sequencer和localsequancer连接失败

有2种启动方式:

使用uvmmarcon :

`uvm_do_on(sequence,sequencer)

使用start :

sequencesq=sequence::type_id::creatr(\"sq\");

sq.randomize();

sq.start(sequencer);

3. uvm_do_on

uvm_do_on支持sequence / sequence item与sequencer的绑定。 sequenceitem当成子弹,sequence

七胖网