スポンサーサイト

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

UVMを書いてみた(uvm_env)

今回は、uvm_envです。
イメージとしては、テストベンチといった感じでしょうか。

単体で作成してきたuvm_agentを検証対象もしくはシナリオに
合わせて必要なuvm_agentをインスタンスして作成します。

今回は検証対象が「2ポートずつのWrite/Readが可能なRegister File」なので
Write/Readをそれぞれ2つづつインスタンスします。

○uvm_env
class env extends uvm_env;

// Virtual Interface variable
protected virtual interface wr_if v_wif;
protected virtual interface rd_if v_rif;

// Control properties
protected int unsigned num_writes = 2;
protected int unsigned num_reads = 2;

// Provide implementations of virtual methods such as get_type_name and create
`uvm_component_utils_begin(env)
`uvm_field_int(num_writes, UVM_ALL_ON)
`uvm_field_int(num_reads, UVM_ALL_ON)
`uvm_component_utils_end

function new(string name, uvm_component parent);
super.new(name, parent);
endfunction

wr_agent writes[];
rd_agent reads[];

// build
function void build();
string inst_name;
super.build();
writes = new[num_writes];
for(int i = 0; i < num_writes; i++) begin
$sformat(inst_name, "writes[%0d]", i);
writes[i] = wr_agent::type_id::create(inst_name, this);
end
reads = new[num_reads];
for(int i = 0; i < num_reads; i++) begin
$sformat(inst_name, "reads[%0d]", i);
reads[i] = rd_agent::type_id::create(inst_name, this);
end
endfunction : build

// Function to assign the virtual interface for all components in this env
function void assign_vi(
virtual interface wr_if v0_wif, virtual interface wr_if v1_wif,
virtual interface rd_if v0_rif, virtual interface rd_if v1_rif);
writes[0].assign_vi(v0_wif);
writes[1].assign_vi(v1_wif);
reads[0].assign_vi(v0_rif);
reads[1].assign_vi(v1_rif);
endfunction : assign_vi

endclass : env
関連記事

コメントの投稿

非公開コメント

プロフィール

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ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。