есть ли у specman статические переменные?
Вопрос
У меня есть следующий код в 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