0

Tout en faisant de la conception numérique dans systemverilog, j'ai rencontré un problème concernant les conditions de course.SystemVerilog registre conception évitement de la course

Le banc d'essai (que je ne peux pas modifier) ​​qui pilote ma conception, pilote les entrées de telle sorte que certains registres de la conception ne fonctionnent pas correctement en raison d'une condition de concurrence.

Voici un exemple eda-terrain de jeu qui illustre ce qui se passe (changements d'entrée « avant » l'horloge ne, au moment de 15ns):

http://www.edaplayground.com/x/rWJ

est-il un moyen de faire de la conception (un registre simple dans ce cas) résistant à ce problème particulier? Ce dont j'ai besoin est une déclaration comme "out_data < = preponed (in_data);" ou quelque chose de similaire qui rendra l'ordre des changements de signal d'entrée non pertinents. J'ai lu à propos de # 1step dans le SystemVerilog LRM mais je ne sais pas comment l'utiliser, ni si cela peut m'aider avec ce problème particulier du tout.

+1

Le générateur d'horloge est mal écrit en premier lieu. Il aurait dû être 'clock = ~ clock', avec l'affectation ** blocking ** ici. Aussi, si vos entrées et l'horloge changent en même temps, quel genre de comportement vous attendez-vous? – Serge

+0

Je suis d'accord, mais le générateur d'horloge est mal écrit intentionnellement, pour illustrer comment une condition de concurrence peut se produire dans la conception. Si les deux changent en même temps, alors je m'attendrais à ce que la sortie du registre obtienne la valeur que le signal d'entrée avait avant tout changement. –

+0

Il n'y a aucun moyen d'éviter une course artificiellement créée par le banc d'essai sans réparer celle-ci. Vous auriez besoin de rendre votre dut non-synthétisable pour essayer autrement. c'est-à-dire ajouter un retard de # 1ns à votre in_data – Serge

Répondre

1

Votre banc de test crée essentiellement un stimulus qui se trouve dans une configuration incorrecte de votre enregistreur. Vous avez deux options:

  1. Convainquez le rédacteur de testbench de leurs erreurs et demandez-leur de le réparer.
  2. Insérez une couche de hiérarchie autour de la conception qui retarde l'horloge pour éliminer la course.