我有一个基类,我计划将其扩展为几个不同的序列,并且每个序列需要有自己的 seq_cfg 对象。我还希望基类有一个基 seq_cfg 对象,其他派生类的 seq_cfg 可以从中扩展。所以我想实现如下所示的东西:
virtual class base_seq_cfg extends uvm_object;
my_sequencer_c sqr;
endclass
virtual class base_seq extends uvm_object;
base_seq_cfg cfg;
task send_item();
//assume this seq is defined somewhere else
basic_seq_c basic_seq;
basic_seq.start(cfg.sqr, this);
endtask
endclass
class test_seq1_cfg extends base_seq_cfg;
int iterations;
endclass
class test_seq1 extends base_seq;
test_seq1_cfg cfg; //I don't think I can override the 'cfg' object handle like this
task body();
for (int i = 0; i < cfg.iterations; ++i) begin
send_item();
end
endtask
endclass
所以我希望能够定义几个不同的序列,例如从
test_seq1
扩展的base_seq
,并使用它的常见功能/任务,例如send_item
。但我也希望从 base_seq
延伸的序列拥有自己的 seq_cfg,这些序列也从 base_seq_cfg
延伸。我仍然希望 base_seq 能够使用 cfg
对象来访问定序器。但是,如果我尝试重写派生类中的 cfg
对象定义,则会收到编译器错误。还有另一种方法可以编译吗?
使用前需要转换为test_seq1_cfg。下面的代码解决了您代码中的问题。
class test_seq1 extends base_seq;
task body();
test_seq1_cfg cfg_n;
$cast(cfg_n,cfg);
for (int i = 0; i < cfg_n.iterations; ++i) begin
send_item();
end
endtask
endclass