UVMを書いてみた(uvm_test)

いよいよ「UVMを書いてみた」シリーズの最後です。

最後は、検証のシナリオというべきuvm_testです。
今回は適当に「my_test」と「rnd_test」という二つのシナリオを作ってみました。
二つのシナリオの違いはdefault_sequenceを見ていただくとわかると思います。

※ここでの記述はUVM1.0EA版になります。
 なので、set_config_xxxやdefault_sequenceなどが出てきてます。

○my_test
class mytest extends uvm_test;

env env_tb;

`uvm_component_utils(mytest)

// Constructor
function new(string name = "mytest",
uvm_component parent=null);
super.new(name,parent);
endfunction : new

// build
virtual function void build();
// Enable transaction recording for everything
set_config_int("*", "recording_detail", UVM_FULL);
set_config_string("env_tb.reads[0].sequencer", "default_sequence", "rd_seq");
set_config_string("env_tb.writes[0].sequencer", "default_sequence", "wr_nobyte_seq");
set_config_string("env_tb.writes[1].sequencer", "default_sequence", "wr_stop_seq");
// Create the tb
env_tb = env::type_id::create("env_tb", this);

super.build();
endfunction : build

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

// Run
virtual task run();
env_tb.print();
// Setting Report Verbosity
env_tb.reads[0].set_report_verbosity_level_hier(UVM_HIGH);

//set a drain-time for the environment if desired
//uvm_test_done.set_drain_time(this, 50);

@(posedge tb.RST);

env_tb.print();

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

global_stop_request(); // Stop Request
endtask : run

endclass : mytest


○rnd_test
class rndtest extends uvm_test;

env env_tb;

`uvm_component_utils(rndtest)

// Constructor
function new(string name = "rndtest",
uvm_component parent=null);
super.new(name,parent);
endfunction : new

// build
virtual function void build();
// Enable transaction recording for everything
set_config_int("*", "recording_detail", UVM_FULL);
set_config_string("env_tb.reads[0].sequencer", "default_sequence", "rd_seq");
set_config_string("env_tb.reads[1].sequencer", "default_sequence", "rd_seq");
set_config_string("env_tb.writes[0].sequencer", "default_sequence", "wr_seq");
set_config_string("env_tb.writes[1].sequencer", "default_sequence", "wr_seq");
// Create the tb
env_tb = env::type_id::create("env_tb", this);

super.build();
endfunction : build

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

// Run
virtual task run();
@(posedge tb.RST);

env_tb.print();

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

global_stop_request(); // Stop Request
endtask : run

endclass : rndtest
関連記事

コメントの投稿

非公開コメント

プロフィール

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