前回のおさらい
テストベンチにEnv階層を追加しました
sample_env.svh
class sample_env extends uvm_env;
`uvm_component_utils(sample_env)
function new(string name, uvm_component parent);
super.new(name, parent);
endfunction
task run_phase(uvm_phase phase);
`uvm_info(this.get_name(), "Env", UVM_NONE);
endtask
endclass
sample_test.svh
class sample_test extends uvm_test;
`uvm_component_utils(sample_test)
sample_env env; // 追加。
function new(string name="sample_test", uvm_component parent=null);
super.new(name, parent);
endfunction
function void build_phase(uvm_phase phase); // 追加。
super.build_phase(phase);
env = sample_env::type_id::create("env", this);
endfunction
task run_phase(uvm_phase phase);
`uvm_info(this.get_name(), "Hello World", UVM_NONE)
endtask
endclass
今回はEnv階層の下にAgent階層を作成します。
Agent階層を作成する
uvm_agentを継承してsample_agentを作成します。
sample_agent.svh
class sample_agent extends uvm_agent;
`uvm_component_utils(sample_agent)
function new(string name, uvm_component parent=null);
super.new(name, parent);
endfunction
task run_phase(uvm_phase phase);
`uvm_info(this.get_name(), "Agent", UVM_NONE)
endtask
endclass
Agent階層を作成したので、Env階層にぶら下げます。
sample_env.shv(Agent階層をインスタンスする)
class sample_env extends uvm_env;
`uvm_component_utils(sample_env)
sample_agent agent; // 追加
function new(string name, uvm_component parent);
super.new(name, parent);
endfunction
function void build_phase(uvm_phase phase); // 追加
super.build_phase(phase);
agent = sample_agent::type_id::create("agent", this);
endfunction
task run_phase(uvm_phase phase);
`uvm_info(this.get_name(), "Env", UVM_NONE);
endtask
endclass
sample_test.svhは変更なしです。
sample_test.svh(変更なし)
class sample_test extends uvm_test;
`uvm_component_utils(sample_test)
sample_env env;
function new(string name="sample_test", uvm_component parent=null);
super.new(name, parent);
endfunction
function void build_phase(uvm_phase phase);
super.build_phase(phase);
env = sample_env::type_id::create("env", this);
endfunction
task run_phase(uvm_phase phase);
`uvm_info(this.get_name(), "Hello World", UVM_NONE)
endtask
endclass
top.sv(sample_agent.svh組み込み版)
module top;
`include "uvm_macros.svh"
import uvm_pkg::*;
`include "sample_agent.svh" // 追加。
`include "sample_env.svh"
`include "sample_test.svh"
initial begin
run_test("sample_test");
end
endmodule
実行結果
[UVM_INFO][uvm_test_top] Hello World
[UVM_INFO][env] Env
[UVM_INFO][agent] Agent
解説
前回と同じなので割愛します。
まとめ
Agent階層を追加しました。
コメント