Académique Documents
Professionnel Documents
Culture Documents
Système combinatoire :
Un système logique est dit combinatoire si l'état de sa sortie ne dépend que de l'état de
son entrée. Le système combinatoire ne doit donc pas présenter de réactions de la sortie
sur l'entrée, de sorte à ce que l'état de la sortie ne dépende pas de l'histoire du système.
Une fonction logique est dite combinatoire lorsque l'état de la sortie est uniquement
définie par la combinaison de l'état des variables logiques d'entrées quelque soit
l'instant.
Système séquentiel:
Un système est dit séquentiel, lorsque la ou les sorties dépendent de la combinaison des
entrées et de l'état précédent des sorties
Une même cause (même combinaison des entrées) peut produire des effets différents.
Le temps peut être une cause déclenchante. L'effet peut persister si la cause disparaît.
La mémoire, la temporisation, le comptage sont des fonctions logiques séquentielles.
1. fonction mémoire
1
à l’apparition du signal e, la sortie change d’état, à la disparition du signal la sortie reste
dans le même état. Le maintien de la sortie est l’effet mémoire.
A l’apparition du signal e, la sortie S ne change d’état qu'au bout d’un certain temps t1, à
la disparition du signal la sortie reste dans le même état pendant le temps t2.
3. Fonction monostable
2
Quelle que soit la durée du signal d’entrée, la sortie a toujours la même durée.
4. Fonction comptage
La sortie change d’état lorsque l’entrée a changée d’état le nombre de fois prédéfini. La
sortie est indépendante de l’intervalle entre deux changements mais seulement du
nombre de changement.
3
Cette notion de synchronisation est surtout utilisée dans le fonctionnement des bascules
et constituants mémoires pour synchroniser plusieurs composants entre eux.
C. Fonction mémoire
Introduction :
4
conséquences un prix de revient élevé, une mise en œuvre complexe et un circuit imprimé
de taille importante. Le développement des mémoires utilisées en informatique fut à
l’origine des premiers circuits logiques programmables (PLD : Programmable Logic
Device). Ces structures (logique programme) ont besoin de s'interfacer entre elles. Elles
utilisent généralement pour réaliser ces interfaces des fonctions à base de fonctions
logiques élémentaires, compteurs, registres, .... . Le nombre de circuits nécessaires pour
remplir ces fonctions peut devenir très vite important. Les fonctions logiques
programmables sont des circuits disposants des entrées et des sorties dont l’utilisateur
peut programmer le schéma logique d’après les besoins liées à la fonction souhaitée :
Logique combinatoire et/ou séquentielle. Ces composants sont appelés des PLD
Ce type de produit peut intégrer dans un seul circuit plusieurs fonctions logiques
programmables par l’utilisateur. Les PLD sont utilisés pour remplacer l’association de
plusieurs boîtiers logiques. Le câblage est simplifié, l’encombrement et le risque de
pannes est réduit. Certains PLD ne permettent pas la relecture de la fonction logique
programmée, c’est pratique lorsque le programme doit rester confidentiel. Ces circuits
disposent d’un certain nombre de broches d’entrées et de sorties. L’utilisateur associe ces
broches aux équations logiques (plus ou moins complexes) qu’il programme dans le
circuit. Sa mise en œuvre se fait très facilement à l’aide d’un programmateur, d’un micro-
ordinateur et d’un logiciel adapté. Rassemblés sous le terme générique PLD, les circuits
programmables par l'utilisateur se décomposent en deux familles :
1. les PROM, les PLA, les PAL et les EPLD,
2. les FPGA.
5
Structure des réseaux logiques combinatoires :
Convention de notation :
Afin de présenter des schémas clairs et précis, il est utile d'adopter une convention
concernant les connexions à fusibles. Les deux figures suivantes représentent la fonction
3 entrées. La figure b) n'est qu'une version simplifiée du schéma de la figure a).
Un exemple de notation est donné sur la figure ci-contre. La fonction réalisée est S = (a . c)
+
6
(b . d). Une croix, à une intersection, indique la présence d'une connexion à fusible non
claqué. L'absence de croix signifie que le fusible est claqué. La liaison entre la ligne
horizontale et verticale est rompue. La sortie S réalise une fonction OU des 2 termes
produits
(a.c) et (b.d).
7
Figure : Structure de base avec les normes des constructeurs
La figure représente la structure interne d’un PLD ayant ses fusibles intacts. Les
équations logiques de Q0 et Q1 sont : Q0 = Q1=a.b.a.b+ a.b.a.b+ a.b.a.b+ a.b.a.b=0.
Si on veut obtenir les fonctions on « grillera » des fusibles de
façon à obtenir le schéma suivant :
x : Fusible intact
Les premiers circuits programmables apparus sur le marché sont les PROM bipolaires à
fusibles. Cette mémoire est l'association d'un réseau de ET fixes, réalisant le décodage
d'adresse, et d'un réseau de OU programmables, réalisant le plan mémoire proprement
dit. On peut facilement comprendre que, outre le stockage de données qui est sa fonction
première, cette mémoire puisse être utilisée en tant que circuit logique. La figure ci-
dessous représente la structure logique d'une PROM bipolaire à fusibles.
8
Chaque sortie Oi peut réaliser une fonction OU de 16 termes produits de certaines
combinaisons des 4 variables A, B, C et D. Avec les PROM, les fonctions logiques
programmées sont spécifiées par les tables de vérités. Le temps de propagation est
indépendant de la fonction implantée.
9
Logique combinatoire et séquentielle :
Système combinatoire :
Un système logique est dit combinatoire si l'état de sa sortie ne dépend que de l'état de
son entrée. Le système combinatoire ne doit donc pas présenter de réactions de la sortie
sur l'entrée, de sorte à ce que l'état de la sortie ne dépende pas de l'histoire du système.
Une fonction logique est dite combinatoire lorsque l'état de la sortie est uniquement
définie par la combinaison de l'état des variables logiques d'entrées quelque soit
l'instant.
Système séquentiel:
Un système est dit séquentiel, lorsque la ou les sorties dépendent de la combinaison des
entrées et de l'état précédent des sorties
Une même cause (même combinaison des entrées) peut produire des effets différents.
Le temps peut être une cause déclenchante. L'effet peut persister si la cause disparaît.
La mémoire, la temporisation, le comptage sont des fonctions logiques séquentielles.
1. fonction mémoire
1
à l’apparition du signal e, la sortie change d’état, à la disparition du signal la sortie reste
dans le même état. Le maintien de la sortie est l’effet mémoire.
A l’apparition du signal e, la sortie S ne change d’état qu'au bout d’un certain temps t1, à
la disparition du signal la sortie reste dans le même état pendant le temps t2.
3. Fonction monostable
2
Quelle que soit la durée du signal d’entrée, la sortie a toujours la même durée.
4. Fonction comptage
La sortie change d’état lorsque l’entrée a changée d’état le nombre de fois prédéfini. La
sortie est indépendante de l’intervalle entre deux changements mais seulement du
nombre de changement.
3
Cette notion de synchronisation est surtout utilisée dans le fonctionnement des bascules
et constituants mémoires pour synchroniser plusieurs composants entre eux.
C. Fonction mémoire
Introduction :
4
conséquences un prix de revient élevé, une mise en œuvre complexe et un circuit imprimé
de taille importante. Le développement des mémoires utilisées en informatique fut à
l’origine des premiers circuits logiques programmables (PLD : Programmable Logic
Device). Ces structures (logique programme) ont besoin de s'interfacer entre elles. Elles
utilisent généralement pour réaliser ces interfaces des fonctions à base de fonctions
logiques élémentaires, compteurs, registres, .... . Le nombre de circuits nécessaires pour
remplir ces fonctions peut devenir très vite important. Les fonctions logiques
programmables sont des circuits disposants des entrées et des sorties dont l’utilisateur
peut programmer le schéma logique d’après les besoins liées à la fonction souhaitée :
Logique combinatoire et/ou séquentielle. Ces composants sont appelés des PLD
Ce type de produit peut intégrer dans un seul circuit plusieurs fonctions logiques
programmables par l’utilisateur. Les PLD sont utilisés pour remplacer l’association de
plusieurs boîtiers logiques. Le câblage est simplifié, l’encombrement et le risque de
pannes est réduit. Certains PLD ne permettent pas la relecture de la fonction logique
programmée, c’est pratique lorsque le programme doit rester confidentiel. Ces circuits
disposent d’un certain nombre de broches d’entrées et de sorties. L’utilisateur associe ces
broches aux équations logiques (plus ou moins complexes) qu’il programme dans le
circuit. Sa mise en œuvre se fait très facilement à l’aide d’un programmateur, d’un micro-
ordinateur et d’un logiciel adapté. Rassemblés sous le terme générique PLD, les circuits
programmables par l'utilisateur se décomposent en deux familles :
1. les PROM, les PLA, les PAL et les EPLD,
2. les FPGA.
5
Structure des réseaux logiques combinatoires :
Convention de notation :
Afin de présenter des schémas clairs et précis, il est utile d'adopter une convention
concernant les connexions à fusibles. Les deux figures suivantes représentent la fonction
3 entrées. La figure b) n'est qu'une version simplifiée du schéma de la figure a).
Un exemple de notation est donné sur la figure ci-contre. La fonction réalisée est S = (a . c)
+
6
(b . d). Une croix, à une intersection, indique la présence d'une connexion à fusible non
claqué. L'absence de croix signifie que le fusible est claqué. La liaison entre la ligne
horizontale et verticale est rompue. La sortie S réalise une fonction OU des 2 termes
produits
(a.c) et (b.d).
7
Figure : Structure de base avec les normes des constructeurs
La figure représente la structure interne d’un PLD ayant ses fusibles intacts. Les
équations logiques de Q0 et Q1 sont : Q0 = Q1=a.b.a.b+ a.b.a.b+ a.b.a.b+ a.b.a.b=0.
Si on veut obtenir les fonctions on « grillera » des fusibles de
façon à obtenir le schéma suivant :
x : Fusible intact
Les premiers circuits programmables apparus sur le marché sont les PROM bipolaires à
fusibles. Cette mémoire est l'association d'un réseau de ET fixes, réalisant le décodage
d'adresse, et d'un réseau de OU programmables, réalisant le plan mémoire proprement
dit. On peut facilement comprendre que, outre le stockage de données qui est sa fonction
première, cette mémoire puisse être utilisée en tant que circuit logique. La figure ci-
dessous représente la structure logique d'une PROM bipolaire à fusibles.
8
Chaque sortie Oi peut réaliser une fonction OU de 16 termes produits de certaines
combinaisons des 4 variables A, B, C et D. Avec les PROM, les fonctions logiques
programmées sont spécifiées par les tables de vérités. Le temps de propagation est
indépendant de la fonction implantée.
9
Les EPLD :
Les EPLD (Erasable Programmable logic Device) sont des circuits programmables
électriquement et effaçables, et qui sont aux P.A.L. ce que sont les U.V.P.R.OM. Aux
P.R.O.M. Les E.P.L.D. peuvent être effacés par U.V. ou électriquement. Ils sont encore
appelés P.A.L. CMOS. Historiquement, les premiers EPLD étaient des GAL effaçables aux
U.V. Il existe maintenant des EPLD effaçables électriquement.
Ces circuits, développés en premier par la firme ALTERA, sont arrivés sur le marché en
1985. Les EPLD sont une évolution importante des PAL CMOS. Ils sont basés sur le
même principe pour la réalisation des fonctions logiques de base. Les procédés
physiques d'intégration permis par les EPLD sont nettement plus importants que ceux
autorisés par les PAL CMOS. Ces circuits ont une capacité en nombre de portes et en
possibilités de configuration est supérieure à celle des GAL.
En effet, les plus gros EPLD actuellement commercialisés intègrent jusqu'à 24000 portes
logiques dont 12000 sont réellement accessibles à l'utilisateur. On peut ainsi loger dans
un seul boîtier, l'équivalent d'un schéma logique utilisant jusqu'à 50 à 100 PAL
classiques.
Densité d'intégration supérieure aux PAL.
Fonctionner à une vitesse au moins égale aux PAL bipolaire.
Description fonctionnelle :
EPLD de la famille MAX :
Logic Array broches(LABs)
Macro cellules
Expanseur
Réseaux d'Interconnections Programmables (PIA)
I/O control blocks
Comme les PAL CMOS, les EPLD font appel à la notion de macro-cellule qui permet, par
programmation, de réaliser de nombreuses fonctions logiques combinatoires ou
séquentielles.
Le schéma type de la macro-cellule de base d'un EPLD est présenté ci-dessous. On
remarque
que le réseau logique est composé de 3 sous ensembles :
• le réseau des signaux d'entrées provenant des broches d'entrées du circuit,
• le réseau des signaux des broches d'entrées/sorties du circuit,
20
• le réseau des signaux provenant des autres macro-cellules.
21
Macro cellule configurable
Quelque soit la famille d'EPLD, la fonctionnalité de la macro-cellule ne change guère. En
revanche, plus la taille des circuits augmente, plus les possibilités d'interconnexions et le
nombre de macro-cellules augmentent. On voit ci-dessous la structure d’un EPLD de la
famille MAX 5000 d’ALTERA.
22
C.P.L.D. signifie Complex Programmable Logic Device. Ces circuits sont composés de
plusieurs P.A.L.s élémentaires reliés entre eux par une zone d’interconnexion. Leurs
architectures sont basées sur celles des PALS. Grâce à cette architecture, ils permettent
d’atteindre des vitesses de fonctionnement élevées (plusieurs centaine de Mhz).
Ces circuits ont une capacité en nombre de portes et en possibilités de configuration très
supérieure à celle des PALs. Le nombre de portes peut varier entre 100 et 100 000
portes logiques et entre 16 et 1000 bascules.
Structure générale d’un CPLD :
Les FPGA :
Lancé sur le marché en 1984 par la firme XILINX, le FPGA (Field Programmable Logic
Device) est un circuit prédiffusé programmable. Le concept du FPGA est basé sur
l'utilisation d'un multiplexeur comme élément combinatoire de la cellule de base. La
figure suivante représente la cellule type de base d'un FPGA. Elle comprend un
multiplexeur 8 vers 1 permettant de réaliser n’importe quelle fonction logique
combinatoire de 4 variables (appelé LUT : Look Up Table ou encore générateur de
fonction). La bascule D permet la réalisation de fonctions logiques séquentielles. La
configuration du multiplexeur 2 vers 1 de sortie autorise la sélection des deux types de
fonction.
23
S0
S1
S2
clock
select
24
Structure d’un FPGA de type Xilinx.
Par une simple programmation électrique (d’une mémoire SRAM) on peut :
- configurer un bloc logique ou plusieurs
- interconnecter entre eux les blocs grâce à une matrice de connexion
On peut aussi électriquement déprogrammer ce que l’on avait programmé.
Avantages Inconvénients
Non volatile
Compteur et machines d’états Les ressources de routage son faibles
CPLD rapides
Logique combinatoire ou de Fonction réclamant peu de routage
contrôle
Les temps d’arrives sont
déterministes
25
Les Technologies d’interconnexion :
26
La connexion est supprimée par claquage du fusible, obtenu par l’application d’une
tension (de 12 à 25 V).
Cellules programmables :
27
consiste à piéger ou non (a laide dune tension supérieur a la tension habituelle
d’alimentation) des électrons dans la grille.
Programmation : piéger des électrons dans la grille flottante qui s’opposent à la
conduction dans le canal ; le transistor est alors équivalent à un interrupteur ouvert.
Lorsque le transistor n’est pas programmé, la grille flottante ne contient aucun électron,
le canal est conducteur et le transistor est équivalent à un interrupteur fermé.
L’extraction éventuelle des électrons piégés permet le retour à l’état initial.
Lorsque le transistor n’est pas programmé, la grille flottante ne contient aucun électron,
le canal est conducteur et le transistor est équivalent à un interrupteur fermé.
Le dépôt d’une charge électrique sur la grille isolée d’un transistor fait appel à un
phénomène connu sous le nom d’effet tunnel : un isolant très mince (une cinquantaine
d’angströms, 1 Å = 10-10 m) soumis à une différence de potentiel suffisamment grande
(une dizaine de volts, supérieure aux 3,3 ou 5 volts des alimentations classiques) est
parcouru par un courant de faible valeur, qui permet de déposer une charge électrique
sur une électrode normalement isolée. Ce phénomène, réversible, permet de
programmer et d’effacer une mémoire. Plusieurs technologies EPROM sont en
concurrence.
La figure suivante montre la structure du PLD élémentaire précédent, dans lequel les
fusibles sont remplacés par des transistors à grille isolée (technologie FLASH).
28
charge stockée dans la grille flottante. Effacement non sélectif reproductible plus d’un
millier de fois.
29
Le composant peut alors être programmé directement sur la carte ou il est utilisé. On
parle alors de composant ISP (in situ programmation ou encore suivant les sources, in
system programmation.
Le choix dune cellule SRAM à 6 transistors permet de bénéficier d’un accès sélectif
rapide (quelques ns) en cours d’utilisation. La taille dune cellule n’est que deux fois plus
forte (50 cm2 par cellule) qu’avec un flash EEPROM.
30
Figure : cellule SRAM à 6 transistors
31
Rapidité - + -
Densité - + --
Facilite + - +
Reprogrammabilité + - ++
32
Famille D’ASIC :
Les circuits programmables font partie des ASIC (Application Specific Integrated Circuit
signifiant circuit intégré spécifique à une application). Ils se partagent en plusieurs
familles suivant la complexité de la fonction que l’on désire réaliser (de simples portes
logiques jusqu’au microprocesseur). Les ASIC programmés chez le fondeur : le circuit est
conçu d'un point de vue logiciel par l'utilisateur, puis il est réalisé par le fondeur.
Parmi les circuits numériques spécifiques à une application, il faut distinguer deux
familles :
• les circuits conçus à partir d’une puce de silicium "vierge" (Full-custom),
• les circuits où des cellules standards sont déjà implantées sur la puce de silicium
(Semicustom).
"Full custom", on trouve les circuits à la demande et ceux à base de cellules. Le fondeur
réalise l'ensemble des masques de fabrication.
"Semi-custom", on trouve les circuits prédiffusés et les circuits programmables. Les
cellules standards, déjà implantées sur la puce de silicium, doivent être interconnectées
les unes avec les autres. Cette phase de routage est réalisée, soit par masquage chez le
fondeur (prédiffusé), soit par programmation. Avant d’aborder le détail de la
classification des circuits numériques spécifiques à une application, un aperçu est donné
sur les méthodes de réalisation des interconnexions pour les circuits "Semi-custom".
Ces circuits sont analogues aux cellules pré caractérisées mais qui sont beaucoup plus
compliqués et qui représentent des circuits semi-fini au niveau physique. Posséder une
architecture dédiée à chaque application et sont donc complètement définis par les
32
concepteurs. La fabrication nécessite la définition de l'ensemble des masques pour la
réalisation. Les temps de fabrication de ces masques et de production des circuits sont
de ce fait assez long. Ces circuits sont ainsi appropriés pour des séries moyennes ou
grandes. L'avantage du circuit full custom réside dans la possibilité d'avoir un circuit
ayant les fonctionnalités strictement nécessaires à la réalisation des objectifs de
l'application. Parmi les
circuits full-custom, on distingue :
• Les circuits à la demande,
• Les circuits à base de cellules.
33
• les cellules de hauteur fixe et de largeur variable,
• les cellules de hauteur et de largeur variables.
1 er cas, l'association des cellules permet de définir des canaux pour les interconnexions ;
le routage alors est simplifié.
2 nd cas, les canaux ne sont pas bien délimités, ce qui complique le placement-routage.
34
Les circuits prédiffusés classiques intègrent de 50000 à 1000000 portes logiques et sont
intéressants pour des grandes séries. Pour des prototypes ou de petites séries, ils sont
progressivement abandonnés au profit des circuits programmables à haute densité
d'intégration, comme les FPGA.
La figure suivante donne un exemple de structure pour un prédiffusé classique. Les
cellules internes sont de taille fixe et organisées en rangées ou colonnes séparées par les
canaux d'interconnexion.
35
1. Dans les ASIC, les lignes d’interconnexions sont crées par masque (fondeur). Le
fondeur réalise les interconnexions des circuits prédiffusés par métallisation en créant
le ou les derniers masques de fabrication.
2. Dans les PLD, les lignes d’interconnexions existent déjà dans le circuit (généralement
sous forme de lignes et de colonnes traversant le composant). Il ne reste donc plus qu’à
réaliser les bonnes liaisons pour réaliser le chemin voulu afin de relier les cellules
logiques. Ces liaisons peuvent se faire :
• par anti-fusible,
• par cellule mémoire : fusible, EPROM, EEPROM, flash EPROM et SRAM.
Performances Comparées :
Complexité (nombre de portes) / volume de production :
36
Fréquence utile/nombre de portes :
37
• ils consomment moins à fonctionnalité identique (< 10 mA par 1000 portes),
• les fonctions réalisables sont plus complexes.
Les inconvénients des FPGA par rapport aux EPLD sont les suivants :
• les EPLD sont plus performants pour certaines fonctions arithmétiques rapides,
• les fréquences de fonctionnement sont variables suivant la méthode de placement
routage retenue. Les EPLD ont des fréquences de travail "prédictibles".
En fait, le domaine d'utilisation des FPGA est celui des prédiffusés, par exemple les
fonctions logiques ou arithmétiques complexes ou le traitement du signal. Le domaine
d'utilisation des EPLD est plutôt celui des PAL, par exemple les machines d'état
complexes.
38
Les FPGA (Field Programmable Gate Array).
Les blocs logiques sont plus nombreux et plus simples que pour les CPLDs, mais cette
fois les interconnexions entre les blocs logiques ne sont pas centralisées.
Le passage d'un bloc logique à un autre se fera par un nombre de points de connexion
(responsables des temps de propagation) fonction de la position relative des deux blocs
logiques et de l'état "d'encombrement" de la matrice. Ces délais ne sont donc pas
prédictibles (contrairement aux CPLDs) avant le placement routage.
De la phase de placement des blocs logiques et de routage des connexions dépendront
donc beaucoup les performances du circuit en terme de vitesse. Sur la figure suivante,
pour illustrer le phénomène, on peut voir :
une liaison entre deux blocs logiques (BA et BL) éloignés, mais passant par peu de points
de connexion, donc introduisant un faible retard.
Une liaison entre deux blocs proches (BD et BH) mais passant par de nombreux points
de connexion, donc introduisant un retard important.
39
Les circuits FPGA appelé aussi LCA (logic cells arrays) du fabricant Xilinx utilisent deux
types de cellules de base :
40
montre le schéma d'un CLB. 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.
Les CLBs basés sur les tables de conversion utilisent de petites mémoires
programmables au lieu de multiplexeurs. Cette approche est similaire à l’approche par
multiplexeurs, mais en supposant que les entrées du multiplexeur ne peuvent être que
des constantes.
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.
Chaque cellule logique, appelée Configurable Logic Block (CLB), est programmée à l’aide
d’une look-up table (LUT)
Le chargement de la configuration peut prendre plusieurs millisecondes, temps pendant
lequel le circuit est inutilisable
41
On peut générer deux sorties par CLB, combinatoires ou séquentielles. Il est possible
de générer 2 fonctions quelconques à 4 variables, une fonction quelconque à 5 variables
ou certaines fonctions à 9 variables
· L’unité logique de base est la Logic Cell (LC): un générateur de fonctions logiques à 4
variables, une logique de carry et un élément de mémoire
· Deux LC forment un slice et deux slices forment un CLB
· En combinant les deux LCs d’un slice, on peut implémenter une fonction quelconque à 5
entrées ou certaines fonctions jusqu’à 9 variables.
En combinant les 4 LCs d’un CLB, on peut implémenter une fonction quelconque à 6
entrées ou certaines jusqu’à 19 variables.
· Chaque slice contient une chaîne à carry, ce qui permet l’implémentation d’un full adder
par LC.
On peut également utiliser ces chaînes pour réaliser des fonctions logiques plus larges
· L’élément de mémoire du LC peut être configuré comme une bascule ou comme un
latch, avec CLK et EC, set et reset (synchrone ou asynchrone).
· Chaque LUT (Look-Up Table) peut être utilisée comme une RAM 16x1 synchrone. Les
deux LUTs d’un slice peuvent se combiner pour obtenir une RAM synchrone de
dimension:
une RAM 16x2, une RAM 32x1, deux RAM 16x1(doubles ports) ou une RAM 16x1 et une
fonction combinatoire à 4 variables.
· En plus, une LUT peut être utilisé comme registre à décalage
42
· Par circuit, il y a deux colonnes de mémoire RAM, appelée Block Select RAM.
Une colonne est formée de plusieurs blocs, un par 4 CLB de hauteur (un FPGA avec 64
CLB de hauteur possède donc 16 blocs de mémoire par colonne, pour un total de 32
pour le circuit).
Input/Output Block (IOB)
43
les entrées/sorties. Il ya trois sortes d'interconnexions selon la longueur et la
destination des liaisons.
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 :
Logic Element ( LE) pour une cellule de base incluant une table de conversion, un
additionneur et un registre.
Logic Array Bloc ( LAB) regroupe dix LEs. Pour la famille Stratix, Altera a remplacé les
LEs par des blocs plus complexes.
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 incluant deux tables de conversion, deux additionneurs et deux registres.
Configurable Logic Block (CLB) regroupe deux ou quatre slices, selon la famille de
FPGA.
44
Les fabricants de FPGA ont commencé à intégrer des modules de plus en plus
complexes. 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 ci-dessous illustre l’intégration de blocs de mémoire sous la forme
d’une colonne entre les CLBs d’un FPGA.
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.
Exemples de constructeurs :
45
Figure : Architecture Actel de base Figure : Spartan II E : vue globale
Dans le plus gros Virtex II, il y a une matrice de 112x108 CLB, 168 multiplieurs, 168
memoires, 12 DCM. soit l'équivalent de 8 millions de portes logiques.
46
Figure : Bloc logique Xilinx 3000 Figure : Bloc logique Xilinx Spartan II E
47
Programmation VHDL
Introduction :
Ce langage a été écrit dans les années 70 pour réaliser la simulation de circuits
électroniques. On l’a ensuite étendu en lui rajoutant des extensions pour permettre la
conception (synthèse) de circuits logiques programmables (P.L.D).
- pérennité du modèle
En 1987 : VHDL devient une norme IEEE, Aujourd'hui c'est un standard du marché
48
Figure : Schéma fonctionnel d’implantation de descriptions VHDL.
Cette tâche sera réalisée par le logiciel placement/routage (« Fitter »), au cours de laquelle
les entrées et sorties seront affectées à des numéros de broches. On peut remarquer sur le
schéma la fonction particulière du bloc VHDL N°5. En effet dans la description fonctionnelle
d’un PLD on a souvent besoin d’une fonction qui sert à cadencer le fonctionnement de
l’ensemble, celle-ci est très souvent réalisée par une machine d’états synchronisée par une
horloge.
1- L’affectation automatique.
2- L’affectation manuelle.
49
On définit les numéros de broches dans la description VHDL ou sur un schéma bloc
définissant les liaisons entre les différents blocs VHDL ou dans un fichier texte propre au
fondeur. Les numéros de broches seront affectés suivant les consignes données.
50
Figure : Organisation fonctionnelle de développement d’un PLD
51
1- la description de interconnexion de sous circuits (cette forme de description peut
être appelle structurelle).
L’entité :
La description dune entité correspond à celle, d’un composant, d’un module ou d’une
carte. Elle comporte nécessairement une interface constitue d’un brochage, d’un
connecteur, Une entité est constitue dune entête contenant son nom suivie de la liste
ordonnes des différent signaux qui constituent son interface. Chaque connexion est
constitue :
52
- :=’0’, pour un rappelle a 0 d’un bit.
Format:
Example:
Ces signaux ainsi que le bus inout, et les sorties buffer, sont utilisables dans la description
interne de l’architecture du circuit.
En VHDL, une structure logique est décrite à l'aide d'une entité et d'une architecture de la
façon suivante :
53
La déclaration de l'entité :
Elle permet de définir le NOM de la description VHDL ainsi que les entrées et sorties
utilisées, l’instruction qui les définit c’est port : Syntaxe:
Entity nom_de_l'entite is
Port (description des signaux);
End nom_de_l'entite ;
End nom_de_l'architecture;
L'architecture contient les instructions VHDL, et elle est décrite (comportementale).
Déclaration des bibliothèques : nommées par l'IEEE, elles contiennent les définitions des
types de signaux électroniques, des fonctions et des sous programme utiles à la définition
de l'architecture.
Library IEEE;
USE IEEE.std_logic_1164.all;
USE IEEE.numeric_std.all;
USE IEEE.std_logic_unsigned.all;
La directive "USE" permet de sélectionner les bibliothèques à utiliser.
54
Les différentes descriptions d’une architecture
Description comportementale et structurelle :
Il existe deux façons distinctes de décrire une structure. L'une dite comportementale
(fonctionnelle /procédurale) et l'autre structurelle.
Description comportementale :
Dans ce type de description, le comportement de la structure est directement inscrit
dans
l'architecture à l'aide d'instructions séquentielles ou sous forme de flow de données.
Elles spécifient le comportement au moyen de formules ou de programmes d'actions.
Description comportementale sous forme de flot de données :
architecture Arch_comportementale of entité_X is
begin
Som <= A xor B;
Ret <= A and B;
end arch_comportementale;
Description structurelle
55
Une description structurelle se compose de trois rubriques :
• Des déclarations des modèles des composants utilisés : c'est un rappel de ce que l'on
trouve dans les entités qui définissent les composants.
• Des déclarations de signaux internes, destinés à interconnecter les composants.
• Les composants, avec pour chacun d'eux le nom de son modèle et son câblage (PORT
MAP) qui indique les fils internes ou les broches qui sont connectés sur les broches de ce
composant.
Entity add is
Déclaration du
port (A, B : in bit; Som, Ret : out bit);
composant XOU.
end add;
architecture Arch_structurelle of add is
component XOU
port (E1, E2 : in bit; S : out bit);
end component; Déclaration du
composant ET.
component ET
56
port (E1, E2 : in bit; S : out bit);
end component; Spécification de l'entité et de
for U1 : XOU use entity work.XOU(A_XOU); l'architecture a utiliser pour
les composants ET et XOU.
for U2 : ET use entity work.ET(A_ET);
begin
U1 : XOU port map (A, B, Som);
U2 : ET port map (A, B, Ret); Câblage des composants
XOU et ET appelé U1 et U2.
end arch_structurelle;
Remarque :
Il est possible d’imbriquer plusieurs boucles IF les unes dans les autres.
IF ... THEN
IF ... THEN
ELSIF ... THEN
END IF;
ELSE
END IF;
Les instructions ELSIF et ELSE ne sont pas obligatoires.
57
BOUCLE FOR
Exécuter, pour i = 0, i = 1, i = 2
Exemple : puis i = 3
FOR i IN 0 to 3 LOOP les instructions suivantes :
IF (A = i) THEN SI (A = i) THEN
S <= B; S <= B;
END IF; END IF;
END LOOP; FIN DE LA BOUCLE;
58
INSTRUCTION CASE
Remarque :
1- L’instruction CASE, souvent appelée “switch case”, convient parfaitement pour décrire
un diagramme d'état, un grafcet ou tout autre formalisme de structures séquentielles
2- L'instruction “When others” n'est pas obligatoire, elle représente une facilité
d'écriture.
Mode concurrent :
59
Pour une description VHDL toutes les instructions sont évaluées et affectent les signaux
de sortie en même temps. L’ordre dans lequel elles sont écrites n’a aucune importance.
En effet la description génère des structures électroniques, c’est la grande différence
entre une description VHDL et un langage informatique classique.
Exemple :
Pour le décodeur 1 parmi 4, l’ordre dans lequel seront écrites les instructions n’a aucune
importance.
Architecture DESCRIPTION of DECOD1_4 is
begin
D0 <= (not(IN1) and not(IN0)); -- première instruction
D1 <= (not(IN1) and IN0); -- deuxième instruction
D2 <= (IN1 and not(IN0)); -- troisième instruction
D3 <= (IN1 and IN0);- - quatrième instruction
end DESCRIPTION;
L’architecture ci dessous est équivalente :
architecture DESCRIPTION of DECOD1_4 is
begin
D1 <= (not(IN1) and IN0); -- deuxième instruction
D2 <= (IN1 and not(IN0)); -- troisième instruction
D0 <= (not(IN1) AND not(IN0)); -- première instruction
D3 <= (IN1 AND IN0); -- quatrième instruction
end DESCRIPTION;
Affectation conditionnelle :
Cette instruction modifie l’état d’un signal suivant le résultat d’une condition logique
entre un ou des signaux, valeurs, constantes.
SIGNAL <= expression when condition
else expression when condition
else expression when condition
else expression;
60
Remarque : l’instruction [else expression] n’est pas obligatoire mais elle fortement
conseillée, elle permet de définir la valeur du SIGNAL dans le cas où la condition n’est
pas remplie. On peut mettre en cascade cette instruction voir l’exemple ci-dessous .
Exemple :
-- S1 prend la valeur de E2 quand E1=’1’ sinon S1 prend la valeur ‘0’
S1 <= E2 when ( E1= ‘1’) else ‘0’;
Schéma correspondant :
Exemple :
-- Structure évoluée d’un multiplexeur 4 vers 1
S2 <= E1 when (SEL="00" ) else
E2 when (SEL="01" ) else
E3 when (SEL="10" ) else
E4 when (SEL="11" ) else
‘0’;
Affectation sélective :
Cette instruction permet d’affecter différentes valeurs à un signal, selon les valeurs
prises par un signal dit de sélection.
with SIGNAL_DE_SELECTION select
SIGNAL <= expression when valeur_de_selection,
expression when valeur_de_selection,
expression when others;
Remarque: l’instruction [expression when others] n’est pas obligatoire mais fortement
conseillée, elle permet de définir la valeur du SIGNAL dans le cas où la condition n’est
pas remplie.
Exemple : -- Multiplexeur 4 vers 1 with SEL select
With Sel select
S2 <= E1 when "00",
E2 when "01",
E3 when "10", E4 when "11",
'0' when others;
61
Remarque: when others est nécessaire car il faut toujours définir les autres cas du signal
de sélection pour prendre en compte toutes les valeurs possibles de celui-ci.
On peut écrire les équations avec des opérateurs de base pour chaque sortie
S2 <= (E1 and not(SEL(1)) and not(SEL(0))) or (E2 and not SEL(1) and (SEL(0)) or (E3
and SEL(1) and not(SEL(0))) or (E4 and SEL(1) and SEL(0));
L’équation logique ci-dessus donne aussi le même schéma, mais elle est peu
compréhensible, c’est pourquoi on préfère des descriptions de plus haut niveau en
utilisant les instructions VHDL évoluées.
62
architecture DESCRIPTION of TABLE2 is
begin
with SEL select
S2 <= E1 when "00", E2 when "01",
'1' when others; -- Pour les autres cas de SEL
-- S2 prendra la valeur 1 logique
end DESCRIPTION;
Exemple : Affectation sélective avec les autres cas forcés à une valeur quelconque ‘-’.
Library ieee;
Use ieee.std_logic_1164.all;
Use ieee.numeric_std.all;
Use ieee.std_logic_unsigned.all;
entity TABLE3 is port ( E1,E2 : in std_logic; SEL : in std_logic_vector(1 downto 0); S2 : out
std_logic);
end TABLE3;
architecture DESCRIPTION of TABLE3 is
begin
with SEL select
S2 <= E1 when "00",
E2 when "01",
'-' when others; -- Pour les autres cas de SEL
-- S2prendra la valeur quelconque
end DESCRIPTION;
Mode séquentielle :
Les instructions du mode séquentiel.
Définition d’un PROCESS.
Un process est une partie de la description d'un circuit dans laquelle les instructions
sont exécutées séquentiellement. L'exécution d'un process est déclenchée par un ou des
changements d'états de signaux logiques. Le nom de ces signaux est défini dans la liste
de sensibilité lors de la déclaration du process.
[Nom_du_process:]process(Liste_de_sensibilité_nom_des_signaux)
Begin
-- instructions du process
end process [Nom_du_process] ;
Remarque: Le nom du process entre crochet est facultatif, mais il peut être très utile
pour repérer un process parmi d’autres lors de phases de mise au point ou de
simulations.
Règles de fonctionnement d’un process :
63
1- L’exécution d’un process a lieu à chaque changement d’état d’un signal de la liste de
sensibilité.
2- Les instructions du process s’exécutent séquentiellement.
3- Les changements d’état des signaux par les instructions du process sont pris en
compte à la fin du process.
4- 2 process d'une architecture ayant la même liste de sensibilité vont être exécutés en
même temps
Exemple :
Process (C,D)
Begin
A <= 2 ;
B <= A + C ;
A <= D + 1 ;
E <= A * 2 ;
End process;
A l'intérieur d'un process, on peut utiliser des "if" et/ou des "case". L'exécution
est alors séquentielle.
De même on peut utiliser des boucles pour contrôler l'exécution. Les "for" sont à
bornes fixes, alors que les "while" ne le sont pas.
Le fonctionnement du "If"
S1 (1bit) SEL S
E (1 bit) S2
00 S1
S3
S4 01 S2
10 S3
Enable SEL
11 S4
Library ieee;
USE iee.std_logic_1134.all
Entity demultiplex is
64
Port ( SEL : in std_logic_vector (1 downto 0); E : in std_logic; Enable : in std_logic;
S1,S2,S3,S4 : out std_logic;);
End demultiplex;
Architecture desc_demultiplex of demultiplex is
Begin
Process (SEL, ENABLE, E) --liste de sensibilité
Begin
If SEL ="00" and ENABLE = '0' then S1 <= E ;
Elsif SEL ="01" and ENABLE = '0' then S2 <= E ;
Elsif SEL ="10" and ENABLE = '0' then S3 <= E ;
Elsif SEL ="11" and ENABLE = '0' then S4 <= E ;
Else S1<='Z', S2<='Z', S3<='Z', S4<='Z' ;
End if;
End process ;
End desc_demultiplex ;
Le fonctionnement du "Case"
65
Le fonctionnement du "for"
Le fonctionnement du "wait"
Il est possible de définir un process sans liste de dépendance. Chaque process est
toujours exécuté au moins une fois, au début.
En ajoutant des énoncés "wait", il devient possible d'indiquer que le process sera
réveillé à un certain endroit, selon une certaine condition :
Wait for time
Wait on signal
Wait until condition
66