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;
再编写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