Circuits Numériques Programmables Et VHDL-2024-2025
Circuits Numériques Programmables Et VHDL-2024-2025
Circuits Numériques Programmables Et VHDL-2024-2025
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
✓ Apprendre les bases de la conception d’un circuit numérique (combinatoire et/ou séquentiel);
H. AMIRY 24/10/2024 2
PLAN
Introduction du module
Partie 1:
Partie 2:
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
H. AMIRY 24/10/2024 4
Partie 1
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
H. AMIRY 24/10/2024 6
1. Introduction aux circuits intégrés
Du transistor au circuit intégré
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:
✓ 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 contraintes
❑ Il faut ensuite choisir le type de technologie que l’on va utiliser, c’est-à-dire, quel type de transistor sera la base
❑ La plus utilisée est la technologie CMOS (Complementary Metal Oxide Semiconductor) du fait de son faible
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.
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
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
H. AMIRY 24/10/2024 31
3. Les circuits logiques programmables
PAL (Programmable Array Logic) : réseaux logiques programmables
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??
H. AMIRY 24/10/2024 33
3. Les circuits logiques programmables
PAL : Matrice de programmation
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
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.
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)
H. AMIRY 24/10/2024 39
3. Les circuits logiques programmables
Choix des P.L.D
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:
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
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.
H. AMIRY 24/10/2024 48
3. Les circuits logiques programmables
Les FPGA
Structure interne d’un FPGA
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
configurables
H. AMIRY 24/10/2024 51
3. Les circuits logiques programmables
Les FPGA
Les types de blocs logiques dans les FPGA
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
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
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 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
H. AMIRY 24/10/2024 63
Partie 2: Introduction
VHDL pour la conception
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
Architecture
H. AMIRY 24/10/2024 66
Structure du VHDL
Exemple simple: entité
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
architecture v1 of AOI is
-- les déclarations
begin
On remarque aussi que -- est utilisé pour des commentaires. Il existe deux parties dans l’architecture
- avant begin : zone des déclarations
H. AMIRY 24/10/2024 68
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
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
✓ VARIABLES : utilisées seulement dans les process et sous programmes ( instructions séquentielles ).
H. AMIRY 24/10/2024 78
Classe d’objets et règles de déclaration
Exemple:
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
✓ 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
•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.
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
✓ 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:
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
✓ 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);
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’);
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);
H. AMIRY 24/10/2024 92
Règles d’affectation
• Affectation simple d'une valeur à un objet suivant sa classe :
• Pour un signal : <=
Exemples :
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 à )
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
• 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
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;
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 ;
instruction2; instruction1;
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.
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)
✓ 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 ).
✓ 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.
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;
D Q S
CK A
D Q T
C
D Q T CK
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
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] =
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
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;
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];
Entrées
Tr Tr
Entrées
Horloge
Sorties
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
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
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
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;
entity FONCTION is
port ( ENTREE : in STD_LOGIC; B : in STD_LOGIC;
C : out STD_LOGIC);
end FONCTION;
Exemple : La fonction parite = true si le nombre de bit à 1 de A est paire, sinon false
✓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 .
✓ Des variables locales peuvent être déclarées. Elles sont réinitialisées lors
de chaque appel de la procédure.
entity PROCEDU is
port ( A, B : in STD_LOGIC_VECTOR(9 downto 0);
SORTIE : out STD_LOGIC_VECTOR(9 downto 0));
end PROCEDU;
begin
end ARCHI;
H. AMIRY 24/10/2024 161