スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

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
イベントカレンダー

カレンダー
07 | 2017/08 | 09
- - 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 31 - -
カテゴリ
OVP (4)
最新記事
最新コメント
アーカイブ
リンク
Twitter
アクセス人数
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。