1

我在继承的 specman 中有以下代码:

some_method() is {
    var a: bool;

    if (!a) {
        a = some_other_method();
    };
};

我的理解是,每次some_method()调用,都会重新生成,并且在分配之前检查它的值a是没有意义的。a但是,可能是我在这里遗漏了一些东西。例如,如果a是静态的,那么这段代码是有意义的,这让我想到了我的问题:

有没有办法让变量在 specman 中是静态的?

4

2 回答 2

3

没有像 C 中那样的静态变量。方法中的变量False如果未初始化,则具有其默认值(在这种情况下),因此您应该if (!a)始终正确True

如果是 struct 成员,情况会有所不同a,然后就像在其他 OO 语言中一样,它将在多个方法调用中保留该值,并且检查会更有意义:

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

并选择条目(按数字)sn_eref: variables : declaring。在那里,您将找到与您的问题相关的所有信息。

干杯,丹尼尔

于 2009-05-26T06:52:37.473 回答
0

静态结构成员(事件、字段、方法)被添加到 Specman v15.2 中的语言中。静态字段无法生成、物理(%) 或在 when 子类型中使用。

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 博客的一些评论:e 中的静态成员

于 2017-06-23T14:53:24.733 回答