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

別の解決策は、計算されたマクロを使用することです。計算されたマクロの概念は、コードを記述して e-コードを生成することです。このアプローチを使用すると、マクロの長さを調べて、マクロの代わりとしてリストをfoo_l生成できます。first of { sync ...

申し訳ありませんが、現在、例を作成する時間がありませんが、興味がある場合は、Specman のドキュメントを参考にしてください。計算されたマクロについてまだ聞いたことがない場合は、一見の価値があります。

[更新]: Team Specmanで、計算されたマクロの例が公開されました。このトピックに関する古い投稿もあります。

于 2009-10-16T08:07:53.620 に答える
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 に答える