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

UVM1.0EAからUVM1.0p1に書き直してみました。

UVM1.0p1より、Phaseが変わりました。
例えば、build()だと以下のような感じです。
function void build();
⇒ function void build_phase(uvm_phase phase);

ただし、build_phase内部にてbuildをCallしているので
無理に書き直す必要はなかったです。
※細かいところを理解していないので、曖昧です。

で、実際に書き直しが必要な部分はtask run()の部分です。
UVM1.0p1より、uvm_objectionメカニズムが追加されシミュレータは
これが無いと即終了してしまいます。
オブジェクション機構を私が理解した感じだと、
「動作する際に手を挙げる」仕組みです。
なので、誰か手を挙げないとシミュレーションは即終了です。

Mentor社のシミュレータだとオプションがあるみたいです。
+UVM_USE_OVM_RUN_SEMANTIC

<参考> Using the UVM 1.0 Release with Questa (Updated for 10.0b)

それで、実際の記述方法ですが
 - uvm_test_done.raise_objection(this);
- uvm_test_done.drop_objection(this);

を使用します。

手っ取り早いのは、uvm_testのrunタスクに書くのが早いです。
○修正前
  virtual task run();
env_tb.print();
// Setting Report Verbosity
env_tb.reads[0].set_report_verbosity_level_hier(UVM_HIGH);

@(posedge tb.RST);
env_tb.print();

repeat(50) begin
@(posedge tb.CLK);
end

global_stop_request();
endtask : run

○修正後
  virtual task run();
uvm_test_done.raise_objection(this);
env_tb.print();
// Setting Report Verbosity
env_tb.reads[0].set_report_verbosity_level_hier(UVM_HIGH);

@(posedge tb.RST);
env_tb.print();

repeat(50) begin
@(posedge tb.CLK);
end
//global_stop_request();
uvm_test_done.drop_objection(this);
endtask : run

方法としては、同じようにuvm_sequenceのbodyタスクに書くことも出来ます。
  virtual task body();
uvm_test_done.raise_objection(this);
wr = wr_transfer::type_id::create("wr");

repeat(20) begin
assert(wr.randomize());

`uvm_do_with(
req,
{ req.address == wr.address;
req.data == wr.data;
req.data_enable == wr.data_enable;
req.enable == wr.enable;
})
end

`uvm_do_with(
req,
{ req.address == 0;
req.data == 0;
req.data_enable == 0;
req.enable == 1; // 0:Active
})
uvm_test_done.drop_objection(this);
endtask

body()の前後に、pre_body()tとpost_body()にそれぞれ書くことも出来ます。要はどこかで手を挙げることが必要らしいです。
関連記事

コメントの投稿

非公開コメント

プロフィール

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
アクセス人数