日常学习:override、verdi

override不可重载的部分

由于一些原因。变量引用本身依赖于一个路径,这个路径不可变更,因此,使用以下方法获取子类的变量:
https://bbs.eetop.cn/forum.php?mod=viewthread&tid=943020&pid=10887019&page=1&extra=#pid10887019

module aaa ();
    import uvm_pkg::*;
    class base_env extends uvm_env;
        `uvm_component_utils(base_env)
        int b=5;

        function new(string name="base_env", uvm_component parent);
            super.new(name, parent);
        endfunction: new

        function void build_phase(uvm_phase phase);
            super.build_phase(phase);
            $display("base_env");
        endfunction: build_phase

        function void connect_phase(uvm_phase phase); endfunction: connect_phase
    endclass: base_env

    class base1_env extends base_env;
        `uvm_component_utils(base1_env)
        int a=10;

        function new(string name="base1_env", uvm_component parent);
            super.new(name, parent);
        endfunction: new

        function void build_phase(uvm_phase phase);
            super.build_phase(phase);
            $display("base1_env");
            $display("a is %0d",a);
        endfunction: build_phase

        function void connect_phase(uvm_phase phase);
        endfunction: connect_phase
    endclass: base1_env
    class base_test extends uvm_test;
        `uvm_component_utils(base_test)
        base_env env;

        function new(string name="base_test", uvm_component parent);
            super.new(name, parent);
        endfunction: new

        function void build_phase(uvm_phase phase);
            super.build_phase(phase);
            env = base_env::type_id::create("env", this);
        endfunction: build_phase

    endclass: base_test

    class base1_test extends base_test;
        `uvm_component_utils(base1_test)
        base1_env env1;

        function new(string name="base1_test", uvm_component parent);
            super.new(name, parent);
        endfunction: new

        function void build_phase(uvm_phase phase);
            // set_inst_override_by_type("env", base_env::get_type(), base1_env::get_type());
            set_type_override_by_type(base_env::get_type(), base1_env::get_type());
            super.build_phase(phase);
            env1 = base1_env::type_id::create("env1", this);
            
        endfunction: build_phase

        function void connect_phase(uvm_phase phase);
            $display("value a is %0d", this.env1.a);
            $display("value a is %0d", this.env.b);
            $display("value a is %0d", this.env1.b);
        endfunction: connect_phase
    endclass: base1_test

    initial begin
        run_test("base1_test");
    end
endmodule

Verdi的交互式模式

交互式模式打开后,点击运行,可以看到sequece的执行顺序和值
https://blog.csdn.net/Holden_Liu/article/details/106905170

posted @ 2023-02-06 22:35  大浪淘沙、  阅读(50)  评论(0)    收藏  举报