# Bascule (circuit logique)

Une bascule (en anglais flip-flop) est un circuit logique capable, dans certaines circonstances, de maintenir les valeurs de ses sorties malgré les changements de valeurs d'entrées, c'est-à-dire comportant un état « mémoire ». Il s'agit de l'élément qui permet le passage de la logique combinatoire à la logique séquentielle.
On distingue deux catégories principales de bascules dans un système séquentiel : les bascules asynchrones et les bascules synchrones. La différence entre ces deux types de bascules est que les bascules synchrones possèdent une entrée horloge ce qui n'est pas le cas pour les bascules asynchrones.

## Description

Une bascule ou un verrou est un circuit logique doté d'une ou plusieurs entrées et d'une ou deux sorties. Les changements d'état de la sortie sont déterminés par les signaux appliqués aux entrées et le type d'opérateur mis en œuvre.
Ce qui différencie les bascules des circuits logiques combinatoires (portes ET, OU, OU Exclusif, etc.), c'est que la sortie maintient son état même après disparition du signal de commande. Comme l'état précédent intervient dans le calcul de la valeur de sortie via la mémorisation, on parle de logique séquentielle.
La bascule est l'élément de base de la logique séquentielle. En effet, en assemblant des bascules, on peut réaliser des compteurs, des registres, des registres à décalage, ou encore des mémoires.
Il existe deux types de bascules : les bascules synchrones, possédant une entrée d'horloge de synchronisation, et les bascules asynchrones, ou verrous.

### Bascules asynchrones, ou verrous

Les verrous (désignés en anglais par le terme latch ou latched) sont des bascules dont la sortie dépend uniquement du niveau logique des entrées. Son évolution ne dépend donc que de la succession des combinaisons appliquées, et n'est limitée que par la vitesse de commutation de la bascule et de ses entrées. Si les entrées ont des oscillations imprévisibles avant de se stabiliser, ces valeurs transitoires pourront donc se répercuter sur la sortie d'une bascule asynchrone. La porte C de Muller est un exemple de bascule asynchrone.

### Bascules synchrones

Ici, l'action des entrées sur l'état de mémorisation ne sera effective qu'à la réception d'un front d'horloge, lorsqu'elle passe de l'état bas à l'état haut (front montant), ou inversement (front descendant). Certaines bascules ne réagissent que sur un seul type de front, d'autres à chaque changement d'état de l'horloge. La sortie est dite synchrone (à l'horloge H) car seul un évènement sur l'horloge peut faire évoluer sa sortie. Contrairement à une bascule asynchrone, la sortie d'une bascule synchrone ne sera pas affectée par des valeurs transitoires sur ses entrées, pouvant changer plusieurs fois de valeur au cours d'un cycle en fonction des temps de propagation des circuits placés en amont. Les changements d'état de l'horloge doivent simplement être suffisamment lents pour que les entrées aient eu le temps d'atteindre leur configuration finale.
Ces bascules peuvent disposer d'entrées asynchrones (Set, Reset) pour prépositionner l'état de sortie à la mise sous tension.

## Métastabilité

Les bascules peuvent entrer dans des états métastables lorsque plusieurs entrées changent simultanément, c'est-à-dire qu'elles peuvent n'offrir une sortie stable qu'au bout d'un temps arbitrairement long. Ce peut être le cas pour le verrou RS si les deux entrées passent ensemble de 1 à 0, ou pour une bascule où un changement de donnée d'entrée est trop proche d'un front d'horloge. On cherche à les éviter, mais ce n'est pas toujours possible, par exemple pour des éléments arbitrant entre deux signaux asynchrones.

## Types de bascules et de verrous

Verrous et bascules sont en fait très proches. Dans le cas de verrous, il est possible de réaliser une bascule synchrone en ajoutant une entrée d'horloge, la sortie ne pouvant changer qu'après un front de l'horloge. On ne citera pas alors la bascule ainsi créée, d'implémentation plus complexe.
Les entrées sont séparées en entrées de contrôle et de données, bien que ces dernières ne soient pas forcément présentes selon le type de bascule. On retrouvera dans chaque type de bascule un état mémoire, généralement noté q ou Q$_{n-1}$ pour les bascules synchrones, représentant l'état de la sortie avant le dernier basculement des entrées. La sortie est généralement notée Q, et on trouve parfois une sortie non Q représentant le complément de la sortie. Néanmoins, dans certaines conditions, on trouve des combinaisons d'entrée interdites pouvant mener à des valeurs de Q et non Q en contradiction avec cette règle.

### Verrou RS avec porte NON-OU

Un verrou RS possède deux entrées de contrôle : Set et Reset, et n'a pas d'entrée de donnée. Les deux signaux de sortie Q et non Q sont présents. Le fonctionnement de cette bascule est le suivant :
* mise à 1 de S (Set) : la sortie Q passe à 1 ;
* mise à 1 de R (Reset) : la sortie Q passe à 0 ;
* R = S = 0 : état mémoire : la sortie Q maintient sa valeur précédente q.
Table de vérité :
| S | R | Q | non Q | remarque |
| 0 | 0 | q | non q | mémoire |
| 0 | 1 | 0 | 1 | mise à 0 |
| 1 | 0 | 1 | 0 | mise à 1 |
| 1 | 1 | 0 | 0 | état interdit |

### Verrou non R non S avec porte NON-ET

Un verrou non R non S a un fonctionnement opposé au verrou RS. On retrouve les entrées Set et Reset, mais leur comportement est inversé. Les sorties sont les mêmes. Son fonctionnement est le suivant :
* mise à 0 de non S (Set) : la sortie Q passe à 1 ;
* mise à 0 de non R (Reset) : la sortie Q passe à 0 ;
* non R = non S = 1 : la sortie Q maintient sa valeur précédente q.
Table de vérité :
| non S | non R | Q | non Q | remarque |
| 0 | 0 | 1 | 1 | état interdit |
| 0 | 1 | 1 | 0 | mise à 1 |
| 1 | 0 | 0 | 1 | mise à 0 |
| 1 | 1 | q | non q | mémoire |

### Verrou D

Un verrou D possède une entrée de contrôle, notée H, et une entrée de données, notée D. On retrouve les deux signaux de sortie Q et non Q. Le fonctionnement de cette bascule est le suivant :
* quand H est à 0, la sortie maintient son état, quel que soit le niveau appliqué à D ;
* quand H est à 1, la sortie Q recopie l'état de D.
Dans la table de vérité, on note X un état quelconque, c'est-à-dire dont la valeur est ignorée pour le calcul du résultat.
Table de vérité (optimisée) :
| D | H | Q | non Q | remarque |
| d | 1 | D | non D | Q recopie D |
| X | 0 | q | non q | mémoire |

### Verrou RSH - RST

Un verrou RSH (aussi appelé RST) est un verrou RS auquel on a ajouté une troisième entrée, généralement notée H (ou CLK pour horloge). Cette troisième entrée a la fonction suivante :
* si H est au niveau logique 0, la sortie maintient son état, quels que soient les niveaux appliqués aux entrées R et S ;
* si H est à 1, la bascule RS répond normalement aux commandes appliquées à ses entrées.
Dans les documentations techniques en anglais, ce verrou est généralement appelé gated SR latch et cette troisième entrée est plutôt notée E ou EN (Enable) ou en logique inversée, H (Hold) : lorsqu'il est à zéro, le verrou ignore l'état des autres entrées (R et S) et maintient l'état de sortie.
Table de vérité :
| H | S | R | Q | non Q | remarque |
| 0 | X | X | q | non q | mémoire |
| 1 | 0 | 0 | q | non q | mémoire |
| 1 | 0 | 1 | 0 | 1 | mise à 0 |
| 1 | 1 | 0 | 1 | 0 | mise à 1 |
| 1 | 1 | 1 | 0 | 0 | état interdit |
Équation du verrou : $Q_{n}=S+{\overline {R}}Q_{n-1}$

### Bascule JK

En chainant 2 verrous RSH (un maître, l'autre esclave), on réalise une bascule JK (maître-esclave). Cette bascule comporte deux entrées de contrôle : J (Jack) et K (King). S'agissant d'une bascule, le fonctionnement est synchrone à une entrée d'horloge H, c'est-à-dire que la valeur de sortie ne peut changer qu'au moment d'un front d'horloge, montant ou descendant selon les modèles.
* Pour J = K = 0, il y a conservation du dernier état logique Q$_{n-1}$ indépendamment de l'horloge : état mémoire.
* Pour J = K = 1, le système bascule à chaque front d'horloge.
* Pour J différent de K, la sortie Q recopie l'entrée J et la sortie non Q recopie l'entrée K à chaque front d'horloge.
Table de vérité :
| J | K | Q$_n$ |
| 0 | 0 | Q$_{n-1}$ |
| 0 | 1 | 0 |
| 1 | 0 | 1 |
| 1 | 1 | non Q$_{n-1}$ |
Table de vérité alternative :
| Q$_{n-1}$ | J | K | Q$_n$ | remarque |
| 0 | 0 | X | 0 | pour que la sortie reste à 0, il faut que J soit à 0, peu importe K. |
| 0 | 1 | X | 1 | pour que la sortie passe de 0 à 1, il faut que J soit à 1, peu importe K. |
| 1 | X | 1 | 0 | pour que la sortie passe de 1 à 0, il faut que K soit à 1, peu importe J. |
| 1 | X | 0 | 1 | pour que la sortie reste à 1, il faut que K soit à 0, peu importe J. |
On peut utiliser cette bascule pour faire des compteurs. On compte jusqu'à 2$^n$ avec n bascules à la suite et on compte dans l'ordre croissant avec des bascules à front descendant et dans l'ordre décroissant avec des bascules à front montant.
Équation de la bascule : $Q_{n}=J{\overline {Q}}_{n-1}+{\overline {K}}Q_{n-1}$

#### Origine du nom de la bascule JK

L'origine du nom de la bascule JK est détaillée par P. L. Lindley, un ingénieur de JPL, dans un article du magazine de conception électronique EDN. L'article est daté du 13 juin 1968 et a été publié dans l'édition d'Août. Dans cet article, M. Lindley explique que c'est le docteur Eldred Nelson, un scientifique de Hughes Aircraft qui a inventé le terme de bascule JK.
Les bascules qui étaient utilisées à cette époque à Hughes étaient toutes du même type, celui de la future bascule J-K. Durant la conception d'un système logique le docteur Nelson a assigné des lettres à chaque entrée des bascules de la façon suivante :
* bascule 1, les lettres A et B ;
* bascule 2, les lettres C et D ; …
* bascule 5, les lettres J et K ; …
Étant donné la taille du système sur lequel travaillait le docteur Nelson, il s'est rendu compte qu'il allait être à court de lettres. Puisque les lettres J et K étaient peu utilisées dans les systèmes électroniques il a donc décidé d'utiliser ces lettres comme entrées « Set » et « Reset » pour toutes les bascules de son système (avec des indices pour les distinguer les unes des autres).
Le docteur Montgomery Phister, un membre de l'équipe du docteur Nelson à Hughes, a repris dans son livre Logical Design of Digital Computers (Wiley, 1958) l'idée que les entrées « Set » et « Reset » des bascules utilisées à Hughes Aircraft étaient nommées J et K. De ce fait il est alors amené à les désigner sous le terme de bascule JK. Dans ce même livre il a aussi défini les bascules R-S, T, D et R-S-T et a montré qu'en utilisant l'algèbre de Boole il était possible de les combiner afin de réaliser des fonctions complexes.

### Bascule D

La bascule D (pour Data) est une bascule comportant uniquement une entrée de données : D. La valeur de l'entrée est recopiée sur la sortie à chaque front d'horloge. Cette bascule permet d'assurer un état de sortie stable entre deux fronts d'horloge, et ainsi d'ignorer toute valeur transitoire apparaissant sur son entrée au cours d'un cycle d'horloge. On ajoute parfois un signal reset afin de pouvoir forcer la valeur initiale à la mise sous tension. Il existe des versions où les changements d'état ont lieu au moment des fronts descendants de l'horloge. Elles se signalent par une barre supplémentaire (en dessous à 45°) sous l'entrée H.
Table de vérité :
| D | H | Q$_n$ | non Q$_n$ |
| 0 | $\nearrow$ | 0 | 1 |
| 1 | $\nearrow$ | 1 | 0 |
| X | 0 | Q$_{n-1}$ | non Q$_{n-1}$ |
| X | 1 | Q$_{n-1}$ | non Q$_{n-1}$ |
Table de vérité (optimisée) :
| D | H | Q$_n$ | non Q$_n$ | remarque |
| d | $\nearrow$ | d | non d | Q recopie D |
| X | 1,0,front descendant | Q$_{n-1}$ | non Q$_{n-1}$ | mémorisation |
On peut faire l'analogie avec la bascule JK en considérant que l'on a relié les deux entrées ensemble via un inverseur. Il y a donc une seule entrée. La table de vérité sera alors la table de vérité d'une JK, limitée aux deux lignes J = 0, K = 1 et J = 1, K = 0.
Équation de la bascule : $Q_{n}=D_{n-1}$

### Bascule T

La bascule T tire son nom du terme anglais 'toggle'. Si son entrée T est active, elle bascule à chaque impulsion d'horloge d'où son nom. Si son entrée T est inactive, elle conserve son état.
Elle n'existe pas intégrée sauf dans des PLD, FPGA… mais on peut la fabriquer avec une bascule D en reliant la sortie non Q à l'entrée D (toutefois on ne réalise ainsi qu'une bascule T avec T=1), ou à l'aide d'une bascule JK en reliant J et K pour faire l'entrée T.
Comme la bascule T a la propriété de basculer à chaque impulsion d'horloge, elle réalise donc une division de fréquence par 2 ; elle servira aussi de base à la réalisation de compteurs (association simple si actives au front descendant de l'horloge). Intégrée dans un circuit, elle est souvent active sur un front descendant.
* Si T = 1, on bascule à chaque impulsion d'horloge.
* Si T = 0, la sortie ne change pas : état mémoire.
Table de vérité (optimisée) :
| T | H | Q$_n$ | non Q$_n$ | remarque |
| 1 | $\nearrow$ | non Q$_{n-1}$ | Q$_{n-1}$ | basculement |
| 1 | 0,1,$\searrow$ | Q$_{n-1}$ | non Q$_{n-1}$ | mémorisation |
| 0 | 0,1,$\nearrow$,$\searrow$ | Q$_{n-1}$ | non Q$_{n-1}$ | mémorisation |

### Bascule de Schmitt

On l'appelle aussi Trigger de Schmitt ou bascule à seuil.
C'est une bascule à trois entrées V, SB et SH et une sortie Q. Contrairement aux bascules citées ci-dessus, qui sont commandées en appliquant des signaux logiques à leurs entrées, la bascule de Schmitt est conçue pour être pilotée par une tension analogique, c'est-à-dire qui peut prendre n'importe quelle valeur (dans l'intervalle 0 - Vcc afin de ne pas dégrader le circuit).
Les entrées SB et SH (seuil bas, seuil haut, ce dernier étant à un potentiel supérieur à SB) sont maintenues à des potentiels fixes ; ceci peut se faire par exemple grâce à un diviseur de tension composé de 3 résistances placées en série entre Vcc et la masse ; SH et SB sont reliés aux points intermédiaires du diviseur.
Le fonctionnement est le suivant :
* supposons qu'au départ, V soit à 0 ; Q est alors à 0 ;
* quand V augmente, Q reste à 0 jusqu'à ce que V dépasse SH ; à ce moment, Q passe à 1 ;
* Q reste à 1 jusqu'au moment où V devient inférieur à SB ; à ce moment, Q passe à 0 ;
* Q reste à 0 jusqu'à ce que V repasse au-dessus de SH.
La principale application de la bascule de Schmitt est la mise en forme de signaux analogiques pour les appliquer à des circuits logiques (par exemple une entrée de compteur).
La bascule de Schmitt peut aussi être utilisée pour :
* débarrasser un signal du bruit ; il suffit que l'écart entre SH et SB soit supérieur à l'amplitude crête-à-crête du bruit ;
* réaliser des circuits de contrôle avec hystérésis : thermostats, interrupteurs crépusculaires, maintien du niveau dans une cuve…
* le trigger de Schmitt est l'ancêtre des générateurs de musique, miniaturisé dans les sonneries des montres électroniques, les sonneries des téléphones portables, les Game-Boy et autres jeux électroniques, les alarmes électroniques, les cartes de vœux parlantes, les boîtes à musique et horloges électroniques, etc. Le fameux bip des premiers ordinateurs dans les années 1980 était un signal rectangulaire.