微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 微电子和IC设计 > IC验证交流 > 求问一个uvm starting phase 为 null 的问题

求问一个uvm starting phase 为 null 的问题

时间:10-02 整理:3721RD 点击:
在做的项目使用了一个比较老的VIP环境,VIP自带的squence机制使用的是比较老的`uvm_sequence_utils的宏注册到VIP自带的sequencer上,现有的环境吧原来的VIP sequence作为子sequence放到seq lib基类中,在seq lib中用

  1. virtual task pre_body();
  2. if(starting_phase != null)
  3. starting_phase.raise_objection(this,{"Running sequence '",get_full_name(),"'"});
  4. endtask : pre_body

  5. virtual task post_body();
  6. if(starting_phase != null)
  7. starting_phase.drop_objection(this,{"Completed sequence '",get_full_name(),"'"});
  8. endtask : post_body

复制代码


raise 和drop objection
原有的VIP的sequencer加入到virtual sequencer中,
新增加的virtual sequence继承seq lib基类而来,然后在test阶段将vseq绑定到v sequencer上

仿真报告中,seq lib基类中pre_body和post_body的信息没有打印
在vseq中检查starting_phase phase !=null,但是vseq用`uvm_do_on 调用的VIP seq中 starting_phase=null
run_phase阶段仿真时间没有推进,但是进入了body函数 ,使用工具 irun 12.20-s15 ,uvm版本1.1c,请问这种现象是什么原因引起的,在网上看到介绍说starting_phase 是seq成功指向sequencer的指针,那么我环境的问题是否是由于seq和sequencer的transaction类型不导致的

这个是正常的,vseq只会调用自己的pre&post,不会调用原来seq的,所以这种情况是必然的,
你在vseq的pre&post加上raise跟drop应该就可以了

先谢谢, vseq不能调用自己父类中的pre和post吗

2楼正解,这种情况是必然的,v_seq不会对这两个函数的

不推荐使用pre/post body两个函数,有时不会被call, 完全可以在基类的body中实现,然后实际用到的sequence的body中调用super.body()

starting phase的赋值发生的机制是1.run_test()->excute_phases()->traverse->excute()->sqr.start_phase_sequence();
2.start_phase_sequence()中会通过uvm_config_db::get 得到default_sequence的名字,如果get 到了default sequence的名字就会create default_sequence,并且将当前phase(uvm_main_phase或者uvm_run_phase)的句柄赋值给starting phase,如果没有get 到就会直接return退出当前函数;
3.由于uvm_config_db::set default sequence只针对的是virtual sequencer,当执行你调用的子sequencer的时候由于没有uvm_config_db::get到default sequence的名字,所以会直接退出return;4.所以如果使用了default_sequence机制,并且default sequence中有子sequence,这个时候要在子sequence使用starting_phase.raise_object要非常小心;4.这个跟pre body,post body貌似没有多大关系;
4.具体代码请见uvm1.1 中文件 uvm_sequencer_base.svh


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top