UVM TPRGEDが出た uvm_warning

Systemverilog

現象

同じAgentを継承して別々なEnvを作成して

そのEnvをテストベンチに組み込むとTPRGEDのWarningが出ます

top.sv
package pkg1;
    `include "uvm_macros.svh"
    import uvm_pkg::*;

    `include "agent.svh"

    class env1 extends uvm_env;
        `uvm_component_utils(env1)
        agent a;
        function new(string name = "env1", uvm_component parent = null);
            super.new(name, parent);
        endfunction
        function void build_phase(uvm_phase phase);
            super.build_phase(phase);
            a = agent::type_id::create("a", this);
        endfunction
    endclass
endpackage
package pkg2;
    `include "uvm_macros.svh"
    import uvm_pkg::*;

    `include "agent.svh"

    class env2 extends uvm_env;
        `uvm_component_utils(env2)
        agent a;
        function new(string name = "env2", uvm_component parent = null);
            super.new(name, parent);
        endfunction
        function void build_phase(uvm_phase phase);
            super.build_phase(phase);
            a = agent::type_id::create("a", this);
        endfunction
    endclass
endpackage

module top;
    import pkg1::*;
    import pkg2::*;
endmodule
agent.svh
class agent extends uvm_agent;
    `uvm_component_utils(agent)
    function new(string name = "agent", uvm_component parent = null);
        super.new(name, parent);
    endfunction
endclass

解決策

Agentでuvm_component_utils()が同じ名前で登録しているのでワーニングが起きているようです。

uvm_component_param_utils()に変更したらワーニングが消えました。

agent.svh(変更後)
class agent extends uvm_agent;
    // `uvm_component_utils(agent)
    `uvm_component_param_utils(agent)
    function new(string name = "agent", uvm_component parent = null);
        super.new(name, parent);
    endfunction
endclass

まとめ

uvm_component_utils()とuvm_component_param_utils()の違いは何なんでしょう。

置き換えて問題ないんですかね。

コメント

タイトルとURLをコピーしました