UVMを書いてみた(uvm_monitor)

今日はuvm_monitorです。

monitorはDUT(検証対象)への信号を観測するものになります。
主に、テストベンチ側のトランザクションのチェックになりますので、
今回は、Write側のポート側のみを書いてみました。

class wr_monitor extends uvm_monitor;

// This property is the virtual interfaced needed for this component to drive
// and view HDL signals.
protected virtual wr_if xmi;

// The following two bits are used to control whether checks and coverage are
// done both in the monitor class and the interface.
bit coverage_enable = 1;

// Provide implementations of virtual methods such as get_type_name and create
`uvm_component_utils_begin(wr_monitor)
`uvm_field_int(coverage_enable, UVM_ALL_ON)
`uvm_component_utils_end

// Events needed to trigger covergroups
protected event cov_event;

// Transfer collected covergroup
covergroup cov_write @cov_event;
cov_adrs : coverpoint xmi.address;
cov_data : coverpoint xmi.data;
cov_dten : coverpoint xmi.data_enable;
cov_cmd : coverpoint xmi.enable { bins write = {0};}
cov_wr_adrs : cross cov_adrs, cov_cmd;
cov_wr_data : cross cov_cmd, cov_data, cov_dten;
endgroup : cov_write

// new - constructor
function new(string name, uvm_component parent);
super.new(name, parent);
cov_write = new();
cov_write.set_inst_name({get_full_name(), ".cov_write"});
endfunction

// assign_vi
function void assign_vi(virtual interface wr_if xmi);
this.xmi = xmi;
endfunction

// run phase
virtual task run();
forever begin
@(posedge xmi.clock);
// カバレッジ測定をEnableで制御
if (coverage_enable) perform_coverage();
end
endtask : run

// perform_coverage
virtual protected function void perform_coverage();
-> cov_event;
endfunction : perform_coverage

endclass
関連記事

コメントの投稿

非公開コメント

プロフィール

Kocha

Author:Kocha
なんでもチャレンジ!(^o^)/
E-mail
github:Kocha
イベントカレンダー

カレンダー
05 | 2017/06 | 07
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 -
カテゴリ
OVP (4)
最新記事
最新コメント
アーカイブ
リンク
Twitter
アクセス人数