Как я могу ждать одного события из списка событий в specman? - PullRequest
1 голос
/ 07 октября 2009

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

Ответы [ 2 ]

2 голосов
/ 16 октября 2009

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

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

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

2 голосов
/ 08 октября 2009

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

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
};
...