Académique Documents
Professionnel Documents
Culture Documents
Les structures périodiques sont assez fréquentes sur circuit intégré. On en trouve notamment
de type linéaire (1D) au sein des unités arithmétiques utilisées pour les calculs sur les entiers,
tel un additionneur série n bits réalisé par aboutement de n cellules FA (full adder =
additionneur binaire complet). Il en existe aussi de type matriciel (2-D) tels les bancs mémoire
et les « matrices de portes » (Gate Arrays en anglais). Ces « GA », qui servent à réaliser des
fonctions booléennes arbitraires (voir un exemple simpliste à la page suivante) vont constituer
le cadre de travail du présent exercice.
Dans un GA, la maille périodique est une cellule choisie pour son universalité. Pour implanter
une fonction booléenne arbitraire f sur un GA, il faut procéder en 3 phases :
1) exprimer f sous la forme d’un schéma n’ayant recours qu’aux fonctionnalités offertes
par la cellule périodique universelle. Cette phase est appelée « mapping » en anglais
(pas de traduction française satisfaisante). Sauf dans des cas triviaux, les
fonctionnalités de la cellule périodique doivent être utilisées plusieurs fois, ce qui
suppose de recourir à plusieurs cellules.
2) « placer » f, c’est-à-dire choisir sur le GA quelles cellules – parmi toutes celles
présentes dans la matrice – vont servir à son implantation.
3) « router » f, c’est-à-dire interconnecter entre elles les entrées/sorties des cellules
retenues par le « placeur » pour que f puisse être effectivement obtenu. Le routage est
d’autant plus court et simple que les cellules retenues sont voisines et judicieusement
placées les unes par rapport aux autres. Physiquement, le routage consiste à mettre en
place des connexions par fils métalliques circulant au-dessus de la matrice de portes.
En fait, les phases 2 et 3 sont très interdépendantes et souvent traitées ensemble au sein de ce
que l’on appelle l’opération de « placement-routage ».
Les GA les plus répandus aujourd’hui sont les FPGA, pour « Field Programmable Gate
Arrays », c’est-à-dire des matrices de portes à interconnexions programmables par champ
électrique. Dans ces FPGA, la matrice de portes est surmontée d’un réseau de communication
programmable par logiciel qui permet d’établir, dans certaines limites, toutes les liaisons
souhaitées entre entrées et sorties de toutes les cellules. Ces composants ont achevé de faire
de l’électronique numérique moderne une discipline purement informaticienne du point de
vue de l’utilisateur. Dans les FPGA actuels, la cellule périodique a une complexité de l’ordre
d’une dizaine de portes NAND, et cette cellule périodique est répétée jusqu’à plusieurs
millions de fois. Ces FPGA sont parfaitement adaptés au prototypage d’applications ainsi qu’à
de la production en petite et moyenne série. L’enseignement de l’électronique numérique à
l’ENSTA en 2ème et 3ème année est justement basé sur l’utilisation de FPGA et de chaînes
logicielles permettant de les configurer à volonté.
Ici, c’est à la main que l’on va implanter la cellule FA sur FPGA. On considère un FPGA dont
la cellule périodique est un MUX (multiplexeur 2 vers 1). Le mapping va donc consister en
une expression sous forme de BDD. On utilisera comme ordre des variables : cin, a, b.
a) Etablir le BDD représentant la fonction majorité qui fournit la retenue cout. Procéder en
dessinant un arbre binaire de MUX à trois étages et en faisant apparaître la table de vérité au
niveau des feuilles. Puis simplifier le BDD pour l’amener sous sa forme réduite.
d) La figure ci-dessous montre une petite portion de FPGA à base de portes NAND, c’est-à-
dire une matrice périodique de portes NAND dont entrées et sorties peuvent être connectées
arbitrairement (dans certaines limites) via à un réseau de communication associé. Les canaux
de communication possibles apparaissent en trait fin. Physiquement, ce sont des pistes (fils)
métalliques. Canaux horizontaux et canaux verticaux courent à des niveaux différents et ne se
touchent donc pas quand ils se croisent. Les portions utilisées des canaux sont indiquées en
trait gras. Les points noirs indiquent des « soudures » entre canaux horizontaux et verticaux.
Dans certains FPGA, ces soudures sont réalisées au moyen de fusibles ou d’antifusibles que
l’on fait griller ou claquer (technologie programmable une seule fois), dans d’autres, elles sont
réalisées par des multiplexeurs pilotés logiciellement (technologie reprogrammable).
cout
b s
cin
e) Dans le début de l’exercice, c’est un FPGA à base de MUX qui était considéré. De ce fait,
l’existence d’un « mapping » était garantie quelle que soit la fonction à implanter, grâce à la
version BDD de l’expansion de Boole. Qu’en est-il sur un FPGA à base de portes NAND ?
a) Le BDD non réduit apparaît en haut à gauche ci-dessous. Le symbole rectangulaire avec un
0 et 1 à l’intérieur représente (comme vu en cours) un multiplexeur (alias sélecteur) 2 vers 1
avec signal de contrôle sur le côté. Si le signal de contrôle vaut 0 (resp. 1), c’est la donnée en
face de 0 (resp. 1) qui passe. On réduit le BDD en 3 temps. Le BDD réduit obtenu représente
de manière unique la fonction majorité. Les variables a, b, cin n’interviennent ici qu’au niveau
du contrôle des multiplexeurs (connexions horizontales). Dans la question suivante, orientée
vers l’implantation, on se permettra de se servir des variables en tant que données en entrée
d’un multiplexeur, prenant ainsi une légère distance avec le caractère canonique de la
représentation BDD.
cout cout
cin 0 1 Suppression cin 0 1
des faux choix
a 0 1 0 1 a 0 1 0 1
0 1
b 0 1 0 1 0 1 0 1 b 0 1 0 1
0 0 0 1 0 1 1 1 Suppression 0 1 0 1
des doublons
non terminaux
cout cout
cin 0 1 cin 0 1
Suppression
a 0 1 0 1 des doublons a 0 1 0 1
terminaux 0 1
b 0 1 b 0 1
0 1
0 1
cin 0 1 cin 0 1
a·b a+b a⊕b (a ⊕ b)’
a 0 1 0 1 a 0 1 0 1
0 b b 1 b b’ b’ b
AND OR XOR b 0 1
1 0
NOT
c) Pour les curieux, on vérifie tout de même qu’il s’agit bien d’un FA. On reconnaît tout
d’abord les portes XOR implantées par MUX, à gauche et à droite, d’après la question
précédente. Pour le MUX du centre, on vérifie ensuite que cout = MUX(a⊕b,cin,b) = a’·b·cin
+ a·b’·cin + a·b, qui est une expression booléenne de la fonction majorité. Il s’agit donc bien
d’un additionneur binaire complet. Il n’utilise que 5 MUX au lieu des 7 dont nous avions
besoin dans la question précédente. Pour abaisser ainsi le coût, il y a une astuce : la variable
d) La vérification du mapping consiste à s’assurer que les portes NAND utilisées ont bien été
connectées de manière à calculer les fonctions cout et s. Une méthode systématique, amorcée
sur la figure ci-dessous, consiste à établir la fonction booléenne calculée par chaque porte.
cout
(ab)’ (a b)’ a b
a’
a R U T Y
cin’
b’
b S V X Z s
a+b
cin
Mais c’est un peu fastidieux et pas forcément très instructif. Fort d’une analyse partielle du
montage, on peut aussi tenter de se mettre à la place du concepteur et deviner sa démarche. Or
un résultat important de la PC2 était justement une cellule FA optimisée en vitesse, avec la
porte NAND privilégiée pour sa rapidité. Le schéma de cette cellule est rappelé ci-dessous à
gauche et c’est effectivement lui qui a servi de point de départ au mapping.
a b
x y x y x’ y’ x y
x y
cout cin
= =
(x⊕y)’
(x⊕y)’ (x⊕y)’