2017-11-01 21 views
1

私がgenerate_directed_packetと呼ぶたびに、新しいオブジェクトが作成されます。次のパケットオブジェクトを作成する前に、パケットオブジェクトの削除について心配する必要があります。もしそうなら、パケットオブジェクトを削除するにはどうすればいいですか?シミュレーション時間を節約するために、システムのVerilogジェネレータモジュールから生成されたパケットを破棄する必要がありますか?

function void generate_directed_packet(); 
packet = new(); 
void'(packet.randomize()); 
endfunction : generate_directed_packet 

答えて

2

SystemVerilogには自動メモリ管理機能があります。つまり、そのオブジェクトのハンドルを含むクラス変数がある限り、オブジェクトを保持するだけです。シミュレータは、そのオブジェクトのハンドルを持つクラス変数がなくなった後にオブジェクトを「削除」します。 "削除"は、オブジェクトの削除時期を知らないため引用符で囲まれています。同じオブジェクトの別のnew()までスペースを保持し、スペースを再利用する可能性が高くなります。

UVMを使用している場合は、通常、シーケンスでパケットを生成してドライバに送信します。あなたが実際にやっていることは、シーケンス内の新しいオブジェクトへのハンドルを作成し、シーケンス内の変数からドライバ内の変数にハンドルをコピーすることです。

ある変数から別の変数にハンドルをコピーするときに、古いオブジェクトへの参照が消去されます。オブジェクトハンドルを追加するにつれてデータ構造にハンドルを置く限り、古いオブジェクトからのスペースが再利用されます。

関連する問題