如何重写派生类中的成员变量?

问题描述 投票:0回答:1

我有一个基类,我计划将其扩展为几个不同的序列,并且每个序列需要有自己的 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
对象定义,则会收到编译器错误。还有另一种方法可以编译吗?

system-verilog
1个回答
0
投票

使用前需要转换为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
© www.soinside.com 2019 - 2024. All rights reserved.