コンシューマクラス(consumer.sv)は、次のようになっています。
accept_tr/begin_tr/end_trを呼ばれたことにより、tr_db.logというファイルが生成されます。
このデータは波形Viewerで表示できるようなフォーマットになっています。
実際に波形Viewerで表示できるかどうかまでは確認していません。
検証、Verification、SystemVerilog、UVM、Unified Verification Methodology
// テンプレートとして、#(type T=packet)を指定している。packetは前回説明したクラス class consumer #(type T=packet) extends uvm_component; // uvm_componentを継承する // ブロッキングタイプの入力側のTLMポート uvm_blocking_put_imp #(T,consumer #(T)) in; uvm_get_port #(T) out; function new(string name, uvm_component parent=null); super.new(name,parent); in = new("in", this); // ポート(in)を生成する out = new("out",this,0); // ポート(out)を生成する endfunction protected int count=0; local semaphore lock = new(1); // set_config_xxx/get_config_xxxのためのおまじない `uvm_component_utils_begin(consumer #(T)) `uvm_field_int(count,UVM_ALL_ON + UVM_READONLY + UVM_DEC) `uvm_component_utils_end // run_test()が呼ばれたときに実行されるタスク task run_phase(uvm_phase phase); T p; // Tは、デフォルトでは、packetクラス while(out.size()) begin // outポート内のパケットのサイズが0でないと、 out.get(p); // outポートからパケットを取り出し、 put(p); // putタスクを呼び出す end endtask // accept_tr/begin_tr/end_trは、 // uvm_componentクラスでRecording Interfaceとして定義されている task put (T p); // putタスク lock.get(); // セマファでロックする count++; accept_tr(p); #10; void'(begin_tr(p)); #30; end_tr(p); `uvm_info("consumer", $sformatf("Received %0s local_count=%0d",p.get_name(),count), UVM_MEDIUM) if(uvm_report_enabled(UVM_HIGH,UVM_INFO,"")) p.print(); lock.put(); // セマファをアンロックする endtask endclassModelSim 6.6c Altera Editionでシミュレーションすると、
accept_tr/begin_tr/end_trを呼ばれたことにより、tr_db.logというファイルが生成されます。
このデータは波形Viewerで表示できるようなフォーマットになっています。
実際に波形Viewerで表示できるかどうかまでは確認していません。
BEGIN: {TXH:2 TYPE:"Begin_No_Parent, Link" STREAM:0 NAME:packet TIME=0 ns LABEL:"" DESC="" BEGIN: {TXH:3 TYPE:"Begin_No_Parent, Link" STREAM:x NAME:producer1-0 TIME=0 ns LABEL:"" DESC="" LINK: {TXH1:3 TXH2:2 RELATION=} SET_ATTR: {TXH:2 NAME:addr VALUE:0 RADIX:UVM_HEX BITS=32 } SET_ATTR: {TXH:2 NAME:accept_time VALUE:0 RADIX:UVM_TIME BITS=64 } SET_ATTR: {TXH:2 NAME:initiator VALUE:475 RADIX:UVM_DEC BITS=32 } END: {TXH:2 TIME=0 ns} FREE: {TXH:2 } SET_ATTR: {TXH:3 NAME:addr VALUE:0 RADIX:UVM_HEX BITS=32 } SET_ATTR: {TXH:3 NAME:accept_time VALUE:0 RADIX:UVM_TIME BITS=64 } SET_ATTR: {TXH:3 NAME:initiator VALUE:475 RADIX:UVM_DEC BITS=32 } END: {TXH:3 TIME=0 ns} FREE: {TXH:3 }