lol
authorPaul Kocialkowski <contact@paulk.fr>
Mon, 4 May 2015 21:53:42 +0000 (23:53 +0200)
committerPaul Kocialkowski <contact@paulk.fr>
Mon, 4 May 2015 21:53:42 +0000 (23:53 +0200)
applications-logiques.tex

index cf02817..774347d 100644 (file)
@@ -1,20 +1,21 @@
 \chapter{Applications aux circuits logiques}
 
-On s'intéresse particulièrement aux interactions entre les montages électroniques dépendants du temps et les circuits logiques, qui sont à la base de l'électronique numérique et de l'informatique. Il s'agit de mettre en évidence les problématiques qui rendent nécessaires l'utilisation d'une base de temps pour l'organisation des opérations. Différents concepts fondamentaux liés à l'électronique numérique seront présentés, ainsi que leur rapport au temps. Ils seront par la suite illustrés par la réalisation d'un système s'inscrivant dans le cadre des ces problématiques temporelles : les solutions proposées seront détaillées et un aperçu de l'état de l'art pour ce problème spécifique sera par la suite abordé.
+On s'intéresse particulièrement aux interactions entre les montages électroniques dépendants du temps et les circuits logiques, qui sont à la base de l'électronique numérique et de l'informatique. Il s'agit de mettre en évidence les problématiques qui rendent nécessaire l'utilisation d'une base de temps pour l'organisation des opérations. Différents concepts fondamentaux liés à l'électronique numérique seront présentés, ainsi que leur rapport au temps. Ils seront par la suite illustrés par la réalisation d'un système s'inscrivant dans le cadre de ces problématiques temporelles : les solutions proposées seront détaillées et un aperçu de l'état de l'art pour ce problème spécifique sera par la suite abordé.
 
 \section{Concepts et définitions}
 \subsection{Systèmes logiques}
 \label{section_logique} % systemes-logiques
 \label{systemes-logiques}
-Dans les systèmes électroniques logiques, l'information représentée par des grandeurs électriques prenant la forme de valeurs discrètes\citenotepage{Tocci}{4}. On définit alors deux états en chaque point du circuit, correspondants à la présence de la grandeur considérée (une tension, un courant) : c'est l'état logique haut ou à son absence : l'état logique bas.\\
+Dans les systèmes électroniques logiques, l'information est représentée par des grandeurs électriques prend la forme de valeurs discrètes\citenotepage{Tocci}{4}. On définit alors deux états en chaque point du circuit, correspondants à la présence de la grandeur considérée (une tension, un courant) : c'est l'état logique \emph{haut} ou en son absence : l'état logique \emph{bas}.\\
 
-On parle de système analogique (par opposition à système logique) lorsque les grandeurs représentant l'information varient de manière continue (une infinité de valeurs est possible).\\
-Pourtant, il n'y a pas de différence fondamentale au point de vue électrique entre un système logique et un système analogique : c'est bien l'interprétation que l'on porte aux différents états possibles qui donne sens à l'information.\\
+On parle de système \emph{analogique} (par opposition à système logique) lorsque les grandeurs représentant l'information varient de manière continue (une infinité de valeurs est possible).\\
+Pourtant, il n'y a pas de différence fondamentale du point de vue électrique entre un système logique et un système analogique : c'est bien l'interprétation que l'on porte aux différents états possibles qui donne sens à l'information.\\
 
-Ainsi, dans la pratique, on définit un état logique en un point à partir de la tension mesurée en ce point (par rapport à la masse, le 0V du générateur). Les tensions correspondantes à chaque état logique sont spécifiques à la technologie des composants utilisés, il en existe plusieurs sortes et les deux plus répandues sont le TTL\footnote{Transistor-Transistor Logic en Anglais, soit logique transistor-transistor en français}, qui utilise des transistors bipolaires et le CMOS\footnote{Complementary Metal Oxide Semiconductor en Anglais, soit Semi-conducteur à complémentarité métal-oxide en Français}, qui utilise des transistors à effet de champ. Pour la technologie TTL, les tensions d'alimentation sont de l'ordre de 5V. Ainsi, on attribue l'état bas à un intervalle de tensions proche de 0V ( de 0V à 0,8V) et l'état haut à une autre intervalle, proche de 5V (de 2V à 5V). L'intervalle de tensions entre 0,8V et 2V ne représente donc pas d'état logique défini.\\
+Ainsi, dans la pratique, on définit un état logique en un point à partir de la tension mesurée en ce point (par rapport à la masse, le $0$ V du générateur). Les tensions correspondantes à chaque état logique sont spécifiques à la technologie des composants utilisés, il en existe plusieurs sortes et les deux plus répandues sont le TTL\acrotrad{Transistor-Transistor Logic}{logique transistor-transistor}, qui utilise des transistors bipolaires et le CMOS\acrotrad{Complementary Metal Oxide Semiconductor}{Semi-conducteur à complémentarité métal-oxide}, qui utilise des transistors à effet de champ. Pour la technologie TTL, les tensions d'alimentation sont de l'ordre de 5V. Ainsi, on attribue l'état bas à un intervalle de tensions proche de $0$ V ( de $0$ V à $0,8$ V) et l'état haut à une autre intervalle, proche de $5$ V (de $2$ V à $5$ V). L'intervalle de tensions entre $0,8$ V et $2$ V ne représente donc pas d'état logique défini.\\
 
-Cette représentation dite logique de l'information présente de nombreuses applications. En effet, elle permet tout d'abord de représenter des nombres sous la forme de quantités discrètes : on parle alors de bits\citenotepage{Tocci}{10}. Un bit représente l'unité fondamentale d'un système de numération ne pouvant prendre que deux valeurs possibles (les états logiques haut et bas), c'est à dire de la base 2. Afin de représenter des nombres plus grands que 1 (le nombre maximal représentable sur un bit), on forme des ensembles de bits (de la même manière que l'on forme des ensembles de chiffres allant de 0 à 9 pour représenter un nombre supérieur à 9 en base 10). Chaque bit porte un poids, c'est à dire qu'il représente une puissance de 2 plus ou moins élevée. Par exemple, dans la notation (101) en base 2, le bit de droite porte un poids 0 (il représente l'unité), le bit du milieu un poids 1 (il représente $2^1$) et le bit de gauche un poids 2 ($2^2$). On lit alors la valeur numérique en base 10 : $1 \cdot 1 + 0 \cdot 2^1 + 1 \cdot 2^2 = 5$. Un ensemble de 8 bits est appelé un octet, ou byte en anglais.\\
-Cette représentation se révèle particulièrement efficace pour effectuer des opération sur ces nombres ou simplement les représenter : on peut aisément associer à chaque point du circuit représentant un bit, une LED dont l'état (allumé ou éteint) traduit directement l'état logique du bit (haut ou bas).
+Cette représentation dite logique de l'information présente de nombreuses applications. En effet, elle permet tout d'abord de représenter des nombres sous la forme de quantités discrètes : on parle alors de bits\citenotepage{Tocci}{10}. Un \emph{bit} représente l'unité fondamentale d'un système de numération ne pouvant prendre que deux valeurs possibles (les états logiques haut et bas), c'est à dire de la base 2. Afin de représenter des nombres plus grands que 1 (le nombre maximal représentable sur un bit), on forme des ensembles de bits (de la même manière que l'on forme des ensembles de chiffres allant de 0 à 9 pour représenter un nombre supérieur à 9 en base 10). Chaque bit porte un poids, c'est à dire qu'il représente une puissance de 2 plus ou moins élevée. Par exemple, dans la notation $\overrightarrow{101}$ en base 2, le bit de droite porte un poids 0 (il représente l'unité), le bit du milieu un poids 1 (il représente $2^1$) et le bit de gauche un poids 2 ($2^2$). On lit alors la valeur numérique en base 10 : $1 \cdot 1 + 0 \cdot 2^1 + 1 \cdot 2^2 = 5$. Un ensemble de 8 bits est appelé un \emph{octet} (ou \textit{byte} en anglais).\\
+
+Cette représentation se révèle particulièrement efficace pour effectuer des opérations sur ces nombres ou simplement les représenter : on peut aisément associer à chaque point du circuit représentant un bit, une LED dont l'état (allumé ou éteint) traduit directement l'état logique du bit (haut ou bas).
 
 \subsection{Algèbre de Boole et portes logiques}
 Comme tout circuit électronique, un circuit logique effectue certaines opérations sur les grandeurs fournies en entrée : il s'agit alors d'opérations sur les valeurs logiques. On parle véritablement de système logique dès lors qu'il est possible d'appliquer certaines opérations logiques fondamentales à ces grandeurs. Ces opérations fondamentales sont les suivantes : le ET logique (conjonction), le OU logique (disjonction) et le NON logique (négation). On peut représenter l'action de chaque opération au travers d'une table de vérité, tableau mettant en relation les valeurs logiques possibles d'entrée et les sorties correspondantes (entrées $A$ et $B$, sortie $S$) :
@@ -61,11 +62,9 @@ A & S \\
 \caption{Tables de vérité pour les opérations ET, OU et NON}
 \end{table}
 
-Le formalisme de ces opérations est établi au travers de l'algèbre de Boole, qui caractérise ces relations entre des variables dites Booléennes de valeur 0 ou 1, auxquelles correspondent donc les états logiques haut et bas. Les tables de vérité sont une représentation de la logique booléenne. On peut également construire des équations booléennes, avec les opérateurs fondamentaux $\cdot$ pour l'opération ET, $+$ pour l'opération OU et le trait de surlignement pour l'opération NON (également dite inverse). Par exemple, l'équation $S = A \cdot B$ indique que la sortie S résulte de l'opération logique A ET B.\\
-
-Les opérations fondamentales de l'algèbre booléen sont implémentées sous la forme de composants électroniques appelés portes logiques. On peut également les associer (bout à bout) pour obtenir d'autres fonctions logiques telles que le NON-ET ($S=\overline{A \cdot B}$) : porte ET suivie d'une porte NON, le NON-OU/NI ($S=\overline{A+B}$) : porte OU suivie d'une porte NON ou encore le OU EXCLUSIF ($S = A \oplus B$) : association plus complexe. On parle alors de logique combinatoire : les portes logiques sont combinées pour obtenir un résultat particulier. Il est par exemple possible de réaliser ainsi des circuits logiques effectuant des opérations mathématiques tels qu'une addition (binaire). On pourra exprimer cette opération avec l'algèbre de Boole et utiliser certaines méthodes pour éventuellement simplifier l'expression (et donc utiliser moins de composants).\\
+Le formalisme de ces opérations est établi au travers de l'algèbre de Boole, qui caractérise ces relations entre des variables dites \emph{booléennes} de valeur 0 ou 1, auxquelles correspondent donc les états logiques haut et bas. Les tables de vérité sont une représentation de la logique booléenne. On peut également construire des équations booléennes, avec les opérateurs fondamentaux $\cdot$ pour l'opération ET, $+$ pour l'opération OU et le trait de surlignage pour l'opération NON (également dite inverse). Par exemple, l'équation $S = A \cdot B$ indique que la sortie S résulte de l'opération logique A ET B.\\
 
-\newpage
+Les opérations fondamentales de l'algèbre booléenne sont implémentées sous la forme de composants électroniques appelés \emph{portes logiques}. On peut également les associer (bout à bout) pour obtenir d'autres fonctions logiques telles que le NON-ET ($S=\overline{A \cdot B}$) : porte ET suivie d'une porte NON, le NON-OU/NI ($S=\overline{A+B}$) : porte OU suivie d'une porte NON ou encore le OU EXCLUSIF ($S = A \oplus B$) : association plus complexe. On parle alors de logique combinatoire : les portes logiques sont combinées pour obtenir un résultat particulier. Il est ainsi possible de réaliser des circuits logiques effectuant des opérations mathématiques telles qu'une addition (binaire). On pourra exprimer cette opération avec l'algèbre de Boole et utiliser certaines méthodes pour éventuellement simplifier l'expression (et donc utiliser moins de composants).\\
 
 Les portes logiques sont schématisées de manière standard par les symboles suivants :
 \begin{figure}[!h]
@@ -116,9 +115,9 @@ Les portes logiques sont schématisées de manière standard par les symboles su
 \label{bascules}
 Dans les applications les plus simples de logique combinatoire, les sorties sont directement fonctions des entrées et on peut formaliser ce lien par des équations booléennes, qui traduisent les opérations effectuées. Ainsi, quand on ne met pas en jeu de rétroaction d'une sortie sur une entrée, on ne peut pas prendre en compte l'état précédent du système. Il n'est donc pas possible pour le circuit de mémoriser cet état précédent. Pourtant, de nombreuses applications dépendent de la connaissance de l'état précédent du système (par exemple dans un compteur, pour incrémenter un ensemble de bits, il faut avant tout mémoriser le décompte actuel).\\
 
-Différents montages d'électronique numérique permettent de jouer le rôle de mémoire. Plus précisément, il s'agit de circuits permettant de préserver un état après que la cause qui le produit se soit dissipée. Généralement, on cherchera également à pouvoir effacer cet état ou à le mettre à jour. Les composants les plus fondamentaux et les plus simples permettant de mémoriser un état logique sont les bascules. Il s'agit de portes logiques couplées et reliées entre-elles une certaine rétroaction de la sortie sur l'entrée. Dès lors, on ne peut plus formaliser le comportement de la bascule à partir d'une équation booléenne, mais on pourra préciser l'action de certains états appliqués en certains points du circuit.\\
+Différents montages d'électronique numérique permettent de jouer le rôle de \emph{mémoire}. Plus précisément, il s'agit de circuits permettant de préserver un état après que la cause qui le produit se soit dissipée. Généralement, on cherchera également à pouvoir effacer cet état ou à le mettre à jour. Les composants les plus fondamentaux et les plus simples permettant de mémoriser un état logique sont les \emph{bascules}. Il s'agit de portes logiques couplées et reliées entre elles avec une certaine rétroaction de la sortie sur l'entrée. Dès lors, on ne peut plus formaliser le comportement de la bascule à partir d'une équation booléenne, mais on pourra préciser l'action de certains états appliqués en certains points du circuit.\\
 
-Il est à noter que les montages logiques avec rétroaction ne sont pas nécessairement stables. En effet, si on considère l'exemple très immédiat d'une porte NON dont on rebouclerait la sortie à l'entrée, on ne peut prédire quel sera l'état logique relevé à un instant donné.\\
+Il est à noter que les montages logiques avec rétroaction ne sont pas nécessairement stables. En effet, si on considère l'exemple très immédiat d'une porte NON dont on rebouclerait la sortie sur l'entrée, on ne peut prédire quel sera l'état logique relevé à un instant donné.\\
 Il se peut que cet état soit électriquement stable et déterminé par la nature des composants constituants la porte logique, mais ce n'est à priori pas le cas du point de vue logique.
 
 \begin{figure}[!h]
@@ -127,7 +126,10 @@ Il se peut que cet état soit électriquement stable et déterminé par la natur
 \caption{Porte NON avec rétroaction directe}
 \end{figure}
 
-Les bascules les plus fondamentales sont appelées bascules RS (pour Reset et Set) et peuvent-être constituées de portes NON-OU/NI ou de portes NON-ET :
+Les bascules les plus fondamentales sont appelées bascules RS (pour \textit{Reset} et \textit{Set}) et peuvent être constituées de portes NON-OU/NI ou de portes NON-ET :
+
+\newpage
+
 \begin{figure}[!h]
 \centering
 \hfill
@@ -148,7 +150,7 @@ Les bascules les plus fondamentales sont appelées bascules RS (pour Reset et Se
 
 On remarque en étudiant ces bascules qu'un état haut placé sur $S$ (ou un état bas placé sur $\overline{S}$) force un état haut à la sortie $Q$ (quel que soit l'état précédent de $Q$), qui est maintenu même après que l'impulsion initiale sur $S$ ait disparue. De même, un état haut placé sur $R$ (ou un état bas placé sur $\overline{R}$) force un état bas à la sortie $Q$ : il s'agit des fonctions permettant de faire passer la bascule dans un état haut (Set) ou dans un état bas (Reset).\\
 
-Les bascules à base de NON-ET sont dites à état bas actif, puisque leurs entrées sont en fait les inverses de Set et Reset : c'est donc un état logique bas qui impose l'état de la sortie $Q$. Par ailleurs, la sortie $\overline{Q}$ est systématiquement l'inverse de l'état de la sortie $Q$.\\
+Les bascules à base de NON-ET sont dites à \emph{état bas actif}, puisque leurs entrées sont en fait les inverses de Set et Reset : c'est donc un état logique bas qui impose l'état de la sortie $Q$. Par ailleurs, la sortie $\overline{Q}$ est systématiquement l'inverse de l'état de la sortie $Q$.\\
 
 On remarque également qu'une combinaison d'états est indéfinie : lorsque les deux entrées $R$ et $S$ sont portées à un état haut (ou que les deux entrées $\overline{S}$ et $\overline{R}$ sont portées à un état bas). Au contraire, quand les deux entrées $R$ et $S$ sont à un état bas (ou que les deux entrées $\overline{S}$ et $\overline{R}$ sont à un état haut), la bascule perpétue dans son état précédent : c'est la fonction de mémorisation.\\
 
@@ -170,12 +172,12 @@ $R$ & $\overline{R}$ & $S$ & $\overline{S}$ & $Q_{n+1}$ & $\overline{Q_{n+1}}$ \
 \label{verite-rs}
 \end{table}
 
-Il existe d'autres types de bascules, faisant office de mémoire du circuit et dont le fonctionnement reste proche de celui des bascules RS. On remarquera cependant deux grandes familles de bascules : les bascules asynchrones, qui ne sont pas synchronisées par un élément extérieur et les bascules synchrones, qui le sont. Les bascules de type RS sont asynchrones puisqu'elles ne disposent pas d'entrée pour la synchronisation. Au contraire, les bascules synchrones utilisent généralement un signal d'horloge pour la synchronisation de l'état de sortie.
+Il existe d'autres types de bascules, faisant office de mémoire du circuit et dont le fonctionnement reste proche de celui des bascules RS. On remarquera cependant deux grandes familles de bascules : les bascules \emph{asynchrones}, qui ne sont pas synchronisées par un élément extérieur et les bascules \emph{synchrones}, qui le sont. Les bascules de type RS sont asynchrones puisqu'elles ne disposent pas d'entrée pour la synchronisation. Au contraire, les bascules synchrones utilisent généralement un signal d'horloge pour la synchronisation de l'état de sortie.
 
 \subsection{Horloges et synchronisation}
 \label{section_horloge} % section-horloges
 \label{h-\thepage}
-Dans un cadre plus général que les bascules, il existe deux grandes familles de circuits logiques : les circuits synchrones et les circuits asynchrones. Les circuit asynchrones sont les plus immédiats à la compréhension : en effet, il s'agit de circuits dans lesquels une variation d'un état d'entrée entraîne immédiatement (aux temps de propagation du signal et de réaction des composants près) un variation des sorties en conséquence (ce-qui n'exclut pas non-plus l'utilisation de rétroactions et de dispositifs de mémoire). De fait, l'état du circuit peut potentiellement changer à tout moment, ce-qui rend le système complexe à concevoir et à dépanner\citenotepage{Tocci}{167}. De plus, la communication entre deux circuits asynchrones peut s'avérer particulièrement ardue dès lors qu'il s'agit de transférer des informations numériques en série ou en parallèle, comme détaillé dans la partie \ref{synchronisation-echange-donnees}.\\
+Dans un cadre plus général que les bascules, il existe deux grandes familles de circuits logiques : les circuits synchrones et les circuits asynchrones. Les circuit asynchrones sont les plus immédiats à la compréhension : en effet, il s'agit de circuits dans lesquels une variation d'un état d'entrée entraîne immédiatement (aux temps de propagation du signal et de réaction des composants près) une variation des sorties en conséquence (ce qui n'exclut pas non plus l'utilisation de rétroactions et de dispositifs de mémoire). De fait, l'état du circuit peut potentiellement changer à tout moment, ce qui rend le système complexe à concevoir et à dépanner\citenotepage{Tocci}{167}. De plus, la communication entre deux circuits asynchrones peut s'avérer particulièrement ardue dès lors qu'il s'agit de transférer des informations numériques en série ou en parallèle, comme détaillé dans la partie \ref{synchronisation-echange-donnees}.\\
 
 Au contraire, dans les circuits asynchrones, le moment exact où un point du circuit change d'état peut être commandé par un signal externe : il s'agit d'un signal de synchronisation que l'on appelle le signal d'horloge\citenotepageagain{Tocci}{167}. Généralement, le signal d'horloge est rectangulaire, périodique et de rapport cyclique\footnote{Il s'agit du rapport entre le temps haut du signal sur une période et l'ensemble de la période.} égal à $\frac12$.\\
 
@@ -185,7 +187,7 @@ Cependant, les horloges peuvent également être exploitées pour leur caractèr
 
 \section{Réalisation d'un compteur binaire}
 
-Afin de mettre en évidence la nécessité de synchroniser les états logiques dans un système avec rétroaction de la sortie, on cherche à réaliser un compteur binaire, c'est à dire un système présentant en sortie un ensemble de bits représentants un nombre qui sera le décompte courant. Avec un ensemble de $n$ bits en sortie, on obtient $2^n$ valeurs possibles pour le compteur, de $0$ à $2^n-1$. Une fois la dernière valeur dépassée, on s'attend à ce-que le compteur soit réinitialisé à $0$. On souhaite que la quantité décomptée soit le nombre de cycles d'horloge depuis la mise sous tension du circuit : la période du signal d'horloge sera alors directement l'unité temporelle du décompte.
+Afin de mettre en évidence la nécessité de synchroniser les états logiques dans un système avec rétroaction de la sortie, on cherche à réaliser un compteur binaire, c'est-à-dire un système présentant en sortie un ensemble de bits représentants un nombre qui sera le décompte courant. Avec un ensemble de $n$ bits en sortie, on obtient $2^n$ valeurs possibles pour le compteur, de $0$ à $2^n-1$. Une fois la dernière valeur dépassée, on s'attend à ce que le compteur soit réinitialisé à $0$. On souhaite que la quantité décomptée soit le nombre de cycles d'horloge depuis la mise sous tension du circuit : la période du signal d'horloge sera alors directement l'unité temporelle du décompte.
 
 \subsection{Expérimentations et premiers montages}
 
@@ -222,7 +224,7 @@ On peut alors exprimer l'addition binaire avec le circuit à portes logiques sui
 \caption{Circuit d'addition binaire de $A$ et $B$}
 \end{figure}
 
-Intuitivement, on va chercher à additionner la valeur précédente du premier bit $D_0$ du compteur avec $1$ de sorte à l'incrémenter, puis additionner la valeur précédente du second bit $D_1$ avec la valeur nouvellement calculée par l'opération précédente, et ainsi de suite. Considérons plus précisément l'exemple du premier bit ($D_0$) avec un raisonnement qui sera applicables aux autres bits : si on reboucle la sortie de l'additionneur\footnote{Il ne s'agit là que d'un demi-additionneur, car ce montage ne prend pas en entrée de retenue, nécessaire pour la réalisation d'un calculateur complet, mais inutilisée pour un compteur comme explicité.} à une entrée ($A$) et que l'on applique un état logique haut (bit $1$) à l'autre entrée ($B$), on se place dans le cas d'une rétroaction immédiate. Ce montage ne sera cependant pas stable : le circuit va se comporter comme un inverseur rebouclé. Il est donc nécessaire de synchroniser le calcul avec un signal d'horloge.
+Intuitivement, on va chercher à additionner la valeur précédente du premier bit $D_0$ du compteur avec $1$ de sorte à l'incrémenter, puis additionner la valeur précédente du second bit $D_1$ avec la valeur nouvellement calculée par l'opération précédente, et ainsi de suite. Considérons plus précisément l'exemple du premier bit ($D_0$) avec un raisonnement qui sera applicable aux autres bits : si on reboucle la sortie de l'additionneur\footnote{Il ne s'agit là que d'un demi-additionneur, car ce montage ne prend pas en entrée de retenue, nécessaire pour la réalisation d'un calculateur complet, mais inutilisée pour un compteur comme explicité.} à une entrée ($A$) et que l'on applique un état logique haut (bit $1$) à l'autre entrée ($B$), on se place dans le cas d'une rétroaction immédiate. Ce montage ne sera cependant pas stable : le circuit va se comporter comme un inverseur rebouclé. Il est donc nécessaire de synchroniser le calcul avec un signal d'horloge.
 
 \subsubsection*{Solution de synchronisation}
 
@@ -234,32 +236,32 @@ On propose une solution de synchronisation en deux temps, où la valeur d'entré
 \caption{Solution de synchronisation proposée}
 \end{figure}
 
-On utilise deux bascules RS asynchrones, simples à réaliser et au fonctionnement bien connu. On synchronise alors la première bascule sur le temps haut de l'horloge avec deux portes ET reliées à $H$ sur les entrées $R$ et $S$, on relie l'entrée du montage à la porte ET reliée à l'entrée $S$ de la bascule et on relie l'inverse de l'entrée du montage pour la porte ET reliée à l'entrée $R$ de la bascule. De fait, l'état de l'entrée est recopié en sortie de la bascule pendant l'état haut de l'horloge et reste inchangé pendant le temps bas. On y associe alors une seconde bascule synchronisée de la même façon mais sur l'état bas de l'horloge (avec deux portes ET reliées à $\overline{H}$) et on relie la sortie $Q$ (resp. $\overline{Q}$ de la première bascule à l'entrée $S$ (resp. $R$) (au travers des portes ET). De fait, pendant le temps bas de l'horloge, l'état intermédiaire de sortie de la première bascule (qui est inchangé) est recopié en sortie par la seconde bascule, qui restera alors inchangée pendant le temps haut, ce-qui fournit le résultat attendu. Il s'agit d'une technique d'utilisation des bascules avec sensitivité aux états logiques de l'horloge\citenote{CoursLogique}.\\
+On utilise deux bascules RS asynchrones, simples à réaliser et au fonctionnement bien connu. On synchronise alors la première bascule sur le temps haut de l'horloge avec deux portes ET reliées à $H$ sur les entrées $R$ et $S$, on relie l'entrée du montage à la porte ET reliée à l'entrée $S$ de la bascule et on relie l'inverse de l'entrée du montage pour la porte ET reliée à l'entrée $R$ de la bascule. De fait, l'état de l'entrée est recopié en sortie de la bascule pendant l'état haut de l'horloge et reste inchangé pendant le temps bas. On y associe alors une seconde bascule synchronisée de la même façon mais sur l'état bas de l'horloge (avec deux portes ET reliées à $\overline{H}$) et on relie la sortie $Q$ (resp. $\overline{Q}$ de la première bascule à l'entrée $S$ (resp. $R$) (au travers des portes ET). De fait, pendant le temps bas de l'horloge, l'état intermédiaire de sortie de la première bascule (qui est inchangé) est recopié en sortie par la seconde bascule, qui restera alors inchangée pendant le temps haut, ce qui fournit le résultat attendu. Il s'agit d'une technique d'utilisation des bascules avec sensitivité aux états logiques de l'horloge\citenote{CoursLogique}.\\
 
-On considérera ici que les temps de propagation des signaux sont négligeables, de sorte que les états $H$ et $\overline{H}$ sont identiques ne tout points du circuit. Si ce n'est pas exactement rigoureux, le temps que les bascules changent d'état, toujours supérieurs aux temps de propagation des signaux\citenotepage{Tocci}{187} pourront jouer en notre faveur et éviter que, même dans le cas où on a effectivement  $H = \overline{H}$, le circuit recopie directement l'entrée à la sortie.
+On considérera ici que les temps de propagation des signaux sont négligeables, de sorte que les états $H$ et $\overline{H}$ sont identiques en tous points du circuit. Si ce n'est pas exactement rigoureux, les temps nécessaires aux bascules pour changer d'état, toujours supérieurs aux temps de propagation des signaux\citenotepage{Tocci}{187} pourront jouer en notre faveur et éviter que, même dans le cas où on a effectivement  $H = \overline{H}$, le circuit recopie directement l'entrée à la sortie.
 
 \subsubsection*{Expérimentation}
 
 On conçoit alors un premier montage qui utilise directement cette solution de synchronisation pour la rétroaction des bits $D_0$ et $D_1$. On a alors un additionneur pour chaque bit (et on ne s'intéresse pas à la porte ET qui amène au calcul de $D_2$. Le détail du schéma logique est reporté en annexe \ref{incrementation}. Comme l'addition est effectuée sur chaque bit en un temps d'horloge, on incrémente effectivement le compteur d'une unité par cycle d'horloge : c'est le résultat attendu.\\
-Cependant, on peut directement simplifier ce montage avant d'effectuer le montage : la porte OU EXLUSIF de l'additionneur du bit $D_0$ avec une entrée à $1$ est simplifiable en NON, on se retrouve alors avec une double inversion que l'on peut supprimer. Une inversion simple du bit $D_0$ peut directement être obtenue avec la sortie $\overline{Q}$ de la dernière bascule. De même, la porte ET de l'additionneur du bit $D_0$ avec une entrée à $1$ recopie l'entrée et peut-être supprimée. On peut formellement démontrer ces simplifications dans l'algèbre booléen en utilisant des méthodes systématiques telles que les diagrammes de Karanaugh\citenotepage{Tocci}{108}. Le détail du schéma logique simplifié est détaillé en annexe \ref{incrementation-simplifie}.\\
+Cependant, on peut directement simplifier le montage avant de le réaliser : la porte OU EXLUSIF de l'additionneur du bit $D_0$ avec une entrée à $1$ est simplifiable en NON, on se retrouve alors avec une double inversion que l'on peut supprimer. Une inversion simple du bit $D_0$ peut directement être obtenue avec la sortie $\overline{Q}$ de la dernière bascule. De même, la porte ET de l'additionneur du bit $D_0$ avec une entrée à $1$ recopie l'entrée et peut-être supprimée. On peut formellement démontrer ces simplifications dans l'algèbre booléenne en utilisant des méthodes systématiques telles que les diagrammes de Karanaugh\citenotepage{Tocci}{108}. Le détail du schéma logique simplifié est détaillé en annexe \ref{incrementation-simplifie}.\\
 
-Dans un premier temps, le circuit a été mis en œuvre en réalisant les portes logiques à l'aide de composants électroniques fondamentaux tels que les résistances, diodes et transistors (on parle de logique DTL\footnote{Diode-Transistor Logic en Anglais, ou logique diode-transistor en Français}). Vu la quantité de composants nécessaires et la place requise, seul l'étage d'addition du bit $D_0$ a été réalisé, qui permet de valider la solution de synchronisation. Par ailleurs, cette expérience a été réalisée alors qu'aucun circuit de génération d'horloge n'était disponible : l'horloge a donc été émulée par un bouton poussoir relié à un état logique haut. La sortie est représentée par un LED, allumée pour signifier un état haut et éteinte pour un état bas. Une photographie du montage réalisé est reportée en annexe \ref{compteur-experimental}.\\
+Dans un premier temps, le circuit a été mis en œuvre en réalisant les portes logiques à l'aide de composants électroniques fondamentaux tels que les résistances, diodes et transistors (on parle de logique DTL\footnote{Diode-Transistor Logic en Anglais, ou logique diode-transistor en Français}). Vu la quantité de composants nécessaires et la place requise, seul l'étage d'addition du bit $D_0$ a été réalisé, qui permet de valider la solution de synchronisation. Par ailleurs, cette expérience a été réalisée alors qu'aucun circuit de génération d'horloge n'était disponible : l'horloge a donc été émulée par un bouton poussoir relié à un état logique haut. La sortie est représentée par une LED, allumée pour signifier un état haut et éteinte pour un état bas. Une photographie du montage réalisé est reportée en annexe \ref{compteur-experimental}.\\
 
-Les premiers résultats indiquent que le circuit se comporte comme prévu, mais présente sporadiquement une anomalie : la LED clignote très rapidement au relâchement du bouton et indique l'état inverse à l'état attendu. Afin d'étudier le problème, on utilise un analyseur logique qui va enregistrer l'état de plusieurs points du circuit ($H, \overline{H}, Q,\overline{Q}, D_0, \overline{D_0}$)\footnote{$Q$ représente la sortie de la première bascule du circuit de synchronisation.} à une fréquence maximum de $24$ MHz. On effectue la capture en utilisant le logiciel \bsc{PulseView}, faisant partie de la suite d'outils libres \bsc{Sigrok}. Le chronogramme obtenu est reporté en annexe \ref{chronogramme-compteur} et on y observe l'anomalie après $1800$ ms. Un agrandissement de la zone en question, reporté en annexe \ref{chronogramme-compteur-bouton} permet de constater de très rapides oscillations du signal d'horloge : la partie logique du circuit se comporte finalement correctement, mais en des temps trop cours pour que l'on puisse l'observer. On émet l'hypothèse que cette gigue\footnote{fluctuation parasite rapide du signal} est le résultat d'un phénomène d'oscillation mécanique lié au bouton poussoir, ce-qui qui sera jugée comme vraisemblable par un professeur d'électronique de l'ENSEIRB-MATMECA. Il s'agit du phénomène de rebonds mécaniques, très courant dans l'utilisation de tels boutons.\\
+Les premiers résultats indiquent que le circuit se comporte comme prévu, mais présente sporadiquement une anomalie : la LED clignote très rapidement au relâchement du bouton et indique l'état inverse à l'état attendu. Afin d'étudier le problème, on utilise un analyseur logique qui va enregistrer l'état de plusieurs points du circuit ($H, \overline{H}, Q,\overline{Q}, D_0, \overline{D_0}$)\footnote{$Q$ représente la sortie de la première bascule du circuit de synchronisation.} à une fréquence maximum de $24$ MHz. On effectue la capture en utilisant le logiciel \bsc{PulseView}, faisant partie de la suite d'outils libres Sigrok. Le chronogramme obtenu est reporté en annexe \ref{chronogramme-compteur} et on y observe l'anomalie après $1800$ ms. Un agrandissement de la zone en question, reporté en annexe \ref{chronogramme-compteur-bouton} permet de constater de très rapides oscillations du signal d'horloge : la partie logique du circuit se comporte finalement correctement, mais en des temps trop cours pour que l'on puisse l'observer. On émet l'hypothèse que cette gigue\footnote{fluctuation parasite rapide du signal} est le résultat d'un phénomène d'oscillation mécanique lié au bouton poussoir, ce qui qui sera jugée comme vraisemblable par Mr Lebret, professeur d'électronique à l'ENSEIRB-MATMECA. Il s'agit du phénomène de rebonds mécaniques, très courant lorsque l'on utilise de tels boutons.\\
 
 \subsubsection*{Suppression des rebonds mécaniques}
 
-Afin de supprimer ces rebonds électriques, on met en place un système à base de condensateur et de transistor. Il s'agit d'exploiter le temps de décharge du condensateur, que l'on choisira supérieur à la durée des rebonds, relevés de l'ordre de la milliseconde au maximum (avec l'analyseur logique). On utilise un transistor avec l'émetteur porté à la masse et une résistance de valeur faible ($500$ \ohm) entre le collecteur et la tension positive ($5$ V). On considère que le circuit utilisant l'horloge dispose d'une résistance très grande devant cette valeur de résistance faible (le circuit est réalisé pour satisfaire à cette condition). De fait, dès lors que que le transistor est bloqué, le signal de sortie correspond à peu-près aux $5$ V, soit un état logique haut. Au contraire, dès que le transistor est saturé, le collecteur est porté à la masse à travers l'émetteur (on néglige la tension de la jonction collecteur-émetteur).
+Afin de supprimer ces rebonds électriques, on met en place un système à base de condensateur et de transistor. Il s'agit d'exploiter le temps de décharge du condensateur, que l'on choisira supérieur à la durée des rebonds, relevés de l'ordre de la milliseconde au maximum (avec l'analyseur logique). On utilise un transistor avec l'émetteur porté à la masse et une résistance de valeur faible ($500$ \ohm) entre le collecteur et la tension positive ($5$ V). On considère que le circuit utilisant l'horloge dispose d'une résistance très grande devant cette valeur de résistance faible (le circuit est réalisé pour satisfaire à cette condition). De fait, dès lors que que le    transistor est bloqué, le signal de sortie correspond à peu près aux $5$ V, soit un état logique haut. Au contraire, dès que le transistor est saturé, le collecteur est porté à la masse à travers l'émetteur (on néglige la tension de la jonction collecteur-émetteur).
 \begin{itemize}
 \item[--] À la mise sous tension (quand le bouton n'est pas pressé), le condensateur se charge au travers des résistances $R1$ et $R3$ : c'est un circuit RC avec $R = R1 + R3 = 8$ k\ohm.\\
 La constante de temps associée à la charge est donc : $\tau_C = C \cdot R = 10 \cdot 10^{-6} \cdot 8 \cdot 10^3 = 80 \cdot 10^{-3} = 80$ ms.\\
-Le condensateur se charge jusqu'à ce-que la tension entre la base du transistor et la masse atteigne la valeur qui correspond au pont diviseur de tension de $R1$ et $R2$, soit : $5 \cdot \frac{2,7}{2,7 + 7,5} = 1,3$ V. Comme l'émetteur du transistor est porté à la masse, cette tension est directement la tension base-émetteur et assure la saturation du transistor (sans pour autant risquer de l'endommager). On a donc un état logique bas à la sortie $H$.\\
+Le condensateur se charge jusqu'à ce que la tension entre la base du transistor et la masse atteigne la valeur qui correspond au pont diviseur de tension de $R1$ et $R2$, soit : $5 \cdot \frac{2,7}{2,7 + 7,5} = 1,3$ V. Comme l'émetteur du transistor est porté à la masse, cette tension est directement la tension base-émetteur et assure la saturation du transistor (sans pour autant risquer de l'endommager). On a donc un état logique bas à la sortie $H$.\\
 \item[--] Quand le bouton est pressé, la base du transistor est directement portée à la masse et le condensateur commence sa décharge à travers la résistance $R3$. La constante de temps associée à la décharge est donc : $\tau_D = C \cdot R3 = 10 \cdot 10^{-6} \cdot 500 = 5 \cdot 10^{-3} = 5$ ms. Le transistor porté à la masse se bloque et la sortie $H$ devient un état logique haut.\\
 \item[--] Les rebonds du bouton portent pendant un temps très court le circuit dans son état de charge, mais la constante de temps de charge $\tau_C$ est bien supérieure à $\tau_D$ : la durée des rebonds n'est pas suffisante pour compenser la décharge. Globalement,\ le condensateur va continuer de se décharger en étant peu rechargé durant les rebonds et la charge du condensateur de sera pas suffisante pour que le transistor devienne passant. Finalement, quand les rebonds cessent, le condensateur est rapidement déchargé et la sortie $H$ reste à un état logique haut.\\
 \item[--] Quand le bouton est relâché, le condensateur qui est déchargé va commencer sa charge avec la constante de temps $\tau_C$. Les rebonds du bouton vont cette fois-ci à nouveau décharger le condensateur : comme la décharge est encore une fois plus rapide vu $\tau_D << \tau_C$, le condensateur va globalement rester déchargé pendant les rebonds du bouton. La charge du condensateur n'est pas suffisante pour que le transistor sature et la sortie $H$ reste à un état logique haut. Une fois les rebonds terminés, le condensateur va pouvoir terminer sa charge et faire saturer le condensateur, pour amener la sortie $H$ à un état logique bas. Expérimentalement, on constate que le transistor devient à nouveau passant plusieurs millisecondes après la fin des rebonds.\\
 \end{itemize}
 
-C'est donc le fait que le temps caractéristiques de charge ($\tau_C$) est grand devant le temps de décharge ($\tau_D$), mais également devant la durée des rebonds, que l'on évite les rebonds. Avec le dispositif anti-rebond en place, on peut constater que le système fonctionne correctement, comme en atteste le chronogramme \ref{chronogramme-compteur-fonctionne}.\\
+C'est donc grâce au fait que le temps caractéristique de charge $\tau_C$ est grand devant le temps de décharge $\tau_D$, mais également devant la durée des rebonds, que l'on évite les rebonds. Avec le dispositif anti-rebond en place, on peut constater que le système fonctionne correctement, comme en atteste le chronogramme \ref{chronogramme-compteur-fonctionne}.\\
 
 \subsubsection*{Montage autonome}
 
@@ -273,7 +275,7 @@ C'est bien là le cœur du système que l'on a réalisé : il apparaît bien (en
 
 De la même façon, pour le second bit, on va souhaiter obtenir un état haut (bit égal à $1$) pendant une durée égale à deux périodes de l'horloge. En effet, pendant les deux premiers cycles d'horloge, le bit $D_0$ vaut successivement $0$ ($D=0$) puis $1$ ($D=1$), le bit $D_1$ prend alors la valeur $1$ alors que le bit $D_0$ vaut à nouveau $0$ ($D=2$) puis $1$ ($D=3$) et le bit $D_1$ prend alors à nouveau la valeur $0$ pendant les deux cycles suivants. Cette règle s'étend à $n$ bits et on va donc chercher à diviser la fréquence par deux à mesure que le poids du bit en question augmente.\\
 
-Une façon astucieuse de réaliser cette opération pour le bit de poids $n$ consiste à inverser la valeur précédente du bit à chaque cycle en utilisant comme horloge le bit $n-1$ : on divise alors par deux la fréquence de l'horloge d'entrée, ce-qui est le résultat souhaité. Il suffit alors d'utiliser l'horloge dont la période est l'unité de décompte du temps pour obtenir un compteur sur $n$ bits. On pourrait d'ailleurs considérer l'horloge comme le premier bit et raisonner en demi périodes et doubles des fréquences (on préférera cependant distinguer l'horloge des bits dans un soucis de clarté). \\
+Une façon astucieuse de réaliser cette opération pour le bit de poids $n$ consiste à inverser la valeur précédente du bit à chaque cycle en utilisant comme horloge le bit $n-1$ : on divise alors par deux la fréquence de l'horloge d'entrée, ce qui est le résultat souhaité. Il suffit alors d'utiliser l'horloge dont la période est l'unité de décompte du temps pour obtenir un compteur sur $n$ bits. On pourrait d'ailleurs considérer l'horloge comme le premier bit et raisonner en demi périodes et doubles des fréquences (on préférera cependant distinguer l'horloge des bits dans un soucis de clarté). \\
 
 Ainsi, on pourra réaliser simplement un compteur sur $n$ bits en utilisant $n$ bascules synchronisées sur front d'horloge en inversant leur valeur à chaque cycle et en reliant la sortie de chaque bascule à l'entrée d'horloge de la suivante. Les bascules de type JK sont de telles bascules synchronisées et on peut obtenir une inversion en appliquant des états logiques hauts aux entrées J et K.\\