Sunteți pe pagina 1din 37

Circuits Programmables FPGA S.

Haroun

Cours de Circuits Programmables FPGA


Introduction
Actuellement les objets techniques (O.T) utilisent de plus en plus la logique programmée (µP, Mémoire,
µC…). Ces structures 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, compteur, registres,…. Le nombre de
circuits nécessaires pour remplir ces fonctions peut devenir très vite important.
Pour diminuer les couts de fabrications, de développement et de maintenance, les fabricants de circuits
intégrés ont donné naissance aux circuits logique programmable ou encore P.L.D (Programmable Logic
Device).
Ces circuits sont capables pour un O.T de réaliser plusieurs fonctions logiques dans un seul circuit. Si ces
fonctions étaient réalisées à base de circuits de logiques classiques, il en faudrait plusieurs circuits.
Un autre avantage, l’évolution des fonctions d’un O.T s’effectue par programmation comparée à une
solution classique ou il faut refaire un circuit imprimé si on veut modifier le fonctionnement.

1. Circuits logiques programmables PLD


1.1. Présentation
Un circuit logique programmable (PLD en anglais, Programmable Logic Device) est un circuit logique
où les relations entre les entrées et les sorties du circuit ne sont pas figées mais doivent être configurées par
l’utilisateur.
Attention au terme programmable, il ne faut pas le prendre au sens de programme comme pour un
microcontrôleur (suite séquentielle d’instructions) mais plutôt au sens programmable comme pour une
PROM, l’utilisateur « programme » le comportement du circuit.
En toute rigueur, on devrait d’ailleurs parler de circuits logiques à configurations multiples ou circuits
logiques re-configurables plutôt que de circuits logiques programmables.

CIRCUIT LOGIQUE
Entrées Sorties
PROGRAMMABLE

Les fonctions réalisées peuvent être des fonctions logiques combinatoires ou logiques séquentielles. Ce
type de circuit est de plus en plus répandu et tend à remplacer la logique câblée classique.
En effet, les avantages sont nombreux :
- Possibilités d’évolution et de modification des fonctions sans modification du câblage.
- Simplification du câblage car des fonctions logiques complexes peuvent être rassemblées dans le
même boîtier. Ce qui entraîne une diminution de la surface des circuits imprimés. Amélioration des
performances C.E.M.

P a g e 1 | 37
Circuits Programmables FPGA S. Haroun

- Gain de temps en étude : on peut faire fabriquer le circuit imprimé pendant que l’on termine le
développement du circuit (à condition d’avoir bien choisi le circuit logique programmable).
- Possibilités (sur certains circuits) d’interfacer le circuit avec un micro-ordinateur pour réaliser des
fonctions de test (Bus JTAG).

Il existe plusieurs familles de circuits logiques programmables. Nous allons rapidement les passer en
revue.

1.2. Classification des P.L.D

1.2.1. Les P.A.L


Signifie Programmable Array Logic, c’est-à-dire réseau logique programmable. La programmation de ces
circuits s’effectue par destruction de fusibles. Une fois programmée on ne peut plus les effacer. On distingue
deux sous familles :
a) Les P.A.L combinatoires ou P.A.L simples. Ils sont constitués de fonctions de logique combinatoire.
b) Les P.A.L à registres ou F.P.L.S Filed Programmable Logic Sequencer pour séquenceur logique
programmable. Ils sont constitués de logique combinatoire et séquentielle (Registre).
1.2.2. Les P.A.L effaçables E.P.L.D
E.P.L.D signifie Erasable Programmable Logic Device, c'est-à-dire circuit logique programmable et
effaçable et qui sont aux P.A.L ce que sont les U.V.P.R.O.M 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. C.M.O.S.
1.2.3. Les G.A.L
Ce qui signifie Generic Array Logic ou encore réseau logique générique ce qui veut dire pas grand-chose
mais qui sont aux P.A.L ce que sont les E.E.P.R.O.M aux P.R.O.M. Leur fonctionnement est identique aux
P.A.L CMOS, ils sont programmables et effaçables électriquement.
A l’origine, PAL est une appellation du constructeur MMI ( Monolithic Mémories Inc.), GAL est une
appellation déposée par la société Lattice.
1.2.4. Les C.P.L.D
Ce qui signifie Complex Programmable Logic Device, ces circuits sont composés de plusieurs P.A.L
élémentaires (par exemple l’équivalent de P.A.L 22V10) reliés entre eux avec une zone d’interconnexion.
Grace à cette architecture, ils permettent d’atteindre des vitesses de fonctionnement élevées (plusieurs
centaines de MHZ).
1.2.5. Les L.C.A & F.P.G.A à anti-fusible
a) Les L.C.A
Ce qui signifie Logic Cell Array ou encore réseau de cellules logiques. Ces circuits sont composés de bloc
logiques élémentaires de 2000 à 10000 portes que l’utilisateur peut interconnecter.
b) Les F.P.G.A à anti-fusibles
Sont identiques aux L.C.A sauf qu’ils permettent une plus grande intégration de portes et ils ne sont pas
effaçables électriquement. Le nom anti-fusible vient de la programmation des connexions qui s’effectue par
fermeture de circuits, comparé aux fusibles ou l’on ouvre les circuits.

P a g e 2 | 37
Circuits Programmables FPGA S. Haroun

1.3. Principe des PLD : les PAL


Etant donné que toute fonction logique peut être exprimée comme une somme de produits logiques
(mintermes), la structure de base des premiers circuits programmables est formée par une matrice ET (AND)
suivie d'une matrice OU (OR). L'une des deux matrices, ou les deux, est programmable.

Une matrice programmable est un ensemble de portes logiques dont les entrées sont connectées aux
variables du systèmes, vraies et inversées, au moyen d'un réseau de fusibles.
Lorsqu'un fusible est brûlé, la connexion respective entre la variable et la porte logique disparaît.
La programmation du système se fait en choisissant les fusibles que l'on laisse et que l'on brûle.

P a g e 3 | 37
Circuits Programmables FPGA S. Haroun

Selon le caractère programmable des matrices ET et OU, il existe deux types de circuits logiques
programmables :
o PAL (Programmable Array Logic) : matrice ET programmable suivie d'une matrice OU fixe.
o PLA (Programmable Logic Array) : les deux matrices ET et OU sont programmables.
Les circuits PALs sont les PLDs les plus courants : les PLAs sont très peu utilisés à cause de leur
nombre élevé de fusibles, ce qui amène une grande consommation de puissance et de long délai.

1.4. Représentation et symbolisation


La figure ci-dessous représente la structure simplifiée d'un PAL (2 entrées et 1 sortie).

A partir de cette structure de base il va être possible de réaliser de nombreuses fonctions logiques. La
programmation va constituer à détruire les fusibles pour obtenir les fonctions désirées, en sachant que lors
de l’achat d’un P.A.L tous les fusibles ne sont pas détruits.
Cette représentation schématique demande beaucoup d'espace pour représenter un PAL en entier. Les
industriels ont adopté la représentation symbolique suivante :

D'où les représentations symboliques du PAL de 2 entrées et 1 sortie :

P a g e 4 | 37
Circuits Programmables FPGA S. Haroun

Exemple

1.5. Structure générale d'un PAL


Tout P.A.L est constitué :

- D’entrées (Input) : de I1 à In avec 8 < n < 20


- De sorties (Output) Ou d’entrées/sorties (I/O) de type trois états : de O1 à On ou IO1 à IOn
(8 < n < 15).
On peut trouver aussi :
- Une entrée d’horloge (Clock) : CLK ou Clock
- Une entrée de validation des sorties trois états : OE (Output Enable) ou Enable.
- Une entrée de remise à zéro des registres : RESET

D’un point de vue fonctionnel un P.A.L est constitué d’une zone d’entrée de fusibles ou matrice de
programmation et une structure de sortie non programmable déterminant le type de circuit.

P a g e 5 | 37
Circuits Programmables FPGA S. Haroun

1.5.1. Différents types d'entrées / sorties


On distingue 3 principes utilisés pour les sorties. Selon le modèle, un ou plusieurs types de sorties
peuvent être utilisés sur un même PAL.
a) Entrées / Sorties combinatoires :

Il existe trois types :

- H (High) porte ET suivit d’une porte OU, sortie active à l’état haut
- L (Low) porte ET suivit d’une porte NON OU sortie active à l’état bas
- C (Combinée) programmable en type Hou L.

Les deux premiers types de circuits correspondent à des circuits combinatoires classiques. Sur le
troisième type de circuits, il y a :
- possibilité de mettre la sortie dans l’état haute impédance.
- possibilité de transformer une sortie en entrée.
- possibilité de relire une sortie pour modifier l’entrée.

b) Sorties à registres (Séquentielle)


Ces sorties utilisent une bascule D qui permet la logique séquentielle mais elles ne peuvent pas être
utilisées comme entrées. Il existe trois types :
 R : Registre

P a g e 6 | 37
Circuits Programmables FPGA S. Haroun

Ces circuits sont composés de bascule D, les sorties des bascules sont de type trois états contrôlé par un
signal de validation Enable ou OE, et une horloge (Clock) est commune à toutes les bascules.
 X : Ou exclusif et registre

 RA : Registre Asynchrone

c) Entrées / Sorties des PAL versatiles (VPAL):


Ce type de structure représente les P.A.L les plus évolués, car les structures de sorties dite versatile
permettent de configurer (par programmation) le mode d'utilisation de la broche de sortie pour réaliser
n’importe laquelle des 4 sorties précédentes. elle-ci est basée sur un multiplexeur de sortie, commandé par
les bits S1 S0.

Ce qui donne :

P a g e 7 | 37
Circuits Programmables FPGA S. Haroun

2. Circuits logiques programmables complexes (CPLD)


2.1. Présentation
Les PLA, PAL et GAL sont parfois appelés des circuits logiques programmable simples (Simple
Programmable Logic Devices – SPLD). Les CPLD (Complex Programmable Logic Devices) sont donc une
extension naturelle des circuits PAL. Un CPLD incorpore plusieurs PAL ou PLA sur une seule puce avec
un réseau d’interconnexions. Ce réseau permet de relier les pattes de la puce à différents blocs internes et
de relier les blocs entre eux. Les CPLD peuvent contenir entre 100 et 100 000 portes logiques et entre 16 et
1000 bascules voir plus.

2.2. Structure générale d’un CPLD


Le diagramme de la figure ci-dessous montre l'architecture interne d'un CPLD typique. Bien que chaque
fabricant a sa propre variante, les CPLDs présentent généralement un schéma fonctionnel identique constitué
de blocs logique (Block Function), de blocs entrée / sortie et des matrices d’interconnexion. Les dispositifs
sont programmés à l'aide d'éléments programmables qui, selon la technologie du fabricant, peuvent être des
cellules EPROM, des cellules EEPROM ou des cellules Flash EPROM.

Architecture d’un CPLD Xilinx.


2.2.1. Blocs Logique (Function Blocks),
Un bloc logique est constitué de plusieurs Macro-cellule qui permet, par programmation, de réaliser de
nombreuses fonctions logiques combinatoires ou séquentielles. Comme dans le cas des PLD simples, la
macro-cellule est constitué d’un plan AND qui peut accepter des entrées à partir des blocs d'E / S, d'autres
blocs logiques ou des retours du même bloc logique.
Les termes résultants sont additionnés ensemble en utilisant un nombre déterminé de portes OR. Les
termes sont sélectionnés par la suite via un large multiplexeur. Les sorties du multiplexeur peuvent alors être
envoyées directement du bloc ou via une bascule cadencée (par une horloge).
Habituellement, les blocs de fonction sont conçus pour être similaires aux architectures PAL existantes,
afin que le concepteur puisse utiliser des outils familiers ou même des conceptions plus anciennes sans les
modifier.
2.2.2. I/O Blocks
Le bloc d'E / S est utilisé pour envoyer des signaux aux broches du périphérique CPLD aux niveaux de
tension appropriés avec le courant approprié. Habituellement, une bascule est incluse, comme indiqué sur la

P a g e 8 | 37
Circuits Programmables FPGA S. Haroun

figure. Ceci est effectué sur les sorties afin que les signaux synchronisés puissent être émis directement vers
les broches sans subir de retard significatif. De plus, une certaine quantité de logique est incluse dans le bloc
d'E / S pour ajouter des ressources et fonctionnalités supplémentaires au périphérique.
2.2.3. Matrice d’interconnexion
L'interconnexion dans le CPLD se fait par une grande matrice de commutateurs programmables qui
permet aux signaux provenant de toutes les parties du périphérique de parvenir à toutes les autres parties.
Bien qu'aucun commutateur ne puisse connecter tous les blocs de fonction internes à tous les autres blocs
de fonction, la flexibilité est suffisante pour permettre de nombreuses combinaisons de connexions.
2.2.4. Les Eléments Programmables
Chaque fabricant utilise une différente technologie pour implémenter les éléments programmables d'un
CPLD. Les technologies courantes sont les mémoires EPROM (EPROM), les mémoires PROM effaçables
électriquement (EEPROM) et les EPROM Flash. Ces technologies sont similaires aux technologies utilisées
pour les dispositifs programmables les plus simples, à savoir les PROM, ou à des versions de nouvelle
génération de celles-ci.

3. Les F.P.G.A (Fields Programmable Gate Array)


3.1. Présentation
Lancé sur le marché en 1984 par la firme XILINX, le FPGA (Field Programmable Logic Device) est un
réseau de cellules logiques programmable. Actuellement, les deux plus grands constructeurs des FPGA sont
XILINX et ALTERA.
Tous les FPGA sont fabriqués en technologie CMOS, les plus gros d'entre eux intègrent jusqu'à 1000000
portes logiques utilisables. Il faut noter que la surface de silicium d'un FPGA est utilisée au 2/3 pour les
interconnexions et au 1/3 pour les fonctions logiques.
Le FPGA est composés de blocs logiques élémentaires (plusieurs milliers de portes) qui peuvent être
interconnectés. Les cellules de base (blocs logiques élémentaires) d'un FPGA sont disposées en rangées et
en colonnes. Des lignes d'interconnexions programmables traversent le circuit, horizontalement et
verticalement, entre les diverses cellules. Ces lignes d'interconnexions permettent de relier les cellules entre
elles, et avec les plots d'entrées/sorties.

3.2. Différents types de FPGA


Il existe deux types de FPGA : les FPGA non reprogrammables (OTP) et les FPGA reprogrammables
(SRAM).
3.2.1. Les FPGA de Type OTP :
Commercialisés à partir de 1990, ce FPGA, programmable une seule fois, est basé sur la technologie des
interconnexions à anti-fusibles (équivalent à un condensateur que l’on peut « claquer » pour réaliser une
liaison). Les lignes d'interconnexions programmables traversent le circuit, horizontalement et verticalement,
entre les diverses cellules. La technologie à anti-fusibles permet de réduire considérablement la surface prise
par les interconnexions programmables, par rapport aux interconnexions à base de SRAM.

P a g e 9 | 37
Circuits Programmables FPGA S. Haroun

3.2.2. Les FPGA de type SRAM :


Chaque connexion est réalisée par une matrice de transistor MOS. Ces circuits sont volatiles. A chaque
mise sous tension, ils doivent être reconfigurés. Les FPGA de type SRAM sont toujours accompagnés d’une
mémoire de configuration (PROM ou EEPROM) qui est lue automatiquement par le FPGA à la mise sous
tension.
Le FPGA SRAM est utilisé pour des prototypes ou des petites séries, alors que le FPGA à anti-fusibles
est destiné pour des plus grandes séries, en raison de son coût de fabrication moins élevé.

3.3. Structure d’un FPGA


Un FPGA est composé à la base de :
 Un réseau de blocs logiques 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 ;
 Des blocs spéciaux d’entrée et de sortie avec le monde extérieur (Input/Output Block – IOB).

Structure d’une FPGA


3.3.1. 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 (LUT : Look Up Table).
 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 de ces mintermes est vrai.
 Les CLBs basés sur les tables de conversion (LUT) utilisent de petites mémoires programmables au
lieu de multiplexeurs. Cette approche est similaire à l’approche par multiplexeurs, mais en supposant que

P a g e 10 | 37
Circuits Programmables FPGA S. Haroun

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.
Look Up Table (LUT) : la LUT permet de stoker la table de vérité de la fonction combinatoire à
implémenter dans la cellule RAM.

Exemple descriptif d’un LUT


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.
Le CLB est généralement composé de :
 Deux tables de conversion (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 (bascule D) permet la réalisation de fonctions logiques séquentielles.

Bloc de logique programmable simplifié – Xilinx

P a g e 11 | 37
Circuits Programmables FPGA S. Haroun

3.3.2. Blocs d’E/S Configurables


Un bloc d'E / S configurable sert à amener des signaux sur la puce et les renvoyer. Il se compose d'un
registre tampon (buffer) d'entrée et d'un registre tampon (buffer) de sortie avec des sorties à trois états
contrôlable et à collecteur ouvert. Il y a généralement des résistances de pull up sur les sorties.
La polarité de la sortie peut généralement être programmée pour une sortie active à l’état haute ou à l’état
bas. De plus, il y a souvent une bascule sur les sorties afin que les signaux synchronisés puissent être émis
directement vers les broches sans subir de retard significatif.

Blocs d’E/S Configurables

3.3.3. Réseau d’interconnexions programmable


L'interconnexion d'un FPGA est très différente de celle d'un CPLD. Comme le montre la figure ci-dessous,
il existe de longues lignes qui peuvent être utilisées pour connecter des CLB critiques physiquement éloignés
les uns des autres sur la puce sans induire beaucoup de retard. Ils peuvent également être utilisés comme bus
dans la puce.
Il existe également des lignes courtes utilisées pour connecter des CLB individuels physiquement proches
les uns des autres. Il existe souvent une ou plusieurs matrices de commutation, permettant de relier ces lignes
longues et courtes de manière spécifique. Des commutateurs programmables à l'intérieur de la puce
permettent la connexion de CLB pour interconnecter des lignes et des lignes d'interconnexion entre elles et
avec la matrice de commutateurs.

P a g e 12 | 37
Circuits Programmables FPGA S. Haroun

3.3.4. Autres composants sur les FPGA


a) Blocs de mémoire intégrée
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.

Mémoire RAM intégrée

b) Fonctions arithmétiques avancées


Les fabricants de FPGAs ont ajouté à leurs architectures des blocs spéciaux pour réaliser des opérations
de multiplication. 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.
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.

Multiplicateurs intégrés multiplication-accumulation

P a g e 13 | 37
Circuits Programmables FPGA S. Haroun

Une autre fonction populaire est la multiplication-accumulation (Multiply-Accumulate – MAC), qui


consiste à 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.
c) Microprocesseurs fixes
Les fabricants de FPGA intègrent des processeurs fixes (hard) à plusieurs familles de FPGAs. La figure
ci-dessous illustre deux variations, avec un et quatre processeurs fixes. En intégrant ainsi un ou plusieurs
microprocesseurs à un FPGA, on obtient un tissu de calcul d’une puissance très intéressante.

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

Processeur intégré

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 du puce optimisé comme si le microprocesseur était réalisé par lui-même dans un
circuit intégré. En général, les constructeurs des FPGAs utilisent des processeurs populaires dans l’industrie.

P a g e 14 | 37
Circuits Programmables FPGA S. Haroun

4. Le langage VHDL
4.1. Introduction
VHDL est l’acronyme de VHSIC HDL (Very High Speed Integrated Circuit Hardware Description
Language), c’est un langage de description matérielle qui a été créé dans les années 1980 à la demande du
département de la défense américaine (DOD).
La première version du VHDL accessible au public a été publiée en 1985, et a fait l’objet d’une norme
internationale en 1986 (IEEE 1076) par l’institut des ingénieurs électriciens et électroniciens (IEEE).
Révisée en 1993 (IEEE 1164) pour supprimer quelques ambiguïtés et améliorer la portabilité du langage,
cette norme est vite devenue un standard en matière d'outils de description de fonctions logiques.
De nos jours, le langage VHDL devient un outil indispensable pour la conception des systèmes
électroniques intégrés (ASIC), il est proposé par la grande majorité des sociétés de développement et la
programmation des composants programmables du type PLD, CPLD et FPGA. Le VHDL es utilisé aussi
pour concevoir des modèles de simulations numériques ou des bancs de tests.
Avec un langage de description matérielle et un FPGA (Field Programmable Gate Array), un concepteur
peut développer rapidement et simuler un circuit numérique sophistiqué, de l’implémenter sur une carte de
prototypage, et de vérifier son fonctionnement.

4.2. Structure d’une description VHDL


4.2.1. Entité et architecture
En VHDL, une structure logique est décrite à l'aide d'une entité et d'une architecture de la façon suivante :
bibliothèques
L’accès aux

library nom de la bibliothèque ;

use permet l’accès aux fonctions de la bibliothèque all ;

entity Nom_de_l’entité is
La déclaration

generic déclaration des paramètres (éventuellement) ;


d’entité

port description des E/S de la structure en explicitant pour chacune d’entre


elles, le nom, la direction ou mode et le type ;

end Nom_de_l’entité ;

architecture Nom_de_l’architecture of Nom_de_l’entité is


L’architecture

zone de déclaration optionnelle

begin
description de la structure logique

end Nom_de_l’architecture ;

P a g e 15 | 37
Circuits Programmables FPGA S. Haroun

 L'entité donne les informations concernant les signaux d'entrées et de sorties de la structure (schéma
fonctionnel) ainsi que leurs noms et leurs types.
 L'architecture décrit le comportement de l'entité (Schéma structurel).
 Il est possible de créer plusieurs architectures pour une même entité, mais pas le contraire. Chacune de
ces architectures décrira l'entité de façon différente.

Exemple 1

Donner la discription VHDL de circuit intégré 7400. Ce dernier est constitué de quatre portes logiques
NAND à deux entrées.

Circuit intégré 7400 (Vue externe (a) et vue interne (b)).

Réponse

La description du circuit intégré 7400 en langage VHDL est donnée par le listing suivant :

Les deux premières lignes définissent les bibliothèques et les paquetages dont nous avons besoin pour la
conception de notre circuit. Dans notre code, on fait appel au paquetage std_logic_1164 qui se trouve dans
la bibliothèque IEEE.

P a g e 16 | 37
Circuits Programmables FPGA S. Haroun

a) La déclaration de l’entité

L’entité correspond au circuit vu de l’extérieur, et comprend essentiellement les entrées-sorties du circuit.


La première ligne d’une entité (ligne 4 du code) indique le nom du circuit, ‘’CI_7400’’dans notre exemple.
Les entrées - sorties du circuit sont des ports qui doivent avoir le format suivant :
NOM_DU_PORT : MODE TYPE ;

Le MODE d’un port peut être : - IN s’il s’agit d’une entrée


- OUT s’il s’agit d’une sortie
- INOUT s’il s’agit d’une entrée - sortie (port bidirectionnel)
- BUFFER s’il s’agit d’une sortie rebouclée en entrée

Pour le TYPE du port, il faut savoir que le langage VHDL est un langage typé, c’est-à-dire que chaque
objet manipulé doit avoir un type de données.
Dans l’exemple précédent, le type du port utilisé est STD_LOGIC. Il est défini dans le paquetage
STD_LOGIC_1164.

Si le type du signal utilisé est un bus de données, on utilise alors le type STD_LOGIC_VECTOR qui est
défini comme étant un tableau unidimensionnel d’éléments de type STD_LOGIC.
Exemple :
Soit le signal d’entré A de 8 bits, on le déclarera en VHDL comme suit :
A : in std_logic_vector ( 7 downto 0 ) ;
Ou bien :
A : in std_logic_vector (0 to 7);
La différence entre les deux expressions est l’indice du MSB et du LSB. Dans la première expression,
l’indice du MSB est A(7), celui du LSB est A(0). Dans la deuxième expression, l’indice du MSB est A(0),
celui du LSB est A(7).

P a g e 17 | 37
Circuits Programmables FPGA S. Haroun

b) La déclaration de l’architecture

L’architecture du circuit correspond au circuit vu de l’intérieur, et comprend essentiellement la description


des opérations du circuit.
Architecture NOM_DE_L’ARCHITECTURE of NOM_DE_L’ENTITE is

Dans notre exemple, le nom de l’architecture est behavioral.


La description principale d’une architecture comprend toujours les deux mots réservés ‘’BEGIN’’ et
‘’END’’, les expressions des opérations du circuit se trouvent entre elles. Ces expressions sont des
instructions qui s’exécutent en concurrence contrairement à un langage informatique comme le langage C,
où les instructions s’exécutent séquentiellement.
Exemple 2

1. Quel est le nom des bibliothèques utilisées ?


2. Quelles sont les entrées et les sorties de la fonction ?
3. Représenter le schéma fonctionnel de la fonction.
4. Quel est le nom de l’entité ?
5. Quel est le nom de l’architecture ?
6. Représenter le schéma structurel de la fonction.

Réponse

2.1. Les bibliothèques utilisées sont ieee.std_logic_1164, work.std_arith.


2.2. Les entrées de la fonction sont A, B, la sortie est S.
2.3. Schéma fonctionnel de la fonction. A
S
B PORTE

P a g e 18 | 37
Circuits Programmables FPGA S. Haroun

2.4. Le nom de l’entité est PORTE.


A
2.5. Le nom de l’architecture est ARCH_PORTE. S
2.6. Schéma structurel de la fonction. B &

Exemple 3 : Comparateur 1 bit


Les entrées du comparateur sont : A, B. Les sorties du comparateur sont : EG (égale), PG (plus grand),
PP (plus petit). Table de vérité du et équations booléennes du comparateur :

Le schéma du circuit du comparateur :

La description du comparateur en langage VHDL :

P a g e 19 | 37
Circuits Programmables FPGA S. Haroun

Exemple 4 Additionneur complet 1 bit :


Les entrées de l’additionneur sont : A, B, Ri.
Les sorties de l’additionneur sont : S (somme), Rout (retenue).
Table de vérité et équations booléennes de l’additionneur :

Le code VHDL de l’additionneur :

 Les signaux intermédiaires :


Les signaux intermédiaires correspondent aux connexions qui se trouvent à l’intérieur d’un circuit. Pour
bien comprendre la notion et l’utilisation de ces signaux, prenons l’exemple de notre additionneur complet
1 bit. On peut le concevoir à partir de deux demi-additionneurs et une porte logique OR.
Le schéma du circuit de l’additionneur :

P a g e 20 | 37
Circuits Programmables FPGA S. Haroun

Le code VHDL d’un additionneur complet 1 bit en utilisant les signaux intermédiaires devient :

4.3. Les objets et leurs types


4.3.1. Les principaux objets manipulés
Un objet dans un programme VHDL appartient à l’une des quatre classes connues du langage, classe qui
est précisée lors de la déclaration (obligatoire) de l’objet. Plusieurs objets de la même classe et du même type
peuvent être déclarés simultanément au moyen d’une liste d’identificateurs. On présentera ici trois objets à
savoir : les constantes, les signaux, et les variables.
a) Les constantes
Une constante peut être assimilée à un signal interne (au circuit) auquel est associée une valeur fixe et
définitive (non modifiables au cours de l’exécution d’un programme). Elles permettent d'apporter une plus
grande lisibilité du code. La constante peut être de tout type.
Exemples :

Elles sont généralement initialisées au moment de leur déclaration. Cette déclaration se situe dans la partie
déclarative d’une entité, d’une architecture, d’un processus, d’un bloc, d’un paquetage ou d’un sous-
programme.

b) Les Signaux
En VHDL, Les signaux sont spécifiques à la description matérielle, c.-à-d. le signal est une information
qui existe physiquement dans le circuit, ou ils représentent les fils d’interconnexion entre les différents
composants sur la carte.

P a g e 21 | 37
Circuits Programmables FPGA S. Haroun

Exemple :

Un signal se déclare dans l’univers concurrent : zones déclaratives d’une architecture (le cas le plus
fréquent), d’une entité, d’un bloc ou d’un paquetage.

c) Les variables
Une variable est un objet capable de retenir une valeur pendant une durée limitée. Les variables apportent
une aide précieuse dans les processus de description et permettent de décrire la nature d'évolution des signaux
dans des structures de programmation séquentielles, conditionnelles ou répétitives (elles ne peuvent être
employées qu’à l’intérieur d’un process).
Par opposition à un signal, une variable n’est pas une liaison physique, et n’est pas une information
synthétisable (elle ne laisse aucune trace après synthèse).
Exemple :

Les variables doivent toujours être déclarées, dans la zone déclarative des modules séquentiels d’un
programme i.e. les processus ou les sous-programmes (fonctions ou procédures).
Ci-dessous deux exemples de déclarations de variables faite dans une fonction et dans un processus :

4.3.2. Les Types et sous-types de données


Comme la plupart des langages structurés, le VHDL impose de typer les données à manipuler. Tout objet
utilisé dans une description doit au préalable être déclaré et associé à un type. Les types couramment utilisés
sont les types scalaires, composites et fichiers. L’utilisation des types accès et protégés est marginale. A
partir de types de base, le langage prévoit de définir des sous-types.
a) Les types « scalaires »
Les types scalaires dont la valeur est composée d'un seul élément sont classés en type entier (Integer),
flottant (Real), physique (Time), et énumérés.
 Les types entiers (Integer) : Ces des types dont les valeurs sont des entiers. La norme VHDL précise
que cet intervalle doit au minimum aller de – (231-1) à (231-1). Ce type contient deux sous-types :
 Les types Réels (REAL) : Ce sont des types dont les valeurs sont des réels. La norme VHDL précise
que cet intervalle doit au minimum aller de – (1038) à (1038).
 Les types physiques : Le seul type physique prédéfini est le type Time. Un type physique est défini
par son intervalle de variation, par son unité de base et par des unités multiples éventuelles. La plage

P a g e 22 | 37
Circuits Programmables FPGA S. Haroun

de variation d’un Time dépend de la machine sur laquelle est compilée la description VHDL. Quelle
que soit la machine, elle inclue la plage –2147483647 à +2147483647.
La déclaration du type time se trouve dans le package standard.

 Les types énumérés : les variables et signaux de types énumérés prennent un nombre fini et restreint
de valeurs parfaitement connues c.-à-d. les valeurs qu’il peut prendre sont énumérées.
Les types prédéfinis dans le package standard sont les types Boolean, Bit, Character et Severity_level.
- Type BOOLEAN : Défini comme (False, True).
- Type BIT : Une grandeur de type BIT peut prendre deux valeurs : ( '0' , '1' ).
- Type STD_LOGIC : possède neuf états (‘0’, ‘1’, ‘Z’, ‘U’, ‘X’, ‘W’, ‘L’, ‘H’, ‘-‘).

Les valeurs ‘0’ et ‘L’ sont équivalentes pour la


synthèse, tout comme les valeurs ‘1’ et ‘H’.

Les valeurs ‘U’, ‘X’ et ‘W’ ne sont utilisables que


pour la simulation d’un design.

- Type CHARACTER : Les types de données « caractère » en VHDL sont similaires à ceux d’un
langage de programmation de haut niveau, ils peuvent être utilisés pour représenter une chaine de
caractères (…,’A’, ‘B’, ‘C’,…’0’, ‘1’, ‘2’,…).
- Type SEVERITY_LEVEL : Ce type de données est particulier, il possède quatre valeurs possibles :
(‘NOTE’, ‘WARNING’, ‘ERROR’, ‘FAILURE’)
Il est très utile d’utiliser ce type de données lors des simulations, par exemple, pour demander au
simulateur d’arrêter la simulation lorsqu’il détecte une erreur.

b) Les types « composés »


Le type « composés » représente un ensemble de valeurs, il est divisé en deux classes :
 Les types « composés » tableaux (ARRAY) : Un objet de type tableau (ARRAY) est un ensemble
d’un ou de plusieurs éléments du même type.
On accède à l’élément d’un tableau par un ou plusieurs indices.
Exemple d’une déclaration d’un tableau :

P a g e 23 | 37
Circuits Programmables FPGA S. Haroun

La déclaration du tableau ci-dessus indique que le tableau dont le nom est « Mon_Tableau » est constitué
de 16 éléments, où chaque élément est du type std_logic. On peut associer un objet de type «
Mon_Tableau » comme suit :

Remarque : Généralement les tableaux à deux dimensions (matrices) ne sont pas supportés par les outils
de synthèse, mais ils sont utiles pour décrire les tests de stimuli, les éléments de mémoires, ou autre donnée
qui requièrent une forme de tableaux à deux dimensions.
Quelques exemples de déclarations des tableaux unidimensionnels et bidimensionnels :

 Les types « composés » articles (RECORD) : Un objet de type article (RECORD) est un ensemble
d’éléments appelé champs, qui peuvent être de même type ou de types différents.
Exemple d’une déclaration d’un article :

L’article ci-dessus dont le nom est « Mon_Article » est constitué de trois champs (clock, data et x).
c) Les types « accès » (Access) : Ces types fournissent des références vers des objets de la même
manière que les pointeurs qui fournissent des références vers des données dans un langage de programmation
de haut niveau.
d) Les types « fichiers » (File) : Ce sont des objets de référence qui contiennent une séquence de
valeurs.
 Les sous-types
Les valeurs de chaque type de données se trouvent dans un intervalle défini, par exemple l’intervalle de
type de données entier (INTEGER) est [-2147483647, +2147483647].
Le langage VHDL nous permet de spécifier un sous-ensemble de valeurs d’un type, par exemple la
déclaration suivante crée un objet de type entier qui ne peut avoir que des valeurs positives allant de 0 à 255:

Remarquez la déclaration « range », cette dernière permet de vérifier lors de la synthèse et de la simulation
que la valeur d’un objet n’est pas en dehors de son intervalle de variation.
On peut déclarer un sous-type d’un type de données, par exemple la déclaration ci-dessous crée un sous-
type (Short) du type scalaire entier (Integer) avec un intervalle limité :

P a g e 24 | 37
Circuits Programmables FPGA S. Haroun

4.4. Les Operateurs et les attributs


Le langage VHDL nous permet de faire plusieurs opérations sur les objets, suivant leurs types et le type
du résultat de l’opération.
4.4.1. Les opérations logiques : Les opérations logiques sont utilisées pour décrire des opérations
booléennes, ou pour effectuer des opérations au niveau des bits.

4.4.2. Les opérations relationnelles : Les opérations relationnelles testent les valeurs relatives de types
scalaires. Le résultat d’une opération relationnelle est toujours une valeur booléenne TRUE ou FALSE.

4.4.3. Les opérations d’addition : Les opérations d’addition peuvent être utilisées pour décrire des
fonctions arithmétiques ou des opérations de concaténations.

4.4.4. Les opérations de multiplication : Les opérations de multiplication peuvent être utilisées pour
décrire des fonctions arithmétiques ou de types numériques.

4.4.5. Les opérations de signe : Les opérations de signes sont utilisées pour spécifier le signe (positif ou
négatif).

4.4.6. Les opérations de décalage : Les opérations de décalage permettent de faire des opérations de
décalage ou de rotations au niveau des bits ou d’objet de type booléens.

P a g e 25 | 37
Circuits Programmables FPGA S. Haroun

4.4.7. Autre opérations : Les opérations d’exponentiation, ou de valeur absolue peuvent être appliquées à
des objets de type numérique.

4.4.8. Les attributs :


Un attribut est une caractéristique du VHDL qui permet d’extraire des informations supplémentaires à
propos d’un type de données ou d’un signal.
Il y’a deux classes d’attributs : les attributs prédéfinis et les attributs utilisateurs.
Utilisation : on spécifie le nom du type ou du signal suivi d'une apostrophe puis du nom de l'attribut
affecté d'éventuelles grandeurs d'entrées.
a) Attributs associés aux types
Pour illustrer cette classe d'attributs, les types énumérés suivants seront utilisés :

Remarque : on définit la position d'une valeur valide pour un type par la valeur 0 pour la grandeur définie
à gauche. La seconde valeur possède la position 1 . . .
 Cas des types et sous-types énumérés

 Cas de tous les types et sous-types scalaires

Il existe des attributs supplémentaires permettant de retrouver les caractéristiques d'un type vectoriel (ou
d'un tableau de dimension x d'une façon générale). Pour les tableaux, les attributs left, right, high et low
existent aussi mais renvoie un indice (position dans le tableau).

P a g e 26 | 37
Circuits Programmables FPGA S. Haroun

Note : ce dernier tableau utilise pour les exemples le tableau TAB_ENTIER de dimension 1 seulement ce
qui explique que la valeur donnée à x est toujours 1.
b) Attributs associés à un signal
Les attributs associés à un signal permettent de mieux connaître la façon dont évolue ce signal (exemple :
détection de front montant ou descendant, changement d'état . . . ). Afin de comprendre le fonctionnement
de ces attributs, il est nécessaire de préciser ce qu'est une Transaction.
Définition : une transaction sur un signal est une opération modifiant ou affirmant la valeur de ce signal
pendant le cycle de simulation en cours.

P a g e 27 | 37
Circuits Programmables FPGA S. Haroun

4.5. Assignation conditionnelle et assignation sélectionnée des signaux


Les instructions d’assignation conditionnelles et d’assignation sélectionnées aux signaux sont exécutées
en concurrence. Leurs comportements sont similaires aux instructions IF et CASE qu’on verra par la suite,
qui ont quant à eux, des instructions qui s’exécutent séquentiellement.
4.5.1. Assignation conditionnelle :
Le format d’une assignation conditionnelle des signaux est le suivant :
Signal_1<= valeur_expression_1 WHEN choix_1 ELSE
valeur_expression_2 WHEN choix_2 ELSE

valeur_expression_n ;

Exemple : Soit un multiplexeur 2 vers 1. Il a comme entrées A, B, SEL, et comme sortie S.

Avec l’assignation conditionnelle des signaux, la description en VHDL de ce multiplexeur est la suivante :

4.5.2. Assignation sélectionnée :


Le format d’une assignation sélectionnée des signaux est le suivant :
WITH sélecteur SELECT
Signal_1 <= valeur_expression_1 WHEN choix_1,
valeur_expression_2 WHEN choix_2,
valeur_expression_3 WHEN choix_3,

valeur_expression_n WHEN OTHERS ;

Exemple : Reprenons le multiplexeur 2 vers 1 précédent.


Avec l’assignation de sélection des signaux, la description en VHDL du multiplexeur est la suivante :

P a g e 28 | 37
Circuits Programmables FPGA S. Haroun

Remarque :
Dans l’assignation conditionnelle des signaux, il n’y a pas de point-virgule après le ELSE.
Dans l’assignation de sélectionnée des signaux, il faut faire attention à ne pas oublier la virgule à la fin de
chaque expression de choix, et ne pas oublier de spécifier l’expression à exécuter si aucun choix n’a été
trouvé (WHEN OTHERS).

4.6. Les différents styles de descriptions d’une architecture


En VHDL, il existe trois styles de descriptions différents d’une architecture qui sont
- Description par flot de données.
- Description comportemental (appelée aussi procédural).
- Description structurelle.
Il existe aussi des styles de descriptions mixtes, ces derniers combinent les trois styles de descriptions
citées auparavant, et enfin une description très importante pour la simulation qui est l’architecture de test.
4.6.1. Description par flot de données :
C’est une description qui décrit la façon dont les données transitent à l’intérieur d’un circuit. Elle se base
sur des expressions booléennes (les opérateurs logiques) et des fonctions de sorties en fonction des entrées.
Prenons comme exemple un multiplexeur 4 vers 1 et décrivons-le avec le style de description flot de
données.

P a g e 29 | 37
Circuits Programmables FPGA S. Haroun

4.6.2. Description comportementale :


Appelée aussi description procédurale, elle décrit le comportement d’un circuit selon des conditions (IF),
des cas (CASE, WHILE), et des boucles (FOR).
C’est une description qui comporte des processus (PROCESS) qui s’exécutent en parallèles. Les
instructions à l’intérieur d’un processus s’exécutent séquentiellement.
Il faut bien faire la différence entre les modes d’exécutions parallèles et séquentielles.
 Le PROCESS
On utilise le PROCESS pour faciliter la modélisation d’un système. On peut le considérer comme une
boite où il y’a des instructions à l’intérieur qui s’exécutent séquentiellement comme présenté sur la Figure.
Ces PROCESS comportent une grande variété de construction, mais il faut faire attention quand on les
utilise car beaucoup d’entre eux n’ont pas une homologie matérielle claire, et conduisent souvent à des
implémentations complexes, ou ne peuvent pas être synthétisés dans le cas où ils sont mal codés.
Les PROCESS sont exécutés en concurrence (parallèle).

Un PROCESS comprend une liste appelée, liste de sensibilité. Cette liste contient les noms des signaux
qui activent ce PROCESS.
Exemple :

La liste de sensibilité de ce PROCESS est (A, B). L’instruction dans le PROCESS ne s’exécute que
lorsqu’il y’a un changement d’état dans le signal A ou B. Ainsi, à chaque changement d’état du signal A ou
B, l’instruction S <= A and B est exécutée.

P a g e 30 | 37
Circuits Programmables FPGA S. Haroun

 Les variables et les constantes :


On a vu qu’en VHDL il y’a trois types d’objet ; les signaux, les variables et les constantes.
Une variable est un objet auquel on peut affecter, à tout moment, la valeur qu’on désire, elle ne peut être
déclarée qu’à l’intérieur d’un PROCESS.
Exemple de déclaration des variables :

Une constante permet de paramétrer une valeur non modifiable lors de l’exécution de la description, elle
peut être déclarée dans un PROCESS (constante locale), ou en dehors de celui-ci (constante globale).
Exemple de déclaration des constantes :

Dans le code ci-dessus, la constante de la ligne 11 est une constante globale, déclarée en dehors du
PROCESS, contrairement à la ligne 15, où elle est locale au PROCESS.
Comparaison entre variable et signal :

a) Description avec l’instruction IF :


La description avec l’instruction if commence avec le mot réservé IF et se termine avec les deux mots
réservés END IF ; (remarquer l’espace entre END et IF suivie d’un point-virgule ;) ensuite vient la
condition, suivie par le mot réservé THEN.

P a g e 31 | 37
Circuits Programmables FPGA S. Haroun

Exemple 1 : Exemple 2 :

Dans ce 2me exemple, il y’a un signal nommé « s » qui dépend de la valeur du signal nommé « a ». Les
tests se font séquentiellement. Le signal « s » recevra le niveau logique ‘1’ si la valeur du signal « a » sera
supérieure à 5, si cette dernière sera inférieure à 3, alors le signal « s » recevra le niveau logique‘0’. Si par
contre, aucune des conditions précédentes ne seront satisfaites alors le signal « s » recevra l’état de la haute
impédance.
Exemple pratique : On étudie les mêmes circuits vus précédemment, pour qu’on puisse faire la différence
entre les différents styles de descriptions d’une architecture en VHDL.
Soit un multiplexeur 4 vers 1 vue précédemment. Sa description en VHDL est donnée par le listing suivant :

b) Description avec l’instruction CASE :


La description avec l’instruction case est utilisée lorsque la valeur d’un signal peut être utilisée pour
choisir entre un certain nombre d’actions.
Cette description débute avec le mot réservé CASE suivi par une instruction, et le mot-clé IS.
L’instruction entre CASE et IS, renvoie une valeur qui correspond à un des choix qui se trouvent dans les
déclarations WHEN et OTHERS.

P a g e 32 | 37
Circuits Programmables FPGA S. Haroun

Important : La description avec l’instruction CASE doit obligatoirement avoir le choix OTHERS à la fin si
toutes les valeurs de l’expression ne sont pas énumérées.
Exemple : On donne dans le listing 3.3 une autre architecture de l’entité mux_4v1, décrit avec la
description CASE.

c) Description avec les boucles (loop) --- Répétitions itératives (for) :


En VHDL, les boucles sont utilisées quand il y’a répétition d’une opération. Les répétitions peuvent être
itératives (for), conditionnelles (while), et infinie (loop).
La syntaxe simplifiée d’une boucle FOR est :

La boucle FOR est basée sur un indice, et répète les instructions séquentielles pour un nombre fixe
d’itérations (intervalle_boucle).
Exemple : L’utilisation de la boucle for est montré par un exemple simple : description d’un circuit XOR
de 4 bits.

Commentaire : Le nombre d’itérations de la boucle est 4 (3 downto 0).


L’indice de la boucle est I, ce dernier est local (c’est-à-dire qu’il n’appartient qu’à la boucle) et n’a pas besoin d’être
déclarée.

P a g e 33 | 37
Circuits Programmables FPGA S. Haroun

L’indice prends toujours la valeur qui est à gauche dans l’intervalle d’itération, dans notre exemple,
l’indice I vaudra 3 dans la première itération, 2 dans la deuxième itération, 1 dans la troisième itération, et
enfin 0 dans la quatrième itération.
d) Description avec les boucles (loop) --- Répétitions conditionnelle (while) :
La syntaxe simplifiée d’une boucle WHILE est :

La boucle WHILE est une variante de la boucle for, mis à part que l’incrémentation de l’indice de la
boucle WHILE se fait tant que la condition booléenne associée est vraie.
Exemple : L’utilisation de la boucle WHILE est démontré par le même exemple vu avec la boucle FOR
(description d’un circuit XOR de 4 bits).

Commentaire : L’indice de la boucle est la variable locale I qu’on a initialisé au pare avant à 0 :

Le nombre d’itérations de la boucle est 4 .


L’instruction ;va s’exécuter tant que la condition sera vrai (c’est-à-dire tant que
la variable I sera strictement inférieure à 5).

4.6.3. Description structurelle :


Lorsqu’on a un système électronique composé, on peut structurer et séparer ces composants en des blocs
plus petits pour les décrire plus simplement. L’avantage d’une telle description est la simplicité et la rapidité
de la synthèse.
Pour comprendre le principe de cette description, prenons comme exemple l’additionneur complet 1 bit
de la figure ci-contre. Cet additionneur est composé de deux demi-additionneurs et une porte logique OR.
Ces trois éléments peuvent être considérés comme des blocs.

P a g e 34 | 37
Circuits Programmables FPGA S. Haroun

Chaque bloc est appelé « component » (composant), et est une instance du modèle.
Pour différencier ses derniers, chaque instance à un nom distinct.
Chaque bloc doit être décrit séparément (c’est-à-dire avoir son entité et l’architecture associée).

Description VHDL d’une porte logique OR. Description VHDL d’un demi-additionneur 1 bit.

Dans l’architecture de l’additionneur complet 1 bit, il faut déclarer les composants (component) utilisés,
ainsi que leurs broches d’entrée-sortie pour faire les interconnexions nécessaires.

Nous avons besoin des signaux intermédiaires pour décrire l’assemblage des instances utilisées.
 Instanciation :
Il s’agit de mettre en correspondance chaque broche de chacune des instances des composants avec les
ports auquel il est connecté. Il y’a trois types d’instanciation :
- Instanciation par position
- Instanciation par nom
- Instanciation mixte

P a g e 35 | 37
Circuits Programmables FPGA S. Haroun

a) Instanciation par position :


L’instanciation par position consiste à interconnecter pour chaque instance, les signaux connectés à ses
broches exactement selon l’ordre choisi dans la déclaration « component ».

Description structurelle d’un additionneur complet 1 bit avec instanciation par position.

b) Instanciation par nom :


L’instanciation par nom consiste à interconnecter pour chaque instance, les signaux connectés à ses
broches sans respecter l’ordre choisi dans la déclaration « component ».
Il faut cependant utiliser le symbole « => » pour la correspondance entre les broches de l’instance et le
signal auquel elle est connectée.
c) Instanciation mixte :
L’instanciation mixte permet d’utiliser les instanciations par position et par nom en même temps, mais
dans ce cas-là, l’instruction « port map » autorise une association par position pour commencer, ensuite une
association par nom pour finir. On ne peut pas faire le contraire.

P a g e 36 | 37
Circuits Programmables FPGA S. Haroun

Description structurelle d’un additionneur complet 1 bit avec instanciation par nom.

Description structurelle d’un additionneur complet 1 bit avec instanciation mixte

P a g e 37 | 37

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