Specman的指针和实例之间有什么区别?

时间:2012-05-10 17:19:06

标签: specman

指针和struct中的实例有什么区别。如何在struct中实例化实例和指针?你如何连接指针?

任何人都可以用一个例子解释一下吗?

2 个答案:

答案 0 :(得分:2)

单位实例声明单位的实例。 单位引用(也称为单位指针)指向单位层次结构中已存在的单位,或者在未指向任何内容时具有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-not-generate运算符(!)声明它们:

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

答案 1 :(得分:0)

关于结构 -

结构,没有"实例" vs"指针"。在某种程度上 - 所有结构字段都是引用。

btw - 调试时,您会看到包含对结构的引用的消息(或dut错误)。像 -

这样的东西

[1045] packet- @ 9:开始注射......

然后你可以发出Specman命令 谁是@ 9

将打印出对此"实例"的所有引用。列表可能很长,包含所有引用此结构的内容。