Вопрос

У меня есть следующий код в specman, который я унаследовал:

some_method() is {
    var a: bool;

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

Насколько я понимаю, каждый раз some_method() называется, a генерируется заново, и проверять нет смысла aзначение до того, как оно будет присвоено.Однако, возможно, я что-то здесь упускаю.Например, если a статичен, то этот код имеет смысл, что подводит меня к моему вопросу:

Есть ли способ сделать переменную статической в ​​specman?

Это было полезно?

Решение

здесь нет статических переменных, как в C.Переменная в методе имеет значение по умолчанию (False в данном случае) если не инициализировано, так что вы должны быть правы if (!a) всегда должно быть True.

Все было бы иначе, если бы 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

и выберите запись (по номеру) sn_eref: variables : declaring.Там вы найдете всю необходимую информацию по вашему вопросу.

Ура, Даниэль

Другие советы

Статические члены структуры (события, поля, методы) были добавлены в язык в 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: Статические члены в e

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top