現象
同じ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()の違いは何なんでしょう。
置き換えて問題ないんですかね。
コメント