求助:p_sequencer的使用
时间:10-02
整理:3721RD
点击:
各位:
继续跟UVM死磕。
今天使用UVM的virtual sequencer的时候遇到一个问题。本来我认为要使用virtual sequencer只需要在相应的sequence中用`uvm_declare_p_sequencer()申明一下就可以了,然后就可以使用p_sequencer来指向这个virtual sequencer。但是我这次却遇到p_sequencer为null的情况。不知道是为什么呢?代码如下:
- vsequence extends uvm_sequence;
- `uvm_object_utils(vsequence)
- `uvm_declare_p_sequencer(vsequencer)
- base_reg_seqreg_seq;
- function new (string name="vsequence");
- super.new(name);
- endfunction : new
- virtual task body();
- reg_seq=base_reg_seq::type_id::create("reg_seq");
- if(p_sequencer==null)
- `uvm_error("p_sequencer get error","In vsequence ,could not get p_sequencer,and p_sequencer is null")
- endtask :body
有可能是你的vseqencer没有使用宏进行注册。
还有就是你的vsequencer在环境中new过或者create过了么?
你是指 `uvm_component_utils(vsequencer)么?这个是有的。
这个也确认有。
在test中:
vsequencer vsqr;
virtual function void build_phase(...);
vsqr=vsequencer::type_id::create("vsqr",this);
.....
.....
make sure there are always "super.build_phase(phase)" at the beginning ofeach build_phase() function in your env.
这个有很大的问题么?
yes,a big deal
如果是忘了写这一句呢?会产生什么后果呢?
Any override should call super.build_phase(phase) to execute the automatic configuration of fields registed in the component by calling apply_config_settings. To turn off automatic configuration for a component, do not call super.build_phase(phase).