はじめに
前回はScoreBoardでAnalysis Exportを定義してMonitor階層のAnalysis Portと接続しました。
Analysis Exportはデータを受け取るだけなので、FIFOのようにデータを保持する仕組みをScoreBoard内に実装する必要があります。
そこで、今回はFIFO付きのAnalysis Export、uvm_tlm_analysis_fifoを使用します。
サンプルコード
sample_scoreboard.svh
uvm_analysis_impからuvm_tlm_analysis_fifoに変更します。
class sample_scoreboard extends uvm_scoreboard;
`uvm_component_utils(sample_scoreboard)
// uvm_analysis_imp#(sample_sequence_item, sample_scoreboard) item_collected_export; // 削除
uvm_tlm_analysis_fifo#(sample_sequence_item) fifo; // 代わりにuvm_tlm_analysis_fifoを使用する
function new(string name, uvm_component parent);
super.new(name, parent);
// item_collected_export = new("item_collected_export", this); // 削除
fifo = new("fifo", this);
endfunction
function void build_phase(uvm_phase phase);
super.build_phase(phase);
endfunction
// uvm_tlm_analysis_fifoにはwriteメソッドがあるので必要ない
// virtual function void write(sample_sequence_item item);
// `uvm_info(this.get_name(), $sformatf("data=%x", item.data), UVM_NONE);
// endfunction
// 代わりにgetメソッドでfifoからトランザクションを取得する。
virtual task run_phase(uvm_phase phase);
sample_sequence_item item;
super.run_phase(phase);
forever begin
fifo.get(item);
`uvm_info(this.get_name(), $sformatf("data=%x", item.data), UVM_NONE);
end
endtask
virtual function void check_phase(uvm_phase phase);
endfunction
endclass
sample_env.svh
ScoreBoardに変更があるので、接続部分を修正します。
Monitor階層に変更はありません。
class sample_env extends uvm_env;
`uvm_component_utils(sample_env)
sample_agent agent;
sample_scoreboard scoreboard;
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);
scoreboard = sample_scoreboard::type_id::create("scoreboard", this);
endfunction
function void connect_phase(uvm_phase phase);
// agent.monitor.item_collected_port.connect(scoreboard.item_collected_export); // 削除
// uvm_tlm_analysis_fifoにbuilt-inであるanalysis_exportと接続する
agent.monitor.item_collected_port.connect(scoreboard.fifo.analysis_export);
endfunction
endclass
まとめ
uvm_tlm_analysis_fifoを使用しました。
コメント