Hazards statiques et dynamiques en logique combinatoire
Découvrez comment les délais de chemin inégaux créent des hazards statiques, dynamiques et fonctionnels, comment les termes de consensus suppriment les hazards statiques à deux niveaux et comment vérifier le matériel.
En bref : un hazard statique est une impulsion possible sur une sortie qui devrait rester constante pendant une transition d’entrée ; un hazard dynamique produit plusieurs transitions de sortie alors qu’une seule était attendue. Pour un réseau SOP à deux niveaux, sous l’hypothèse qu’une seule entrée change, couvrez chaque paire de cellules adjacentes valant 1 par un implicant commun. Le terme de consensus ajouté conserve la fonction booléenne tout en comblant la transition dangereuse. Cette démonstration ne couvre pas automatiquement plusieurs entrées changeantes, le mapping multiniveau, les rétroactions asynchrones ou une synthèse qui supprime la logique redondante.
Une table de vérité spécifie les valeurs stables des entrées et sorties. Elle ne décrit pas ce qui arrive pendant que les signaux traversent des portes aux délais différents. Deux implémentations de la même fonction booléenne peuvent donc être identiques sur toutes les lignes stables et se comporter différemment pendant quelques nanosecondes après un changement d’entrée.
Ce comportement transitoire importe lorsqu’il atteint une commande asynchrone, une entrée d’horloge ou de reset, une broche externe, un élément d’état sensible au niveau ou un front d’échantillonnage.
Hazard, glitch et course
Une course existe lorsque plusieurs chemins de signaux pertinents se concurrencent dans le temps. Un hazard désigne une structure de circuit et une transition pour lesquelles un ordre autorisé des délais de chemin peut produire une transition indésirable de la sortie. Un glitch est l’impulsion observée dans un cas temporel concret.
Cette distinction est utile :
- une simulation sans délai peut masquer un hazard ;
- pour un jeu de délais donné, le circuit peut contenir le hazard sans produire d’impulsion ;
- le procédé, la tension, la température, le placement ou le routage peuvent modifier le chemin qui l’emporte ;
- « je n’ai vu aucun glitch » ne démontre pas l’absence de hazards.
Hazards statiques
Un hazard statique-1 peut survenir lorsque la sortie devrait rester à 1, mais tombe brièvement à 0. On l’analyse couramment dans un réseau à deux niveaux en somme de produits (SOP).
Le hazard statique-0 est son dual : une sortie censée rester à 0 peut monter brièvement à 1. On l’analyse souvent dans un réseau à deux niveaux en produit de sommes (POS).
La procédure classique à base de table de Karnaugh suppose que :
- le réseau est implémenté dans la forme à deux niveaux annoncée ;
- une seule variable d’entrée change à la fois ;
- les portes et interconnexions peuvent posséder tout délai strictement positif ;
- les entrées stables satisfont la fonction booléenne voulue.
Si ces hypothèses changent, la démonstration doit changer elle aussi.
Exemple détaillé de hazard statique-1
Considérons :
Lorsque , la sortie stable vaut 1 pour chacune des deux valeurs de :
- pour , le terme maintient la sortie OR à l’état haut ;
- pour , le terme la maintient haute.
Pendant une transition de 1 vers 0 sur , le chemin direct peut désactiver avant que le chemin passant par l’inverseur n’active :
| Intervalle | Chemin | Chemin | |||
|---|---|---|---|---|---|
| État stable avant | 1 | 0 | 1 | 0 | 1 |
| Intervalle de relais possible | 0 | 0 | 0 | 0 | 0 |
| État stable après | 0 | 1 | 0 | 1 | 1 |
La ligne centrale ne correspond pas à une nouvelle entrée de la table de vérité. Elle représente des instants d’arrivée différents à l’intérieur de l’implémentation.
Repérer la frontière sur une table de Karnaugh
Pour les variables , et :
BC
00 01 11 10
+----+----+----+----+
A=0 | 0 | 1 | 1 | 0 |
+----+----+----+----+
A=1 | 0 | 0 | 1 | 1 |
+----+----+----+----+
La SOP d’origine utilise :
- pour les cellules de la ligne supérieure où ;
- pour les cellules de la ligne inférieure où .
Les cellules A=0, B=1, C=1 et A=1, B=1, C=1 sont adjacentes, puisque seul A diffère. Pourtant, aucun implicant sélectionné ne les couvre toutes les deux. Lorsque A change, la responsabilité de maintenir la sortie doit passer d’un terme produit à l’autre. Cette adjacence non couverte est la frontière du hazard statique-1.
Ajouter le terme de consensus
Le consensus de et est :
Le théorème du consensus donne :
Le terme ajouté ne change donc aucun résultat stable de la table de vérité. Pendant la transition dangereuse où , toutefois, reste à 1 et maintient la sortie OR haute.
Dans la table de Karnaugh, est le groupe vertical qui couvre les deux cellules adjacentes. La procédure générale pour une SOP à deux niveaux est la suivante :
- identifier chaque transition autorisée d’une variable entre des cellules adjacentes valant 1 ;
- vérifier si la couverture implémentée contient un implicant englobant chaque paire ;
- ajouter un terme approprié de consensus ou de couverture à toute paire non couverte ;
- vérifier que la synthèse et l’implémentation physique conservent la structure prévue.
La procédure duale couvre les cellules adjacentes valant 0 dans une implémentation POS afin d’éviter les hazards statiques-0.
Logique minimale et logique sans hazard n’optimisent pas le même objectif
La SOP minimale contient moins de termes, car est redondant du point de vue booléen. La SOP sans hazard conserve volontairement une redondance physique.
Cela crée une difficulté d’implémentation : un synthétiseur logique est normalement autorisé à supprimer les termes qui ne changent pas la fonction booléenne. Il peut également factoriser l’expression en réseau multiniveau ou la mapper dans des LUT et des cellules au comportement interne différent.
Si l’absence de hazards constitue une exigence :
- exprimez-la sous forme de contrainte d’implémentation, pas de simple commentaire ;
- employez la méthode de conservation ou de conception sans hazard documentée par le fournisseur ;
- examinez la netlist synthétisée ;
- réalisez une vérification tenant compte du timing sur le circuit mappé ;
- validez l’implémentation finale routée lorsque le flot cible le permet.
Une équation RTL seule ne garantit pas que le chemin physique de consensus survive à l’optimisation.
Hazards dynamiques
Un hazard dynamique se produit quand la sortie correcte ne devrait changer qu’une fois, mais que l’implémentation peut la faire basculer plusieurs fois avant sa stabilisation, par exemple 0 → 1 → 0 → 1.
Les hazards dynamiques nécessitent plusieurs délais qui interagissent et sont associés à une logique multiniveau et reconvergente. Un réseau à deux niveaux démontré exempt des hazards statiques concernés selon le modèle à changement d’une seule entrée est plus facile à analyser ; une réalisation factorisée ou mappée technologiquement peut ne plus conserver cette structure.
Il n’existe aucune correction universelle consistant à « ajouter un terme » pour un hazard dynamique quelconque. Les réponses pratiques comprennent :
- reconcevoir ou resynthétiser le réseau dans une forme pour laquelle une preuve sans hazard existe ;
- enregistrer le résultat avant qu’il n’atteigne un consommateur sensible ;
- employer un handshake ou une architecture de machine d’états conçue pour le fonctionnement asynchrone ;
- utiliser les cellules de mux ou de commande d’horloge sans glitch spécifiques à la cible ;
- vérifier le comportement temporel de l’implémentation.
Ajouter arbitrairement des buffers de délai pour « équilibrer » les chemins reste fragile face aux variations de procédé, tension, température et routage, sauf si la méthode de conception repose explicitement sur des délais bornés et les contraint.
Changements de plusieurs entrées et hazards fonctionnels
L’adjacence d’une table de Karnaugh représente le changement d’une seule variable. Si deux entrées indépendantes peuvent évoluer presque en même temps, le circuit peut traverser l’une de plusieurs combinaisons stables intermédiaires. Même un réseau exempt de hazards statiques à une entrée peut produire un hazard fonctionnel.
Une transition de 00 vers 11 peut par exemple passer physiquement par 01 ou 10. Si la fonction booléenne diffère sur ces lignes intermédiaires, aucune porte redondante ne peut rendre les deux chemins équivalents sans changer la fonction.
Parmi les options au niveau système :
- imposer un protocole où une seule entrée change ;
- encoder les transitions pour qu’un seul bit change, lorsque cela convient ;
- synchroniser et enregistrer ensemble les commandes liées ;
- utiliser des handshakes requête/acquittement ;
- ne capturer un ensemble cohérent de données qu’après un signal de validité ;
- reconcevoir l’interface pour ne pas interpréter combinatoirement les changements d’entrées simultanés.
Le code Gray aide dans un problème particulier d’états adjacents ; ce n’est pas un remède général pour n’importe quel bus.
Quand la logique synchrone contient le glitch
Si un résultat combinatoire n’alimente que l’entrée D d’une bascule, si le réseau s’est stabilisé avec une marge de setup suffisante avant le front d’échantillonnage et reste stable pendant le temps de hold, un glitch interne ne devient pas nécessairement un état architectural.
Cette affirmation a des limites :
- le glitch consomme malgré tout de l’énergie dynamique ;
- il peut se propager vers un autre chemin dont le timing diffère ;
- il est dangereux sur les resets, sets, horloges, activations et handshakes asynchrones ;
- il peut être capturé si la marge temporelle diminue ;
- il peut être visible sur des broches ou des signaux de sélection de circuit.
Ne générez pas une horloge en la faisant passer dans un réseau combinatoire ordinaire. Utilisez des cellules intégrées de clock gating, des ressources FPGA de commande d’horloge ou une architecture synchrone fondée sur une activation.
Hazards asynchrones et essentiels
Les circuits séquentiels asynchrones laissent volontairement les transitions influencer l’état sans front d’échantillonnage global. Ils exigent une méthode de conception qui explicite les hypothèses de délai, le codage des états, les handshakes et les conditions d’absence de hazard.
Un hazard essentiel est lié à la propagation inégale d’une entrée dans une implémentation asynchrone à rétroaction, lorsque l’état interne peut avancer avant que le changement d’entrée ait atteint tous les points requis. Ce n’est pas simplement un autre nom pour un glitch statique combinatoire, et un terme de consensus ne le supprime généralement pas.
Le traitement des hazards essentiels relève de la spécification et de l’implémentation de la machine asynchrone. Il peut impliquer des hypothèses sur le délai de rétroaction ou une structure de circuit différente. Passer à une logique synchrone constitue une possibilité, mais ne démontre pas que tous les hazards disparaissent.
Simuler le bon modèle
Un simulateur numérique sans délai modifie généralement tous les nœuds dépendants au même instant simulé et peut ne montrer aucune impulsion. Pour étudier les hazards, le modèle doit contenir des propagations inégales :
- construire ;
- maintenir ;
- attribuer ou introduire une différence de délai documentée entre les chemins direct et inversé de A ;
- basculer uniquement A ;
- examiner F avec une résolution temporelle inférieure au délai modélisé ;
- ajouter et recommencer.
Si le composant buffer du simulateur possède un délai logique nul, chaîner des buffers ne prouve rien. Utilisez une fonction sensible aux délais, une simulation temporelle au niveau des portes ou une mesure physique.
L’absence d’impulsion avec une attribution de délais donnée constitue une preuve pour cette exécution, pas pour tous les délais autorisés.
Liste de vérification
- Quelles entrées sont autorisées à changer ensemble ?
- La sortie doit-elle rester constante ou effectuer une seule transition ?
- Le réseau implémenté est-il à deux niveaux, factorisé ou mappé sur des LUT/cellules ?
- Chaque paire pertinente de cellules adjacentes de la K-map partage-t-elle un terme de couverture ?
- La synthèse peut-elle supprimer ou refactoriser la redondance ?
- La sortie pilote-t-elle uniquement une entrée D enregistrée, ou une commande sensible ?
- Les délais minimaux et maximaux ont-ils été contrôlés après mapping et routage ?
- La rétroaction asynchrone et les hazards essentiels sont-ils traités selon une méthode reconnue ?
Étapes suivantes
Le guide du skew d’horloge explique comment les différences d’arrivée de l’horloge modifient les marges de setup et de hold. Le guide des conditions indifférentes dans les tables de Karnaugh explique quand des combinaisons d’entrée non spécifiées peuvent faciliter la minimisation — mais une condition indifférente doit être justifiée par le contrat du système avant d’être utilisée dans une analyse de hazards.



