Pregunta

Tengo una estructura en Specman:

struct foo_s {
    event foo_ev;

    // some code that will emit foo_ev sometimes
};

Y una lista:

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

Y ahora quiero sincronizar en cualquiera de los eventos foo_ev en la lista:

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

El problema es que en el momento en este fragmento carreras no sé cuántos elementos hay en foo_l. ¿Hay alguna forma para que espere para cualquier de los eventos foo_ev a ser emitidos?

¿Fue útil?

Solución

Se puede conectar en cascada manualmente el 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
};

Otros consejos

otra solución sería utilizar una macro computarizada. El concepto de macros computados es escribir código para generar e-código. Usando este método usted podría mirar a la longitud de foo_l y generar la lista first of { sync ... como sustitución de la macro.

Lo siento, actualmente no tengo el tiempo para cocinar un ejemplo, pero la documentación Specman debe ser su amigo si usted está interesado. Si usted no ha oído acerca de las macros calculadas sin embargo, es definitivamente vale la pena un vistazo.

[ACTUALIZACIÓN]: en el equipo Specman que acaban de publicar un ejemplo de un computarizada macro . También tienen algunos las entradas más antiguas sobre este tema.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top