1

我在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被发出吗?

4

2 回答 2

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
};
于 2009-10-07T23:42:11.213 回答
2

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

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

[更新]:在 Team Specman 上,他们刚刚发布了一个计算宏的示例。他们也有一些关于这个主题的旧帖子。

于 2009-10-16T08:07:53.620 回答