我在遗传的specman中有以下代码:
some_method() is {
var a: bool;
if (!a) {
a = some_other_method();
};
};
我的理解是,每次调用some_method()
时,都会重新生成a
,并且在分配a
之前检查a
的值是没有意义的。但是,我可能在这里遗漏了一些东西。例如,如果{{1}}是静态的,那么这段代码是有道理的,这让我想到了我的问题:
变量在specman中有静态吗?
答案 0 :(得分:3)
没有像C中那样的静态变量。方法中的变量有默认值(在这种情况下为False
)如果没有初始化,那么你应该是正确的if (!a)
应该始终是{{ 1}}。
如果True
是结构成员,情况会有所不同,那么就像其他OO语言一样,它会保留多个方法调用的值,并且检查更有意义:
a
您也可以在交互式提示中查看此类内容:
struct some_struct_s {
a : bool;
some_method() is {
if (!a) {
a = some_other_method();
};
};
};
交互式帮助也很好,例如尝试:
Specman> var a : bool;
Specman> print a
a = FALSE
并选择条目(按编号)Specman> help variable
。在那里,您将找到有关您问题的所有相关信息。
干杯, 丹尼尔
答案 1 :(得分:0)
静态结构成员(事件,字段,方法)被添加到Specman v15.2中的语言中。无法生成静态字段,物理(%)或在子类型中使用。
struct some_struct_s {
a : bool;
some_method() is {
if (!a) {
a = some_other_method();
};
};
};
-- Change field 'a' for all instances
on xxx { some_struct_s::a = TRUE; };
以下是来自teamspecman博客的一些评论:Static members in e