1

UVM モニターで、以下の 2 つのステートメントが追加されたrun_phase場合、サンプリングされた値tr.pktは に従って正しいものになりますdata_in。ただし、ステートメントの順序が逆の場合、tr.pktsampled は正しくありません ( 'h0sampled )。前に見た人いますか?

tr.pkt.push_back(this.wr_if.mon_clk_blk.data_in);
`uvm_info("",$sformatf("Write Monitor data = %0h", this.wr_if.mon_clk_blk.data_in), UVM_NONE)
4

1 に答える 1

0

ほとんどの場合data_in、UVM モニターの実行と同じ時間ステップで更新されています。スケジューラでpush_back()は、アクティブ リージョンで実行され、監視対象リージョンで`uvm_info()発生します。data_in別のプロセスが、リアクティブ領域または後でスケジュールされたアクティブ領域で更新された可能性があります。.push_bach()/の順序を逆にすることで、実行するアクティブ領域に再度入る前に`uvm_info()、他のスレッドが割り当てる機会が与えられます。ゼロ タイム グリッチ (設計など) も、予期しない値に関連している可能性があります。data_in.push_bach()#0

両方を保証して同じ値を取得する 1 つの方法.push_bach()`uvm_info()、サンプリングする一時変数を作成することですdata_in。例:

sampled_data = this.wr_if.mon_clk_blk.data_in;
tr.pkt.push_back(sampled_data);
`uvm_info("",$sformatf("Write Monitor data = %0h", sampled_data), UVM_NONE)
于 2014-01-28T00:04:38.903 に答える