微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 微电子和IC设计 > IC验证交流 > 求助:p_sequencer的使用

求助:p_sequencer的使用

时间:10-02 整理:3721RD 点击:

各位:
继续跟UVM死磕。
今天使用UVM的virtual sequencer的时候遇到一个问题。本来我认为要使用virtual sequencer只需要在相应的sequence中用`uvm_declare_p_sequencer()申明一下就可以了,然后就可以使用p_sequencer来指向这个virtual sequencer。但是我这次却遇到p_sequencer为null的情况。不知道是为什么呢?代码如下:

  1. vsequence extends uvm_sequence;
  2. `uvm_object_utils(vsequence)
  3. `uvm_declare_p_sequencer(vsequencer)
  4. base_reg_seqreg_seq;
  5. function new (string name="vsequence");
  6. super.new(name);
  7. endfunction : new
  8. virtual task body();
  9. reg_seq=base_reg_seq::type_id::create("reg_seq");
  10. if(p_sequencer==null)
  11. `uvm_error("p_sequencer get error","In vsequence ,could not get p_sequencer,and p_sequencer is null")
  12. endtask :body

复制代码

结果当然是11行的`uvm_error中的信息被打印出来了,说明p_sequencer是null,我该怎么做才能正确使用p_sequencer呢?

有可能是你的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).

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

网站地图

Top