FC2ブログ

UVM1.0p1に書き直したよ(その5)

前回の「UVM1.0p1に書き直したよ(その4)」でシミュレーションは
エラーなく動作すると思います。

今回は、更にVirtual Interface接続を書き直した話になります。
今まで、uvm_testを継承したクラスのconnect_phaseにて接続しました。(下の記述はconnect()の前のままになってますが、ほぼ一緒です)
function void connect();
// Assign interface for env_tb
env_tb.assign_vi(tb.w0_if, tb.w1_if, tb.r0_if, tb.r1_if);
endfunction : connect
assgin_vi()関数にて、RTLのように下の階層に接続してました。
しかし、こういった記述の仕方だと新たにagentやdriverなどを作成する際にいちいちassgin_vi()を記述しないといけないので面倒です。

それを解決するために、「uvm_resource_db」or「uvm_config_db」を使います。記述する場所は、テストベンチでコールされている run_test();になります。
○tb.svファイル
// run simulation
initial begin
uvm_resource_db #(virtual rd_if)::set("uvm_test_top.env_tb.reads[0].driver", "vif", r0_if);
uvm_resource_db #(virtual rd_if)::set("uvm_test_top.env_tb.reads[1].driver", "vif", r1_if);
uvm_resource_db #(virtual wr_if)::set("uvm_test_top.env_tb.writes[0].driver", "vif", w0_if);
uvm_resource_db #(virtual wr_if)::set("uvm_test_top.env_tb.writes[1].driver", "vif", w1_if);
run_test();
end
接続は Virtual でないとダメですので注意してください。
後は、接続関数であったassign_vi()関数を削除すれば良いです。

UVM(SystemVerilog)はRTLのようにインスタンスして接続せずに、Virtual Interfaceを使って(ポインタ)で接続する便利な方法があるんだなと思いました。
スポンサーサイト



プロフィール

Kocha

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

カレンダー
05 | 2011/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
アクセス人数