Как я могу дождаться одного события из списка событий в Specman?

StackOverflow https://stackoverflow.com/questions/1530228

  •  20-09-2019
  •  | 
  •  

Вопрос

У меня есть структура в specman:

struct foo_s {
    event foo_ev;

    // some code that will emit foo_ev sometimes
};

И список:

var foo_l: list of foo_s;  // later code will manage the list

И теперь я хочу синхронизироваться на любом из foo_ev события в списке:

first of {
    sync @foo_l[0].foo_ev;
    sync @foo_l[1].foo_ev;
    sync @foo_l[2].foo_ev;
    //etc
};

Проблема в том, что во время запуска этого фрагмента я не знаю, сколько элементов находится в нем. foo_l.Есть ли у меня способ дождаться любой принадлежащий foo_ev события, которые будут излучаться?

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

Решение

Вы можете вручную каскадировать событие:

unit bar_u {
    foo_l: list of foo_s;  
    event any_foo_toggled_e;
}

struct foo_s {
    event foo_e;
    on foo_e {
        emit get_enclosing_unit(bar_u).any_foo_toggled_e;
    };

    // some code that will emit foo_ev sometimes
};

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

другим решением было бы использовать вычисляемый макрос.Концепция вычисляемых макросов заключается в написании кода для генерации электронного кода.Используя этот подход, вы можете посмотреть длину foo_l и сгенерировать first of { sync ... list как замена макроса.

Извините, у меня сейчас нет времени придумать пример, но документация Specman должна быть вашим другом, если вам интересно.Если вы еще не слышали о вычисляемых макросах, это определенно стоит посмотреть.

[ОБНОВЛЯТЬ]: В Team Specman только что опубликовали пример вычисляемого макроса.У них также есть некоторые старые сообщения на эту тему.

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