HDL et vérification

Voulant un circuit combinatoire, on a écrit le code ci-dessus. Quel problème peut survenir ?

always @(a)
    y = a & b;
  1. Ab est retiré du circuit et y devient égal à a
  2. BLa synthèse échoue et aucun circuit n'est produit
  3. CSi seul b change, y n'est pas mis à jour en simulation, ce qui diverge du circuit synthétisé (où y change quand b change)
Afficher la réponse et l'explication

Réponse : C. Si seul b change, y n'est pas mis à jour en simulation, ce qui diverge du circuit synthétisé (où y change quand b change)

Le simulateur n'exécutant le bloc qu'au changement des signaux de la liste de sensibilité, lorsque seul b change, y conserve son ancienne valeur. La synthèse logique, elle, ignore la liste et construit une porte ET d'après le contenu du bloc ; dans le circuit réel, le changement de b se reflète donc sur y. C'est une situation dangereuse où la simulation semble correcte alors que le circuit se comporte autrement. Écrire « @(*) » l'évite.

S'entraîner sur ce thème Retour au thème

Autres questions sur HDL et vérification

  1. Voulant un circuit combinatoire, on a écrit le code ci-dessus. Que produit la synthèse logique ?
  2. Quelle combinaison de cause et de remède explique l'apparition d'un verrou dans la description ci-dessus ?
  3. Quelle écriture est couramment utilisée pour éviter les verrous non voulus dans un bloc always combinatoire ?
  4. Parmi les descriptions Verilog suivantes, laquelle ne devient pas un circuit et est ignorée par la synthèse logique (description destinée à la simulation) ?
  5. Quel circuit obtient-on en synthétisant la description ci-dessus, qui compte les 1 dans d sur 8 bits ?

Comparatifs sur ce thème