Circuits Numériques Programmables Et VHDL-2024-2025

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 161

Licence d’éducation : Spécialité Enseignement

Secondaire- Sciences industrielles


S5

Module : Circuits Numériques Programmables et Langage VHDL

Démarches didactiques :
• Cours magistraux (présentations PowerPoint ) +TD+ TP
• Mini- projets

Mode d’évaluation :
• 2 devoirs surveillés: 1 Contrôle continu (C.C) et un
Examen Final

Note de module = 0,3*(C.C) +0,2*(TP)+ 0,5*(EF)

Pr. Houssam AMIRY


H. AMIRY 24/10/2024 1
Objectifs du module
L’objectif principal de ce cours est de, à partir d’un cahier des charges initial, concevoir un circuit
numérique en VHDL synthétisable et le tester sur une plate-forme FPGA.

Pour ce faire, vous allez :

✓ Apprendre les bases de la conception d’un circuit numérique (combinatoire et/ou séquentiel);

✓ Maitriser le langage de description de matériel VHDL;

✓ Programmer des circuits FPGA sous Altera Quartus;

✓ Spécifier des composants en langage VHDL;

✓ Simuler des composants en VHDL;


✓ Optimiser la synthèse;
✓ Maîtriser les architecture et fonctionnement des circuits intégrés;
✓ Prédire les performances et ressources nécessaires;
✓ Produire les fichiers de configuration par synthèse automatique.

H. AMIRY 24/10/2024 2
PLAN

Introduction du module

Partie 1:

1. Introduction aux circuits intégrés

2. Conception d’un circuit intégré

3. Les circuits logiques programmables (PLD)

Partie 2:

VHDL: Langage de description structurelle et comportementale de la conception des

dispositifs matériels en électronique numérique (ASICs, CPLD, FPGA, logique câblée)

H. AMIRY 24/10/2024 3
Introduction
Les trois voies de recherche dans le secteur de la microélectronique
Intégration de plusieurs fonctions sur une circuit: La technologie CMOS ne suffit pas à expliquer le
succès de la microélectronique. C'est l'ajout de fonctions non digitales (telle que la radiofréquence, les
composants haute tension, l'électronique de l'éclairage et les chargeurs de batterie) qui a joué un rôle
décisif dans la « pervasion » de la microélectronique

Augmentation de nombre des


transistors dans les circuits
(Loi de MOORE):
- Diminuer la taille de
transistor;
- Augmenter le nombre des
transistors dans le circuit;
- augmente ainsi le nombre
d'opérations réalisées par
seconde tout en réduisant la
consommation en énergie
des transistors;
- Diminuer le coût de
fabrication.

Recherches sur les technologies alternatives au CMOS: la spintronique, la photonique, l'électronique


moléculaire et l'électronique quantique.

H. AMIRY 24/10/2024 4
Partie 1

1. Introduction aux circuits intégrés

2. Conception d’un circuit intégré

3. Les circuits logiques programmables (PLD)

H. AMIRY 24/10/2024 5
1. Introduction aux circuits intégrés

Le circuit intégré (CI), aussi appelé puce électronique, est un composant électronique, basé sur un semi-

conducteur, reproduisant une, ou plusieurs, fonction(s) électronique(s) plus ou moins complexe(s), intégrant souvent

plusieurs types de composants électroniques de base dans un volume réduit (sur une petite plaque), rendant le circuit

facile à mettre en œuvre.

H. AMIRY 24/10/2024 6
1. Introduction aux circuits intégrés
Du transistor au circuit intégré

✓ 1947 : Le physicien américain William Schockley


(1910-1989) a inventé le transistor (prix nobel de
physique en 1956).

✓ 1958 : Le physicien américain Jack Kilby (1923- 2005) a conçu


le premier C.I. en utilisant le germanium comme un matériau
semi-conducteur de base (prix nobel de physique 2000).

✓ Le physicien Robert Norton Noyce (1927-1990) a inventé


de son côté, six mois plus tard, un C.I. en utilisant le
silicium comme un matériau semi-conducteur de base.

H. AMIRY 24/10/2024 7
1. Introduction aux circuits intégrés
Du circuit intégré au microprocesseur

✓ La création d’Intel par Robert Noyce, Gordon Moore et Andrew Grove en 1968:

- Première mémoire SRAM 256 bits à base de transistors MOSFET (1969)


- Premier microprocesseur : Intel 4004 (4 bits, 1971)
- L’Intel 8088 équipe les premiers PC d’IBM (1981)
- L’Intel 386 inaugure l’architecture IA-32 (1986)

✓ Autres constructeurs
- Motorola : le MC68000 (1980)
- AMD : seconde source pour les x86 (1981)
- Zilog : Z8000 (1979

H. AMIRY 24/10/2024 8
1. Introduction aux circuits intégrés
Catégories des circuits intégrés (1/2)
Il existe une très grande variété de ces composants divisés en deux grandes catégories: analogique et numérique.
✓ Les circuits intégrés analogiques (linéaires): Il s'agit de circuits travaillant avec des tensions pouvant prendre
différentes amplitudes.
Exemples: régulateurs de tension genre LM7812, amplificateurs opérationnels genre LM741 ou NE5532,
amplificateurs BF de type LM386 ou TDA2030.

Régulateurs de tension

H. AMIRY 24/10/2024 9
1. Introduction aux circuits intégrés
Catégories des circuits intégrés (2/2)
✓ Les circuits intégrés numériques (logiques): Il s'agit de circuits travaillant en tout (état 1) ou rien (état 0),
généralement avec des tensions d'entrée et de sorties égales à ou proche de leur tension d'alimentation.
Exemple: circuits de la famille SN74xx ou CD40xx, familles dans lesquelles on trouve des circuits assurant des
fonctions très diverses : simples portes logiques (NAND, OR, etc), diviseurs de fréquences, (dé)multiplexeurs,
mémoires vives et mémoires mortes, micro-processeurs.

H. AMIRY 24/10/2024 10
1. Introduction aux circuits intégrés
Evolution des circuits intégrés - loi de Moore (1/2)
Il existe une loi empirique, appelée loi de Moore, qui dit que la densité d’intégration dans les circuits intégrés
numériques à base de silicium double tous les 18 à 24 mois, à prix du circuit équivalent. Les conséquences de la loi
de Moore sont les suivantes :
✓ La longueur du canal L qui était égale à 10 mm dans les années 1970 a atteint 32 nm en 2010, ce qui fait un
facteur de réduction en surface de 3122 @ 100000 en 40 ans (car toutes les dimensions du transistor ont été
réduites de la même manière).
✓ Le nombre de transistors par circuits a encore plus augmenté à cause de l’accroissement de la taille des
puces qui atteint 600 mm2 (avec quelques millions de transistors par mm2). On pourrait atteindre facilement
un milliard de transistors par circuit (toujours en 2010).
✓ La fréquence de fonctionnement a augmenté d’un facteur 10000 environ entre 1970 et 2010.
La figure suivante montre une paire de transistor MOS canal N
et canal P qui forme la brique de base de la logique CMOS :

H. AMIRY 24/10/2024 11
1. Introduction aux circuits intégrés
Evolution des circuits intégrés - loi de Moore (2/2)

La loi de Moore s’est révélée remarquablement exacte jusqu'à ce jour et elle explique en grande partie
l’évolution de l’électronique numérique de ses origines à nos jours. Durant les années 60, les fonctions logiques
telles que les portes, les registres, les compteurs et les ALU, étaient disponibles en circuit TTL. On parlait de
composants SSI (Small Scale Integration) ou MSI (Medium Scale Integration) pour un tel niveau d'intégration.
Dans les années 70, le nombre de transistors intégrés sur une puce de silicium augmentait régulièrement.
Les fabricants mettaient sur le marché des composants LSI (Large Scale Integration) de plus en plus spécialisés.
Par exemple, le circuit 74LS275 contenait 3 multiplieurs de type Wallace. Ce genre de circuit n'était pas utilisable
dans la majorité des applications. Cette spécialisation des boîtiers segmentait donc le marché des circuits intégrés
et il devenait difficile de fabriquer des grandes séries. De plus, les coûts de fabrication et de conception
augmentaient avec le nombre de transistors. Pour toutes ces raisons, les catalogues de composants logiques
standards (série 74xx) se sont limités au niveau LSI.

H. AMIRY 24/10/2024 12
1. Introduction aux circuits intégrés
Evolution des Microprocesseur - loi de Moore

H. AMIRY 24/10/2024 13
1. Introduction aux circuits intégrés
Les familles des circuits intégrés numériques
Pour tirer avantage des nouvelles structures VLSI (Very Large Scale Integration), les fabricants développent
4 nouvelles familles :
✓ Les microprocesseurs et les mémoires RAM et ROM : les microprocesseurs et les circuits mémoires sont
attrayants pour les fabricants. Composants de base pour les systèmes informatiques, ils sont produits en très
grandes séries.
✓ Les ASSP (Application Specific Standard Product) : ce sont des produits sur catalogue qui sont fabriqués en
grande série. La fonction réalisée est figée par le constructeur, mais le domaine d’utilisation est spécifique à une
application. Exemple : un contrôleur Ethernet, un encodeur MPEG-4, …
✓ Les circuits programmables sur site (PLD: programmable logic device) : n'importe quelle fonction logique,
combinatoire ou séquentielle, avec un nombre fixe d'entrées et de sorties, peut être implantée dans ces circuits. A
partir de cette simple idée, plusieurs variantes d'architecture ont été développées (PAL, GAL, EPLD, FPGA, …).
✓ Les ASIC (Application Specific Integrated Circuit) : le circuit est conçu par l'utilisateur avec des outils de CAO,
puis il est réalisé par le fondeur.

H. AMIRY 24/10/2024 14
1. Introduction aux circuits intégrés
Les familles des circuits intégrés numériques
A l'heure actuelle, la plupart des circuits numériques
est issue de ces 4 familles. Cependant, certains
éléments simples du catalogue standard (famille 74)
sont toujours utilisés.
Plus simplement, on peut distinguer deux catégories
de circuits intégrés : les circuits standards et les
circuits spécifiques à une application :
✓ Les circuits standards se justifient pour de grandes
quantités : microprocesseurs, contrôleurs,
mémoires, ASSP, …
✓ Les circuits spécifiques sont destinés à réaliser
une fonction ou un ensemble de fonctions dans un
domaine d’application particulier.

H. AMIRY 24/10/2024 15
2. Conception d’un circuit intégré

La conception (ou le design) de circuits intégrés (ou puces électroniques) consiste à réaliser les nombreuses étapes
de développement (flot de conception ou design flow) nécessaires pour concevoir correctement et sans erreurs une
puce électronique.

H. AMIRY 24/10/2024 16
2. Conception d’un circuit intégré
Les étapes de conception
❑ Pour commencer la conception d’un circuit intégré il faut tout d’abord avoir un cahier des charges. Il doit

contenir :

✓ La fonction du circuit

✓ Les performances ou la qualité du produit

✓ Les contraintes

❑ Il faut ensuite choisir le type de technologie que l’on va utiliser, c’est-à-dire, quel type de transistor sera la base

des circuits intégrés : CMOS, JFET ..

❑ La plus utilisée est la technologie CMOS (Complementary Metal Oxide Semiconductor) du fait de son faible

encombrement et de son bon rendement.

H. AMIRY 24/10/2024 17
2. Conception d’un circuit intégré
Les étapes de conception
➢ Niveau système
Dans un premier temps le concepteur étudie la partie fonctionnement du système c’est-à-dire qu’il définit les
composants nécessaires sans réaliser les connexions électriques entre eux. Ceci ayant pour but de minimiser la
surface en utilisant le moins de composants possible.
Aussi le système est modélisé dans un langage de haut niveau : le langage C ou C++, cette étape a pour but de
valider en termes de performances l’architecture du système.

Niveau RTL (Register Transfer Level)


Après la validation de l’architecture du système, on décrit les combinaisons logiques entre les différents
composants. Cette étape est réalisée grâce à un autre langage de programmation appelé VHDL qui est
directement synthétisé par la suite pour réaliser la synthèse logique.

H. AMIRY 24/10/2024 18
2. Conception d’un circuit intégré
Les étapes de conception
➢ Niveau logique
La synthèse logique permet de transformer la description RTL en une description en portes logiques. Pour cela, le
concepteur choisit une bibliothèque de portes logiques spécifiques aux contraintes énoncées dans le cahier des
charges. Cette synthèse permet d’optimiser les équations logiques et de réaliser la liaison entre chaque bloc logique.
➢ Niveau physique
Une fois la synthèse logique terminée, un logiciel permet de passer du schéma logique en un « plan de masse »
(appelé aussi « floorplannig ») où sont placés chaque blocs fonctionnels et où ils sont reliés électriquement entre
eux.
Ensuite vient le placement et le routage des composants. Des algorithmes sont à disposition des
concepteurs car sans cela le placement et le routage des composants sont difficiles lorsque l'on a un système
complexe. Plusieurs techniques de placement de cellules existent. L’objectif est de hiérarchiser ce problème en
rassemblant les cellules fortement interconnectées dans des partitions.

H. AMIRY 24/10/2024 19
2. Conception d’un circuit intégré
Les étapes de conception

H. AMIRY 24/10/2024 20
2. Conception d’un circuit intégré
Cycle de fabrication des systèmes électroniques

H. AMIRY 24/10/2024 21
2. Conception d’un circuit intégré
Outils de base d'une chaîne d'IAO/CAO

H. AMIRY 24/10/2024 22
2. Conception d’un circuit intégré
Boucle de la vérification

Vérifications

H. AMIRY 24/10/2024 23
2. Conception d’un circuit intégré
L'ordinateur dans le domaine de la conception électronique
Dans le monde de la conception/fabrication électronique, de nombreuses tâches sont dites assistées par ordinateur:
I.A.O : Ingénierie Assistée par Ordinateur pour le développement de produits électroniques :
• prise en compte des spécifications du cahier des charges pour arriver au produit fini optimal répondant à ces
spécifications
• simulation fonctionnelle
• qualification
• Optimisation
C.A.O : Conception Assistée par Ordinateur pour l'implantation physique et le routage des cartes
C.F.A.O : Ingénierie Assistée par Ordinateur pour l'étude et le suivi des procédés de fabrication et tests de circuits
imprimés
• perçage par machine à commande numérique
• implantation automatique des composants
• tests IN-SITU

H. AMIRY 24/10/2024 24
3. Les circuits logiques programmables
Les circuits logiques programmables sont des circuits plus ou moins complexes remplaçant l’association de plusieurs
boîtes logiques. 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.
Les circuits logiques programmables permettent:
✓ La simplification de câblage
✓ De réduire l’encombrement
✓ La diminution des coûts
✓ La facilité d’utilisation
✓ La diminution du risque des pannes

H. AMIRY 24/10/2024 25
3. Les circuits logiques programmables

Le cahier des charges du développement d’un circuit programmable doit prendre en compte les paramètres suivants :
✓ Le coût de production
✓ Les performances
✓ La consommation
✓ L'intégration
✓ L'évolution du produit
✓ La maintenance
✓ La protection industrielle
Deux alternatives existent :
✓ Les ASIC (Application Specific integrated Circuits)
✓ Les circuits à réseaux programmables

H. AMIRY 24/10/2024 26
3. Les circuits logiques programmables
Quelles différences entre un ASIC et un PLD ?

H. AMIRY 24/10/2024 27
3. Les circuits logiques programmables

H. AMIRY 24/10/2024 28
3. Les circuits logiques programmables

Avantages des PLD:


✓ Implantation de certaines fonctions logiques complexes sur un seul circuit intégré.
✓ Réduction du nombre de circuits intégrés, de l’interconnexion entre les boîtiers et de la surface du circuit imprimé.
✓ Le nombre réduit de circuits intégrés et d'interconnexions limite les risques de pannes, ce qui entraîne une meilleure fiabilité.
✓ Les circuits logiques programmables offrent une certaine confidentialité dans la mesure où il est possible d’empêcher la
lecture de leur programmation.
✓ Réduction de coût et temps de développement.
✓ Le prototypage et temps de simulation accéléré.
✓ Des supports logiciels peu chers.
✓ Des produits éprouvés. (pas de vecteurs de test structurel)
Inconvénients des PLD:
✓ Un niveau d'intégration moindre aux ASIC.
✓ Une consommation plus élevée.
✓ Des prix importants et une faible disponibilité pour de grandes séries .

H. AMIRY 24/10/2024 29
3. Les circuits logiques programmables
Familles de PLD

H. AMIRY 24/10/2024 30
3. Les circuits logiques programmables
❑ PAL (Programmable Array Logic) : réseaux logiques programmables

✓ Développés au début des années 70 par MMI (ex-AMD)


✓ La programmation se fait par destruction de fusibles
✓ Aucun fusible n’est grillé à l’achat de la PAL

H. AMIRY 24/10/2024 31
3. Les circuits logiques programmables
PAL (Programmable Array Logic) : réseaux logiques programmables

✓ Les fusibles intactes sont représentés par une connexion


✓ Les fusibles détruits sont représentés par une absence de connexion
✓ Une croix représente un fusible intact.

H. AMIRY 24/10/2024 32
3. Les circuits logiques programmables
PAL (Programmable Array Logic) : réseaux logiques programmables
Que peut-on trouver dans une PAL??

Tout P.A.L. est constitué :


✓ D'entrées (Input): I1 à In avec 8<n<20.
✓ De sorties (Output) Ou d’entrées /sorties (I/O)
de type trois états:O1 à On ou IO1 à IOn avec
(2<n<15).
On trouve 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 desregistres:
RESET.

H. AMIRY 24/10/2024 33
3. Les circuits logiques programmables
PAL : Matrice de programmation

La plupart des P.A.L. sont constitués :

✓ Un ensemble de portes « ET » sur lesquelles


viennent se connecter les variables d’entrée et leurs
compléments.
✓ Un ensemble de portes « OU » sur lesquelles les
sorties des opérateurs « ET » sont connectées les
variables d’entrée.

H. AMIRY 24/10/2024 34
3. Les circuits logiques programmables
PAL : Structure de sortie
Il existe 3 structures de sortie qui peuvent-être aussi de entrées/sorties :
✓ Combinatoire
✓ Séquentielle
✓ Versatiles
➢ Entrées / Sorties combinatoires
Ces sorties 3 états sont rebouclées vers la matrice de fusibles. Une sortie peut donc servir de variable
intermédiaire. En mode haute impédance (la sortie étant inhibée), on peut utiliser une broche de sortie comme
étant une entrée. On parle alors d’entrée / sortie (I/O).

H. AMIRY 24/10/2024 35
3. Les circuits logiques programmables
PAL : Structure de sortie
➢ Entrées / Sorties séquentielles, à registre
Ces sorties utilisent une bascule D qui permet la logique séquentielle. Par contre, une sortie à registre ne
peut pas être utilisée comme entrée.

H. AMIRY 24/10/2024 36
3. Les circuits logiques programmables
PAL : Structure de sortie
➢ Entrées / Sorties des PAL versatiles (VPAL)

Le bloc de sortie des PAL versatiles permet de configurer (par programmation) le mode d’utilisation de la broche
de sortie :

H. AMIRY 24/10/2024 37
3. Les circuits logiques programmables

❑ GAL (Généric Array Logic): Réseau Logique Reprogrammable

L’appellation GAL est une marque déposée de LATTICE SEMICONDUCTOR qui a été la première
société à proposer sur le marché ce type de produits. D’autres marques proposent des équivalents
(compatibles) commercialisés sous le nom de PAL CMOS, E2PAL ou encore PAL EECMOS.
Les GAL sont des PAL effaçables électriquement, qui utilisent la technologie CMOS.

❑ EPLD (Erasable Programmable Logic Device)

Ces circuits ont une capacité en nombre de portes et en possibilités de configuration est supérieure
à celle des GAL. Historiquement, les premiers EPLD étaient des GAL effaçables aux U.V. Il existe maintenant
des EPLD effaçables électriquement. Les pLSI et ispLSI de LATTICE sont à mi-chemin entre les EPLD et les
FPGA

H. AMIRY 24/10/2024 38
3. Les circuits logiques programmables
❑ FPGA (Forecasting Programmable Gate Array)

✓ Apparus il y a seulement quelques années, les FPGA


sont assimilables à des ASIC programmables par
l’utilisateur.
✓ Ce sont de gros ensembles de blocs logiques
élémentaires (plusieurs milliers de portes) que
l’utilisateur peut interconnecter à loisir

H. AMIRY 24/10/2024 39
3. Les circuits logiques programmables
Choix des P.L.D

Les principaux critères de choix des P.L.D. sont:


- Vitesse de fonctionnement
- Nombre de portes
- Consommation
- Technologie
- Prix

H. AMIRY 24/10/2024 40
3. Les circuits logiques programmables
Les technologies des éléments programmables

On trouve les éléments programmables dans les blocs logiques des PLDs, afin de leur donner une fonctionnalité,
mais aussi dans les matrices d'interconnexions entre ces blocs. Un élément programmable peut être considéré
comme un interrupteur. Afin de respecter les contraintes imposées à l'ingénieur, les éléments programmables
doivent posséder plusieurs qualités :
✓ Ils doivent occuper une surface la plus petite possible (Ce point s'explique pour des raisons évidentes de coût.
Ceci est d'autant plus vrai que l'on désire en disposer d'un grand nombre).
✓ Ils doivent posséder une résistance de passage faible et une résistance de coupure très élevée.
✓ Ils doivent apporter un minimum de capacité parasite.
Les deux derniers points s'expliquent quant à eux pour des raisons de performance en terme de fréquence de
fonctionnement du PLD. Plus la résistance et la capacité sur le chemin d'un signal sont faibles, plus la fréquence
de ce signal peut être élevée.

H. AMIRY 24/10/2024 41
3. Les circuits logiques programmables
Les technologies des éléments programmables
Les technologies à fusibles:
Les fusibles sont grillés en appliquant des tensions élevées (12V)

Technologies maintenant abandonnées pour des raisons de manque de fiabilité. Le fait de "griller" les fusibles
provoque des perturbations qui peuvent affecter le reste du circuit. De plus, cette programmation est irréversible
et ne permet donc pas la re-programmabilité.
H. AMIRY 24/10/2024 42
3. Les circuits logiques programmables
Les technologies des éléments programmables
Les technologies à anti-fusibles:
un anti-fusible est un élément programmable qui à l'inverse des fusibles n'est passant qu'après programmation.
La connexion s’effectue en détruisant un diélectrique.
✓ Petite taille (grande capacité d’intégration)
✓ Basse impédance (rapidité)
✓ Technologie difficile à maîtriser
✓ Ne permettent pas la reprogrammation
Les technologies à EPROM/FLASH:
Il existe deux variantes de l'EPROM: Erasable Programmable Read Only Memory classique (EPROM) et
Electrically Erasable Programmable Read Only Memory (EEPROM).
✓ Petite taille (grande capacité d’intégration)
✓ Basse impédance (rapidité)
✓ Possibilité de reprogrammation à l’oisir

H. AMIRY 24/10/2024 43
3. Les circuits logiques programmables
Les technologies des éléments programmables
Les technologies à RAM statique -SRAM:

Elle fait appel à une phase de chargement de la configuration depuis l'extérieur


✓ Grande possibilité de programmation
✓ Technologie de type CMOS (très bien maîtrisée)
✓ Place importante
✓ Mémoire volatile (reprogrammation obligatoire)

H. AMIRY 24/10/2024 44
3. Les circuits logiques programmables
Les technologies des éléments programmables
Technologies utilisées par les différents fabricants:

H. AMIRY 24/10/2024 45
3. Les circuits logiques programmables
Les FPGA (Forecasting Programmable Gate Array)

Comme nous venons de le voir, les Les structures PAL sont à la base des CPLD et FPGA d’aujourd’hui
éléments programmable sont à la base
des caractéristiques des FPGA
Le choix d’un PLD dépend :
✓ de la densité d’intégration
✓ de la rapidité de fonctionnement
✓ de la facilité de mise en oeuvre
(programmation, reprogrammation…)
✓ de la possibilité de maintien de
l’information

H. AMIRY 24/10/2024 46
3. Les circuits logiques programmables
Les FPGA
Les CPLD (Complexe Programmable Logic Device) :
Ces circuits ont une capacité de portes et de configuration très largement supérieur aux PAL
✓ Macro-cellules composées :
- d’une zone de portes logiques
- d’un bascule
✓ Architecture identique aux PAL
✓ Equivalent à plusieurs PAL séparées par une zone
d’interconnexion
✓ 100 à 100000portes
✓ 16 à 1000 bascules

H. AMIRY 24/10/2024 47
3. Les circuits logiques programmables
Les FPGA

✓ Les FPGA à la différence des CPLD sont assimilables à des A.S.I.C. programmables par

l’utilisateur.

✓ La puissance de ces circuits est telle qu’ils peuvent être composés de plusieurs milliers voir millions

de portes logiques et de bascules. Les dernières générations de FPGA intègrent même de la

mémoire vive (RAM). Les deux plus grands constructeurs de FPGA sont XILINX et ALTERA.

✓ Ils sont composés de blocs logiques élémentaires (plusieurs milliers de portes) qui peuvent être

interconnectés.

✓ Critère de choix : vitesse de fonctionnement plus élevées

H. AMIRY 24/10/2024 48
3. Les circuits logiques programmables
Les FPGA
Structure interne d’un FPGA

Routage des signaux

Ressources globales

H. AMIRY 24/10/2024 49
3. Les circuits logiques programmables
Les FPGA
Structure interne d’un FPGA
BLE= Basic Logic Element
K Out
Inputs LUT D FF

Clock
Programmable Programmable
IO Logic (CLB)

BLE
#1
N
N
I Outputs
I
Inputs BLE
#N

Clock

Programmable
Routing

50
H. AMIRY 24/10/2024 50
3. Les circuits logiques programmables
Les FPGA

Structure interne d’un FPGA type XILINX

le FPGA est présenté pour la 1er fois par XILINX

avec des structure :

o blocs logiques configurables

o blocs d’I/O configurables

o des interconnexions entre blocs

configurables

H. AMIRY 24/10/2024 51
3. Les circuits logiques programmables
Les FPGA
Les types de blocs logiques dans les FPGA

Dans les FPGA les blocs sont interconnectés de différentes façons :


o des optimisations de routage sont possibles
o sélections de lignes ou colonnes
o canaux de routage rapide
Il existe 4 types de blocs logiques :
o Les macrocellules.
o Les blocs à multiplexeurs.
o Les LUT
o Les cellules symétriques

H. AMIRY 24/10/2024 52
3. Les circuits logiques programmables
Les FPGA
Les types de blocs logiques dans les FPGA
✓ Les cellules symétriques:
Blocs de petite taille servent à réaliser des fonctions logiques simples mais aussi
comme ressources de connexion
✓ Les blocs à multiplexeurs:
En venant programmer les entrées du multiplexeur et en pilotant les signaux de
sélection, il est possible de réaliser toutes les fonctions logiques (à autant
d'entrées que de signaux de sélection). Leur très petite taille est particulièrement
adaptée à la technologie anti-fusible.

H. AMIRY 24/10/2024 53
3. Les circuits logiques programmables
Les FPGA
Les types de blocs logiques dans les FPGA
✓ Les LUT (Look-Up Table) :
Les LUT sont un cas particulier des cellules à multiplexeur,
avec de 2 à 9 entrées et dont la technologie du point mémoire
est une technologie SRAM.
Une LUT de N entrées est une mémoire qui peut implémenter
n'importe quelle fonction booléenne de N variables. Les N
entrées sont utilisées comme adresse d'une mémoire de 2n
bits qui code la fonction booléenne à réaliser. On peut donc
réaliser 2n fonctions différentes avec une LUT à N entrées.
Les LUT sont des blocs logiques de très petite granularité
dans un CLP. Comme Les LUT possèdent une bascule de
sortie, les architectures à base de LUT sont beaucoup plus
riches en bascules que les architectures à macro-cellules.
H. AMIRY 24/10/2024 54
3. Les circuits logiques programmables
Les FPGA
Les types de blocs logiques dans les FPGA
✓ Les macro-cellules :
On retrouve dans certaines macro-cellules toute la complexité
d'un PAL.
Il y a en général un nombre réduit de macro-cellules dans un
EPLD, car ces cellules occupent une grande surface.
la macro-cellule présente plusieurs intérêts :
- grand nombre de variables d'entrées possibles
- grand nombre de termes de produits possibles

H. AMIRY 24/10/2024 55
3. Les circuits logiques programmables
Les FPGA
Les outils de développement

Deux Outils sont nécessaires à la programmation des FPGA :


- Le système de développement
- Le programmeur

H. AMIRY 24/10/2024 56
3. Les circuits logiques programmables
Les FPGA
Les outils de développement
Ces systèmes produisent une table représentant les fusibles à détruire en fonction des équations logiques,
diagramme d'états et tables de vérités écrit dans le langage propre au système, c'est le rôle du compilateur ou
synthétiseur.
La description du fonctionnement des circuits peut se faire de plusieurs façons, soit :
✓ Par un schéma à base de fonctions logiques élémentaires (Portes ET,OU,NON, … bascules, compteurs,
registres à décalages).
✓ En utilisant un langage de description comportementale H.D.L. (Hardware Description Language). Les plus
anciens sont PALASM, ORCAD/PLD et le plus connu et utilisé est sans conteste ABEL (utilisé par la plus part
des systèmes de développements). Enfin les langages dit de haut niveau, VHDL ( Very high speed Hardware
Description Language) et VERILOG sont en général utilisés pour des circuits complexes. Le langage VHDL
est très utilisé en Europe.

H. AMIRY 24/10/2024 57
3. Les circuits logiques programmables
Les FPGA
Les outils de développement
Ces systèmes produisent une table représentant les fusibles à détruire en fonction des équations logiques,
diagramme d'états et tables de vérités écrit dans le langage propre au système, c'est le rôle du compilateur ou
synthétiseur.
La description du fonctionnement des circuits peut se faire de plusieurs façons, soit :
✓ Par un schéma à base de fonctions logiques élémentaires (Portes ET,OU,NON, … bascules, compteurs,
registres à décalages).
✓ En utilisant un langage de description comportementale H.D.L. (Hardware Description Language). Les plus
anciens sont PALASM, ORCAD/PLD et le plus connu et utilisé est sans conteste ABEL (utilisé par la plus part
des systèmes de développements). Enfin les langages dit de haut niveau, VHDL ( Very high speed Hardware
Description Language) et VERILOG sont en général utilisés pour des circuits complexes. Le langage VHDL
est très utilisé en Europe.

H. AMIRY 24/10/2024 58
Partie 2

V Very high speed


Langage de description structurelle et
H Hardware
comportementale de la conception des
D Description dispositifs matériels en électronique numérique
L Language

H. AMIRY 24/10/2024 59
Partie 2: Introduction
Historique

✓ 1980: le département de défense américain lance un appel d’offre pour un langage qui permettrait
de décrire tous les systèmes électroniques utilisés. Motivation affichée: réutilisabilité et réduction
des coûts de conception.
✓ 1983: trois compagnies (Intermetics, IBM, Texas Instruments) commencent le développement.
✓ 1985: première version officielle de VHDL (version 7.2).
✓ 1986: VHDL est donné à IEEE pour en faire un standard.
✓ 1987: Standard IEEE 1076-1987.
✓ 1993: Standard IEEE 1076-1993.
✓ 1999: Standard IEEE 1076.6-1999

H. AMIRY 24/10/2024 60
Partie 2: Introduction
Qu’est ce que VHDL
Langage de haut niveau conçu pour permettre :
✓ La modélisation d'ensembles électroniques complexes
o Langage de haut niveau facilitant la description comportementale des modèles.
o Fort niveau d'abstraction. La faisabilité matérielle n'est pas nécessairement prise en compte à ce stade.
o Le partitionnement en plusieurs sous-ensembles permet de sub-diviser un modèle complexe en un certain nombre
d'éléments prêts à être développés séparément.
✓ La simulation :

o Jeu d'instructions particulièrement puissant pour : Génération de stimuli et capture de résultats.

o Les modèles comportementaux (spécifications) sont simulés afin de vérifier leur cohérence.

o L'ensemble modèle comportemental + fichiers de simulation (test benches) constituent à la fois un cahier des charges
et un test de recette.

o Objectif: Le comportement du modèle (spécifications) et du design implémenté physiquement doivent être identiques.
✓ Synthèse logique :
o Permet l'implémentation physique d'un design, grâce à l'utilisation d'outils dits de " synthèse ".
o Concerne seulement un sous-ensemble du jeu d'instructions du langage VHDL.
o De nombreuses constructions utilisables en modélisation ou en simulation ne peuvent pas être synthétisées.
H. AMIRY 24/10/2024 61
Partie 2: Introduction
Qu’est ce que VHDL
❑ VHDL est utilisé pour:
✓ Décrire des circuits numériques
✓ Décrire des machines à états
✓ Préparer des signaux de test pour simuler cette écriture
❑ Langage pour décrire la structure et le comportement de systèmes électroniques, en particulier des circuits
digitaux (ASIC, FPGA, . . . ).
❑ Standard IEEE.
❑ Indépendant de la technologie cible.
❑ Indépendant de la méthodologie de conception.
❑ Indépendant des outils de conception.
❑ Langage très général --> très complexe (--> dépendent de tout!)
❑ VHDL n’est pas un langage de programmation --> c’est un langage de description (spécification) de
système.

H. AMIRY 24/10/2024 62
Partie 2: Introduction
Qu’est ce que VHDL

Une fois le programme en VHDL est écrit:


✓ Synthèse logique : générer des
fonctions logiques à partir du
programme
✓ Implémentation : adapter la logique
synthétisée à la cible (FPGA, CPLD)
✓ Génération : Générer un fichier binaire
à télé-charger sur le « device »

H. AMIRY 24/10/2024 63
Partie 2: Introduction
VHDL pour la conception

✓ La conception matérielle est traditionnellement réalisée en modélisant le système


dans un langage de description matériel (VHDL).

✓ Un «compilateur» FPGA (outil de synthèse) génère une netlist,

✓ Mappage à la technologie FPGA.


✓ Placement des composants sur la puce.
✓ Acheminement des signaux à travers le réseau d'interconnexion.

H. AMIRY 24/10/2024 64
Structure du VHDL
En VHDL, tout composant (dans le sens logiciel) est décrit sous deux aspects :
✓ L'interface avec le monde extérieur, décrite dans une section dénommée entity ;
✓ L'implémentation elle-même, décrite dans une section dénommée architecture.
C’est donc la section architecture qui contient la description de la fonction matérielle désirée :
✓ Soit sous forme de description structurelle précise de l’architecture matérielle (les portes logiques à
utiliser et leurs interconnexions) ;
✓ Soit sous forme de comportement attendu, c'est-à-dire orienté fonctionnel.
Il existe 5 catégories d’unité de conception:

Circuit ✓ L’entité (mot clé entity): Décrit un système vu extérieur (boîte noire)
principal ✓ L’architecture (mot clé architecture): Décrit l’intérieur (le fonctionnement) d’une boîte
noire.
✓ La configuration (mot clé configuration)
Package ✓ La déclaration de paquetage (mot clé package)
(librairie)
✓ Le corps de paquetage (mot clé package body)
H. AMIRY 24/10/2024 65
Structure du VHDL
Minimum design en VHDL

Deux unités obligatoires: Un circuit décrit en VHDL


• une entité
Déclaration d’entité
• une architecture

Architecture

H. AMIRY 24/10/2024 66
Structure du VHDL
Exemple simple: entité

L’entité déclare la vue externe du circuit : les


ports d’entrée- sorties et leur type. Elle peut
aussi déclarer des paramètres.

Exemple: L’entité du circuit ci-contre qu’on appellera « AOI»

entity AOI is
Port(
A,B,C,D: in std_logic;
F : out std_logic);
end AOI;

H. AMIRY 24/10/2024 67
Structure du VHDL
Exemple simple: architecture

L’architecture définit le fonctionnement du circuit.

architecture v1 of AOI is

-- les déclarations

begin

F <= not((A and B) or (C and D)); end v1;

On remarque l’opérateur d’affectation <=


Les opérateurs logiques "and", "or", "nor", "nand" et "not" font parti des opérateurs connus du langage.

On remarque aussi que -- est utilisé pour des commentaires. Il existe deux parties dans l’architecture
- avant begin : zone des déclarations

- Après begin : la partie "exécutable".

H. AMIRY 24/10/2024 68
Structure du VHDL
Exemple simple: architecture bis

architecture v2 of AOIis signal


I1,I2,I3: std_logic;
I1, I2 et I3 sont des signaux internes.
begin
I1 <= A and B;
I2 <= C and D;
I3 <= I1 or I2;
F <= not I3;
end v2;
H. AMIRY 24/10/2024 69
Structure du VHDL
Exemple simple: architecture bis

architecture v3 of AOI is
signal I1,I2,I3: std_logic;
begin
I1 <= A and B;
I2 <= C and D;
I3 <= I1 or I2;
F <= not I3;
end v3;
Tous les mêmes !
architecture v2 of AOI is architecture v4 of AOI is
signal I1,I2,I3: std_logic; signal I1,I2,I3: std_logic;
begin begin
I1 <= A and B; F <= not I3;
F <= not I3; I3 <= I1 or I2;
I2 <= C and D; I2 <= C and D;
I3 <= I1 or I2; I1 <= A and B;
end v2; end v4;

H. AMIRY 24/10/2024 70
Structure du VHDL
Exemple simple: Principe de concurrence

architecture v3 of AOI is
signal I1,I2,I3: std_logic;
begin
Dans une architecture, toutes les
I1 <= A and B;
I2 <= C and D;
instructions sont exécutées en
I3 <= I1 or I2; parallèle : elles sont concurrentes
F <= not I3; et non pas « séquentielles ».
end v3;
Tous les mêmes !
La partie après "begin" dans
architecture v2 of AOI is architecture v4 of AOI is
une architecture est une zone
signal I1,I2,I3: std_logic; signal I1,I2,I3: std_logic;
begin
concurrente.
begin
I1 <= A and B; F <= not I3;
F <= not I3; I3 <= I1 or I2;
I2 <= C and D; I2 <= C and D;
I3 <= I1 or I2; I1 <= A and B;
end v2; end v4;

H. AMIRY 24/10/2024 71
Structure du VHDL
Architecture

La partie déclarative peut contenir: La partie opératoire peut contenir en particulier :


✓ Déclarations de signaux internes. ✓ Affectations concurrentes de signaux:
( autres que les I/O ) Résultats de synthèse et de simulation indépendants
de l'ordre d'écriture des instructions.
✓ Déclarations de composants.
( gestion de la hiérarchie, VHDL Code ✓ Affectations séquentielles :
Comportemental
structurel). Process et/ou sous-programmes
RTL
✓ Déclarations de constantes. En simulation, exécution des instructions dans l'ordre
d'écriture (séquentiellement).
✓ Déclarations de types d'objets.
En synthèse logique, le même comportement est reproduit.
( utilisé en particulier pour les
✓ Instanciation de "boîtes noires": ( composants ).
machines d'états ). Le module en cours de développement peut faire
Code appel à d'autres sous-modules ( gestion de la
✓ Déclarations de sous-programmes. Structurel hiérarchie, VHDL structurel ).
( fonctions et procédures ).

H. AMIRY 24/10/2024 72
Structure du VHDL
Architecture comportementale: type RTL
E1
Bascule D
E2
Circuit
E3 SET
Combinatoire S_comb
E4 D Q S
Entity Circuit is port(
E1, E2, E3, E4: in bit;
Reset, CLK: in bit; S: out bit CLK CK Q
);
End; CLR
Architecture RTL of Circuit is
Signal S_comb: bit; Description combinatoire
Begin
S_comb <= (E1 xor E2) and (E3 or not(E4)); Reset

process(reset, CLK)
begin
if Reset = ‘0’ then S <= ‘0’; Description séquentielle
elsif rising_edge(CLK) then S <= S_comb; end if;
end process;
End RTL;

H. AMIRY 24/10/2024 73
Structure du VHDL
Architecture structurelle: exemple ADD1bit

Entity ADD1bit is
port (
A, B, Cin : in bit;
S, Cout : out bit );
end ADD1bit;
architecture ARCHI of ADD1bit is
Signal S1, S2, S3: bit;
Begin Entity ADD1bit is
S1 <= A xor B; port (
S <= S1 xor Cin; A, B, Cin : in bit;
S2 <= S1 and Cin; S, Cout : out bit );
S3 <= A and B; end ADD1bit;
Cout <= S2 or S3; architecture ARCHI of ADD1bit is
end ARCHI; Begin
S <= A xor B xor Cin;
Cout <= ( (A xor B) and Cin ) or ( A and B );
end ARCHI;
H. AMIRY 24/10/2024 74
Structure du VHDL
Architecture structurelle: exemple ADD4bits
A(3 downto 0)

B(3 downto 0)
A(0) A(1) A(2) A(3)
A. S A. S A. S A. S
B(0) B(1) B(2) B(3)
B. (ADD1bit) B. (ADD1bit) B. (ADD1bit) B. (ADD1bit)
C(1) C(3)
C(0) C(2)
‘0’ Cin Cout Cin Cout Cin Cout Cin Cout Carry
S(0) S(1) S(2) S(3)
S(3 downto 0)
Entity Add4bits is Port(
A, B: in bit_vector(3 downto 0); S: out bit_vector(3 downto 0); Carry: out bit );
End Add4bits;
Architecture structurelle of ADD4bits is
Component ADD1bit is port(A, B, Cin: in bit; S, Cout: out bit ); end component;
Signal C: bit_vector(3 downto 0);
begin
Copy1_Add1bit: ADD1bit port map (A => A(0), B => B(0), Cin => ‘0’, S => S(0), Cout => C(0));
Copy2_Add1bit: ADD1bit port map (A => A(1), B => B(1), Cin => C(0), S => S(1), Cout => C(1));
Copy3_Add1bit: ADD1bit port map (A => A(2), B => B(2), Cin => C(1), S => S(2), Cout => C(2));
Copy4_Add1bit: ADD1bit port map (A => A(3), B => B(3), Cin => C(2), S => S(3), Cout => C(3)); Carry <= C(3);
End structurelle ;

H. AMIRY 24/10/2024 75
Structure du VHDL
Décrire des délais

Dans des circuits réels, les portes logiques présentent des délais.

H. AMIRY 24/10/2024 76
Structure du VHDL
Décrire des délais
✓ Une affectation sera déclenchée quand un évènement arrive
✓ Un évènement est un changement de valeur d’un signal
✓ Pour l’instruction ci-dessous, cet évènement est le passage de A de 0 à1.
✓ Cependant, l’affectation se concrétise après 2 ns.

Attention: l’instruction d’affectation retardé est importante en simulation, par contre n’a aucun effet en synthèse.
L‘outil de synthèse ignore « after »:
Pour la synthèse :
I1 <= A and B after 2 ns; ≡ I1 <= A and B;

Le circuit qui sera réalisé présentera un délai qui dépendra de la technologie utilisé, longueur des câblage,
etc.
H. AMIRY 24/10/2024 77
Classe d’objets et règles de déclaration

• 3 classes principales d'objets :

✓ CONSTANTES : permettent de définir des valeurs permanentes.

✓ VARIABLES : utilisées seulement dans les process et sous programmes ( instructions séquentielles ).

✓ SIGNAUX : variable + notion temporelle.

• Une déclaration d'objet comporte :

✓ CLASSE : signal, constante ou variable.

✓ NOM : au choix du concepteur ( excepté mots réservés ).

✓ MODE : ( signaux d’entité seulement ) : in, out, inout,buffer.

✓ TYPE : bit, bit_vector, boolean, integer...

H. AMIRY 24/10/2024 78
Classe d’objets et règles de déclaration
Exemple:

Entity Addition_Soustraction is port (


A, B: in integer; - - nom1, nom2,…: Mode Type;
Add_Sub: in bit; - - Dans l’entité la déclaration de la classe par défaut est signal
Resultat: out integer ); (classe = signal)
End Addition_Soustraction;
Architecture archi of Addition_Soustraction is
Signal Somme, Difference: integer; - - Classe nom1, nom2,…: Type;
Begin
Somme <= A + B;
Difference <= A – B;
Resultat <= Somme when Add_Sub = ‘1’ else Difference; End
archi;

H. AMIRY 24/10/2024 79
Règles d’écriture en VHDL

✓ Minuscules et majuscules ne sont pas différenciées en VHDL. Un objet peut indifféremment être tour à tour
appelé :
MODULE, Module, moDulE ou module

Il en va de même pour les mots clefs.

✓ Des commentaires peuvent être placés n'importe où dans le code. Ils n'affectent en rien les résultats de synthèse ou
de simulation. Ils peuvent être insérés sur les fins de lignes, sans remettre en cause l'intégrité du code.

Exemple :
-- ceci est un commentaire
architecture ARCHI of EXEMPLE is -- ceci également
begin

H. AMIRY 24/10/2024 80
Règles d’écriture en VHDL

•Séparateurs : les séparateurs utilisés sont en particulier :


•" ; " ( point virgule, entre deux déclarations, ou à la fin d'une instruction ),
", " ( virgule , entre deux noms de signaux, dans une même déclaration ),
" :" ( dans une déclaration, entre le nom d'un objet et son mode ou son type),
" <=" ( symbole d’assignation à ne pas confondre avec inférieur ou égale).

•Espaces : le nombre d'espaces entre deux mots est indifférent, dès lors que le minimum requis a été respecté.

•Retour chariot : Une même instruction ou déclaration peut être écrite sur plusieurs lignes consécutives.

• Les fichiers VHDL portent l'extension " --- .VHD "

H. AMIRY 24/10/2024 81
Règles d’écriture en VHDL
•Les noms des objets manipulés en VHDL sont constitués d’une suite de caractères alphanumériques
avec une lettre en premier caractère, le ‘_’ ne doit ni commencer la ligne ni finir la ligne ni figurer 2 fois
consécutives, doit être différent d’un mot réservé du VHDL:
Abs Access After Alias
All And Architecture Array
Assert Attribute Begin Block
Body Buffer Bus Case
Component Configuration Constant Disconnect
Downto Else Elsif End
Entity Exit File For
Function Generate Generic Group
Guarded If Impure In
Inertial Inout Is Label
Library Linkage Literal Loop
Map Mod Nand New
Next Nor Not Null
Of On Open Or
Others Out Package Port
Postponed Procedure Process Pure
Range Record Register Reject
Rem Report Return Rol
Ror Select Severity Signal
Shared Sla Sll Sra
Srl Subtype Then To
Transport Type Unaffected Units
Until Use Variable Wait
When While With Xnor
Xor

H. AMIRY 24/10/2024 82
Règles d’écriture en VHDL

Les valeurs explicites attribuées aux différents objets diffèrent selon le type d’objet:
• entiers décimaux : notation décimale habituelle
Ex : 1999 ou 1_999
• caractères : entre apostrophes simples
Ex : ‘A ’ , ‘ % ’ , ‘‘
• chaînes de caractères : entre guillemets
Ex : “moteur” , concaténation avec & : “couleur” & “ bleu” identique à “couleur bleu”
• bit : utilisent la notation des caractères
Ex : ‘0 ’ et ‘1’
• std_logic : utilisent la notation des caractères
Ex : ‘U’, ‘X’, ‘0’, ‘1’, ‘H’, ’L’, ‘W’, ’Z’, ‘-’
• vecteurs de bits : utilisent la notation de chaînes de caractères
Ex : “100101”, X“1F0D”, O“176”, D“189” ou 2#1110_0101#, 16#1F0D#, 8#176#, 10#189#

H. AMIRY 24/10/2024 83
Types d’objets manipulables en VHDL
Character:
Un seul caractère (Ex: ‘C’, ‘a’, …)
String:
tableau de caractères (Ex: ‘’Chaîne de Caractères’’)
Boolean:
o Utilisé pour le résultat d’opération logique de comparaison
o 2 valeurs: True ou False
Integer:
o Codage en 32 bits par défaut définissant un entier entre –(231 – 1) à +(231 – 1)
o L’intervalle peut être limité par range (nb : in integer range –128 to 127)
Natural:
o Sous type du type integer limité aux nombre positifs
o Entier de 0 à entier maximum µ
Positive:
o Sous type du type integer limité aux nombre positifs
o entier de 1 à entier maximum
Bit:
o Valeurs: ‘0’ ou ‘1’
o N’est pas compatible directement avec les booleans
H. AMIRY 24/10/2024 84
Types d’objets manipulables en VHDL
Bit_vector:
o Tableau de bit (modélisation d’un bus)
o Accessible par bit ( a(3) <= ‘1’) ou par chaîne (a <= ‘’0010’’)
Std_logic: Logique à 9 états:
(‘U’: non initialisé, ‘X’: inconnu fort, ‘0’: 0 fort, ‘1’: 1 fort, ‘Z’: haute impédance, ‘W’: inconnu faible, ‘L’: 0 faible,
‘H’: 1 faible, ‘-’: indifférent)
Std_logic_vector:
Vecteur de std_logic ne représente pas un nombre (pas de signe)
Signed:
Vecteur de type std_logic_vector représentant un nombre signé
Unsigned:
Vecteur de type std_logic_vector représentant un nombre non signé
Real:
Type numérique réel défini sur un intervalle entre –1.0E38 à 1.0E38
Time:
Type physique définissant les unités de temps:
H. AMIRY 24/10/2024 85
Création de type et sous type

Classification des types: Création de type:

✓ Types scalaires: (reconnus en standard) Syntaxe: Type type_name is definition_type;


Exemple:
• Types numériques : entiers (integer),
type octet is integer range 0 to 255;
flottants(real) et physiques (time)
type mem8 is array (0 to 1023) of octet;
• Types énumérés (bit, boolean, std_logic, type etat is (reset, fetch, wait, decode);
character, ...) Un type doit toujours être crée avant d’être utilisé:

✓ Types composites: (crées par l’utilisateur) type code is array (3 downto 0) of std_logic;
signal com: code;
• Tableau de bit_vector, tableau de
Erroné: Signal com : array (3 downto 0) of std_logic;
std_logic_vector, …
Ou bien: Signal com: std_logic_vector(3 downto 0);
• Enregistrement (plusieurs éléments de type
différents)
H. AMIRY 24/10/2024 86
Création de type et sous type
Création d’un type composite:
type channel is (ch1, ch2, ch3, ch4);
type mesure is record
Orig: channel;
Value: integer;
T: time;
Dest: string (1 to 3);
end record;
Signal m: mesure;
Affectation élémentaire:
m.Orig <= ch3;
m.Value <= 10;
Affectation globale par position:
m <= (ch3, 10, 10 us,’’ UAL’’);
Affectation globale par champ:
m <= (T => 10 us, Value => 10, Dest => ‘’UAL’’, Orig=> ch3);

H. AMIRY 24/10/2024 87
Création de type et sous type
Création de sous type:

Syntaxe: Subtype name is definition;

Exemple:
Type ordinateur is (clavier, souris, CD, video, RS232)
Subtype fragile is ordinateur range clavier to CD;
Subtype octet is std_logic_vector (7 downto 0) ;
Type mem is array(15 downto 0) of octet;
✓ Un sous type est une restriction d’un type à certains de ces éléments
✓ Il reste compatible avec sa famille

H. AMIRY 24/10/2024 88
Règles d’affectation

Règles d'affectations des vecteurs de données:

✓ L'ordre dans lequel est utilisé le vecteur ( ou bus ) doit être le même que celui de la
déclaration. ( valeurs croissantes ou décroissantes des indices )

✓ Il n'est pas nécessaire d'utiliser le vecteur dans son intégralité. ( utilisation d'une partie
des signaux d'un bus ).

✓ Les largeurs de bus ( taille des vecteurs ) doivent correspondre pour la majorité des
opérations. ( excepté pour les comparaisons ).

H. AMIRY 24/10/2024 89
Règles d’affectation
Règles d'affectations des vecteurs de données:
Signal a : std_logic_vector(15 downto 0);

Signal b : std_logic_vector(0 to 15);


Type array_tab is array(1 to 3) of std_logic_vector (3 downto 0);
Signal c, d: array_tab;
Affectation d’un élément: a(3) <= ‘0’;
Affectation de plusieurs éléments:
a(10 downto 7) <= ‘’1001’’ ; b <= ‘’1010100011100010 ‘’ ; a <= (0|5 => ‘0’, 1 to 4 => ‘1’, 6 => ‘Z’, 15 downto 7 => ‘-’);
De tableau à tableau: a et b doivent avoir même taille et même type: a <= b;

Syntaxe réduite: others est utilisée uniquement sur la partie droite du tableau

a <= (‘1’, ‘0’ , ‘1’, others => ‘0’); -- équivalent à: a <= ‘’101000000000000’’

Erroné: a<= (others => ‘0’, ‘1’, ‘0’, ‘1’); Correct: a<= (6 downto 0 => ‘1’, others => ‘0’);

Tableau de tableau: c(2)(1) <= d(3)(0) ; c(3)<= d(1)


H. AMIRY 24/10/2024 90
Règles d’affectation
• Règles d'affectations des vecteurs de données :
architecture ARCHI of VECTOR is
signal D_IN, MASQUE, D_OUT : std_logic_vector(7 downto 0);
signal Q_OUT : std_logic_vector(7 downto 0);
constant FIXE : std_logic_vector(2 downto 0) := "010";
begin
D_OUT <= D_IN and not(MASQUE);
Q_OUT <= (D_IN(6 downto 2) and not(MASQUE(7 downto 3))) & FIXE;
end ARCHI;
• Exemple de code équivalent :
D_OUT(7) <= D_IN(7) and not(MASQUE(7));
D_OUT(6) <= D_IN(6) and not(MASQUE(6));
-- -- -- -- -- -- ;
D_OUT(0) <= D_IN(0) and not(MASQUE(0));
Q_OUT(7) <= D_IN(6)and not(MASQUE(7));
Q_OUT(6) <= D_IN(5)and not(MASQUE(6));
-- -- -- -- -- -- ;
Q_OUT(3) <= D_IN(2)and not(MASQUE(3));
Q_OUT(2) <= FIXE(2); -- ou Q_OUT(2) <= '0';
Q_OUT(1) <= FIXE(1); -- ou Q_OUT(1) <= '1';
Q_OUT(0) <= FIXE(0); -- ou Q_OUT(0) <= '0';
H. AMIRY 24/10/2024 91
Règles d’affectation
• Affectation de sous ensemble d’un tableau: Alias

Subdiviser un vecteur en plusieurs champs. Chaque sous ensemble du vecteur sera identifiée par un nom.
Exemple: Représentation des champs d’un nombre en virgule flottant (real) suivant le standard IEEE 754 en simple
précision (32 bits); La mantisse est normalisé sous la forme ±1,M*2±E
Subdiviser un vecteur en plusieurs champs. Chaque sous ensemble du vecteur sera identifiée par un nom.
Signal Flottant: std_logic_vector(31 downto 0);
Alias signe: std_logic is Flottant(31);
Alias exposant: std_logic_vector(7 downto 0) is Flottant(30 downto 23);
Alias mantice: std_logic_vector(22 downto 0) is Flottant(22 downto 0);

• 110, 1010 = 1, 101010 × 2 2


• Simple précision: application, codons le nombre
• M = 10101000000000000000000
• −6, 625
• E=127 + 2 = (129)10 = (10000001)2
• -=1
• −6, 625 = 1 10000001 10101000000000000000000
• (6, 625)10 = (110, 1010)2
• En hexadécimal : C0 D4 00 00

H. AMIRY 24/10/2024 92
Règles d’affectation
• Affectation simple d'une valeur à un objet suivant sa classe :
• Pour un signal : <=

Exemples :

signal A, B, C, D : std_logic; signal CS : boolean;


signal DATA : std_logic_vector(7 downto 0);
signal ADR : std_logic_vector(3 downto 0); signal INT_VAL : integer range 0 to 15;
------------------------------------------
A <= '1';
B <= C xor D;
DATA <= "10100101"; -- équivalent en Hexadécimal X"A5";
INT_VAL <= 13;
• Pour une constante ou variable : :=
• Exemples :
• constant A : std_logic := '0';
• constant VECTEUR : std_logic_vector(3 downto 0):= "0111";
• variable NOMBRE : integer := 29;
H. AMIRY 24/10/2024 93
Règles d’affectation
• Affectations de valeurs à un objet suivant son type :
• Bit ou STD_LOGIC :
• DATA(0) <= '1';-- guillemets simples DATA(1) <= '0';
• Bit_vector ou STD_LOGIC _VECTOR :
• -- Base par défaut : binaire
• DATA(3 downto 0) <= "0101"; -- double guillemets
• -- équivalent à : DATA(3 downto 0) <= B"0101";
• ADR_OUT <= "11100100";
• -- équivalent à : ADR_OUT <= B"11100100";
• -- Affectation en base Hexadécimale : DATA(3 downto 0) <= X"5"; ADR_OUT <= X"E4";
• Entiers :
• signal A, S, T, U, V : integer range 0 to 255;
------------------------------------------
-- Base par défaut : décimal
S <= A + 83; -- pas de guillemets
-- Spécification de la base :
T <= 16#B3#; -- Hexadécimal
U <= 10#145#; -- Décimal
V <= A - 2#0100_1010#; -- Binaire avec séparateurs
-- équivalent à :
V <= A - 2#01001010#; -- Binaire
H. AMIRY 24/10/2024 94
Les opérateurs couramment utilisés en synthèse
• Opérateurs logiques pré-définis :
❑ and, or, nand, nor, xor et not
Opèrent sur des objets de toutes classes ( signaux, constantes, variables ) et de type :
✓ bit
✓ bit_vector
✓ std_logic, std_ulogic
✓ std_logic_vector, std_ulogic_vector
✓ boolean
Les opérandes doivent être du même type et comporter le même nombre de bits.
• Exemple
entity OPE is
port ( A, B, C : in bit;
S : out bit);
end OPE;
architecture ARCHI of OPE is
begin
S <= (A and B) and not(C);
end ARCHI;

H. AMIRY 24/10/2024 95
Les opérateurs couramment utilisés en synthèse
• Opérateurs relationnels :
• :

= égal à /= ( différent de )
< inférieur à <= ( inférieur ou égal à )
> supérieur à >= ( supérieur ou égal à )

Opèrent sur des objets de type :


✓ bit, bit_vector
✓ std_logic, std_logic_vector
✓ std_ulogic, std_ulogic_vector
✓ integer
✓ boolean
Les opérandes doivent être du même type mais le nombre de bits de deux vecteurs comparés peut être différent !

H. AMIRY 24/10/2024 96
Les opérateurs couramment utilisés en synthèse
Opérateurs relationnels : Comparaison de vecteurs
La comparaison se fait en comparant bit à bit les deux vecteurs, en commençant par les MSB (Most Significant Bit).
Les résultats peuvent surprendre lorsque les vecteurs ne sont pas du même nombre de bits.
Exemple :
signal REG : std_logic_vector(4 downto 0);
signal CNT : std_logic_vector(3 downto 0);
Begin
-- REG CNT
-- "01111" > "0100" résultat peu surprenant
-- et "01111" < "1000" résultat plus surprenant !
-- Le MSB de CNT étant supérieur à celui de REG, le vecteur CNT est considéré comme supérieur.

H. AMIRY 24/10/2024 97
Les opérateurs couramment utilisés en synthèse
Opérateurs relationnels : Informations complémentaires
Le résultat d'une comparaison donne un résultat booléen (pouvant prendre les valeurs TRUE ou FALSE).
Exemple:

library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.STD_LOGIC_UNSIGNED.all;
Signal EGAL, FENETRE : boolean;
Signal COUNT:std_logic_vector(4 downto 0);
begin
EGAL <= (COUNT = 27);
FENETRE <= (COUNT >= 13) and (COUNT <= 25);
-- opération logique entre deux booleens.

H. AMIRY 24/10/2024 98
Les opérateurs couramment utilisés en synthèse
Opérateurs arithmétiques Opérateur de concaténation &

Opèrent sur des objets de type INTEGER. Permet la création de vecteurs à partir de bits et/ou de vecteurs.
library IEEE;
✓ + : addition use IEEE.STD_LOGIC_1164.all;
✓ * : multiplication entity MY_BUS is
port ( A, B, C, D : in std_logic;
✓ ** : puissance STATUS : out std_logic_vector(7 downto 0));
✓ - : soustraction end MY_BUS;
architecture ARCHI of MY_BUS is
✓ / : division begin
✓ % (mod) : Modulo STATUS <= "0000" & A & B & C & D;
-- équivalent à : STATUS(7 downto 4) <= "0000";
✓ Rem : Remainder -- STATUS(3) <= A; STATUS(2) <= B;
✓ Abs : valeur absolue -- STATUS(1) <= C; STATUS(0) <= D;
end ARCHI;

H. AMIRY 24/10/2024 99
Attributs fréquemment utilisés en synthèse
Propriétés affectées à un type ou à un objet ( signal, variable ou constante ).
Parmi les attributs prédéfinis de VHDL :
LEFT -- entier identifiant la borne gauche • Exemple 1 d'attributs prédéfinis :
RIGHT -- borne droite s ignalDATA : std_logic_vector ( 15 downto 8 );
HIGH -- borne de valeur la plus élevée signal SELECTOR : std_logic_vector ( 2 to 5 );
LOW -- borne de valeur la plus basse DATA'high -- = 15
LENGTH -- nombre d'éléments ( pour un vecteur ) DATA'low -- = 8
RANGE -- gamme des indices d'un vecteur SELECTOR'high -- = 5
REVERSE_RANGE -- inverse la direction des indices SELECTOR'low -- = 2
EVENT --évènement sur un objet DATA'right -- = 8
DATA'left -- = 15
• Exemple 2 d'attributs prédéfinis ( suite ) : SELECTOR'right -- = 5
• signal CK : std_logic; SELECTOR'left -- = 2
CK'event; -- évènement sur le signal CK, front montant ou descendant DATA'length -- = 8
CK'event and CK = '1'; -- front montant sur CK
SELECTOR'length -- = 4
CK'event and CK = '0'; -- front descendant
DATA'range -- = 15 downto 8
Remarque: Ces trois instructions ont une réponse de type
BOOLEAN DATA'reverse_range -- = 8 to 15
SELECTOR'range -- = 2 to 5
H. AMIRY 24/10/2024 100
Les bibliothèques fréquemment utilisées en synthèse
• IEEE.STD_LOGIC_1164.ALL
• Le type std_logic:
9 états: ‘U’, ‘X’, ‘0’, ‘1’, ‘Z’, ‘W’, ‘L’, ‘H’, ‘-’)
• Les opérations logiques correspondantes:
and, nand, or, nor, xor, xnor, not
• Tableau de std_logic:
signal a: std_logic_vector(15 downto 0);
• Fonction de conversion entre bit et std_logic:
to_bit: conversion d’un std_logic en bit (‘1’ et ‘H’ -->‘1’, les autres -->‘0’)
to_bitvector: conversion d’un std_logic_vector en bit_vector
to_stdlogicvector: conversion d’un bit_vector en std_logic_vector
• Détection de front:
rising_edge: détection d’un front montant
falling_edge: détection d’un front descendant

H. AMIRY 24/10/2024 101


Les bibliothèques fréquemment utilisées en synthèse

• IEEE.STD_LOGIC_UNSIGNED.ALL:
Opérations arithmétiques: +, -, *, /, rem, mod
Avec ce package, le type std_logic_vector est supposé être de type unsigned.
Exemple:
signal a, b, c, d: std_logic_vector(7 downto 0);
Signal N: integer;
c <= a + b;
d <= a + N

H. AMIRY 24/10/2024 102


Les bibliothèques fréquemment utilisées en synthèse
• IEEE.NUMERIC_STD.ALL
• Deux nouveaux types:
Signed: vecteur de type std_logic_vector signé
Unsigned: vecteur de type std_logic_vector non signé
• Opérations logiques:
and, nand, or, nor, not, xor, xnor

• Comparaisons: <, >, >=, <=, =, /=


• Décaleurs:
shift_left, shift_right, rotate_left, rotate_right, ou bien Sll, srl, rol, ror
Opérations arithmétiques: +, -, *, /, rem, mod entre

H. AMIRY 24/10/2024 103


Les bibliothèques fréquemment utilisées en synthèse
• IEEE.STD_LOGIC_ARITH.ALL

• Définitions de deux types:


Signed: vecteur de type std_logic_vector signé
Unsigned: vecteur de type std_logic_vector non signé
• Les opérations arithmétiques:
+ et - : entre signed, unsigned et integer
* : entre signed et unsigned
• Les comparaisons:
>, <, =, >=, <=, /=
• Décaleurs:
Shr (signed ou unsigned à decaler, natural)
Shl (signed ou unsigned à decaler, natural)

H. AMIRY 24/10/2024 104


Les bibliothèques fréquemment utilisées en synthèse
• Déclaration des bibliothèques dans l’entête du programme VHDL:

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;

ou
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.numeric_std.all;

H. AMIRY 24/10/2024 105


Les bibliothèques fréquemment utilisées en synthèse

Libary iee
• Création d’une bibliothèque utilisateur: Use ieee.

package Nom_Biblio is
Déclaration detypes,
Déclaration des composants utilisés dans une conception hiérarchique,
Déclaration des constantes,
Déclarations de l’entête de fonctions et procédures,

end Nom_Biblio ;

H. AMIRY 24/10/2024 106


Les bibliothèques fréquemment utilisées en synthèse
• Fonctions de conversion de type
--- conversion d’un std_logic en bit
Function to_bit(s : std_logic) return bit ;
--- conversion d’un std_logic_vector en bit_vector
Function to_bitvector (s : std_logic_vector) return bit_vector; Libary ieee;
--- conversion d’un bit_vector en std_logic_vector
Function to_stdlogicvector (s : bit_vector) return std_logic_vector;
Use ieee. std_logic_1164.all
--- conversion d’un signed ou unsigned en integer
Function to_integer(s : signed ) return integer ;
Function to_integer(s : unsigned ) return integer ;
--- conversion d’un integer en signed
Function to_signed (s : integer, n: natural) return signed ;
--- conversion d’un natural en unsigned Use ieee.numeric_std.all
Function to_unsigned (s : natural, n: natural) return unsigned ;
--- conversion d’un signed en signed n bits
Funnction resize(s : signed, natural n) return signed ;
--- conversion d’un unsigned en unsigned n bits
Funnction resize(s : unsigned, natural n) return unsigned ;

--- conversion d’un std_logic_vector, signed ou unsigned en integer


Function conv_integer (s : signed) return integer ;
Function conv_integer (s : unsigned) return integer ;
--- conversion d’un natural, signed ou unigned en unsigned sur n bits
Function conv_unsigned (s : natural, n: natural) return unsigned ;
Function conv_unsigned (s : signed, n: natural) return unsigned ;
Function conv_unsigned (s : unsigned, n: natural) return unsigned ;
--- conversion d’un integer, signed ou unigned en signed sur n bits
Function conv_signed (s : integer, n: natural) return signed ;
Use ieee.std_logic_arith.all
Function conv_signed (s : signed, n: natural) return signed ;
Function conv_signed (s : unsigned, n: natural) return signed ;
--- conversion d’un integer, signed ou unsigned en std_logic_vector sur n bits
Function conv_std_logic_vector (s : integer, n: natural) return std_logic_vector ;
Function conv_ std_logic_vector (s : signed, n: natural) return std_logic_vector ;
Function conv_ std_logic_vector (s : unsigned, n: natural) return std_logic_vector ;

H. AMIRY 24/10/2024 107


Fonctionnement concurrentielle et séquentielle
Rappel: Structure d’un programme VHDL
library ieee; Libary iee
Use ieee.
use
ieee.std_logic_1164.all;
Déclaration des bibliothèques use
ieee.std_logic_unsigned.
all; use
ieee.std_logic_arith.all;

Entity multiplexeur is port(


A: in std_logic_vector(3 downto 0);
Déclaration de l’entité SEL: in std_logic_vector(1 downto 0);
S: out std_logic_vector );
End multiplexeur ;

Architecture archi of multiplexeur is


Begin
Déclaration de l’architecture
S <= A( conv_integer(SEL) );
End archi;

H. AMIRY 24/10/2024 108


Fonctionnement concurrentielle et séquentielle
Rappel: Structure d’un programme VHDL
Libary iee
Use ieee.
Architecture Nom_Architecture of Nom_Entity is
Constantes
Types
Signaux
Déclarations
Procédures
Fonctions
Composants
Begin
Assignation de signaux Instructions
concurrentes Instanciations de
Fonctionnement composants Process (instructions
séquentielles) Instructions d’assertion
Appels de fonctions et procédures
End Nom_Architecture
H. AMIRY 24/10/2024 109
Fonctionnement concurrentielle et séquentielle
Rappel : Architecture Comportementale

Architecture one of conc is Architecture two of conc is


Begin Begin

instruction1; Identique à instruction2;

instruction2; instruction1;

End architecture one; End architecture two;

✓ Les instructions concurrentes (combinatoires) sont exécutées sans ordre


✓ Le corps d’une architecture est constitué d’instructions concurrentes

H. AMIRY 24/10/2024 110


Fonctionnement concurrentielle et séquentielle
Rappel : Architecture Comportementale

Fonctionnement concurrentielle :
Opérations effectuées simultanément ( en parallèle ):
✓ L'ordre d'écriture des instructions n'affecte pas le résultat de synthèse ou de simulation.

✓ Toutes les instructions entre begin et end architecture correspondent à des circuits électroniques qui
fonctionnent simultanément.
Fonctionnement séquentielle :
Opérations effectuées en séquence ( comme un programme informatique).
✓ L'ordre d'écriture des instructions peut affecter les résultats de simulation et de synthèse.
✓ Style d'écriture comparable aux langages évolués.

✓ Instructions séquentielles regroupées dans les PROCESS , et les sous-programmes ( fonctions et


procédures ).

H. AMIRY 24/10/2024 111


Fonctionnement concurrentielle
Les instructions : Assignation conditionnelle
Signal <= expression1 when condition1 else
expression2 when condition2 else
…. when …. else expressionN ;

Exemple 1:
LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY combi1 IS PORT (
a, b : IN STD_LOGIC_VECTOR(3 DOWNTO 0); -- bus 4 fils
S : OUT STD_LOGIC_VECTOR(11 DOWNTO 0); -- bus 12 fils
T : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) -- bus 8 fils );
END combi1;
ARCHITECTURE archi OF combi1 IS
ALIAS op1:STD_LOGIC_VECTOR (3 DOWNTO 0) IS S(3 DOWNTO 0);
ALIAS op2:STD_LOGIC_VECTOR (3 DOWNTO 0) IS S(7 DOWNTO 4);
BEGIN
op1 <= a AND b;
op2 <= a OR "1010";
T <= a & b; -- concaténation
S(8) <= '1' WHEN a > b ELSE '0';
S(9) <= '1' WHEN a = "0000" ELSE '0';
S(10) <= '1' WHEN a = "0011" ELSE '0';
S(11) <= '1' WHEN a <= "1001" ELSE '0';
END archi
H. AMIRY 24/10/2024 112
Fonctionnement concurrentielle
Les instructions : Assignation conditionnelle

Exemple 2:
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_arith.all;
entity mux4_1 is
port( E0, E1, E2, E3 : in bit ;
SEL: in bit_vector(1 downto 0);
S: out bit ) ;
end mux4_1;
E0
architecture arch_mux4_1 of mux4_1 is E1
Mux4_1
E2 S
begin E3
S <= E0 when SEL = 00 else
E1 when SEL = 01 else SEL(0)
E2 when SEL = 10 else
SEL(1)

E3 when SEL = 11;


End arch_mux4_1;

H. AMIRY 24/10/2024 113


Fonctionnement concurrentielle
Les instructions : Boucle Générique
etiquette : for variable_de_boucle in valeur_debut to valeur_fin generate
Instruction1 ;
Instruction2 ;

InstructionN ;
end generate ;
Exemple 1: LIBRARY ieee;
USE ieee.std_logic_1164.all;
entity TRISTATE is generic(N: natural := 8);
port( A, B : in std_logic_vector(N-1 downto 0);
C : in std_logic;
S : out std_logic_vector(N-1 downto 0) );
end TRISTATE;
A S
architecture ARCHI of TRISTATE is
Begin
boucle: for i in A’range generate C
S(i) <= A(i) when C =‘0' else ‘Z’;
S(i) <= B(i) when C =‘1' else ‘Z’;
end generate;
end ARCHI; B
H. AMIRY 24/10/2024 114
Fonctionnement concurrentielle
Les instructions : Boucle Générique
etiquette : for variable_de_boucle in valeur_debut to valeur_fin generate
Instruction1 ;
Instruction2 ;

InstructionN ;
end generate ;
Exemple : LIBRARY ieee;
USE ieee.std_logic_1164.all;
entity TRISTATE is generic(N: natural := 8);
port( A, B : in std_logic_vector(N-1 downto 0);
C : in std_logic;
S : out std_logic_vector(N-1 downto 0) );
end TRISTATE;
A S
architecture ARCHI of TRISTATE is
Begin
boucle: for i in A’range generate C
S(i) <= A(i) when C =‘0' else ‘Z’;
S(i) <= B(i) when C =‘1' else ‘Z’;
end generate;
end ARCHI; B
H. AMIRY 24/10/2024 115
Fonctionnement concurrentielle
Les instructions : Test conditionnel générique
etiquette : if condition generate
Instruction1 ;
Instruction2 ;

InstructionN ;
end generate ;

Exemple : architecture arch_Serie_Parallele of Serie_Parallele is


signal temp: bit_vector (N-1 downto 0);
Component BasculeD port(bin, CLK: in bit; S: out bit); end Component;
begin
Etiq1 : for i in 0 to N-1 generate
Etiq2: if i = 0 generate
Premier: BasculeD port map (bin, CLK, temp(0) ) ;
end generate;
Etiq3: if i > 0 generate
boucle: BasculeD port map (temp(i-1), CLK, temp(i) );
end generate;
end generate;
P <= temp;

H. AMIRY 24/10/2024 116


Fonctionnement séquentielle
Notions de PROCESS

✓ Un PROCESS est une partie de code à l'intérieur de laquelle les instructions s'exécutent en
séquence ( suivant l'ordre d'écriture ).

✓ Une même architecture peut contenir plusieurs process.

✓ Tous les process s'exécutent en parallèle. ( un process est équivalent à une instruction
concurrente complexe ).

✓ Le jeu des instructions utilisables dans les PROCESS est différent de celui des instructions
concurrentes.

✓ L'ordre d'écriture des instructions affecte ( ou peut affecter) les résultats de simulation et de
synthèse.

H. AMIRY 24/10/2024 117


Fonctionnement séquentielle
Notions de PROCESS

Label facultatif une réévaluation des signaux


traités dans le process

[Nom_Process] : process (liste_de_signaux_de_déclenchement)


-- déclaraction de signaux, variables, constantes, types et alias
begin
-- corps du process : instructions séquentielles
end process [Nom_Process] ; Fin du process

Label facultatif

✓ Un process ne s’exécute que si il y’a un changement de l’état d’un des signaux auxquels il est
sensible
✓ Les instructions du process s’exécutent séquentiellement
✓ Les signaux manipulés par les instructions du process ne prennent leurs nouvelles valeurs qu’à la fin du
process
H. AMIRY 24/10/2024 118
Fonctionnement séquentielle
Notions de PROCESS
• Exemple:
LIBRARY ieee; 4
USE ieee.std_logic_1164.all; COMPTEUR COUNTER
USE ieee.std_logic_arith.all; CLK 4 bits
avec Retenue
CARRY
ENTITY CPT4bits IS PORT (
CLK: IN STD_LOGIC;
COUNTER : OUT STD_LOGIC_VECTOR (3 DOWNTO 0);
CARRY: OUT STD_LOGIC );
END CPT4bits;

ARCHITECTURE archi1_ CPT4bits OF CPT4bits IS


SIGNAL temp: unsigned(3 DOWNTO 0) ;
BEGIN
PROCESS ( CLK)
BEGIN
IF CLK'EVENT AND CLK = '1' THEN temp <= temp + 1;
IF temp = 0 THEN CARRY <= ‘1’;
ELSE CARRY <= ‘0’;
END IF; CLK
END IF; COUNTER 1110 1111 0000 0001
END PROCESS;
COUNTER <= std_logic_vector(temp); CARRY
END archi1_ CPT4bits ;

H. AMIRY 24/10/2024 119


Fonctionnement séquentielle
Notions de PROCESS
• Logique combinatoire ( process combinatoires ).
• Logique clockée ( process clockés ).
A
• Logique clockée avec initialisation asynchrone. D S Q S
B
A S
A C
S B
D Q
D Q T
B D R
C T C D Q T CK
D U D INIT
Toutes les entrés du CK
circuit combinatoire
doivent être dans la process (CK, INIT)
liste de sensibilité
-- process clocké avec
process (CK) -- initialisation asynchrone
process (A,B,C,D)
begin
-- process clocké pur if INIT =‘1’ then
-- process combinatoire begin S <= ‘1’; T <= ‘0’;
begin if CK’event and CK=‘1’ elsif CK’event and CK=‘1’
if (A=‘1’ and B=‘0’) then then
then ... if (A=‘1’ and B=‘0’ if (A=‘1’ and B=‘0’)
then... then...

H. AMIRY 24/10/2024 120


Fonctionnement séquentielle
Notions de PROCESS
• Process combinatoires :
• Syntaxe :
[LABEL :] process (liste_de_sensibilité)
[déclarations]
begin
-- instructions séquentielles
end process [LABEL];

✓La liste de sensibilité contient tous les signaux pouvant


conduire à une réévaluation des expressions traitées dans
le process.
✓Les signaux traités dans ce type de process sont
purement combinatoires. ( aucune référence n'est faite à la
détection d'un front d'horloge ).
H. AMIRY 24/10/2024 121
Fonctionnement séquentielle
Notions de PROCESS
• Process clockés simples : (sans initialisation asynchrone).
• Syntaxe 1 . ( avec liste de sensibilité ) :
[LABEL :] process (CK) -- liste de sensibilité
[déclarations]
begin
if (CK'event and CK='1') then
-- instructions séquentielles
end if;
end process [LABEL];

La liste de sensibilité contient seulement le signal


d'horloge. Dans ce cas, la détection du front se fera par
l'instruction IF (condition) ...

H. AMIRY 24/10/2024 122


Fonctionnement séquentielle
Notions de PROCESS
• Process clockés simples : (sans initialisation asynchrone).
• Syntaxe 1 . ( avec liste de sensibilité ) :
Exemple: process (CK)
begin
if (CK'event and CK='1') then
COUNT <= COUNT + 1; -- autorisé si le package:
end if; -- ieee.std_logic_unsigned
end process; -- est déclaré

✓Le signal COUNT ( std_logic_vector ) sera issu de


bascules.
✓Aucun signal traité dans ce type de process ne peut
être combinatoire.

H. AMIRY 24/10/2024 123


Fonctionnement séquentielle
Notions de PROCESS
• Process clockés simples : (sans initialisation asynchrone).
• Syntaxe 2 : ( sans liste de sensibilité )
[LABEL :] process -- pas de liste_de_sensibilité
[déclarations]
begin
wait until (CK'event and CK='1');
-- instructions séquentielles
end process [LABEL];

✓ Dans ce cas, nous n'avons pas de liste de sensibilité.


✓La seule condition pouvant provoquer un changement de
l'état des sorties est un front montant de l'horloge (CK).
Cette condition est traitée par l'instruction WAIT UNTIL

H. AMIRY 24/10/2024 124


Fonctionnement séquentielle
Notions de PROCESS
• Process clockés simples : (sans initialisation asynchrone).
• Syntaxe 2 : ( sans liste de sensibilité )
Exemple: process -- pas de liste_de_sensibilité
begin
wait until (CK'event and CK='1');
QOUT <= QOUT + B; -- autorisé si le package:
-- ieee.std_logic_unsigned
end process; -- est déclaré

✓ Le signal QOUT ( std_logic_vector ) sera issu de


bascules.
✓Aucun signal traité dans ce type de process ne peut
être combinatoire.
✓ Cet exemple correspond au code d’un accumulateur.
H. AMIRY 24/10/2024 125
Fonctionnement séquentielle
Notions de PROCESS
• Process clockés avec initialisation asynchrone :
• Syntaxe :
[LABEL :] process (CK,RST)-- liste de sensibilité
[déclarations]
begin
if RST = '1' then -- action asynchrone
elsif (CK'event and CK='1') then
-- instructions séquentielles
end if;
end process [LABEL];

La liste de sensibilité contient le signal d'horloge et celui


d'initialisation asynchrone . Dans ce cas, la condition
asynchrone est prioritaire ( IF RST='1' ) et le front
d'horloge n'est pris en compte que si la condition
d'initialisation n'est pas vérifiée.
H. AMIRY 24/10/2024 126
Fonctionnement séquentielle
Notions de PROCESS
• Process clockés avec initialisation asynchrone :
• Syntaxe :
Exemple: process (CK, RST) -- liste de sensibilité
begin
if RST = '1' then
COUNT <= "0000"; -- action asynchrone
elsif (CK'event and CK='1') then
COUNT <= COUNT + 1; -- action synchrone
end if;
end process;

H. AMIRY 24/10/2024 127


Fonctionnement séquentielle
Notions de PROCESS
Incohérences de conception supportées par le langage VHDL :
A S
A S D S Q
D Q B
B
C T
C T D Q
D Q
D R
D CK
CK INIT

process (CK, INIT, A, B, C, D )

process (CK, A,B,C,D ) -- process clocké avec


-- initialisation
-- process clocké pur -- asynchrone
begin begin
if CK’event and CK=‘1’ if INIT=‘1’ then
then S <= ‘1’; T <= ‘0’;
if (A=‘1’ and B=‘0’ elsif CK’event and CK=‘1’
then... then
if (A=‘1’ and B=‘0’)
then...

H. AMIRY 24/10/2024 128


Fonctionnement séquentielle
Notions de PROCESS
•Variables et signaux :
✓Le terme SIGNAL dans le langage VHDL, a une signification
similaire à celle que nous connaissons dans le jargon de
l’électronique ( une NET, ou un BUS ).
L’ affectation d’une valeur à un signal dans un process
s’effectue toujours à la fin du process (end process;).
✓Le terme VARIABLE indique un objet immatériel, dont la
conversion après synthèse ne donnera pas lieu ( en principe ) à
la création d’un signal électrique.
L’affectation d’une VARIABLE dans un process est immédiate.

H. AMIRY 24/10/2024 129


Fonctionnement séquentielle
Notions de PROCESS
• Les signaux :

• Objets pouvant être déclarés à l'intérieur d'une entité (


ports ) ou d'une architecture (signaux internes).

•Visibles dans toute l'architecture (à condition de


déclarer le signal dans l’architecture et pas dans le
process)

•Dans un process l'affectation d'une valeur à un signal se


fait avec un retard .

H. AMIRY 24/10/2024 130


Fonctionnement séquentielle
Notions de PROCESS
• Les signaux : Exemple A
D Q TMP
entity SIG is C
port (A, B, C, CK : in std_logic;
S, T : out std_logic);
end SIG; D Q S
CK
architecture ARCHI of SIG is
signal TMP : std_logic;
begin T
D Q
process(CK)
begin
if CK'event and CK='1' then
TMP <= A or B; -- cette ligne sera ignorée
S <= TMP;
TMP <= A and C; -- annule l'affectation précédente
T <= not(TMP); -- sur le signal TMP.
end if;
end process; -- ici TMP, S et T prennent leurs nouvelles valeurs
end ARCHI;

H. AMIRY 24/10/2024 131


Fonctionnement séquentielle
Notions de PROCESS
• Les signaux : Exemple A
D Q TMP
architecture ARCHI of SIG is C
signal TMP : std_logic;
begin
process(CK) D Q S
begin CK
if CK'event and CK='1' then
TMP <= A or B;
S <= TMP; CK
D Q T
TMP <= A and C;
T <= not(TMP); A
end if; B = ‘1’
end process;
end ARCHI; C
TMP
S

H. AMIRY 24/10/2024 132


Fonctionnement séquentielle
Notions de PROCESS
• Les variables :

✓ Objets pouvant être déclarés à l'intérieur d'un process (ou autres


unités séquentielles: Fonction et Procedure).

✓Invisibles à l'extérieur du process où elles sont déclarées.

✓L'affectation d'une variable se fait à l'instant précis où l'instruction


est exécutée. (pas de délai).

✓Les variables sont utilisées pour faciliter l'écriture du code

✓Elles donnent au langage VHDL un comportement similaire à celui d'un


langage informatique ( notion d'exécution en séquence ).

H. AMIRY 24/10/2024 133


Fonctionnement séquentielle
Notions de PROCESS
• Les variables :
Exemple: entity VAR is
port (A, B, C, CK : in std_logic; A
S, T : out std_logic); D Q S
B
end VAR;

architecture ARCHI of VAR is


A
begin D Q T
process(CK) C
variable TMP : std_logic;
begin CK
if CK'event and CK='1' then
TMP := A or B; -- cette ligne sera effective pour
S <= TMP; -- l'affectation du signal S
TMP := A and C; -- celle-ci le sera pour
T <= not(TMP); -- l'affectation du signal T
end if;
end process;
end ARCHI;

H. AMIRY 24/10/2024 134


Fonctionnement séquentielle
entity SIG is entity VAR is
port (A, B, C, CK : in std_logic; port (A, B, C, CK : in std_logic;
S, T : out std_logic); S, T : out std_logic);
end VAR;
end SIG;
architecture ARCHI of SIG is architecture ARCHI of VAR is
signal TMP : std_logic; Begin
Begin process(CK)
process(CK) variable TMP : std_logic;
Begin Begin
if CK'event and CK='1' then if CK'event and CK='1' then
TMP <= A or B; -- cette ligne sera ignorée TMP := A or B; -- cette ligne sera effective pour
S <= TMP; S <= TMP; -- l'affectation du signal
TMP <= A and C; -- annule l'affectation précédente TMP := A and C; -- celle-ci le sera pour
T <= not(TMP); -- sur le signal TMP. T <= not(TMP); -- l'affectation du signal T
end if; end if;
end process; end process;
end ARCHI; end ARCHI;
A D TMP
Q
A
C D Q S
B

D Q S
CK A
D Q T
C

D Q T CK

H. AMIRY 24/10/2024 135


Fonctionnement séquentielle
Les instructions
Test conditionnel : if .. Then .. [elsif] .. Then ..[else]..end if;
On peut avoir:
if condition1 then Instruction1; Instructions2; ….
elsif condition2 then Instruction1; Instructions2; ….
….
else Instruction1; Instructions2; ….
end if;

On peut aussi avoir:


if condition1 then Instruction1; Instructions2; ….
else Instruction1; Instructions2; ….
end if;

On peut aussi avoir:


if condition1 then Instruction1; Instructions2; ….
end if;

H. AMIRY 24/10/2024 136


Fonctionnement séquentielle
Les instructions
Test conditionnel : if .. Then .. [elsif] .. Then ..[else]..end if;
Exemple :

signal A, B, C, D : std_logic_vector(7 downto 0);


signal SEL : std_logic_vector(1 downto 0);
signal MUX : std_logic_vector(7 downto 0);

BLABLA : process (A, B, C, D, SEL) -- label BLABLA


-- facultatif
-- partie déclarative non utilisée dans cet exemple
begin
if SEL = "00" then MUX <= A;
elsif SEL = "01" then MUX <= B;
elsif SEL = "10" then MUX <= C;
else MUX <= D;
end if;
end process;
H. AMIRY 24/10/2024 137
Fonctionnement séquentielle
Les instructions
Test conditionnel : if .. Then .. [elsif] .. Then ..[else]..end if;

Syntaxe :
• Toute instruction IF doit être clôturée par END IF;
• IF est en général suivi de ELSE.
•Plusieurs IF peuvent être cascadés, mais la contraction
ELSIF permet de simplifier l'écriture par rapport à une
écriture plus traditionnelle

H. AMIRY 24/10/2024 138


Fonctionnement séquentielle
Les instructions
Test conditionnel : if .. Then .. [elsif] .. Then ..[else]..end if;
Exemple:
process (A, B, C, D, SEL) process (A, B, C, D, SEL)
begin begin
if SEL = "00" then MUX <= A; if SEL = "00" then MUX <= A;
else if SEL = "01" then MUX <= B; elsif SEL = "01" then MUX <= B;
else if SEL = "10" then MUX <= C; elsif SEL = "10" then MUX <= C;
else MUX <= D; else MUX <= D;
end if; end if;
end if; end process;
end if;
end process;

D 0

1 0
C
1 0
B MUX
1
"10" A
CMP
= "01"
SEL[1:0] CMP
= "00"
SEL[1:0] CMP
SEL[1:0] =

H. AMIRY 24/10/2024 139


Fonctionnement séquentielle
Les instructions
Assignation conditionnel :
case selecteur is
when valeur1 => instructions
when valeur2 => instructions
…..
when others => Instructions
end case;
Instruction permettant de passer en revue toutes les valeurs possibles
d'un signal.
✓ Tous les cas de figure possibles doivent être cités.
✓ Généralement, le dernier cas cité englobe toutes les possibilités
de valeurs non encore citées par la commande WHEN OTHERS.
✓Très utilisé pour la description de machines d'états, et les
fonctions combinatoires sous forme de table de vérité

H. AMIRY 24/10/2024 140


Fonctionnement séquentielle
Les instructions
Assignation conditionnel : case selecteur is … end case;

Exemple :
process (A, B, C, D, SEL)
begin D OTHERS
case SEL is C "10"
when "00" => MUX <= A; MUX
B "01"
when "01" => MUX <= B;
when "10" => MUX <= C; A "00"
when others => MUX <= D;
end case;
end process; "00", "01", "10" DECODAGE
SEL[1:0] VALEURS

-- WHEN OTHERS permet de citer en dernier lieu tous les autres


-- cas possibles qui n'auraient pas été cites précédemment.
-- Le symbole " => " est à interpréter comme "implique que"
-- ou "alors" ( then ).

H. AMIRY 24/10/2024 141


Fonctionnement séquentielle
Les instructions
Instruction de boucle:
[etiquette:] for variable_boucle in intervalle loop
instructions
end loop [etiquette] ;

Exemple 1 : Génération d’un signal de fin de comptage ( tous les bits du


compteur à ‘1’ ).
process (CNT) COUNT(0)
variable TMP : std_logic; COUNT(1) TERM_CNT
COUNT(2)
begin
COUNT(3)
TMP := ‘1’;
for I in CNT'range loop
TMP := TMP and CNT(I); -- TMP conserve la valeur ‘1’ tant que
end loop; -- les bits du bus CNT sont à ‘1’.
TERM_CNT <= TMP;
end process;

H. AMIRY 24/10/2024 142


Fonctionnement séquentielle
Les instructions
Instruction de boucle:
[etiquette:] for variable_boucle in intervalle loop
instructions
end loop [etiquette] ;
Exemple 2 :
LIBRARY ieee; 8 8
USE ieee.std_logic_1164.all; a S
ENTITY Circuit IS GENERIC (N : natural := 8);
PORT ( a: IN STD_LOGIC_VECTOR(N-1 DOWNTO 0);
s : OUT STD_LOGIC_VECTOR(N-1 DOWNTO 0) );
END Circuit; • pour 0 i  2 :
ARCHITECTURE archi OF Circuit IS Si = ai.ai+1 + /ai./ai+1
BEGIN
PROCESS(a)
BEGIN • S3 = a 0
S(3) <= a(0);
boucle: FOR i IN 0 TO N-1 LOOP • pour 4 i  7 :
IF i = 3 then NEXT; mémorisation
ELSIF i = 4 then EXIT boucle;
ELSE S(i) <= ( a(i) AND a(i+1) ) OR ( NOT a(i) AND NOT a(i+1) );
END IF;
END LOOP;
END PROCESS;
END archi;
H. AMIRY 24/10/2024 143
Fonctionnement séquentielle
Les instructions
Instruction de boucle:
[etiquette]: while condition loop
instructions
end loop [etiquette] ;
Remarque: Avec certains outils de synthèse, cette instructions n’est pas synthétisable
Exemple :
LIBRARY ieee;
USE ieee.std_logic_1164.all; 8 8
ENTITY Circuit IS GENERIC (N : natural := 8); a S
PORT ( a: IN STD_LOGIC_VECTOR(N-1 DOWNTO 0);
s : OUT STD_LOGIC_VECTOR(N-1 DOWNTO 0) );
END Circuit;
ARCHITECTURE archi OF Circuit IS • s0 = a0
BEGIN
PROCESS(a) • pour i > 0 :
VARIABLE i: integer := N-1; Si = ai . ai-1 + /ai . /ai-1
BEGIN s(0) <= a(0);
Boucle: WHILE i > 0 LOOP
S(i) <= ( a(i) AND a(i-1)) OR ( NOT a(i) AND NOT a(i-1) );
i := i –1;
END LOOP boucle;
END PROCESS;
END archi;
H. AMIRY 24/10/2024 144
Fonctionnement concurrentielle et séquentielle
Instructions concurrentielle Instructions séquentielle
Assignation inconditionnelle de signal Assignation inconditionnelle de signal
‘ <= ‘ ‘ <= ‘
Assignation de constante Assignation de variable ou constante
‘ := ‘ ‘ := ‘

Assignation conditionnelle
Assignation conditionnelle
Signal <= expression1 when condition1 else
if condition then instructions
expression2 when condition2 else
elsif condition then instructions
..... ..... .....
else instructions
else expressionN ;
end if;

Assignation selective Assignation selective


with selecteur select case selecteur is
Signal <= expression1 when valeur1_selecteur , when valeur1_selecteur => instructions
expression2 when valeur2_selecteur , .... ..... .....
… … …, when others => instructions
expressionN when others ; end case;

Instruction de boucle générique Instructions de boucle


etiquette : for variable_de_boucle in valeur_debut to valeur_fin generate [etiquette]: for variable_boucle in intervalle loop
instructions; instructions
end generate [etiquette] ; end loop [etiquette] ;
Instruction de test conditionnel générique
etiquette: if condition generate [etiquette]: while condition loop
instructions; instructions
end generate [etiquette]; end loop [etiquette ];

Process
[Nom_Process] : process (liste_de_signaux_de_déclenchement)
Instanciation de composant -- déclaraction de signaux, variables, constantes, types et alias
etiquette: Nom_Composant port map (param1,…, paramN) ;
begin
-- corps du process : instructions
end process [Nom_Process];

H. AMIRY 24/10/2024 145


Machine d’état

H. AMIRY 24/10/2024 146


Machine d’état

Définition: Une machine d’état est un système séquentielle qui


évolue d’un état à un autre suivant les conditions des signaux
d’entrées et du vecteur Y qui représente son état interne.
Machine d’état
• Système asynchrone:

Entrées

Tr: Temp de réponse


Sorties

Tr Tr

• La réponse du système, lors d’un changement de l’état des entrées


presque immédiate.
• Temps de réponse Tr est toujours régulier.
• En revanche, le système asynchrone présente des alias temporels.
• Le système asynchrone ne garantit pas une durée minimale à chaque état.

H. AMIRY 24/10/2024 148


Machine d’état
• Système synchrone:

Entrées

Horloge

Sorties

Tr Tr Tr: Temp de réponse

• Un système synchrone évolue au rythme d’une horloge.


•La réponse du système n’est donc pas immédiat et le temps de réponse Tr n’est
pas régulier
• Le mode synchrone est préféré parce que chaque état à une durée minimale qui
est la période d’horloge, ce qui permet de résoudre les aléas temporels.

H. AMIRY 24/10/2024 149


Machine d’état
• Machine d’état de type MOORE:

Machine de MOORE
état futur du système état actuel du système
n

n n m sorties du
entrées du p d q calcul des
calcul de système
système l ’état futur H sorties

logique combinatoire registre logique combinatoire


Horloge

• Les sorties du système ne dépendent pas des entrées


• Elles ne dépendent que de l’état actuel du système.
• Les états de cette machine sont synchronisées par rapport à une horloge.
• Les sorties peuvent être déterminées par une logique combinatoire (hors
process) ou par un process combinatoire.
• La durée minimale de réponse de la machine de Moore est la période d’horloge.
H. AMIRY 24/10/2024 150
Machine d’état
• Machine d’état de type MEALY:

Machine de MEALY
état futur du système état actuel du système
n
k

n n m sorties du
entrées du p d q calcul des
calcul de système
système l ’état futur H sorties

logique combinatoire registre logique combinatoire


Horloge

•Les sorties du système dépendent de l’état actuel (mode synchrone) et des


entrées (mode asynchrone).

• La durée minimale de réponse de la machine de Mealy peut être courte puisque


les entrées peuvent modifier les sorties de manière combinatoire.

H. AMIRY 24/10/2024 151


Machine d’état
• Exercice : Traduire en VHDL suivant le modèle de Mealy
la machine d’états représentée par le diagramme suivant:

H. AMIRY 24/10/2024 152


Machine d’état
process(RST, A, B, C, Etat_Actuel)
Begin
if RST = ‘1’ then Etat_Futur <= S0;
else case Etat_Actuel is
when S0 => if A = '1' and B = '0' then Etat_Futur <= S1;
elsif A = '0' and B = '1' then Etat_Futur <= S2;
else Etat_Futur <= S0; end if;
when S1 => if A = '1' and B = '1' then Etat_Futur <= S3;
else Etat_Futur <= S1; end if;
when S2 => if A = '1' and B = '1' then Etat_Futur <= S3;
else Etat_Futur <= S2; end if;
when S3 => Etat_Futur <= S4;
when S4 => if C = '1' then Etat_Futur <= S0;
else Etat_Futur <= S4; end if;
when others => Etat_Futur <= S0;
end case;
end process;

RST
A = ‘1’
B = ‘1’ Machine d’état
C = ‘0’ de type
CK MEALY
Etat_Futur S2 S3 S4 S0

Etat_Actuel S2 S3 S4 S0

H. AMIRY 24/10/2024 153


Les sous-programmes: Fonction et Procédure

H. AMIRY 24/10/2024 154


Les sous-programmes: Fonction et Procédure
•Fonction :
function Nom_Fonction (param1: in type_param1; param2: in type_param2;…,paramN: in type_paramN)
return type_Fonction is
begin
{instructions séquentielles} ;
end function Nom_Fonction ;

✓Sous-programme pouvant être appelé une ou plusieurs fois par le programme


principal. Permettent de déporter une partie du code tout en améliorant la
lisibilité.
✓Une fonction nécessite un ou plusieurs paramètres d'entrée (ports d’une
entity en mode in ou signaux internes), et renvoie une valeur suivant un type.
Exemple :
function BOOL_TO_STDLOGIC ( A : in boolean ) return STD_LOGIC is
begin
if A then return '1';
else return '0';
end if;
end BOOL_TO_STDLOGIC;
H. AMIRY 24/10/2024 155
Les sous-programmes: Fonction et Procédure
• Fonction :
Une fonction doit être déclarée avant d'être utilisée.

Exemple :
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity FONCTION is
port ( ENTREE : in boolean; B : in STD_LOGIC;
C : out STD_LOGIC);
end FONCTION;

architecture ARCHI of FONCTION is


function BOOL_TO_STDLOGIC (A : boolean) return STD_LOGIC is
begin
Déclaration if A then return '1'; else return '0'; end if;
end BOOL_TO_STDLOGIC ;
begin
C <= B and BOOL_TO_STDLOGIC (ENTREE); -- ENTREE est le paramètre
Appel end ARCHI; -- de la fonction
Les sous-programmes: Fonction et Procédure
• Fonction :
Une fonction doit être déclarée avant d'être utilisée.
Exemple :
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity FONCTION is
port ( ENTREE : in STD_LOGIC; B : in STD_LOGIC;
C : out STD_LOGIC);
end FONCTION;

architecture ARCHI of FONCTION is


Signal S: boolean;
function BOOL_TO_STDLOGIC (A : boolean) return STD_LOGIC is
begin
Déclaration if A then return '1'; else return '0'; end if;
end BOOL_TO_STDLOGIC;
Begin
S <= (ENTREE = ‘1’); -- Conversion std_logic → boolean
Appel C <= B and BOOL_TO_STDLOGIC(S); -- le signal interne S est le
end ARCHI; -- paramètre de la fonction

H. AMIRY 24/10/2024 157


Les sous-programmes: Fonction et Procédure
• Fonction :
Les paramètres (entrées) de la fonction sont entièrement génériques (on ne spécifie pas la
dimension d’un tableau, l’intervale d’un integer,…), c’est pendant l’appel de la fonction que
les propriétés complètes des entrées sont spécifiés.

Exemple : La fonction parite = true si le nombre de bit à 1 de A est paire, sinon false

function parite ( A : in std_logic_vector)


return boolean is
variable var: std_logic := ‘1’; function to_boolean (A : std_logic) return
begin boolean is
boucle: for i in A’range loop begin
if A(i) = ‘1’ then var := var xor A(i); if (A = '1' or A = 'H') then return true;
end if; else return false;
end loop; end if;
return to_boolean(var); end to_boolean;
end parite;

• Les fonctions font appel au jeu des instructions séquentielles.


• Des variables locales peuvent donc être déclarées.
• Les variables déclarées dans une fonction sont réinitialisées lors de chaque appel.
(pas d'effet de mémorisation sur la variable entre deux appels)
H. AMIRY 24/10/2024 158
Les sous-programmes: Fonction et Procédure
• Fonction :
Les fonctions peuvent être déclarées dans la partie déclarative de l'architecture ou
dans un package:
package CONVERSIONS is
Component codeur port(N:integer; Z: bit_vector(7 downto 0);
....
Zone de Déclaration function Bit_Boolean(A : bit) return boolean ;
function Bit_Integer(A : bit_vecteur) return integer ;
function Integer_Bit(A : integer) return bit_vector ;
end package CONVERSIONS ;
package body CONVERSIONS is
function Bit_Boolean(A : bit) return boolean is
begin
if ( A = ‘1’) then return (TRUE) ;
else return (FALSE) ;
end if ;
Zone de end function Bit_Boolean ;
développement des function Bit_Integer(A : bit_vecteur) return integer is
sous programmes: begin
Fonction et procédure …
end function Bit_Integer ;
function Integer_Bit(A : integer) return bit_vector is
begin

end function Integer_Bit ;
end package body CONVERSIONS ;
H. AMIRY 24/10/2024 159
Les sous-programmes: Fonction et Procédure
• Procédure :
procedure Nom_Proc (parin1,…,parinN: in type_in; parout1,…,paroutP: out type_out) is
begin
{instructions} ;
end procedure Nom_Proc ;

✓ Sous-programme pouvant être appelé une ou plusieurs fois par le


programme principal.

✓Une procédure peut avoir comme paramètres des objets de mode in, out ou
inout ainsi que les signaux internes, mais la taille des paramètres reste
totalement générique .

✓ Les procédures font appel au jeu des instructions séquentielles.

✓ Des variables locales peuvent être déclarées. Elles sont réinitialisées lors
de chaque appel de la procédure.

H. AMIRY 24/10/2024 160


Les sous-programmes: Fonction et Procédure
• Procédure :
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.STD_LOGIC_UNSIGNED.all;

entity PROCEDU is
port ( A, B : in STD_LOGIC_VECTOR(9 downto 0);
SORTIE : out STD_LOGIC_VECTOR(9 downto 0));
end PROCEDU;

architecture ARCHI of PROCEDU is

procedure MIN( signal L, M : in STD_LOGIC_VECTOR;


signal S : out STD_LOGIC_VECTOR) is
Déclaration begin
if L < M then S <= L; else S <= M; end if;
end MIN;

begin

Appel MIN(A, B, SORTIE);

end ARCHI;
H. AMIRY 24/10/2024 161

Vous aimerez peut-être aussi