求助:如何将config或者interface传递给sequence?
时间:10-02
整理:3721RD
点击:
各位:
最近在用UVM搭建验证环境,遇到一些中断的问题,需要将interface中一些信号引入sequence中。但是我不管是在sequence中直接定义virtual interface,还是把virtual interface装到config类中传递给sequence,都面临同样的问题,就是无法通过uvm_config_db传递这些配置给sequence。不知道这个问题该如何解决呢?
嗯,具体描述一下,总共有三个sequence,因此,我使用了virtual sequencer来调度。需要引入virtual interface的是irq_sequence,目前我使用的是将virtual interface装到config类中,然后irq_sequence中申明该类。
在我的test class中,我例化该config类,并给其内的virtual interface配置,然后再将该config类配置到sequence中。我是这样写的:
class test中:
然后在irq_sequence的body中:
最终运行的结果是error BODY_IN_IR_SEQ发生了。
最近在用UVM搭建验证环境,遇到一些中断的问题,需要将interface中一些信号引入sequence中。但是我不管是在sequence中直接定义virtual interface,还是把virtual interface装到config类中传递给sequence,都面临同样的问题,就是无法通过uvm_config_db传递这些配置给sequence。不知道这个问题该如何解决呢?
嗯,具体描述一下,总共有三个sequence,因此,我使用了virtual sequencer来调度。需要引入virtual interface的是irq_sequence,目前我使用的是将virtual interface装到config类中,然后irq_sequence中申明该类。
在我的test class中,我例化该config类,并给其内的virtual interface配置,然后再将该config类配置到sequence中。我是这样写的:
class test中:
- my_config=ir_config::type_id::create("my_config")
- if(!uvm_config_db(virtual ir_if)::get(this,"","irq_ir",my_config.irq_if))
- `uvm_error("NO_IRQ_IF","interrupt virtual interface handle not found in test.my_config")
- uvm_config_object::set(this,"*","my_config",my_config);
然后在irq_sequence的body中:
- if(!uvm_config_db#(ir_config)::get(null,get_full_name(),"my_config",my_config))
- `uvm_error("BODY_IN_IR_SEQ","fail to get ir_config")
最终运行的结果是error BODY_IN_IR_SEQ发生了。
从top层点进去不行吗?或者在virtual sequencer中按照driver和monitor的方式把virtual interface传进来,然后在virtual sequence中用p_sequencer点到virtual sequencer中的interface。个人见解,可以试一下。
1.从top层点进去不大行啊,因为我搞不清楚该sequence的层次。Error信息中print出来的get_full_name()的路径是:uvm_test_top.tb0.apb0.master.sequencer@@apb_irq_vdo_seq.irq_seq
可是中间有两个@怎么弄?
2.在virtual sequencer中直接引入virtual interface这个已经实现。没有问题。我这不是刚学UVM,多换着方法折腾一下么,总不能无论什么问题都一个方法搞定吧,多种办法就多种思路呀。
同求结果
如果你的interface是在top层instance的,比如instance的名字是vif_0。个人感觉可以在sequence中可以top.vif_0.int(假设int是interface上的中断信号名),具体还要你试一下。
还有,好像记得uvm_config_db这些只能用在由ovm_component extend出来的class,sequence中应该不行,所以会报error。
我也遇到类似的问题,不知道如何解决啊