Как я могу создать ссылку на переменную в Specman? - PullRequest
0 голосов
/ 29 июня 2009

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

var x := some.very.long.path.to.a.variable.in.another.struct;

while (x == some_value) {
    //do something that uses x;
    //wait for something

    //get a new value for x
    x = some.very.long.path.to.a.variable.in.another.struct;
};

Теперь, кажется, расточительно записывать присвоение x дважды; один раз во время инициализации и один раз во время цикла.

Что я действительно хочу использовать, так это ссылку на длинное имя переменной, чтобы я мог сделать:

var x := reference to some.very.long.path.to.a.variable.in.another.struct;

while (x == some_value) {
    //do something that uses x;
    //wait for something
    //no need to update x now since it's a reference
};

Можно ли это сделать в specman?

1 Ответ

1 голос
/ 30 июня 2009

specman / e обычно использует ссылки для структур и списков, поэтому, если ваш тип переменной - любой из них, ваш второй пример должен работать. Для integer или boolean я не знаю, как использовать ссылку на переменную. В любом случае, две идеи, которые могут вам помочь:

  1. Добавить указатель на другую структуру и связать его в файле конфигурации:

    struct a { other_variable : uint; };
    struct b {
        other_struct : a;
        some_func() is {
            var x : uint = other_struct.other_variable;
            while (x == some_value) {
                x = other_struct.other_variable;
            };
        };
    };
    extend cfg {
        struct_a : a;
        struct_b : b;
        keep struct_b.other_struct == struct_a;
    };
    

    ОБНОВЛЕНИЕ: Более подробную информацию об этой технике вы можете найти в этом посте специалиста команды .

  2. Оберните ваш цикл while в функцию, там вы можете передать параметры по ссылке (см. help pass reference):

        some_func(x : *uint) is {
            while (x == some_value) {
                // stuff ...
            };
        };
    

Надеюсь, это поможет!

Daniel

...