Domanda

ho una struct in Specman:

struct foo_s {
    event foo_ev;

    // some code that will emit foo_ev sometimes
};

E una lista:

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

E ora voglio sincronizzare su uno degli eventi foo_ev nella lista:

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

Il problema è che al momento questo frammento viene eseguito non so quanti elementi sono in foo_l. C'è un modo per me di aspettare per qualsiasi degli eventi foo_ev per essere emessi?

È stato utile?

Soluzione

Si potrebbe cascata manualmente l'evento:

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

Altri suggerimenti

un'altra soluzione potrebbe essere quella di utilizzare una macro calcolato. Il concetto di macro calcolati è quello di scrivere codice per generare e-codice. Con questo approccio si poteva guardare la lunghezza del foo_l e generare la lista first of { sync ... in sostituzione della macro.

Mi dispiace Al momento non ho il tempo per cucinare un esempio, ma la documentazione Specman dovrebbe essere la vostra amica, se siete interessati. Se non avete sentito parlare di macro calcolati tuttavia, è sicuramente la pena dare un'occhiata.

[UPDATE]: nella squadra Specman hanno appena pubblicato un esempio di calcolato macro . Hanno anche alcuni post precedenti su questo argomento.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top