Pourquoi le déclenchement sur front est préféré au déclenchement sur niveau?


18

J'essaie de comprendre pourquoi le déclenchement sur front est préféré au déclenchement sur niveau. Dans mon livre, cela n'est pas expliqué clairement. Après une recherche en ligne, j'ai appris que le déclenchement sur front est insensible aux pépins alors que le déclenchement sur niveau est sensible. Qu'est-ce que ça veut dire?

De plus, je ne peux pas comprendre ce qui suit: "Si l'horloge est sensible au niveau, le nouveau peut se précipiter à travers le réseau logique et changer la sortie. Pour éviter cela, nous avons besoin d'une courte impulsion pour capturer la sortie et la maintenir constante. Mais une telle impulsion courte n'est pas facile à créer, c'est pourquoi nous optons pour le déclenchement sur front. Le problème de rétroaction est résolu car il n'y a pas assez de temps pour que la nouvelle sortie revienne à l'entrée dans la durée d'un seul front montant "Qn

Je ne comprenais pas pourquoi la sortie ne se précipitait pas dans le déclenchement de niveau et pourquoi nous avions besoin d'une courte impulsion pour maintenir la sortie.

Deuxièmement, le problème de rétroaction, puisque la durée de déclenchement de niveau est longue par rapport au déclenchement de front, dans le cas du premier, la sortie serait réinjectée à l'entrée et elle continuera de le faire tant que l'horloge est active . Quel est le problème de rétroaction?

Mais comment sera-t-il résolu dans le déclenchement sur front? Si le temps de chute ou de montée est très court, comment la sortie pourra-t-elle se propager à travers toutes les portes? Est-ce comme si une fois que le déclenchement sur front était appliqué, la sortie se propagerait à travers toutes les portes et les prochaines entrées ne seraient prises en compte qu'au prochain front d'horloge?


1
"une fois que le déclenchement sur front est appliqué, la sortie se propage à travers toutes les portes et les entrées suivantes ne sont prises en compte qu'au prochain front d'horloge" - bullseye !!
Wouter van Ooijen

Réponses:


12

Bien qu'un front soit un moment bien défini dans le temps, il n'est pas vrai de dire que le déclenchement de niveau n'a pas non plus de moment dans le temps bien défini. Cela fait. Il y a un moment bien défini dans le temps où le niveau de l'horloge baisse, les entrées du circuit cadencé sont échantillonnées et d'autres changements dans les entrées ne sont plus admis.

Le problème avec le déclenchement de niveau est que même si le niveau d'horloge est élevé, les entrées modifient les sorties. Dans les circuits qui ont un retour (les sorties sont reconnectées aux entrées), le déclenchement du niveau provoque le chaos, car le niveau est suffisamment large (un demi-cycle d'horloge) pour que la sortie puisse réinjecter les entrées dans la même période.

tt+1

La première solution évidente qui se propose de raccourcir le niveau au point qu'il est impossible qu'un retour indésirable se produise (et de maintenir le niveau "on" court, même si nous ralentissons arbitrairement la période d'horloge). Supposons que nous pulsions l'horloge de 0 à 1 et revenons à 0 très rapidement, de sorte que les appareils synchronisés acceptent leurs entrées, mais les sorties n'ont pas assez de temps pour parcourir la boucle de rétroaction pour changer ces entrées. Le problème avec cela est que les impulsions étroites ne sont pas fiables et nécessitent essentiellement une réponse qui peut être plusieurs ordres de grandeur plus rapide que la fréquence d'horloge. Nous pourrions trouver que nous avons besoin d'une impulsion d'une largeur d'une nanoseconde, même si le système ne fonctionne qu'à 1 Mhz. Nous avons donc le problème de distribuer des impulsions propres, nettes et suffisamment hautes à l'échelle de la nanoseconde sur un bus conçu pour 1 Mhz.

L'étape logique suivante consiste alors à ce que les dispositifs génèrent eux-mêmes l'impulsion étroite en tant que dérivée temporelle du front d'horloge. Au fur et à mesure que l'horloge passe d'un niveau à un autre, les appareils eux-mêmes peuvent générer en interne une impulsion courte qui provoque l'échantillonnage des entrées. Nous n'avons pas à distribuer cette impulsion elle-même via le bus d'horloge.

Et vous pouvez donc considérer que tout est déclenché par le niveau à la fin. Le déclenchement sur front est une astuce pour permettre aux appareils de créer un déclencheur de niveau très fin qui est plus rapide que toutes les boucles de rétroaction externes, permettant aux appareils d'accepter rapidement les entrées, puis de fermer l'entrée à temps avant que leurs sorties changeantes changent les valeurs des entrées .


On peut aussi faire une analogie entre le signal "enable" (horloge déclenchée par le niveau) et une porte sur un engin qui maintient la pression d'air. Le déclenchement de niveau est comme ouvrir une porte, permettant à l'air de s'échapper. Cependant, nous pouvons construire un sas qui se compose de deux (ou plus) portes, qui ne sont pas ouvertes simultanément. C'est ce qui se passe si nous divisons l'horloge de niveau en plusieurs phases.

L'exemple le plus simple est la bascule maître-esclave . Il s'agit de deux bascules D déclenchées par niveau montées en cascade. Mais le signal d'horloge est inversé, donc l'entrée de l'un est activée tandis que l'autre est désactivée et vice versa. C'est comme une porte de sas. Dans l'ensemble, la bascule n'est jamais ouverte afin que le signal puisse passer librement. Si nous avons un retour de la sortie de la bascule vers l'entrée, il n'y a pas de problème car elle passe à une phase d'horloge différente. Le résultat final est que la bascule maître-esclave présente un comportement déclenché par front! Il est utile d'étudier la bascule maître-esclave car elle a quelque chose à dire sur la relation entre le déclenchement de niveau et de front.


1
Les horloges multiphasées sensibles au niveau évitent le problème du "chaos" si la sortie d'aucun verrou ne revient à son entrée sans passer par un verrou échantillonné sur une phase d'horloge différente. De telles conceptions peuvent avoir certains avantages lors de l'interfaçage des processeurs avec des choses comme les mémoires asynchrones, car le temps entre le front avant d'une phase d'horloge et le front arrière de la suivante peut être arbitrairement divisé entre le temps requis pour router et sortir l'adresse, l'accès l'heure de la RAM et l'heure de configuration de l'entrée de données du processeur.
supercat

2
@supercat Comme exemple familier, la bascule maître-esclave pourrait être considérée comme un exemple d'horloge multiphasée. Le maître et l'esclave sont sur des phases opposées, et donc la même condition s'applique s'il y a du retour: il passe à une phase différente. Je devrais ajouter ceci à la réponse pour le compléter.
Kaz

2
+1 analogie de sas. Je n'ai jamais entendu personne l'expliquer de cette façon, mais c'est parfaitement logique.
ajs410

@ ajs410: Une autre analogie que j'aime est un échappement d'horlogerie. Le pendule est relié à deux bras qui peuvent chacun permettre au train d'échappement de bouger librement ou le bloquer la prochaine fois qu'il atteint une certaine "phase". Pour un bon fonctionnement, les bras doivent être ajustés de manière à ce qu'il n'y ait pas de temps où les deux bras laisseraient tourner le train. Sans cette contrainte, le mécanisme tournerait follement hors de contrôle.
supercat

2

Le déclenchement sur front est bon pour les horloges, car il permet d'utiliser la valeur émise par un verrou en réponse à un front d'horloge (par exemple croissant) dans le calcul de ce qu'il doit faire sur le prochain front d'horloge montant. Si l'on construit un circuit séquentiel tel qu'un compteur en utilisant un certain nombre de verrous déclenchés par front, on peut mélanger arbitrairement des composants logiques rapides et lents à condition que, pour chaque chemin possible, le temps de propagation moins la quantité de retard de l'horloge du verrou récepteur. de l'expéditeur, est garanti supérieur au temps de maintien du récepteur, et le temps de cycle plus la quantité de retard de l'horloge du verrou récepteur sur les expéditeurs, moins le temps de propagation, est supérieur au temps de configuration du récepteur.

En revanche, la construction d'un circuit pour compter les impulsions sur une seule entrée sans utiliser de verrous déclenchés par front nécessiterait certaines garanties sur les vitesses relatives de certaines parties du circuit. Une approche courante consistait à convertir un signal d'horloge entrant (ClkIn) en une paire de signaux d'horloge sans chevauchement (Phi1 et Phi2). Phi1 est vrai lorsque ClkIn est élevé et a été élevé pendant un certain temps minimum garanti . Phi2 est élevé lorsque ClkIn est faible et a été faible pendant un certain temps minimum garanti. Lorsque ClkIn passe de bas à haut, Phi2 descendra bas avant que Phi1 ne monte haut; de même quand il passe de haut en bas. On pourrait construire un compteur en ayant deux ensembles de verrous (que j'appellerai Count1 et Count2). Chaque fois que Phi1 est élevé, Count1 verrouille Count2. Chaque fois que Phi2 est élevé, Count2 se verrouille (Count1 + 1). Si Phi1 et Phi2 devaient tous deux atteindre un niveau élevé à la fois, ou avec trop peu de temps entre eux, la valeur du compteur deviendrait indéterminée, mais à condition que la séparation appropriée soit maintenue, le compteur fonctionnera très bien. Les systèmes synchronisés en deux phases ont souvent une quantité assez généreuse de séparation intégrée; à condition que tout soit assez rapide, une telle séparation peut éviter des problèmes de décalage d'horloge.

En interne, de nombreux verrous déclenchés par front peuvent être considérés comme une paire de verrous maître / esclave qui sont câblés de sorte que le maître verrouille l'entrée chaque fois que l'horloge est dans l'état avant le front, et l'esclave verrouille le maître lorsque l'horloge est dans l'état après. Les signaux alimentant les deux verrous doivent avoir une relation appropriée, mais s'ils sont produits dans le même voisinage que les verrous, il n'est pas nécessaire de sur-concevoir la quantité de séparation presque autant qu'il serait nécessaire si les deux phases d'horloge étaient envoyé sur une zone plus large.

Notez que si le déclenchement sur front est bon pour les horloges, il existe d'autres objectifs pour lesquels il l'est moins. Il est parfois avantageux que des événements périodiques se produisent en interruptions, à condition qu'il n'y ait pas deux événements partageant le même signal déclenché par front. Le déclenchement sur front est moche pour les interruptions partagées et, dans certains cas, peut être problématique même avec des interruptions, sauf s'il existe un moyen d'interroger l'état du câble d'interruption. Le déclenchement de niveau peut également être avantageux dans les cas où un signal stroboscopique sera actif sur le même cycle que certaines informations qui devraient être verrouillées, mais où les informations ont un chemin de calcul plus long que le stroboscope. Si l'information est quelque chose comme une adresse pour une puce de mémoire asynchrone, la rendre disponible au cours d'un cycle d'horloge peut être meilleure que de la faire attendre jusqu'au début du cycle d'horloge suivant.


2

Pour comprendre pourquoi le déclenchement sur front est préféré, imaginez un additionneur 8 bits connecté à un registre, ajoutant constamment 1 à la valeur du registre, avec un bouton-poussoir câblé à la broche d'activation du registre.

Si la broche d'activation du registre est sensible au niveau, le contenu du registre augmentera constamment pendant la durée de la pression sur le bouton. L'état suivant du registre ne sera pas déterministe pour une pression donnée sur le bouton. Cela est dû au fait que l'additionneur peut incrémenter le registre plusieurs fois avant de pouvoir retirer votre doigt - en d'autres termes, la rétroaction quitte le registre et revient trop rapidement à l'additionneur.

Si la broche d'activation était sensible aux bords à la place, le contenu du registre incrémenterait exactement une fois à chaque pression sur le bouton, quelle que soit la durée pendant laquelle le bouton était enfoncé (en supposant que l'entrée était correctement anti-rebond). Il serait impossible pour la sortie du registre de le renvoyer à l'additionneur à temps pour tout comportement non déterministe.


1

Comme d'autres l'ont dit, le bord est un moment très spécifique dans le temps. Nous savons tous que les circuits numériques peuvent traverser des pépins lorsqu'une sortie d'une porte est erronée car seules quelques-unes de ses entrées l'ont atteinte, les autres signaux sont en route et prennent plus de temps en raison du chemin plus long (l'électricité se déplace assez rapidement mais encore 3x10 ^ 8 m / s prend un peu de temps pour contourner les fils). Si nous avons une unité déclenchée par le niveau, sa sortie sera effectuée par des problèmes. Avec le déclenchement des choses, nous avons une fenêtre très étroite dans le temps où "les choses peuvent arriver", en d'autres termes, le circuit ne changera son état (les valeurs sur différents fils à l'intérieur du circuit, y compris la sortie) qu'à certains instants bien définis dans temps. Veuillez noter l'expression "instants dans le temps"

À ce stade, vous ne serez pas au courant de quelque chose appelé "analyse temporelle", mais je vais vous expliquer un peu. Lorsque nous faisons des circuits numériques, nous voulons les simuler pour voir comment ils se comporteront et si ce comportement correspond à ce que nous voulons qu'il fasse. Dans l'analyse temporelle, nous vérifions si les signaux sont capables d'atteindre un certain point du circuit dans le temps requis. S'ils sont trop retardés, le circuit ne fonctionnera pas correctement. En utilisant des blocs de circuits déclenchés par front au lieu de déclenchés par niveau, l'analyse de synchronisation devient très facile car nous savons exactement quand les choses peuvent se produire dans le circuit. Cela signifie que la conception du circuit devient également plus facile. N'oubliez pas que dans le monde réel, vous rencontrerez très rarement des verrous déclenchés par niveau.


1

Bien que d'autres réponses aient couvert presque tout ce qu'il y a à dire sur votre question, pour que ce soit plus clair, j'ai ajouté quelques diagrammes et une brève explication.

Imaginez que vous souhaitiez concevoir un circuit comprenant une sorte de rétroaction. Dites A = A.B(essentiellement une porte ET avec une rétroaction). Si vous l'implémentez à l'aide d'un simple verrou sensible au niveau qui stocke la valeur de A, votre circuit ressemblera à ceci: entrez la description de l'image ici

Cela peut créer un problème. Lorsque l'horloge est élevée, le verrou devient transparent et la porte ET calcule la nouvelle valeur de A and B. Mais la valeur est renvoyée au verrou, et puisque le verrou est toujours transparent (CLK est toujours élevé), la nouvelle valeur de A AND Best calculée. C'est ce que l'on appelle communément une condition de concurrence , qui crée des problèmes (des hauts et des bas inattendus dans la sortie) que vous avez mentionnés.

Une solution à ce problème consisterait à garder l'impulsion CLK très courte, suffisamment courte pour qu'une fois la sortie de la porte ET générée, le verrou soit désactivé avant que la valeur ne soit à nouveau propagée à l'entrée. Il devrait être intuitif de voir pourquoi cela peut être difficile à réaliser. Cela dépendrait de la vitesse de commutation du verrou (enfin, un verrou est également constitué de portes combinatoires), de la longueur du fil et de centaines d'autres paramètres.

Une deuxième option plus réalisable consiste à utiliser un élément sensible aux bords (une bascule dans ce cas), qui est essentiellement un couple de verrous connectés de manière très intelligente.

entrez la description de l'image ici

Fondamentalement, lorsque le CLKsignal est haut, le verrou U1 est transparent, ce qui amène la valeur logique à l'entrée A à la sortie du verrou U1, lorsque le CLKsignal est BAS, le verrou U2 devient transparent et une nouvelle valeur de A AND Best calculée. Mais cette valeur ne se propage à l'entrée de la porte ET que lorsque le verrou U1 devient transparent (CLK est HIGH), et par conséquent le verrou U1 devient transparent (CLK est LOW). Ce qui revient à dire que le circuit est désormais sensible aux bords (la valeur de sortie ne change qu'au bord négatif de l'horloge).

Cela évite le problème de Race Condition expliqué plus haut, et c'est pourquoi le déclenchement de niveau est préféré au déclenchement de front.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.