Académique Documents
Professionnel Documents
Culture Documents
VHDL
Filière : Génie Electrique et Systèmes Automatisés
Pr : Nihal REMZAN
Le corps d’architecture
✓ Types : scalaires, composés, accès et fichiers
✓ Zone concurrente
✓ Zone séquentielle
2
Qu’est ce que VHDL?
❑ VHSIC (Very High Speed Integrated Circuit) Hardware Description Langage.
❑ 1999:Standard IEEE1076.6-1999
❑ La norme est révisée tous les 5 ans (P1076-87, P1076-93, P1076-2000, P1076-2002,
P1076-2006)
4
Introduction
❑ Programmation ou description ?
➢ Les objectifs du langage VHDL
Conception de circuits intégrés reconfigurable ou non (ASIC, FPGA…) :
SYNTHESE
Mise au point de modèle de simulations numériques (circuits virtuels) :
MODELISATION
➢ Le langage est capable de DECRIRE
des comportements concurrents ( // )
Les deux portes
Des comportements séquentiels travaillent en //
6
Avantages du VHDL
❑ Langage complet qui couvre à la fois les phases de :
✓ spécification,
✓ modélisation,
✓ simulation,
✓ synthèse.
❑ Langage indépendant :
✓ standard IEEE (standardisé en 1987, complété en 1993),
✓ indépendant de la technologie du circuit,
✓ Independent des systèmes – hôtes (PC ou station de travail).
❑ Langage flexible : supporte différents niveaux de description
❑ description modulaire et hiérarchique
• les descriptions sont plus simples,
• la fiabilité est améliorée : chaque sous-ensemble peut être testé seul,
• les sous-ensembles sont réutilisables.
7
Structure du VHDL
Il existe 5 catégories d’unité de conception
8
Objets
❑ Quatre classes d’objets en VHDL :
➢ Les constantes
Comme les autres langages, elles ont une valeur fixe
➢ Les variables
Comme les autres langages, elles ont une valeur immédiatement modifiable par affectation
➢ Les signaux
Notion nouvelle, la valeur ne se modifie pas immédiatement
➢ fichier
fait référence à un stockage sur une mémoire de masse (disque) externe
Avant toute utilisation d’une constante, d’une variable ou d’un signal, il faut les déclarer.
9
Objets
❑ data object object name : data type := initial value;
❑ CONSTANT name : type := value;
✓ constant my_constant: integer:=32;
✓ constant my_vector : std_logic_vector(3 downto 0):= "1010";
❑ Opérateur de signe : -
11
Programmer en VHDL
❑ Définition de l’entité (boîte noire avec les ports d’entrée/sortie)
❑ VHDL est insensible à la casse. On écrit souvent les mots réservés du langage en
majuscule, le reste en minuscule.
❑ Syntaxe:
entity nom_de_l_entite is
port(liste_des_port_avec_leur_mode);
end nom_de_l_entite;
13
L’entité
remarquez à la fin de la
définition du port, le
point-virgule se trouve
après la parenthèse
fermante.
X, Y et Z étant du même
mode et du même type,
ils peuvent être listés sur
la même ligne, séparés
par des virgules.
14
Bibliothèques
❑ Le mot ‘library’ est utilisé pour indiquer que des packages vont être ajoutés à la
conception VHDL à partir de la bibliothèque spécifiée.
❑ La syntaxe du paquet a trois champs séparés par un point.
Nom de la bibliothèque
15
Exemples d’entité
❑ Décrire les ports de circuits suivants par un segment d'entité VHDL.
16
Architecture
❑ Définition de signaux et d'autres objets internes
❑ Elle est toujours associée à une entité, une entité peut avoir plusieurs
architectures:
❑ Syntaxe
architecture nom_de_l_architecture of nom_de_l_entite is
{partie déclarative}
begin
{suite d’instructions concurrentes}
end nom_de_l_architecture;
17
Affectation aux signaux
❑ Affectation des signaux se fait par le signe <=
{generic (liste_des_parametres)}
{port (liste_des_port_avec_leur_mode)}
END {nom_de_l_entite};
19
Structure d’un programme VHDL
20
Exemples
❑ Donner le code VHDL de l’équation suivante:
21
Exemples
❑ Donner le couple entité - architecture.
Demi-additionneur
A B S C
0 0 0 0
0 1 1 0
1 0 1 0
1 1 0 1
22
Exemples
❑ Donner le couple entité - architecture.
bascule RS
23
Exemples
❑ Dessinez le circuit logique à implémenter avec le VHDL suivant
24
Exemples
❑ Donner le code VHDL du circuit suivant (additionneur complet).
25
Exemples
❑ Dessinez le circuit logique à implémenter avec le VHDL suivant
26
Types en VHDL
❑ Un type définit
27
Types, schéma global
28
Type scalaire
❑ Énuméré : Ce type déclare toutes les valeurs qu'un objet de ce type peut prendre.
type T_FEU is (ROUGE, ORANGE, VERT);
signal FEU : T_FEU;
type ETAT is (INIT, LECT, ECR, ATT);
❑ Entier :
30
Exemple
❑ Ecrire un programme VHDL qui calcule la fonction y=𝑥 2 où x
est un entier compris entre 0 et 7.
entity carre is
port( x: in integer range 0 to 7;
y: out integer range 0 to 49);
end carre;
architecture arch1 of carre is
begin
y<=x**2;
end arch1;
31
Type scalaire
❑ Réel :
type signal_level is range -15.0 to 15.0
type probability is range 0.0 to 1.0;
32
Type scalaire
❑ physique : Ce type décrit des objets qui peuvent prendre des valeurs entières,
exprimées avec des unites définies par le type
33
Logique à valeurs multiples
❑ Il existe des signaux logiques à plusieurs états:
❑ Le type "std_logic" remplace le type "bit" pour permettre d’avoir 9 états différents
❑ exemple
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
signal SORTIE, Q: std_logic;
…
SORTIE <= ‘Z’; -- haute impédance
Q <= ‘1’;
34
Le type std_logic
❑ Le type std_logic :
‘ U ’ non initialisé
‘ X ’ non connu
‘ 0 ’ logique 0 Strong drive
‘ 1 ’ logique 1
‘ Z ’ haute impédance
‘ W ’ non connu
‘ L ’ logique 0 Weak drive
‘ H ’ logique 1
‘ - ’ don’t care
35
Type composite
Deux types sont considérés : tableau et record
36
Accès aux éléments
❑ Déclaration:
A,B: std_logic_vector(15 downto 0);
❑ Directement:
A(3) <= ‘1’;
B(15) <= ‘0’;
❑ Par tranches
A(15 downto 12) <= "1011";
A(10 downto 2) <= B(15 downto 7);
37
Accès aux éléments de tableaux
❑ Par agrégat
✓ Notation positionnelle
A(3 downto 1) <= ('0', '1', B(15));
✓ Par concaténation
signal A,B,C,D : std_logic;
signal BYTE : std_logic_vector(7 downto 0);
signal Z_BUS,A_BUS : std_logic_vector(3 downto 0);
Z_BUS <= A & C & D & B;
BYTE <= Z_BUS & A_BUS;
38
Exemple
❑ Ecrire un programme VHDL qui prend deux entrées de type std_logic_vector de
longueur 5 et 7, les concaténer et envoyer le résultat.
39
Exemple
❑ Ecrire un programme VHDL qui prend deux entrées de type std_logic_vector de
longueur 5 et 7, les concaténer et envoyer le résultat.
Entity concatenation is
end concatenation;
begin
end arch2; 40
Exemples
SIGNAL A: STD_LOGIC; a <= ‘1’;
SIGNAL B: STD_LOGIC_VECTOR(3 b <= ”0000”; -- Base Binaire par
DOWNTO 0); défaut
SIGNAL C: STD_LOGIC_VECTOR(3 c <= B”0000”; -- Base Binaire
DOWNTO 0); explicite
SIGNAL D: STD_LOGIC_VECTOR(7 d <= ”0110_0111”; -- Utiliser ‘_’
DOWNTO 0); pour augmenter la lisibilité
SIGNAL E: STD_LOGIC_VECTOR(15 e <= X”AF67”; -- Base
DOWNTO 0); Hexadecimale
SIGNAL F: STD_LOGIC_VECTOR(8 f <= O”723”; -- Base Octale
DOWNTO 0);
41
Enregistrement (record)
Ensemble d'éléments de types différents
type NAME is
record
identifier : type_indication;
:
identifier : type_indication;
end record;
type PAQUET is
record
mot_unique : std_logic_vector (7 downto 0);
data : std_logic_vector (23 downto 0);
CRC : std_logic_vector( 5 downto 0);
num : integer range 0 to 1023;
end record;
signal paq_rec : PAQUET;
paq_rec.CRC <= "111000";
42
Exemple
type nom_de_mois is (jan, fev, mar, avr, mai, jun, jul, aou, sep, oct, nov, dec) ;
type date is
record
mois : nom_de_mois ;
end record;
44
zone concurrente
45
Affectation Simple
begin
Y <= A nand B;
end Logique;
46
Exemples
Exemple 1: Donner la description VHDL du circuit
47
Exemples
Exemple 2: Donner le code VHDL du circuit suivant
48
Exemples
Exemple 3: Donner le code VHDL du circuit suivant
49
Exemples
Exemple 4: Donner la description VHDL du circuit
50
Affectation conditionnelle
51
Affectation conditionnelle
Exemple :
52
Exemples
Exemple 1: Donner la description VHDL du circuit (Comparateur à 4-bits)
53
Exemples
Exemple 2: Donner la description VHDL du circuit
54
Exemples
Exemple 3: Donner la description VHDL du circuit
55
Exemples
Exemple 4: Donner la description VHDL du circuit
56
Exemples
Exemple 5: Donner la description VHDL des circuits suivant
57
Exemples
Exemple 6: Donner la description VHDL du circuit
58
Exemples
Exemple 7: Donner la description VHDL du circuit
59
Affectation sélectionnée
60
Affectation sélectionnée
Exemple :
62
Exemples
Exemple 2: Donner le code VHDL de l’encodeur octal (8 to 3) en utilisant l affectation
conditionnelle (when … else) et sélectionnée (with … select) :
63
Exemples
Exemple 3: Donner le code VHDL du
multiplexeur 8 vers 1 en utilisant l
affectation conditionnée (when … else)
et sélectionnée (with … select) :
64
Exemples
Exemple 4: Donner le code VHDL d’un transcodeur: Gray => Binaire pur en utilisant
with … select
65