1.
Logique câblée vs Logique programmée
Il existe deux grandes façons de concevoir des circuits électroniques : la
logique câblée et la logique programmée. Voici la différence entre les
deux de manière simple :
📌 Logique câblée (Circuits fixes)
👉 Définition :
Un circuit électronique est conçu avec des composants physiques
fixes (portes logiques AND, OR, NOT, etc.).
Une fois fabriqué, on ne peut plus modifier son fonctionnement.
👉 Avantages :
✅ Très rapide car le traitement est parallèle.
✅ Pas besoin de programmation.
👉 Inconvénients :
❌ Pas flexible : si on veut modifier le circuit, il faut tout refaire.
❌ Prend beaucoup de place si le circuit est complexe.
🛠 Exemple de logique câblée : Additionneur Binaire
Un additionneur à 2 bits peut être fabriqué avec des portes logiques
câblées. Une fois assemblé, il ne peut pas être modifié.
📌 Logique programmée (Circuits modifiables)
👉 Définition :
On utilise des circuits électroniques reprogrammables comme les
FPGA (Field Programmable Gate Array) et les
microcontrôleurs.
Le fonctionnement du circuit peut être modifié en changeant son
programme.
👉 Avantages :
✅ Très flexible : on peut changer la fonction du circuit à tout moment.
✅ Moins de composants physiques, donc un gain de place.
✅ Moins de coûts de fabrication (pas besoin de refaire un circuit à chaque
modification).
👉 Inconvénients :
❌ Plus lent qu’un circuit câblé car il utilise une logique séquentielle.
❌ Nécessite une programmation avec un langage comme VHDL.
🛠 Exemple de logique programmée : Additionneur sur un FPGA
Avec un FPGA, on peut écrire un code VHDL qui décrit un additionneur
binaire. Si on veut changer l’additionneur en un autre circuit (ex : un
compteur), il suffit de reprogrammer le FPGA sans modifier le matériel.
📊 Comparaison rapide :
Critère Logique câblée Logique programmée
Flexibilité ❌ Pas modifiable ✅ Modifiable
Vitesse ✅ Très rapide ⚠️Un peu plus lent
❌ Cher pour des ✅ Économique pour des mises à
Coût
modifications jour
Taille du
❌ Peut être grand ✅ Optimisé et compact
circuit
Additionneur avec portes Additionneur programmable en
Exemple
logiques VHDL
En résumé :
Logique câblée = rapide mais rigide.
Logique programmée = flexible et évolutive, mais un peu plus
lente.
Tu veux un exemple détaillé en VHDL pour illustrer la logique
programmée ? 😊
🔹 Réseau logique programmable - PLA (Programmable Logic Array)
Le PLA (Programmable Logic Array) est un type de PLD
(Programmable Logic Device) qui permet de programmer à la fois
les portes AND et OR. C'est l'un des circuits logiques programmables les
plus flexibles.
📌 1. Principe du PLA
Un PLA est un circuit intégré qui contient :
✔ Une matrice AND programmable → Permet de créer des expressions
logiques de base.
✔ Une matrice OR programmable → Combine les résultats des AND
pour obtenir la sortie finale.
📌 Avantage principal : Très flexible, car on peut personnaliser
entièrement les connexions des portes logiques.
📌 Inconvénient : Plus complexe et coûteux que d'autres PLD comme le
PAL.
📌 2. Fonctionnement du PLA
Un PLA fonctionne en utilisant des fusibles programmables sur une
matrice AND-OR.
Exemple simple : Réalisation d’une fonction logique
Si on veut réaliser la fonction :
Y=(A⋅B)+(B⋅C)+(A‾⋅C)Y = (A \cdot B) + (B \cdot C) + (\overline{A} \cdot C)
On utilise une matrice PLA qui :
1️⃣ Programme les combinaisons AND :
A⋅BA \cdot B
B⋅CB \cdot C
A‾⋅C\overline{A} \cdot C
2️⃣ Programme la somme OR pour obtenir la sortie Y.
Schéma d'un PLA simplifié :
Entré Sorti
Matrice AND Matrice OR
es e
A⋅BA \cdot B, B⋅CB \cdot Y=(A⋅B)+(B⋅C)+(A‾⋅C)Y = (A \cdot
A, B, C C, A‾⋅C\overline{A} \cdot B) + (B \cdot C) + (\overline{A} \ Y
C cdot C)
📌 3. Comparaison entre PLA et autres PLD
Type de Matrice Exemples
Matrice OR Flexibilité
PLD AND d’application
Programmab Programmab Circuits logiques
PLA ✅ Très flexible
le le complexes
Programmab Circuits rapides et
PAL Fixe ⚠️Moins flexible
le optimisés
GAL Programmab Programmab ✅ Évolution des PAL
Type de Matrice Exemples
Matrice OR Flexibilité
PLD AND d’application
Reprogrammabl
le le
e
Programmab Programmab Contrôleurs, gestion
CPLD ✅ Très puissant
le le d’interfaces
📌 4. Applications des PLA
✔ Remplacement de circuits logiques câblés pour optimiser l’espace.
✔ Réalisation d’unités de contrôle pour les processeurs.
✔ Circuits de communication et d’automatisation.
📌 Exemple concret :
Dans un système embarqué, un PLA peut être utilisé pour décoder des
adresses mémoire et activer un périphérique spécifique en fonction
des signaux reçus.
🎯 Conclusion
🔹 Le PLA est un circuit programmable très flexible qui permet de
personnaliser AND et OR.
🔹 Il est utilisé pour réaliser des fonctions logiques complexes et
remplacer des circuits fixes.
🔹 Il est plus puissant que le PAL, mais aussi plus coûteux et parfois
plus lent.
👉 Tu veux un exemple en VHDL pour programmer un PLA ? 😊
🔹 PAL (Programmable Array Logic)
Le PAL (Programmable Array Logic) est un type de circuit logique
programmable appartenant à la famille des PLD (Programmable Logic
Devices). Il est plus simple et plus rapide que le PLA, mais moins flexible.
📌 1. Principe du PAL
Un PAL est un circuit contenant :
✔ Une matrice AND programmable → Permet de définir les produits
logiques.
✔ Une matrice OR fixe → Combine les produits pour générer la sortie.
📌 Différence avec un PLA :
Dans un PLA, les matrices AND et OR sont programmables.
Dans un PAL, seule la matrice AND est programmable, la matrice
OR est fixe.
📌 Avantages du PAL :
✅ Plus rapide que le PLA.
✅ Moins coûteux.
✅ Plus simple à programmer.
📌 Inconvénients du PAL :
❌ Moins flexible car la matrice OR est fixe.
❌ Ne peut pas réaliser des fonctions logiques très complexes comme un
CPLD ou un FPGA.
📌 2. Fonctionnement du PAL
Dans un PAL, on programme uniquement la matrice AND pour obtenir les
expressions logiques souhaitées.
Exemple de fonction logique dans un PAL
Imaginons que nous voulons réaliser la fonction logique suivante :
Y=(A⋅B)+(A‾⋅C)Y = (A \cdot B) + (\overline{A} \cdot C)
Dans un PAL, nous pouvons :
1️⃣ Programmer la matrice AND pour générer les termes A⋅BA \cdot B
et A‾⋅C\overline{A} \cdot C.
2️⃣ Utiliser la matrice OR fixe pour additionner ces termes et obtenir Y.
📌 3. Exemple : PAL16L8
Un des PAL les plus courants est le PAL16L8, qui a :
✔ 10 entrées (pins 1-9 et 11)
✔ 2 sorties (pins 12 et 19)
✔ 6 entrées/sorties configurables (pins 13-18)
📌 Particularité : Chaque sortie est contrôlée par un tampon inverseur
(tri-state buffer) pour permettre différentes configurations.
📌 Utilisation : Ce type de PAL est souvent utilisé dans les systèmes
embarqués, les circuits de contrôle et les interfaces de
communication.
📌 4. Comparaison entre PAL, PLA et GAL
Type de Matrice Reprogrammab
Matrice OR Flexibilité
PLD AND le ?
Programmab Programmab
PLA ✅ Très flexible ❌ Non
le le
Programmab ⚠️Moins
PAL Fixe ❌ Non
le flexible
Programmab Programmab
GAL ✅ Flexible ✅ Oui (EEPROM)
le le
📌 5. Applications des PAL
✔ Remplacement de circuits logiques fixes.
✔ Systèmes de contrôle industriels.
✔ Gestion d’adresses mémoire dans les systèmes embarqués.
✔ Automatisation et robotique.
📌 Exemple concret :
Dans une carte électronique, un PAL peut être utilisé pour activer
différents périphériques en fonction des signaux de commande.
🎯 Conclusion
🔹 Le PAL est un circuit programmable plus simple et plus rapide
que le PLA.
🔹 Il est utilisé pour des applications nécessitant des circuits
logiques personnalisés avec une bonne rapidité.
🔹 Son principal inconvénient est sa matrice OR fixe, qui limite sa
flexibilité.
👉 Tu veux un exemple en VHDL pour programmer un PAL ? 😊
🔹 CPLD (Complex Programmable Logic Device)
Le CPLD (Complex Programmable Logic Device) est un circuit logique
programmable plus avancé que les PAL, GAL et PLA. Il est utilisé pour
des applications plus complexes, nécessitant un grand nombre de
portes logiques et une rapidité d'exécution élevée.
📌 1. Principe du CPLD
📌 Définition :
Un CPLD est un circuit programmable qui contient plusieurs blocs
logiques interconnectés, appelés macrocells.
✔ Composé de plusieurs blocs logiques (LUs - Logic Units).
✔ Programmable en VHDL ou Verilog.
✔ Plus rapide et plus puissant que les PAL et GAL.
✔ Non volatil : Garde sa configuration même après une coupure
d’alimentation.
📌 Différence entre CPLD et FPGA :
CPLD : Bonne performance pour des circuits logiques simples et
rapides.
FPGA : Plus puissant, mais plus complexe et consomme plus
d’énergie.
📌 2. Structure d’un CPLD
Un CPLD est constitué de plusieurs blocs logiques programmables
reliés entre eux par un réseau d’interconnexion global.
📌 Composition d’un CPLD :
🔹 Macrocells : Blocs logiques contenant des portes logiques et des
bascules.
🔹 Réseau d’interconnexion programmable : Permet de relier les blocs
logiques entre eux.
🔹 Mémoire non volatile : Garde la programmation même après
extinction.
📌 Avantage du CPLD :
✅ Plus rapide que les FPGA pour certaines applications.
✅ Moins de consommation d’énergie qu’un FPGA.
✅ Peut être utilisé pour du prototypage rapide.
📌 Inconvénients du CPLD :
❌ Moins puissant et moins flexible qu’un FPGA.
❌ Nombre de portes logiques limité.
📌 3. Exemple de CPLD : Xilinx XC9500
Un exemple de CPLD populaire est le Xilinx XC9500, qui contient :
✔ De 36 à 288 macrocells.
✔ Interconnexions rapides pour des circuits logiques complexes.
✔ Mémoire EEPROM pour garder la programmation.
✔ Utilisé dans les systèmes embarqués, l’automatisation
industrielle et les interfaces de communication.
📌 4. Comparaison entre CPLD, PAL, GAL et FPGA
Type de Nombre de Reprogramma
Applications
PLD portes ble
Petites fonctions
PAL 10 - 100 ❌ Non
logiques
Circuits logiques
GAL 10 - 100 ✅ Oui
évolutifs
Interfaces, contrôle
CPLD 100 - 10 000 ✅ Oui
matériel
10 000 - Processeurs, IA,
FPGA ✅ Oui
millions télécoms
📌 5. Applications des CPLD
✔ Remplacement des circuits logiques câblés.
✔ Contrôleurs embarqués pour gérer des entrées/sorties.
✔ Systèmes de communication pour gérer des signaux numériques.
✔ Automatisation industrielle.
📌 Exemple concret :
Un CPLD peut être utilisé pour contrôler un écran LED en gérant les
signaux d’affichage et les entrées utilisateur.
🎯 Conclusion
🔹 Le CPLD est une solution intermédiaire entre les GAL/PAL et les
FPGA.
🔹 Il est utilisé pour des circuits logiques complexes mais rapides,
tout en restant moins coûteux que les FPGA.
🔹 Son principal avantage est sa mémoire non volatile et ses
interconnexions optimisées.
👉 Tu veux un exemple en VHDL pour programmer un CPLD ? 😊
🔹 Structure interne d’un FPGA (Field Programmable Gate Array)
Un FPGA est un circuit programmable constitué de milliers à des
millions de blocs logiques interconnectés. Il permet de créer des
circuits numériques complexes en utilisant VHDL ou Verilog.
📌 1. Architecture générale d’un FPGA
Un FPGA est composé de plusieurs éléments principaux :
1️⃣ Blocs logiques configurables (CLB - Configurable Logic Blocks)
2️⃣ Matrice d’interconnexion programmable
3️⃣ Blocs d’Entrée/Sortie (I/O Blocks)
4️⃣ Blocs de mémoire et DSP
5️⃣ Horloge et gestion de l’alimentation
📌 Fonctionnement général :
Les CLB réalisent les calculs et opérations logiques.
La matrice d’interconnexion relie ces blocs selon la configuration
programmée.
Les blocs d’Entrée/Sortie (I/O) communiquent avec l’extérieur.
Les blocs mémoire et DSP permettent d’accélérer certaines
opérations.
📌 2. Description détaillée des composants d’un FPGA
1️⃣ Blocs Logiques Configurables (CLB - Configurable Logic Blocks)
Les CLB sont les unités de calcul de base du FPGA. Chaque CLB contient :
✔ LUT (Look-Up Table) → Permet d’implémenter n’importe quelle
fonction logique.
✔ Bascule D (Flip-Flop) → Permet d’implémenter des circuits
séquentiels.
✔ Multiplexeurs et portes logiques → Pour acheminer les signaux.
📌 Exemple : LUT 4 entrées
Une LUT à 4 entrées peut réaliser n’importe quelle fonction logique
de 4 variables (A,B,C,DA, B, C, D).
Elle fonctionne comme une table de vérité programmable.
2️⃣ Matrice d’Interconnexion Programmable
📌 Rôle :
Connecte les CLB entre eux selon le design choisi.
Utilise des multiplexeurs et des interrupteurs programmables
pour modifier les connexions.
Permet de reconfigurer le FPGA en changeant ces connexions.
📌 Avantage :
✅ Permet une connexion flexible et évolutive des blocs logiques.
3️⃣ Blocs d’Entrée/Sortie (I/O Blocks)
📌 Rôle :
Permettent la communication entre le FPGA et les autres
composants (capteurs, mémoires, écrans, moteurs, etc.).
Supportent différents standards de tension (3.3V, 1.8V, LVDS,
etc.).
📌 Exemple :
Un FPGA utilisé pour contrôler un écran utilisera ses I/O Blocks pour
envoyer des signaux vidéo.
4️⃣ Blocs de mémoire et DSP
📌 Blocs mémoire (RAM intégrée) :
Certains FPGA contiennent de la mémoire RAM embarquée pour
stocker des données.
Exemple : FIFO, Dual-Port RAM, Block RAM (BRAM).
📌 Blocs DSP (Digital Signal Processing) :
Utilisés pour les calculs mathématiques rapides (ex :
multiplication, filtrage).
Très utiles pour les traitements d’image, audio et IA.
📌 Exemple :
Un FPGA utilisé pour l’intelligence artificielle exploitera ses blocs
DSP pour accélérer les calculs matriciels.
5️⃣ Horloge et gestion de l’alimentation
📌 Générateur d’horloge :
Chaque FPGA possède un circuit d’horloge programmable.
Permet de synchroniser les opérations des bascule D et des
circuits séquentiels.
📌 Gestion de l’énergie :
Certains FPGA ont des modes basse consommation.
L’alimentation dépend du modèle (1.2V, 1.8V, 3.3V, etc.).
📌 3. Schéma simplifié d’un FPGA
+------------------------------------------------------+
| Entrées / Sorties (I/O Blocks) |
| +----------+ +----------+ +----------+ |
|| I/O | | I/O | | I/O | |
| +----------+ +----------+ +----------+ |
| |
| +------------------------------------------------+ |
|| Matrice d'Interconnexion ||
| +------------------------------------------------+ |
| |
| +----------+ +----------+ +----------+ |
| | CLB | | CLB | | CLB | |
| +----------+ +----------+ +----------+ |
| |
| +------------------------------------------------+ |
| | Blocs mémoire (RAM, FIFO) & DSP ||
| +------------------------------------------------+ |
| |
| Horloge et Gestion de l’énergie |
+------------------------------------------------------+
📌 4. Comparaison FPGA vs CPLD
Critère FPGA CPLD
Nombre de Très grand (10 000 -
Moyen (100 - 10 000)
portes millions)
Programmatio
VHDL / Verilog VHDL / Verilog
n
Reprogramma ✅ Oui (EEPROM,
✅ Oui (SRAM, Flash)
ble Flash)
Consommatio
⚠️Moyenne/Élevée ✅ Faible
n
Circuits logiques
Utilisation Circuits très complexes
simples
📌 5. Applications des FPGA
📌 Les FPGA sont utilisés dans :
✔ Traitement d’image (caméras intelligentes, vidéosurveillance).
✔ Intelligence Artificielle (accélération des réseaux de neurones).
✔ Télécommunications (réseaux 5G, Wi-Fi, traitement du signal).
✔ Aérospatial & Défense (systèmes radar, drones autonomes).
✔ Automobile (ADAS, capteurs intelligents pour voitures autonomes).
📌 Exemple concret :
Un FPGA peut être utilisé dans une voiture autonome pour analyser
en temps réel les images des caméras et détecter les obstacles.
🎯 Conclusion
🔹 Un FPGA est un circuit programmable ultra-puissant et flexible.
🔹 Il est composé de blocs logiques (CLB), d’une matrice
d’interconnexion et de blocs d’Entrée/Sortie.
🔹 Il est utilisé dans les applications avancées comme l’IA, le
traitement d’image et les télécommunications.
👉 Tu veux un exemple en VHDL pour programmer un FPGA ? 😊
🔹 Bloc CLB – Étude de Xilinx Série 7
Les CLB (Configurable Logic Blocks) sont les éléments fondamentaux
d'un FPGA Xilinx Série 7. Ils permettent de créer et d’exécuter des
circuits logiques programmables en utilisant VHDL ou Verilog.
📌 1. Rôle du CLB dans un FPGA
📌 Définition :
Un CLB (Configurable Logic Block) est un bloc logique
programmable qui réalise des opérations logiques et arithmétiques
dans un FPGA.
📌 Chaque CLB contient :
✔ LUT (Look-Up Table) → Stocke des fonctions logiques programmables.
✔ Bascule D (Flip-Flop) → Gère les circuits séquentiels synchronisés par
une horloge.
✔ Multiplexeurs et interconnexions → Permettent de connecter les
différentes parties du FPGA.
📌 Avantages des CLB :
✅ Très flexibles → Peuvent être configurés pour exécuter n’importe quelle
fonction logique.
✅ Optimisés pour la vitesse → Permettent le calcul parallèle rapide.
✅ Consommation optimisée → Xilinx Série 7 utilise une technologie
avancée pour réduire la consommation d’énergie.
📌 2. Structure des CLB dans les FPGA Xilinx Série 7
Les CLB des FPGA Xilinx Série 7 sont plus avancés que les
générations précédentes et sont composés de plusieurs SLICE (tranches
logiques).
📌 Un CLB dans un FPGA Xilinx Série 7 contient :
Deux SLICE (SLICEM et SLICEL)
Chaque SLICE contient 4 LUT de 6 entrées (LUT6)
8 bascules D pour la logique séquentielle
Multiplexeurs pour les interconnexions
📌 Différence entre SLICEM et SLICEL :
✔ SLICEM (Memory Slice) : Peut être utilisé pour stocker des données
(RAM, mémoire FIFO, Shift Register).
✔ SLICEL (Logic Slice) : Utilisé uniquement pour la logique
combinatoire et séquentielle.
📌 Avantages de la structure en SLICE :
✅ Optimisation des ressources → Permet d’utiliser le FPGA de manière
plus efficace.
✅ Combinaison de mémoire et de logique → Améliore les
performances.
✅ Plus grande densité de calcul → Permet d’implémenter des circuits
plus complexes dans un FPGA de même taille.
📌 3. Fonctionnement des LUT dans les CLB
📌 Qu’est-ce qu’une LUT (Look-Up Table) ?
Une LUT (Look-Up Table) est une mémoire qui stocke une table de
vérité pour réaliser une fonction logique.
📌 Dans Xilinx Série 7 :
Chaque LUT peut avoir jusqu’à 6 entrées (LUT6).
Une LUT6 peut implémenter n’importe quelle fonction
logique à 6 variables.
Les LUT sont regroupées dans des SLICE pour former des CLB.
📌 Exemple : LUT réalisant la fonction XOR
Si nous avons une LUT configurée pour :
Y=A⊕BY = A \oplus B
Elle peut directement stocker la table de vérité correspondante et
fournir le résultat en un seul cycle.
📌 4. Schéma d’un CLB dans un FPGA Xilinx Série 7
+--------------------------------------------------+
| CLB (Xilinx 7) |
|--------------------------------------------------|
| +------------+ +------------+ +------------+ |
| | LUT6 (A) | | LUT6 (B) | | LUT6 (C) | |
| +------------+ +------------+ +------------+ |
| +------------+ +------------+ +------------+ |
| | LUT6 (D) | | Flip-Flop | | MUX | |
| +------------+ +------------+ +------------+ |
| |
| Interconnexion et configuration dynamique |
+--------------------------------------------------+
📌 Explication du schéma :
✔ LUT6 (A, B, C, D) : Stockent des fonctions logiques programmables.
✔ Flip-Flop : Permettent la synchronisation des signaux avec l’horloge.
✔ MUX : Sélectionnent les chemins logiques à suivre selon les besoins du
circuit.
✔ Interconnexion : Connecte les CLB entre eux selon la programmation
en VHDL.
📌 5. Comparaison avec les CLB des générations précédentes
Nombre de LUT Nombre de
Génération Utilisation mémoire
par CLB Flip-Flop
Xilinx Pas de mémoire dans
4 LUT (LUT4) 8 FF
Spartan-3 le CLB
Xilinx Pas de mémoire dans
4 LUT (LUT6) 8 FF
Spartan-6 le CLB
Xilinx Série Mémoire et registres
8 LUT (LUT6) 16 FF
7 intégrés
📌 Avantages de Xilinx Série 7 :
✅ Plus de LUT par CLB → Permet de stocker plus de fonctions logiques.
✅ Plus de Flip-Flop → Meilleure gestion des circuits séquentiels.
✅ Utilisation de la mémoire dans les SLICE → Permet d’intégrer
directement de la RAM et des FIFO.
📌 6. Applications des CLB dans un FPGA
📌 Les CLB sont utilisés pour :
✔ Circuits logiques complexes (additionneurs, multiplexeurs,
compteurs).
✔ Automates séquentiels (machines à états, registres à décalage).
✔ Circuits de traitement du signal (filtres numériques, FFT).
✔ Unités de calcul pour l’IA et le deep learning.
📌 Exemple concret :
Dans un FPGA utilisé pour le traitement d’image, les CLB peuvent
être programmés pour appliquer un filtre (comme une convolution)
en temps réel.
🎯 Conclusion
🔹 Le CLB est l’élément fondamental du FPGA et permet
d’implémenter des fonctions logiques programmables.
🔹 Dans Xilinx Série 7, les CLB sont composés de SLICE contenant
des LUT6 et des bascules.
🔹 Ils permettent d’optimiser la gestion de la logique combinatoire
et séquentielle pour des applications avancées.
👉 Tu veux un exemple en VHDL pour programmer un CLB dans un
FPGA Xilinx Série 7 ? 😊
Déclaration de bibliothèques en VHDL
En VHDL, les bibliothèques contiennent des définitions de types, des
fonctions et des composants réutilisables. Avant d'utiliser certaines
fonctionnalités, il est nécessaire d'inclure les bibliothèques appropriées en
les déclarant en début de code.
1. Syntaxe générale de déclaration de bibliothèque
library nom_de_la_bibliothèque;
use nom_de_la_bibliothèque.nom_du_package.all;
library : Permet d’inclure une bibliothèque.
use : Permet d’utiliser un package spécifique de cette bibliothèque.
2. Les bibliothèques IEEE standardisées
L'IEEE (Institute of Electrical and Electronics Engineers) a défini
plusieurs bibliothèques importantes en VHDL :
a) IEEE.STD_LOGIC_1164 (types de signaux logiques)
Cette bibliothèque est essentielle pour manipuler des signaux logiques
multi-valeurs (std_logic, std_logic_vector).
library ieee;
use ieee.std_logic_1164.all;
Elle définit :
std_logic : Un signal logique pouvant prendre plusieurs valeurs ('0',
'1', 'Z', 'X', etc.).
std_logic_vector : Un tableau de plusieurs std_logic (utile pour les
bus de données).
📌 Exemple d'utilisation :
signal a : std_logic;
signal b : std_logic_vector(7 downto 0);
b) IEEE.NUMERIC_STD (opérations arithmétiques)
Cette bibliothèque est utilisée pour effectuer des opérations
mathématiques sur des signaux binaires.
use ieee.numeric_std.all;
Elle définit les types :
signed : Pour représenter des nombres entiers signés
(positifs/négatifs).
unsigned : Pour des nombres entiers non signés (positifs
uniquement).
📌 Exemple : Addition de nombres binaires
signal x, y : unsigned(3 downto 0);
signal sum : unsigned(4 downto 0); -- 4 bits + 1 bit de retenue
begin
sum <= x + y;
c) IEEE.STD_LOGIC_ARITH et IEEE.STD_LOGIC_UNSIGNED
(Anciennes versions)
⚠️Obsolètes, remplacées par numeric_std, mais parfois utilisées dans
d’anciens projets.
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
3. Autres bibliothèques utiles
standard : Contient les types de base (integer, boolean, etc.).
work : Utilisée pour stocker les modules et composants créés par
l’utilisateur.
library work;
use work.all;
Permet d’utiliser un module défini dans le même projet.
4. Exemple complet d’un programme VHDL avec bibliothèques
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity Exemple is
port (
A, B : in unsigned(3 downto 0);
S : out unsigned(4 downto 0)
);
end Exemple;
architecture Comportement of Exemple is
begin
S <= A + B; -- Addition des deux entrées
end Comportement;
➡️Ici, on ajoute deux signaux de 4 bits (unsigned) et le résultat est
stocké sur 5 bits.
Conclusion
La déclaration de bibliothèques est essentielle en VHDL car elle permet : ✅
De manipuler des types avancés (std_logic, unsigned, etc.).
✅ De réaliser des opérations logiques et arithmétiques.
✅ De réutiliser du code modulaire et structuré.
Avez-vous besoin d'un exemple plus spécifique ? 😊
Types des signaux en VHDL
En VHDL, les signaux utilisés dans la description matérielle doivent avoir
un type défini. Ces types permettent de manipuler les données et de
garantir une bonne simulation et synthèse du circuit.
1. Types de base en VHDL
VHDL propose des types prédéfinis pour représenter des valeurs
numériques, booléennes et logiques.
a) Types numériques
Type Description Exemple
Entiers entre -231−12^{31}-1 et
intege signal x : integer
231−12^{31}-1 (peut être restreint avec
r range 0 to 255;
range)
natura
Entiers positifs (0, 1, 2, ...) signal y : natural;
l
positiv
Entiers strictement positifs (1, 2, 3, ...) signal z : positive;
e
⚠️Remarque : Les nombres en binaire ne sont pas directement
manipulables avec ces types. Il faut utiliser numeric_std (signed et
unsigned).
b) Types booléens
Valeurs
Type Exemple
possibles
boolea signal flag : boolean :=
true, false
n false;
c) Types binaires et logiques
Type Description Exemple
Peut être '0' ou '1'
bit signal a : bit := '0';
uniquement
Type Description Exemple
bit_vector(n downto signal b : bit_vector(7
Vecteur de bit
0) downto 0) := "11001100";
Signal logique multi-
std_logic valeurs (voir tableau ci- signal c : std_logic := '1';
dessous)
signal d :
std_logic_vector(n
Vecteur de std_logic std_logic_vector(3 downto
downto 0)
0) := "1010";
d) Le type std_logic (plus utilisé que bit)
Le type std_logic (défini dans IEEE.STD_LOGIC_1164) est plus avancé que
bit. Il permet plusieurs états logiques :
Vale
Signification
ur
'0' Niveau bas (logique 0)
'1' Niveau haut (logique 1)
Haute impédance (sortie en mode
'Z'
tri-state)
'X' Indéterminé (collision ou erreur)
'-' Indifférent (valeur quelconque)
'U' Non initialisé (état inconnu)
🔹 Pourquoi utiliser std_logic au lieu de bit ?
Compatible avec les FPGA et ASIC.
Gère les états flottants (Z), indéterminés (X) et non initialisés
(U).
Recommandé pour les entrées/sorties (I/O).
2. Types avancés : Vecteurs et nombres binaires
VHDL permet d'utiliser des vecteurs pour manipuler plusieurs bits
simultanément.
a) std_logic_vector (tableaux de std_logic)
Utilisé pour stocker des nombres binaires et gérer des bus de données.
signal data : std_logic_vector(7 downto 0) := "11001100";
➡️Définit un bus 8 bits, avec data(7) comme MSB (bit de poids fort) et
data(0) comme LSB (bit de poids faible).
b) Types signed et unsigned
Ces types, définis dans IEEE.NUMERIC_STD, permettent d'interpréter des
vecteurs binaires comme des nombres entiers.
Type Description
signed(n downto Représente un nombre signé (complément
0) à deux).
unsigned(n
Représente un entier positif (sans signe).
downto 0)
🔹 Exemple : Addition de nombres binaires
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
signal a, b : unsigned(3 downto 0);
signal sum : unsigned(4 downto 0);
begin
sum <= a + b;
➡️Ici, sum doit être sur 5 bits pour éviter les dépassements (overflow).
3. Conversion entre types
a) std_logic_vector ⇄ signed/unsigned
Il est souvent nécessaire de convertir les types :
signal a : std_logic_vector(3 downto 0);
signal b : unsigned(3 downto 0);
b <= unsigned(a); -- Conversion std_logic_vector → unsigned
b) integer ⇄ std_logic_vector
signal x : integer := 10;
signal y : std_logic_vector(3 downto 0);
y <= std_logic_vector(to_unsigned(x, 4)); -- Conversion integer →
std_logic_vector
4. Exemple complet d’un programme VHDL avec différents types
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity Exemple is
port (
clk : in std_logic; -- Signal d'horloge
A, B : in unsigned(3 downto 0); -- Entrées 4 bits
S : out unsigned(4 downto 0) -- Somme sur 5 bits
);
end Exemple;
architecture Comportement of Exemple is
begin
process(clk)
begin
if rising_edge(clk) then
S <= A + B; -- Addition des deux nombres binaires
end if;
end process;
end Comportement;
➡️Ici, on additionne deux nombres binaires de 4 bits et on stocke le
résultat sur 5 bits.
Conclusion
En VHDL, bien choisir le type des signaux est essentiel pour garantir une
conception optimale et synthétisable.
✔ std_logic et std_logic_vector sont les plus utilisés pour les circuits
numériques.
✔ signed et unsigned permettent des opérations arithmétiques sur
des valeurs binaires.
✔ Les conversions entre types sont souvent nécessaires pour assurer
la compatibilité entre signaux.
💡 Besoin d’un exemple plus spécifique ? 😊
Corps de l’architecture en VHDL
Le corps de l'architecture en VHDL contient la description
fonctionnelle du système à concevoir. Il est placé après la partie
déclarative et commence par le mot-clé begin.
1. Structure générale d’une architecture en VHDL
architecture Nom_Architecture of Nom_Entite is
-- Partie déclarative (Signaux, constantes, composants)
begin
-- Corps de l'architecture (Instructions concurrentes)
end Nom_Architecture;
💡 Le corps de l’architecture contient les instructions qui décrivent le
comportement du circuit.
2. Types de description dans le corps de l’architecture
On peut utiliser trois approches principales pour écrire le corps de
l’architecture :
a) Description comportementale
Approche haut niveau qui décrit le fonctionnement logique sans
se soucier du matériel sous-jacent.
Utilise des instructions concurrentes et des processus
séquentiels.
📌 Exemple : Comparateur d’égalité (A = B)
architecture Comportementale of Comparateur is
begin
S <= '1' when A = B else '0';
end Comportementale;
➡️Explication :
Si A est égal à B, alors S est '1', sinon il est '0'.
b) Description structurelle
Approche bas niveau qui décrit l’interconnexion de composants
pour construire un circuit.
Utilise l’instanciation de composants.
📌 Exemple : Comparateur d’égalité en utilisant des portes XOR et
NOT
architecture Structurelle of Comparateur is
component XOR2
port (X, Y: in std_logic; Z: out std_logic);
end component;
component NOT1
port (X: in std_logic; Y: out std_logic);
end component;
signal XOR_Result: std_logic;
begin
-- Instanciation des composants
Porte_XOR : XOR2 port map (A, B, XOR_Result);
Porte_NOT : NOT1 port map (XOR_Result, S);
end Structurelle;
➡️Explication :
Utilisation de portes XOR et NOT pour comparer A et B.
c) Description mixte
Combine description comportementale et structurelle dans le
même code.
📌 Exemple : Additionneur 1 bit avec retenue
architecture Mixte of Additionneur is
component XOR2
port (A, B: in std_logic; S: out std_logic);
end component;
signal Sum_Interne: std_logic;
begin
-- Partie structurelle : Utilisation de XOR2
Porte_XOR : XOR2 port map (A, B, Sum_Interne);
-- Partie comportementale : Ajout de la retenue
S <= Sum_Interne xor Cin;
end Mixte;
➡️Explication :
Utilisation d’un composant XOR pour faire la somme partielle.
Ajout de la retenue Cin de manière comportementale.
3. Exemple complet : Additionneur 4 bits
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity Additionneur is
port (
A, B: in unsigned(3 downto 0);
S: out unsigned(4 downto 0)
);
end Additionneur;
architecture Comportement of Additionneur is
begin
S <= A + B; -- Corps de l’architecture
end Comportement;
➡️Explication :
S prend la valeur de A + B de manière directe et concurrente.
Conclusion
Le corps de l’architecture est la partie principale où le comportement
du circuit est décrit.
✅ Description comportementale : Facile à écrire et comprendre.
✅ Description structurelle : Permet de réutiliser des composants.
✅ Description mixte : Combine les avantages des deux méthodes.
💡 Besoin d’un exemple plus détaillé ? 😊