结构中的指针和实例有什么区别。如何在 struct 中实例化实例和指针?如何连接指针?
任何人都可以用一个例子来解释吗?
一个单元实例声明一个单元的实例。单元引用(也称为单元指针)指向单元层次结构中已经存在的单元,或者当它不指向任何内容时其值为 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
};
由于单元实例只能在运行前生成期间创建,因此不能使用不生成运算符 (!) 声明它们:
generated_inst : simple_u is instance;
!nongen_inst : simple_u is instance; // Illegal: Instances must be generated.
可以生成或不生成单位参考。如果它被生成,那么它必须有一个约束,要么将它指向一个单独声明的单元实例,要么指向 NULL:
!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操作是非法的。可以随时(即时)生成单元引用,但它必须具有预先存在的约束或使用保留块指定的约束:
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
关于结构 -
对于结构,没有“实例”与“指针”。在某种程度上 - 所有结构字段都是引用。
顺便说一句 - 调试时,您会看到包含对结构的引用的消息(或 dut 错误)。就像是 -
[1045] 数据包-@9: 开始注入...
然后你可以发出 @9 的 Specman 命令
这将打印出对此“实例”的所有引用。这个列表可能很长,包含所有曾经引用过这个结构的东西。