Sunteți pe pagina 1din 25

Chapitre 2 Technologies de logique programmable

À la section .‫خطأ! لم يتم العثور على مصدر المرجع‬, on a discuté de considérations pour l’implémentation matérielle
de circuits numériques. On a parlé de ce qui affecte l’implémentation d’un circuit, du problème du parti-
tionnement logiciel-matériel et des options pour les solutions matérielles. Dans ce chapitre, on voit ces
options plus en détail.

2.1 Circuits SSI, MSI et LSI


Les premiers circuits numériques intégrés sont apparus sur le marché dans les années 1960. On les classi-
fiait alors selon le nombre de transistors qu’ils intégraient. Les trois acronymes de base, SSI, MSI et LSI,
référaient respectivement à Small, Medium et Large ScaleIntegration. Un circuit SSI contenait de l’ordre
de 102 transistors, un circuit MSI de l’ordre de 103, et un circuit LSI de l’ordre de 104 transistors.
Une famille de circuits SSI/MSI très populaire jusqu’au début des années 1990 était la série 7400. Norma-
lisés dans l’industrie, ils étaient manufacturés par plusieurs fournisseurs. Les deux derniers chiffres reflé-
taient la fonction logique réalisée et la position des signaux sur les pattes de la puce. Quelques exemples
sont indiqués au Tableau 2-1, et une puce 7400 est illustrée à la Figure 2-1 avec son schéma interne.

numéro fonction

7400 4 × NON-ET
7402 4 × NON-OU
7404 8 × NON
7411 3 × ET (3 entrées)
7473 2 × bascule JK avec reset
Tableau 2-1 – exemples de la famille 7400
Figure 2-1 – puce 7400 (source : Wikipédia)
Les circuits MSI incluaient entre autres des multiplexeurs, décodeurs, registres et compteurs. Miraculeu-
sement (pour l’époque), leur coût de fabrication n’était pas significativement supérieur à celui des compo-
santes SSI à cause de l’amélioration continue des processus de fabrication.
Les circuits LSI incluaient entre autres des mémoires, des processeurs simples et les premiers micropro-
cesseurs comme le 4004 d’Intel à plus de 2000 transistors.
À la fin des années 1970 et au début des années 1980, on a vu apparaître les circuits VLSI (pour Very
Large ScaleIntegration) avec 105 transistors. L’acronyme ULSI (pour Ultra) a été peu utilisé, VLSI se
généralisant pour tous les circuits intégrés très complexes.
On utilise encore parfois aujourd’hui les puces SSI-LSI si le circuit à implémenter est très simple, comme
par exemple pour mener une sortie sur une planchette intégrant des composantes plus sophistiquées mais
ne partageant pas de signal commun. Un désavantage de cette approche est que cette partie du circuit ne
peut plus être modifiée une fois fabriquée. On n’imaginerait pas aujourd’hui utiliser les puces SSI-LSI
comme technologie de base pour implémenter un système numérique.

2.2 Mémoires mortes programmables : PROM, EPROM, EEPROM


Les premiers circuits programmables par l’utilisateur étaient des mémoires mortes programmables (Pro-
grammable Read Only Memory – PROM). Une PROM ne se programmait qu’une seule fois.
Une mémoire ROM consiste en :
 un décodeur avec n signaux d’entrée;
 un réseau OU programmé (ou programmable une fois) avec 2n mots de m bits chacun ;
 m signaux de sortie.
Le réseau programmé comporte 2n lignes de m colonnes chacune. À l’intersection de chaque ligne avec
une colonne on trouve un élément électronique à mémoire. Une fois programmée, la ROM de 2 n mots de
m bits peut générer m fonctions de n variables simultanément.
La Figure 2-2 illustre une mémoire ROM de 16 octets. L’intérêt d’utiliser une mémoire ROM pour im-
plémenter des fonctions logiques est que la tâche est facile parce qu’il n’est pas nécessaire de tenter de
réduire les équations. L’inconvénient est que la réalisation finale n’est pas nécessairement la plus efficace.
Par exemple, la Figure 2-3 illustre comment on pourrait implémenter les équations logiques suivantes, qui
sont données en somme de mintermes et en version réduite :
F0   m(0,1,4,6)  A' B ' AC '
F1   m(2,3,4,6,7)  B  AC '
F2   m(0,1,2,6)  A' B ' BC '
F3   m( 2,3,5,6,7)  AC  B
La Figure 2-3 montre un décodeur avec trois entrées et huit sorties. Chaque minterme des entrées A, B et
C est disponible sur une ligne horizontale (Word Lines). Quatre lignes verticales peuvent être reliées à
chacune des lignes horizontales des mintermes. Il y a quatre lignes parce que c’est une mémoire de quatre
bits seulement. Les quatre lignes verticales sont mises à zéro par défaut par l’entremise de résistances
reliées à la masse (pull-down resistors). Si une ligne verticale n’est pas reliée à aucune ligne horizontale,
sa sortie est donc zéro.
Pour relier une ligne verticale à une ligne horizontale, il faut un dispositif de programmation, montré à la
Figure 2-3 par une flèche dans une boîte. Le dispositif doit être directionnel, comme montré dans la fi-
gure, pour empêcher une ligne horizontale d’en mener une autre par l’entremise de leurs connexions res-
pectives. On peut donc utiliser des diodes, ou, en pratique, des transistors. Effectivement, la combinaison
des lignes horizontales et verticales et des dispositifs de programmation implémente des portes OU tel
que montré à la Figure 2-2.
décodeur 4:16

m15
m14
m13
m12
A3 m11
m10
A2 m9
m8
A1 m7
m6
A0 m5
m4
m3
m2
m1
m0

D7 D6 D5 D4 D3 D2 D1 D0

Figure 2-2 – mémoire ROM 16 × 8 bits


Figure 2-3 – programmer une ROM 8 × 4 bits (source : Roth, 5e éd., fig. 9-20, © Brooks/Cole 2004)
On distingue trois sortes de mémoire ROM, différenciées par leurs technologies de programmation.
 PROM : Programmable Read Only Memory, programmable uneseulefois;
 EPROM : Erasable Programmable Read Only Memory, programmable à plusieurs reprises, et effa-
çable à l’aide de rayons ultraviolets (facile à reconnaître à sa petite fenêtre); et
 EEPROM : ElectricallyErasable Programmable Read Only Memory, programmable à plusieurs re-
prises, et effaçable à l’aide d’impulsions électriques.
La Figure 2-4 illustre un microcontrôleur NEC D8749 avec EPROM intégré de 2 Ko.
Figure 2-4 – microcontrôleur NEC D8749 avec mémoire EPROM intégrée (source : Wikipédia)

2.3 Réseaux logiques programmables : PLA, PAL et GAL


Un PLA (Programmable LogicArray) est similaire à une ROM, mais il ne réalise pas tous les produits de
termes comme une ROM. Un PLA à n entrées et m sorties peut réaliser m fonctions de n variables, en
autant que chacune requiert un nombre limité de produits des variables en entrée. (En pratique, c’est
presque toujours le cas). Un PLA est composé de deux réseaux programmables, ET et OU, tel que montré
à la Figure 2-5. Le réseau ET programmable est effectivement un décodeur programmable incomplet.
La Figure 2-6 illustre comment on peut utiliser un PLA à trois entrées, six termes et quatre sorties pour
implémenter les mêmes équations logiques qu’avec la ROM de la Figure 2-3. Le nombre de termes du
PLA correspond au nombre de lignes horizontales. Pour trois entrées, une ROM aurait huit lignes hori-
zontales. Chaque ligne horizontale a une valeur par défaut de ‘1’ logique, puisqu’elle est reliée à
l’alimentation par une résistance. Les lignes de sorties (verticales) ont des valeurs par défaut de ‘0’
comme pour la ROM. Des éléments de programmation peuvent être activés entre les lignes horizontales et
verticales.
Pour le réseau programmable ET, il y a deux lignes verticales par entrées, pour les valeurs naturelles et
complémentées des entrées. Pour forcer une ligne horizontale à zéro, on place un élément de programma-
tion entre cette ligne et l’une des deux lignes verticales d’une entrée. Par exemple, le premier terme (la
ligne horizontale du haut) correspond à la fonction logique A’B’. Si A’ et B’ sont vrais, alors les lignes
verticales correspondantes auront une valeur de ‘1’, et le premier terme aussi. Dans tous les autres cas, le
premier terme aura une valeur de ‘0’.
A3 A2 A1 A0

F2 F1 F0

Figure 2-5 – PLA à 4 entrées, 6 termes et 3 sorties

Figure 2-6 – programmer un PLA à 3 entrées, 5 termes et 4 sorties


(source : Roth, 5e éd., fig. 9-25, © Brooks/Cole 2004)
Un PAL (Programmable ArrayLogic) est un cas particulier de PLA. Dans un PAL, seulement le réseau
ET est programmable, alors que le réseau OU est fixe. Par conséquent, aucun produit de termes ne peut
être partagé par plus d’une fonction. Chaque fonction peut donc être optimisée séparément. La Figure 2-7
illustre une partie d’un PAL. Les entrées sont à gauche de la figure et il y a une sortie unique à droite. La
sortie est menée par une porte OU dont les deux entrées proviennent de portes ET. Les entrées de ces
portes ET ont des valeurs par défaut de ‘1’ grâce aux résistances reliées à l’alimentation. Par défaut, les
entrées de portes ET sont reliées aux versions naturelles et complémentées des entrées. Pour programmer
le dispositif, il faut briser des liens montrés sur la figure par des symboles ‘S’ couchés à l’horizontale,
représentant des fusibles.
Figure 2-7 – partie d’un PAL
Un PAL 16L8 est montré à la Figure 2-8. Dans la désignation « 16L8 », le « 16 » donne le nombre maxi-
mal d’entrées, le « L » indique que les sorties sont en logique inversée, et le « 8 » donne le nombre maxi-
mal de sorties.
Un GAL (GenericArrayLogic), de la compagnie LatticeSemiconductors, est un dispositif programmable
et configurable pouvant émuler différents types de PAL. Les pattes de sorties peuvent inclure un registre
et un signal de rétroaction vers le réseau programmable OU, et peuvent être configurées comme des ports
d’entrée ou d’entrée et sortie. Les circuits GAL remplacent aujourd’hui effectivement les composantes
SSI-LSI.
Les ROM, PAL, PLA et GAL sont composés de deux réseaux : un réseau ET qui génère des mintermes,
et un réseau OU qui permet de combiner plusieurs mintermes. La possibilité de programmer chacun de
ces réseaux détermine de quel type de dispositif il s’agit. Le tableau suivant résume la situation.
type de dispositif réseau ET réseau OU
fixe
ROM programmable
(tous les mintermes sont générés par un décodeur)

programmable
PLA programmable
(un nombre limité de mintermes peuvent être générés)

fixe
programmable (un nombre limité de
PAL
(un nombre limité de mintermes peuvent être générés) mintermes peuvent être
combinés)

GAL comme PAL comme PAL


Tableau 2-2 – distinctions entre ROM, PAL, PLA et GAL
Les PALs, PLAs et GALs incorporent aussi des registres dans des blocs configurables associés aux pattes
de sortie. Il est donc possible d’implémenter un circuit séquentiel complet sur un seul dispositif.
Figure 2-8 – PAL 16L8
2.4 Circuits logiques programmables complexes (CPLD)
Les ROMs, PLAs, PALs et GALs sont parfois appelés des circuits logique programmable simples (Simple
Programmable LogicDevices – SPLD).
Les CPLD sont une extension naturelle des circuits PAL. À mesure que leur complexité grandissait, la
taille des PALs était limitée par le nombre de pattes pouvant être placées sur la puce. Un CPLD incorpore
donc plusieurs PALs ou PLAs sur une seule puce avec un réseau d’interconnexions. Le réseau permet de
relier les pattes de la puce à différents blocs internes, mais aussi à relier les blocs entre eux. Il est donc
possible de composer des fonctions logiques très complexes incluant des machines à états et de petites
mémoires. La Figure 2-9 illustre un CPLD de Xilinx.

Figure 2-9 – architecture d’un CPLD de Xilinx


(source : Roth, 5e éd., fig. 9-30, © Brooks/Cole 2004)
Le système comprend quatre blocs fonctionnels qui sont des PALs à 36 entrées et 16 sorties. Les sorties
proviennent de macro-cellules contenant un élément programmable à mémoire. Le réseau
d’interconnexions permet d’établir des connexions entre les blocs d’entrées-sorties, les blocs fonctionnels
et les macro-cellules. La Figure 2-10 montre des détails du CPLD de la Figure 2-9.

Figure 2-10 – détails d’un CPLD


(source : Roth, 5e éd., fig. 9-31, © Brooks/Cole 2004)
On voit les 36 entrées en versions naturelle et complémentée qui alimentent 48 portes ET à connexions
programmables. Les 48 portes ET alimentent 16 portes OU à connexions programmables. La macro-
cellule permet d’activer ou non la bascule avec un signal naturel ou complémenté. La cellule de sortie
contient un tampon à trois états.

2.5 Réseaux pré-diffusés programmables (FPGA)

2.5.1 Architecture générale


Les FPGA se sont imposés sur le marché des circuits logiques depuis la fin des années 1980. Alors qu’au
début ils permettaient de remplacer quelques composantes discrètes de façon plus efficace que les PALs
et PLAs, ils concurrencent de nos jours certains microprocesseurs et microcontrôleurs en complexité et en
performance.
Un FPGA est composé à la base de :
 un réseau de blocs de logique programmable (Configurable Logic Block  CLB), chaque bloc pouvant
réaliser des fonctions complexes de plusieurs variables, et comportant des éléments à mémoire;
 un réseau d’interconnexions programmables entre les blocs; et,
 des blocs spéciaux d’entrée et de sortie avec le monde extérieur (Input/Output Block – IOB).
La Figure 2-11 illustre un modèle de FPGA.

IOB IOB IOB IOB IOB IOB

CLB CLB CLB CLB CLB

CLB CLB CLB CLB CLB

CLB CLB CLB CLB CLB

IOB IOB IOB IOB IOB IOB

Figure 2-11 – modèle d’un FPGA


2.5.2 Blocs de logique programmable
Les FPGAs se distinguent des CPLDs par le fait que les CLBs des FPGAs sont beaucoup plus nombreux
et plus simples que les blocs fonctionnels des CPLDs. Comme ils sont présents en grand nombre sur une
même puce (de plusieurs centaines à plusieurs milliers), ils favorisent la réalisation et l’intégration d’une
multitude de circuits indépendants.
Il y a deux catégories de blocs de logique programmable : ceux basés sur les multiplexeurs et ceux basés
sur les tables de conversion.
Un multiplexeur avec n signaux de contrôle peut réaliser toute fonction booléenne à n + 1 variables sans
l’ajout d’autres portes logiques. Pour ce faire, on exploite le fait qu’un multiplexeur génère effectivement
tous les mintermes des signaux de contrôle S. Il ne reste qu’à spécifier la valeur qu’on veut propager
quand un des ces mintermes est vrai. La procédure de design consiste à écrire la table de vérité de la fonc-
tion en groupant les lignes par paires. À chaque paire de lignes correspond une valeur des lignes de sélec-
tion du multiplexeur. On assigne aux lignes de données l’une de quatre valeurs : 0, 1, α ou α’, où α est la
variable d’entrée la moins significative. Par exemple, considérons la fonction logique

F ( x, y, z )  m(0,5, 6, 7) . On exprime la fonction sous la forme d’une table de vérité. On rajoute une
colonne pour indiquer à quelle entrée Di chaque minterme correspond. Finalement, on indique la valeur à
donner à chaque entrée Di en fonction de la sortie F désirée et la valeur de la variable z. Cet exemple est
montré à la Figure 2-12.

# x y z F entrée Di valeur
z’ 0
0 0 0 0 1
D0 z’ 0 1
1 0 0 1 0 F
z 2
2 0 1 0 0
D1 0 1 3
3 0 1 1 0
4 1 0 0 0 S0
D2 z S1
5 1 0 1 1
6 1 1 0 1 x
D3 1 y
7 1 1 1 1
Figure 2-12 – implémentation d’une fonction logique par multiplexeur
Les CLBs basés sur les tables de conversion utilisent de petites mémoires programmables au lieu de mul-
tiplexeurs. Cette approche est similaire à l’approche par multiplexeurs, mais en supposant que les entrées
du multiplexeur ne peuvent être que des constantes. Effectivement, il faut un multiplexeur deux fois plus
gros pour réaliser la même fonction, mais le routage du circuit est plus simple. De plus, le circuit peut être
plus rapide parce que les entrées du multiplexeur sont constantes.
Les FPGAs de la compagnie Altera étaient à l’origine basés sur une approche par multiplexeurs, alors que
ceux de Xilinx utilisaient des tables de conversion. La plupart des FPGAs récents utilisent des tables de
conversion.Cela ne signifie pas que des multiplexeurs ne sont plus utilisés. Au contraire, ils sont essen-
tiels pour router adéquatement les signaux à l’intérieur d’un CLB en choisissant différentes possibilités de
configuration.
La Figure 2-13 illustre un CLB simplifié d’un FPGA de Xilinx. Le CLB est composé de :
 deux tables de conversion (Look-Up Table – LUT) programmables à 4 entrées chacune, F et G, qui
sont effectivement des mémoires de 16 bits chacune;
 un multiplexeur ‘H’ et son entrée associée H1 qui permet de choisir la sortie de l’une des deux tables
de conversion;
 quatre multiplexeurs dont les signaux de contrôle S0 à S3 sont programmables; et,
 deux éléments à mémoire configurables en bascules ou loquets.
G4
YQ
G3 D Q
Table de
conversion
G2 G CLK
16 X 1 S0
G!

H1 S1

F4
XQ
F3 D Q
Table de
conversion
F2 F CLK
16 X 1 S2
F1

S3
CLK

Figure 2-13 – bloc de logique programmable simplifié – Xilinx


Pour plusieurs familles de FPGA, les tables de conversion peuvent aussi être utilisées comme mémoire
distribuée par l’ajout de signaux de contrôle. Des configurations très polyvalentes permettent de varier le
nombre de mots ou leur largeur, et de supporter une mémoire à un ou deux ports de sortie. De façon simi-
laire, les tables de conversion peuvent être utilisées comme registres à décalage.

2.5.3 Terminologie : LE, LAB, ALM, slice, CLB


Pour des raisons internes aux différents manufacturiers, plusieurs termes sont utilisés pour parler de
l’architecture interne des FPGAs.
Pour les FPGAs de la famille Cyclone, Altera utilise le terme LogicElement – LE pour une cellule de base
incluant une table de conversion, un additionneur et un registre. Un LogicArray Bloc – LAB regroupe dix
LEs. Pour la famille Stratix, Altera a remplacé les LEs par des blocs plus complexes, les Adaptive Logic
Modules – ALM. Un ALM comprend deux tables de conversion, deux additionneurs et deux registres.
Pour la famille Stratix, un LAB regroupe 10 ALMs.
Pour les FPGAs des familles Spartan et Virtex, Xilinx utilise le terme slice pour un module de base in-
cluant deux tables de conversion, deux additionneurs et deux registres. Un Configurable Logic Block –
CLB regroupe deux ou quatre slices, selon la famille de FPGA.

2.5.4 Routage rapide des retenues


Les applications principales des FPGAs au début des années 1990 concernaient les télécommunications et
le traitement des signaux. Ces applications requièrent des additions rapides. C’est pourquoi les fabricants
de FPGA ont rapidement intégré des circuits spécialisés pour la génération et la propagation des retenues
lors d’additions. La présence de ces circuits dédiés élimine à toutes fins pratiques le besoin d’utiliser des
architectures spéciales comme les additionneurs à retenue choisie ou à retenue anticipée, du moins pour
les applications avec au plus 32 bits de précision.

2.5.5 Blocs de mémoire intégrée


Pendant les années 1990, alors que de plus en plus de transistors étaient disponibles pour intégration sur
des puces, les fabricants de FPGA ont commencé à intégrer des modules de plus en plus complexes au
tissu de base montré à la Figure 2-11. Les blocs de mémoire ont été parmi les premiers modules ajoutés à
cause du grand besoin en mémoire de la plupart des applications. L’avantage important à intégrer des
blocs de mémoire près de logique configurable est la réduction significative des délais de propagation et
la possibilité de créer des canaux de communication parallèle très larges. La Figure 2-14 illustre
l’intégration de blocs de mémoire sous la forme d’une colonne entre les CLBs d’un FPGA.
Columns of embedded
RAM blocks

Arrays of
programmable
logic blocks

Figure 2-14 – mémoire RAM intégrée


(source : fig. 4-10, Maxfield, © Mentor Graphics 2004)
La quantité de mémoire présente dans les blocs de RAM varie à travers les différentes familles de FPGAs,
mais on peut retrouver jusqu’à 10 Méga bits de mémoire dans les plus gros et plus récents modèles. Les
blocs peuvent être utilisés indépendamment ou en groupes, offrant une versatilité rarement rencontrée
dans les systèmes numériques. De plus, les blocs de mémoire peuvent être utilisés pour implémenter des
fonctions logiques, des machines à états, des registres à décalage très larges, etc.

2.5.6 Fonctions arithmétiques avancées


La multiplication est une opération fondamentale dans les applications de traitement du signal pour les-
quelles les FPGAs sont très populaires. Les fabricants de FPGAs ont donc ajouté à leurs architectures des
blocs spéciaux pour réaliser cette opération. Les multiplicateurs sont en général disposés près des blocs de
mémoire RAM pour des raisons d’efficacité de routage des signaux et de disposition des ressources du
FPGA sur une puce. La Figure 2-15 illustre un tel arrangement.

RAM blocks

Multipliers

Logic blocks

Figure 2-15 – multiplicateurs intégrés


(source : fig. 4-11, Maxfield, © Mentor Graphics 2004)
Les paramètres d’opération des multiplicateurs varient selon les familles de FPGA. Un format populaire
est un multiplicateur signé de 18 × 18 bits, ce qui est suffisant pour beaucoup d’applications de traitement
du signal (le son est encodé avec 8 bits sur une ligne de téléphone et avec 16 bits par canal pour un CD
audio). Pour les applications devant traiter des opérandes plus larges, il est possible de regrouper plusieurs
multiplicateurs. Le nombre de multiplicateurs varie, mais on en retrouve facilement des dizaines même
sur les FPGAs les plus modestes.
Une autre fonction populaire est la multiplication-accumulation (Multiply-Accumulate – MAC), qui con-
siste à accumuler le produit de plusieurs nombres. Cette opération est utilisée entre autres pour le calcul
du produit scalaire. Afin d’accélérer cette opération, plusieurs fabricants intègrent des blocs MAC à leurs
FPGAs. Un tel bloc est montré à la Figure 2-16.
Multiplier
Adder
Accumulator

A[n:0]

xx
B[n:0] + Y[(2n - 1):0]

MAC
Figure 2-16 – multiplication-accumulation
(source : fig. 4-11, Maxfield, © Mentor Graphics 2004)

2.5.7 Microprocesseurs fixes


On n’arrête pas le progrès. Avec le nombre de transistors intégrables sur une puce doublant tous les 18
mois, et les besoins important en contrôle dans plusieurs applications, les fabricants de FPGA intègrent
des processeurs fixes (hard) à plusieurs familles de FPGAs. La Figure 2-17 illustre deux variations, avec
un et quatre processeurs fixes.

uP uP

uP

uP uP

(a) One embedded core (b) Four embedded cores


Figure 2-17 – processeur intégré
(source : fig. 4-10, Maxfield, © Mentor Graphics 2004)
Les microprocesseurs intégrés ne sont pas réalisés à l’aide de blocs de logique ou de mémoire du FPGA.
Ce sont plutôt des régions de la puce optimisées comme si le microprocesseur était réalisé par lui-même
dans un circuit intégré. En général, les manufacturiers de FPGAs achètent des processeurs populaires dans
l’industrie et déjà bien connus des consommateurs, comme par exemple l’architecture PowerPC de IBM.
En intégrant ainsi un ou plusieurs microprocesseurs à un FPGA, on obtient un tissu de calcul d’une puis-
sance très intéressante. En effet, une application peut être divisée efficacement entre des parties maté-
rielles et logicielles; les parties matérielles sont réalisées avec les ressources configurables du FPGA, et
les parties logicielles sont réalisées avec les microprocesseurs. Là où le parallélisme des calculs l’exige,
les blocs de logique configurable peuvent accélérer les calculs par un facteur de 10×, 100× ou plus. Là où
l’application risque d’être modifiée, ou si elle nécessite beaucoup de contrôle ou d’interface avec le
monde extérieur ou entre des modules, une solution logicielle peut être obtenue plus facilement.
Avec les microprocesseurs entourés des ressources configurables du FPGA, on peut atteindre des taux
d’échange de données très élevés. Tout d’abord, la proximité physique des dispositifs réduit les délais.
Ensuite, il est possible de mettre en place des liens de communication très larges.

2.5.8 Génération et distribution d’horloge


Un problème important lors de la conception et réalisation d’un circuit numérique concerne la génération
et la distribution du signal d’horloge. Dans une application de communications et de traitement du signal,
un même circuit peut nécessiter une dizaine d’horloges de fréquences et de phases différentes.
Pour faciliter la tâche des concepteurs, les FPGAs incluent maintenant des circuits spécialisés de généra-
tion, régulation et distribution de l’horloge. Ce type de circuit accepte en entrée une horloge externe et
génère une ou plusieurs horloges internes, tel que montré à la Figure 2-18. Les horloges internes peuvent
avoir des fréquences et des phases différentes, comme montré à la Figure 2-19 et à la Figure 2-20.

Clock signal from


outside world Daughter clocks
used to drive
Clock
internal clock trees
Manager
or output pins
etc.

Special clock
pin and pad

Figure 2-18 – génération de signaux d’horloge à partir d’une référence externe


(source : fig. 4-16, Maxfield, © Mentor Graphics 2004)

1.0 x original clock frequency

2.0 x original clock frequency

.5 x original clock frequency

Figure 2-19 – varier la fréquence d’horloge


(source : fig. 4-19, Maxfield, © Mentor Graphics 2004)
0 o Phase shifted

90 o Phase shifted

180 o Phase shifted

270 o Phase shifted

Figure 2-20 – varier la phase de l’horloge


(source : fig. 4-20, Maxfield, © Mentor Graphics 2004)
Pour distribuer l’horloge à travers la puce tout en minimisant le déphasage d’horloge, on utilise un réseau
en arbre dédié. Ce réseau est alimenté soit par une patte spéciale du FPGA à laquelle est associé un ampli-
ficateur dédié, ou bien par l’entremise de signaux internes pouvant être routés au même amplificateur. La
Figure 2-21 illustre un tel arrangement.

Clock
Flip-flops
tree

Special clock
pin and pad

Clock signal from


outside world
Figure 2-21 – arbre de distribution d’horloge
(source : fig. 4-15, Maxfield, © Mentor Graphics 2004)

2.5.9 Blocs d’entrées-sorties


Les éléments logiques à l’intérieur d’un FPGA sont forcément très importants; les interfaces avec le
monde extérieur le sont tout autant. Un problème observé assez tôt lors du développement de FPGAs de
plus en plus performants est que leur capacité de traitement excédait leur capacité à recevoir des données
et transmettre des résultats. Les FPGAs sur le marché présentement incorporent donc des blocs d’entrées-
sorties très performants.
Les blocs d’entrées-sorties doivent pouvoir supporter plusieurs normes en termes de débit d’information,
de tensions et d’impédance. Ils incorporent en général une bascule pour minimiser les délais de propaga-
tion et augmenter le taux de transmission de l’information.

2.6 Comparaison d’équivalences en termes de portes logiques


La comparaison de deux FPGAs de familles différentes est difficile à faire, et spécialement si ce sont des
FPGAs de deux manufacturiers différents. Au début de l’ère FPGA, les manufacturiers ont commencé à
publier des métriques comme des « équivalent-portes » pour indiquer combien un FPGA donné pouvait
contenir de portes logiques de base (fonction NON-OU ou NON-ET) à deux entrées. Cependant, avec la
multitude de blocs spécialisés sur un FPGA aujourd’hui, il vaut mieux comparer les métriques de res-
sources en termes des ressources elles-mêmes, comme le nombre de tables de conversions, de bascules,
de bits de mémoire ou de microprocesseurs embarqués.

2.7 Technologies de programmation pour logique programmable


Il existe plusieurs technologies pourles dispositifs programmables. On en couvre les grandes lignes dans
cette section.

2.7.1 Fusibles
La technologie originale utilisée pour les premiers dispositifs programmables, les mémoires ROM, étaient
des fusibles. Le dispositif inclut un fusible à chaque lien programmable, tel que montré à la Figure 2-22.
Le principe du fusible repose sur l’utilisation d’un métal conducteur qui fond et coupe le circuit lorsqu’il
est chauffé par un courant électrique. Pour programmer le dispositif, il faut appliquer une tension élevée
(typiquement 2 à 3 fois la tension nominale du dispositif) à des pattes choisies. Une fois les fusibles fon-
dus, le circuit est programmé, comme montré à la Figure 2-23. L’inconvénient principal de cette techno-
logie est qu’on ne peut programmer le dispositif qu’une seule fois. Les fusibles occupent aussi beaucoup
d’espace sur la puce. Cette technologie n’est plus utilisée.

Fuses Logic 1

Fat
a Pull-up resistors

Faf

NOT & y = 0 (N/A)


Fbt
b
AND
Fbf

NOT
Figure 2-22 – dispositif programmable avec fusibles
(source : fig. 2-2, Maxfield, © Mentor Graphics 2004)
Logic 1

Fat
a Pull-up resistors

NOT & y = a & !b

b
AND
Fbf

NOT
Figure 2-23 – dispositif programmable avec fusibles fondus
(source : fig. 2-3, Maxfield, © Mentor Graphics 2004)

2.7.2 Anti-fusibles
Les anti-fusibles fonctionnent de façon contraire à un fusible. Le dispositif non programmé ne contient
que des liens qui ne sont pas encore établis, comme montré à la Figure 2-24. Pour effectuer une con-
nexion, il faut faire passer un courant élevé à travers l’anti-fusible pour fermer le circuit, comme montré à
la Figure 2-25.

Logic 1
Unprogrammed
antifuses

a Pull-up resistors

NOT & y = 1 (N/A)

b
AND

NOT
Figure 2-24 – dispositif programmable avec anti-fusibles
(source : fig. 2-4, Maxfield, © Mentor Graphics 2004)
Logic 1
Programmed
antifuses

a Pull-up resistors

NOT & y = !a & b

b
AND

NOT
Figure 2-25 – dispositif programmable avec anti-fusibles établis
(source : fig. 2-5, Maxfield, © Mentor Graphics 2004)
Un anti-fusible est fabriqué en plaçant du silicium amorphe entre deux conducteurs métalliques. Le sili-
cium amorphe conduit très mal le courant et peut être considéré comme un isolant. En lui appliquant une
tension élevée, cependant, on transforme le silicium amorphe en silicium polycristallin conducteur. Le
circuit électrique ainsi formé entre les deux conducteurs métalliques s’appelle un via. La Figure 2-26 il-
lustre un anti-fusible avant et après sa programmation.

Amorphous silicon column Polysilicon via

Metal
Oxide
Metal
Substrate

(a) Before programming (b) After programming


Figure 2-26 – détails d’un anti-fusible
(source : fig. 2-6, Maxfield, © Mentor Graphics 2004)
Le grand désavantage de la technologie anti-fusible est que le dispositif n’est programmable qu’une seule
fois. Plusieurs FPGAs sur le marché présentement utilisent pourtant cette technologie. Un avantage im-
portant des anti-fusibles est leur immunité aux radiations, une caractéristique essentielle pour les applica-
tions spatiales. Alors qu’une cellule de mémoire SRAM peut être inversée par un rayonnement ionisant
comme des rayons gamma, une anti-fusible n’est pas affectée. De plus, il est beaucoup plus difficile de
rétroconcevoir une puce avec la technologie anti-fusible car même en exposant le circuit et en l’observant
au microscope, on ne peut distinguer les via des isolants. Cette caractéristique protège donc la propriété
intellectuelle placée sur la puce.
La compagnie Actel est un important manufacturier de FPGA à technologie anti-fusible.
2.7.3 Connexions par l’entremise de transistors
On a vu à la section 2.2, et spécialement à la Figure 2-3, qu’il est important de pouvoir effectuer une con-
nexion entre deux fils mais uniquement dans un sens. Conceptuellement, une diode pourrait faire l’affaire.
En pratique cependant, on utilise des transistors. La Figure 2-27 illustre un tel arrangement.

Logic 1

Fusible link Pull-up resistor

Row
(word) line

Transistor Column
(data) line
Logic 0
Figure 2-27 – connexion programmable à l’aide d’un transistor
(source : fig. 2-8, Maxfield, © Mentor Graphics 2004)
On désire pouvoir établir une connexion entre une ligne horizontale et verticale. La grille du transistor est
reliée à la ligne horizontale, un terminal est relié à la ligne verticale et l’autre à la masse. La ligne verti-
cale est maintenue à une tension élevée par l’entremise d’une résistance connectée à la source
d’alimentation. En contrôlant la connexion entre le drain du transistor et la ligne verticale, on contrôle
effectivement la connexion entre les lignes verticale et horizontale.
Maintenant, même si la ligne verticale est mise à la masse, il n’y a pas de court-circuit entre
l’alimentation et la masse à cause de la résistance en place dans le circuit.
Un transistor PMOS fonctionne comme suit. Quand on applique une tension nulle à sa grille (un ‘0’), un
canal se forme sous celle-ci, permettant au courant de passer entre les deux autres terminaux. Quand on
applique une tension positive (un ‘1’), aucun canal n’est formé et les deux terminaux sont isolés électri-
quement.
Si le lien fusible est en place, une tension nulle sur la ligne horizontale aura pour effet de relier la ligne
verticale à la masse, sans pour autant établir une connexion physique entre les deux lignes. Si le lien n’est
pas là, la ligne verticale a toujours une tension élevée. À la Figure 2-27 on illustre le cas d’un lien fusible,
mais le principe est le même pour toutes les technologies de programmation.

2.7.4 EPROM et grilles flottantes


Les mémoires EPROM peuvent être programmées, effacées et reprogrammées plusieurs fois. Elles utili-
sent des transistors spéciaux avec une grille flottante. La Figure 2-28 illustre un transistor normal et un
transistor à grille flottante.
En conditions normales, les deux transistors fonctionnent de façon identique et peuvent conduire le cou-
rant selon l’action de la grille de contrôle. Le transistor à grille flottante peut être désactivé en plaçant une
tension élevée entre sa grille et l’un de ses terminaux. Cette tension a pour effet d’induire un courant qui
vient charger la grille flottante. Une fois celle-ci chargée, il n’est plus possible de créer un canal sous la
grille et les deux terminaux sont effectivement isolés électriquement.
Source Control gate Drain Source Control gate Drain
terminal terminal terminal terminal terminal terminal

control gate

control gate
Silicon floating gate
dioxide
source drain source drain
Silicon
substrate

(a) Standard MOS transistor (b) EPROM transistor


Figure 2-28 – transistors normaux et à grille flottante
(source : fig. 2-9, Maxfield, © Mentor Graphics 2004)
Pour effacer le dispositif, on l’expose à un rayonnement ultra-violet qui permet de dissiper la charge ac-
cumulée sur les grilles flottantes et ainsi réactiver les transistors.
Les transistors à grille flottante ont de plus l’avantage d’être beaucoup plus petits que les fusibles et anti-
fusibles équivalents. Leurs désavantages sont le coût élevé du boîtier à fenêtre et le temps relativement
long, environ 20 minutes, pour les effacer. De plus, les technologies de fabrication récentes comportent
plusieurs niveaux d’interconnexions métalliques par-dessus les transistors, ce qui rend difficile ou impos-
sible la propagation de rayons ultra-violets jusqu’aux grilles flottantes pour les décharger.
Il n’y a pas sur le marché présentement de FPGAs utilisant la technologie EPROM.

2.7.5 Cellules EEPROM et mémoire Flash


Les mémoires EEPROM et FLASH peuvent être programmées, effacées et reprogrammées plusieurs fois,
mais sans avoir recours aux rayons ultraviolets. La cellule reprogrammable de base comporte un transistor
NMOS avec une grille de contrôle et une grille flottante, comme pour le cas de l’EPROM. Cependant,
l’isolant autour de la grille flottante est plus mince que dans le cas d’une cellule EPROM, et la grille flot-
tante chevauche partiellement le drain du transistor.
Dans son état normal, la grille flottante est déchargée et le transistor fonctionne normalement, c'est-à-dire
qu’une tension appliqué à la grille du transistor induit un canal et permet au courant de passer entre la
source et le drain du transistor. Pour ‘programmer’ la cellule, on place une tension élevée sur la grille de
contrôle et le drain du transistor, comme montré à la Figure 2-29. Comme un courant élevé circule dans le
canal, des électrons sont attirés par la grille de contrôle et vont s’emmagasiner sur la grille flottante. La
tension négative de la grille flottante est alors suffisante pour neutraliser toute tension normale appliquée
à la grille de contrôle, et le transistor ne conduit plus. Le transistor peut conserver cet état programmé
plusieurs années.
Pour ‘déprogrammer’ le transistor, on applique une tension élevée uniquement au drain de celui-ci,
comme montré à la Figure 2-30. La tension est suffisante pour attirer les électrons emmagasinés sur la
grille flottante, à travers de l’isolant. Le transistor fonctionne alors normalement.
Figure 2-29 – programmer une cellule Flash (source : Wikipédia)

Figure 2-30 – déprogrammer une cellule Flash (source : Wikipédia)


Dans une mémoire EEPROM, on doit effacer chaque cellule une après l’autre. Dans une mémoire Flash,
on peut en effacer plusieurs à la fois, par bloc. Le processus est alors beaucoup plus rapide, d’où le nom
de la mémoire.
L’inconvénient de la technologie Flash est qu’elle est plus complexe à fabriquer que les processus les plus
avant-gardistes. Les puces Flash tendent donc à être en retard de quelques années par rapport aux techno-
logies SRAM.
La compagnie Actel est un important manufacturier de FPGAs à technologie Flash.

2.7.6 Mémoire SRAM


L’acronyme SRAM signifie mémoire RAM statique (Static RAM). Une cellule de mémoire SRAM com-
porte 4 ou 6 transistors, par rapport à un seul pour une mémoire RAM dynamique (Dynamic RAM –
DRAM). Cependant, son fonctionnement est plus simple que pour une DRAM.
La technologie SRAM est de loin la plus populaire pour les FPGAs. Elle a plusieurs avantages. Il est fa-
cile de programmer et d’effacer le dispositif. Dès qu’un nouveau processus de fabrication microélectro-
nique arrive sur le marché, les manufacturiers peuvent l’exploiter immédiatement à cause de la facilité
avec laquelle les cellules SRAM peuvent être fabriquées.
Cependant, dès que l’alimentation est coupée, la puce perd toute son information de configuration. La
technologie SRAM est de plus affectée par les radiations, donc elle n’est pas appropriée pour les applica-
tions spatiales. Ensuite, dans un système déployé, le fichier des bits de configuration doit être entreposé
dans une mémoire ROM sur la planchette. Cette mémoire peut être lue par quiconque voudrait voler la
propriété intellectuelle du design. Les manufacturiers de FPGA permettent de chiffrer le fichier et
d’entreposer la clé dans un registre spécial non volatile sur le FPGA. Malgré tous ces désavantages, la
technologie SRAM reste de loin la plus populaire pour les applications générales.
2.7.7 Sommaire
Les trois technologies de programmation les plus populaires pour les FPGAs sont la mémoire SRAM, les
anti-fusibles et la mémoire FLASH. Le Tableau 2-3 résume les avantages et inconvénients de chaque
technologie.

caractéristique SRAM anti-fusibles Flash

fabrication à l’avant-garde 1 à 2 générations de retard

reprogrammable oui non oui

temps de reprogrammation 1×T - 3×T

oui – besoin d’un


volatile non non
fichier externe

prototypage excellent non acceptable

sécurité possible excellente

grande :
dimension de la cellule très petite
4 ou 6 transistors

consommation de puissance moyenne faible moyenne

résistance aux radiations non oui non


Tableau 2-3 – résumé des technologies de programmation pour FPGA

2.8 Exercices
1. Considérez un module qui doit réaliser les fonctions logiques suivantes :
F0   m(0,1,3,7)
F1   m(1,3,5,6,7)
F2   m(0,1,4,5)
F3   m(2,4,5,7)
a. Donnez son implémentation en utilisant uniquement des puces 7400 montrées à la Figure 2-1.
b. Donner son implémentation sur le circuit ROM de la Figure 2-2.
c. Donner l’implémentation des trois premières fonctions sur le PLA de la Figure 2-5.
d. Donner son implémentation sur le PAL de la Figure 2-8.
e. Donner son implémentation sur deux blocs configurables comme celui de la Figure 2-13.
2. Consultez des documents en ligne et comparez les slices de Xilinx au LogicElement d’Altera en
termes des ressources logiques disponibles et en complexité.
3. Consultez des ressources en ligne et comparez les familles Spartan et Virtex de Xilinx.
4. Consultez des documents en ligne et faite l’inventaire de toutes les ressources disponibles sur le
FPGA utilisé dans les laboratoires de ce cours.
5. Un des problèmes importants avec les mémoires Flash est qu’elles ne peuvent supporter qu’un
nombre limité de cycles d’écriture. Quelles sont les conséquences de ce fait pour un FPGA destiné au
prototypage? Quels genres d’applications seraient moins susceptibles à ce problème?

S-ar putea să vă placă și