Comment puis-je attendre d'un événement sur une liste d'événements à specman?

StackOverflow https://stackoverflow.com/questions/1530228

  •  20-09-2019
  •  | 
  •  

Question

J'ai un struct dans specman:

struct foo_s {
    event foo_ev;

    // some code that will emit foo_ev sometimes
};

Et une liste:

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

Et maintenant, je veux synchroniser sur l'un des événements foo_ev dans la liste:

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

Le problème est que, au moment où ce parcours snippet je ne sais pas combien d'éléments sont en foo_l. Est-il possible pour moi d'attendre any des événements foo_ev à émettre?

Était-ce utile?

La solution

Vous pouvez en cascade manuellement l'événement:

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

Autres conseils

Une autre solution serait d'utiliser une macro calculée. Le concept de macros calculées est d'écrire du code pour générer e-code. En utilisant cette approche, vous pouvez regarder la longueur de foo_l et générer la liste de first of { sync ... en remplacement de la macro.

Désolé, je n'ai actuellement pas le temps de cuisiner un exemple, mais la documentation Specman devrait être votre ami si vous êtes intéressé. Si vous ne l'avez pas entendu parler de macros calculées encore, il vaut vraiment le coup d'oeil.

[Mise à jour]: sur l'équipe Specman ils viennent de publier un exemple d'une macro calculée. Ils ont également des anciens messages sur ce sujet.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top