2012-05-10 9 views
2

struct内のポインタとインスタンスの違いは何ですか?あなたはどのように構造体のインスタンスとポインタをインスタンス化しますか?あなたはどのようにポインタを接続しますか?Specmanのポインタとインスタンスの違いは何ですか?

例を挙げて説明できますか?

+0

ケイデンスは[何かを投稿しました](http://www.cadence.com/Community/blogs/fv/archive/2012/05/11/specman-s-memory-management-orientation-guide-or-honey-あなたのGCエンジンについてFeed-3A&Cadence%2Fcommunity%2Fblogs%2Ffv +%28Cadence + Functional + Verification + Blogs%29)フィード&utm_medium =フィード&utm_campaign =フィードを取る。 –

答えて

2

ユニットインスタンスはユニットのインスタンスを宣言します。 A ユニットリファレンスユニットポインタとも呼ばれます)は、ユニット階層内にすでに存在するユニットを指します。何も指していないときはNULLの値を持ちます。

ユニットは、事前実行世代中にのみ作成できる静的アイテムであり、破壊されることはありません(逆参照され、その後ガベージコレクトされます)。ユニットは、別のユニット内でしかインスタンス化できません。したがって、すべてのeプログラムには、ルートにあるsys(唯一の事前定義されたユニット)を持つユニットインスタンスのツリーがあります。これは、テスト段階のどの時点でも動的に作成できる構造体とは対照的です。

unit simple_u {}; 

struct example_s { 
    generated_ref : simple_u; 
    generated_inst : simple_u is instance; // Illegal: Instance cannot be in struct 
}; 

単位インスタンスが唯一の実行前世代の中に作成することができますので、彼らはDO-ない-生成演算子で宣言することはできません(!):

generated_inst : simple_u is instance; 
!nongen_inst : simple_u is instance; // Illegal: Instances must be generated. 

単位の参照は、いずれかの発生することができますか否か。それが発生した場合、それは別に宣言ユニットインスタンスまたはNULLであることはどちらかそれを指し示す制約を持っている必要があります:ユニットインスタンスにGENアクションを使用することは違法である

!nongen_ref : simple_u; 
generated_ref : simple_u; // Requires a generation constraint (like below) 
keep soft generated_ref == NULL; 
keep  generated_ref == generated_inst; 

。単位基準は、任意の時間(オンザフライ)で生成することができ、それは、既存の制約を持っているか、ブロックを維持と指定されている必要があります。

gen generated_inst; // Illegal to explicitly generate an instance 
gen generated_ref; 
gen nongen_ref keeping {it == generated_inst}; 

それに割り当てる合法です手続き型コードの単位の参照が、ユニットインスタンスを割り当てることができない。

generated_ref = NULL; 
generated_inst = NULL; // Illegal to assign to an instance 
0

そして構造体について - 構造体と

、「ポインタ」対ない「インスタンス」は存在しません。ある意味では、すべての構造体フィールドは参照です。

btw - デバッグ時に、構造体への参照を含むメッセージ(またはdutエラー)が表示されます。そして、あなたは、この「インスタンスへのすべての参照を出力します9

@あるSpecmanコマンド を発行することができ、注射...

の開始:9 @

[1045]パケット交換 - のようなもの"リストはかなり長く、この構造体を参照したことのあるものをすべて含んでいます。

関連する問題