Pergunta

Eu tenho uma estrutura em Specman:

struct foo_s {
    event foo_ev;

    // some code that will emit foo_ev sometimes
};

E uma lista:

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

E agora eu quero sincronizar em qualquer um dos foo_ev Eventos na lista:

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

O problema é que, na época, esse trecho é executado, não sei quantos elementos estão em foo_l. Existe alguma maneira de eu esperar por algum do foo_ev eventos a serem emitidos?

Foi útil?

Solução

Você pode manualmente cascata o 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
};

Outras dicas

Outra solução seria usar uma macro calculada. O conceito de macros computados é escrever código para gerar código eletrônico. Usando esta abordagem, você pode olhar para o comprimento de foo_l e gerar o first of { sync ... Liste como substituição da macro.

Desculpe, atualmente não tenho tempo para preparar um exemplo, mas a documentação do Specman deve ser seu amigo, se você estiver interessado. Se você ainda não ouviu falar sobre macros computados, definitivamente vale a pena dar uma olhada.

ATUALIZAR]: Em equipe Specman, eles acabaram de publicar um Exemplo de uma macro calculada. Eles também têm alguns Posts mais antigos neste tópico.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top