如何在specman中的事件列表中等待一个事件?

时间:2009-10-07 08:15:26

标签: list events specman

我在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 个答案:

答案 0 :(得分:2)

您可以手动级联事件:

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

答案 1 :(得分:2)

另一种解决方案是使用计算宏。计算宏的概念是编写代码来生成电子代码。使用此方法,您可以查看foo_l的长度,并生成first of { sync ...列表作为宏的替换。

抱歉,我目前没有时间做一个例子,但如果你有兴趣,那么Specman文档应该是你的朋友。如果您还没有听说过计算宏,那么绝对值得一看。

[更新] :在Team Specman上,他们刚刚发布了example of a computed macro。他们在这个主题上也有一些older posts