Instruction Assert en Verilog
Je suis complètement nouveau pour Verilog, si patient avec moi.
Je me demandais si il y a une instruction assert en Verilog. Dans mon testbench, je veux être en mesure d'affirmer que les sorties des modules sont égaux à certaines valeurs.
Par exemple,
mymodule m(in, out);
assert(out == 1'b1);
Recherche sur google m'a donné un quelques liens, mais ils étaient soit trop complexe, ou ne semble pas être ce que je voulais.
Pourquoi la SV ajouté le tag?
toolic marqué, je ne sais pas pourquoi. Je les ai supprimées.
Parce que j'ai ajouté un SV Réponse. Parce que les OP doivent être conscients que Verilog et SystemVerilog sont dans la même langue, selon la norme IEEE. Parce que StackOverflow est un lieu d'apprentissage de nouvelles choses.
Pourriez vous s'il vous plaît ne pas le faire?
Ne pas montrer à des gens d'autres moyens de faire quelque chose?
toolic marqué, je ne sais pas pourquoi. Je les ai supprimées.
Parce que j'ai ajouté un SV Réponse. Parce que les OP doivent être conscients que Verilog et SystemVerilog sont dans la même langue, selon la norme IEEE. Parce que StackOverflow est un lieu d'apprentissage de nouvelles choses.
Pourriez vous s'il vous plaît ne pas le faire?
Ne pas montrer à des gens d'autres moyens de faire quelque chose?
OriginalL'auteur gsingh2011 | 2012-12-16
Vous devez vous connecter pour publier un commentaire.
Il y est une bibliothèque open source pour les assertions appelé OVL. Cependant, il est assez lourde. Un truc que j'ai piqué à partir de là, est la création d'un module pour faire des affirmations.
Maintenant, chaque fois que vous voulez vérifier un signal, tout ce que vous avez à faire est d'instancier une assertion dans votre module, comme ceci:
Lorsque l'assertion échoue, vous aurez un message comme ceci:
L' %m dans l'affichage de la déclaration de montrer l'ensemble de la hiérarchie de la fausse assertion, qui est bien pratique quand vous avez beaucoup de ceux-ci dans un projet plus vaste.
Vous pouvez vous demander pourquoi j'ai vérifier sur le bord de l'horloge. C'est subtile, mais importante. Si some_signal et some_other_signal dans l'expression ci-dessus ont été affectés dans les différents toujours blocs, il est possible que l'expression pourrait être faux pour une brève période de temps, selon l'ordre que votre simulateur Verilog horaires blocs (même si la logique était tout à fait valable). Ce serait vous donner un faux négatif.
L'autre chose à noter est que j'utilise !==, qui sera la cause de l'affirmation à l'échec si la valeur du test est X ou Z. Si elle a utilisé la normale !=, il pourrait silencieusement donner un faux positif dans certains cas.
OriginalL'auteur JeffB
vous pouvez écrire comme cela
OriginalL'auteur Aghasy Poghosyan
Si votre simulateur prend en charge SystemVerilog de la syntaxe, il y a un
assert
mot-clé qui fait ce que vous voulez.OriginalL'auteur toolic
De mettre ci-dessus avec une macro qui fonctionne pour moi:
Puis plus tard dans mon module de test:
Comme un exemple de test cas d'échec:
OriginalL'auteur strawbot
Verilog ne prend pas en charge les assertions. Certains outils de soutien de PSL, qui place les assertions dans les commentaires, mais c'est non-standard. Vous devriez envisager d'utiliser hiérarchique des références à partir d'un testbench au lieu de cela, sinon vous devez placer chaque assertion dans un processus qui va déraper.
Le moyen le plus facile pour imiter C-comme les affirmations est probablement un " définir puisque ce sera mondiale.
Afin de vérifier les signaux non-procédurale contexte, comme votre exemple, vous aurez besoin d'un autre macro qui génère un état de signal, puis déclenche un événement de test pour ce signal.
Générer ci-dessus va créer un nouveau champ d'application pour la variable de test, de sorte que plusieurs instances de travail.
Une meilleure façon dans une procédure pourrait être de créer une tâche dans un fichier distinct, puis de l'inclure dans n'importe quel module de déclaration.
Pour les non-procédurale les contextes, vous aurez besoin de créer un module contenant un processus et l'instance de module. Cela nécessitera un nom unique pour chaque instance, sauf si vous le mettez dans un générer bloc.
OriginalL'auteur