Vous êtes sur la page 1sur 46

Département Génie Electrique

ELECTRONIQUE NUMERIQUE
AVANCEE

Année Universitaire : 2021 - 2022 Pr. Fatima Ezzahra NADIR


2

Langage De Description VHDL


3 Présentation Du Langage VHDL

Le VHDL (Vhsic (Very High Speed Integrated Circuit) Hardware Description Language),
est un langage de description destiné à représenter le comportement et l’architecture de
circuits numériques.
Une spécification décrite en VHDL peut être simulée ou synthétisée sur un circuit
programmable.
Un langage de description, contrairement à un langage de programmation informatique,
sert à décrire du matériel, il a pour objectifs : la spécification, la modélisation, la simulation
et la documentation. Il ne faut jamais interpréter le code VHDL comme un langage de
programmation de type C/C++/Pascal …
L’ordre des instructions n’a aucune importance en VHDL.
En effet il s’agit de DECRIRE un circuit numérique, avec des composants fonctionnant tous
simultanément. On peut abusivement dire que «tout s’exécute en même temps ».
4 Présentation Du Langage VHDL

Au début des années 80, le ministère de la défense des Etats Unis (D.O.D) demande à
Intermetrics, IBM et Texas Instruments de mettre au point un langage dont l’objectif était
d’assurer une indépendance vis à vis des fournisseurs de matériels et de logiciels et ainsi une
assurance de maintenabilité des équipements. Le résultat était le langage VHDL.
Le VHDL a été normalisé pour la première fois comme langage de description de
matériel en décembre 1987 : norme IEEE 1076-87.
Il a connu plusieurs améliorations notamment en 1994 où le standard IEEE 1164 enrichit
le VHDL par la notion de forces sur les signaux (multivalued logic)
Une autre extension du VHDL a vu le jour en 1999 (norme IEEE-1076.1) qui ajoute la
modélisation mixte (numérique – analogique) et multi-technologique : VHDL-AMS (Analog
and Mixed Signal).
5 Présentation Du Langage VHDL

Les cibles du langage VHDL

Des instructions pour décrire les


signaux de test
Logiciel de simulation
Des instructions pour décrire le
comportement du système : •Modélsim
- Fonctions combinatoires.
- Fonctions séquentielles Logiciel de synthèse
(configuration de circuits
logiques programmables)

•ISE de Xilinx
•Quartus de Altera
6 Structure d’une description VHdL

Description du Composant

En VHDL, la description externe du composant est décrite à l'aide d'une entité (entity) et le
comportement interne est décrit à l’aide de l’architecture (architecture).

Architecture

Entrée 1
Sortie
Composant
Entité
Entrée 2
7 Structure d’une description VHdL

library IEEE;
Bibliothèques
Zone de déclaration des bibliothèques

Entity Nom de l’entité is


Entité Description des entrée et des sorties de la structure (in, out, inout,
buffer)
End Nom de l’entité;

Architecture Nom de l’Architecture of Nom de l’Entité is


Déclaration des signaux internes de la structure
Architecture Begin
Description du comportement de la structure
End Nom de l’Architecture;
8 Structure d’une description VHdL

Les Bibliothèques

Toute description VHDL, utilisée pour la synthèse, a besoin de bibliothèques. L’IEEE


(Institut of Electrical and Electronics Engineers) les a normalisées et plus particulièrement la
bibliothèque «ieee.std_logic_1164.all». Elles contiennent les définitions des types de signaux
électroniques, des fonctions et sous programmes permettant de réaliser des opérations
arithmétiques et logiques,...La directive Use permet de sélectionner les bibliothèques à
utiliser.

Syntaxe :

Library ieee;
Use ieee.std_logic_1164.all; -- Pour rajouter les types std_logic ou std_logic_vector.
Use ieee.numeric_std.all; -- Pour utiliser des fonctions arithmétiques
Use ieee.std_logic_unsigned.all; -- Pour utiliser des fonctions arithmétiques des vecteurs non signés
9 Structure d’une description VHdL

Les Bibliothèques

std_logic_1164 : Il s'agit de la bibliothèque qui définit les types de données std_logic de base et
quelques fonctions. Cela devrait probablement être inclus dans chaque entité créée. Dans la
bibliothèque IEEE STD_LOGIC_1164 TYPE les types usuels sont déjà déclarés. Le type std_logic
contient 9 éléments de base.
10 Structure d’une description VHdL

Les Bibliothèques

std_logic_arith : Il s'agit de la bibliothèque qui définit certains types et opérations arithmétiques


de base pour représenter des nombres entiers de manière standard:
₋ Type unsigned;
₋ Type signed, arithmetic functions: +, -, *;
₋ Les fonctions de comparaison : <, <=, >, >=, =, /=;
₋ Les fonctions de décalage : shl, shr, La fonction conv_integer;
₋ La fonction conv_unsigned;
₋ La fonction conv_signed
₋ La fonction conv_std_logic_vector
std_logic_unsigned : Cette bibliothèque définit toutes les mêmes opérations de la bibliothèque
std_logic_arith. La différence est qu’elle prend en argument les valeurs std_logic_vector et les traite
comme valeur non signé.
std_logic_signed : Cette bibliothèque définit toutes les mêmes opérations de la bibliothèque
std_logic_arith. La différence est qu’elle prend en argument les valeurs std_logic_vector et les traite
comme valeur signé en complément à deux.
11 Structure d’une description VHdL

L’Entité

Dans toute description VHDL, Une entité (entity) permet de déclarer ou identifier, le
composant ou la structure externe du composant. L’utilisation du port au sein de l’entité
permet de définir les entrées/sorties en utilisant les modes de déclaration suivants :
 in : pour un signal qui ne peut être que en entrée.
 out : pour un signal qui ne peut être que en sortie et non lisible à l’intérieur de
l’architecture.
 inout : pour un signal qui peut être en entrée et en sortie (bidirectionnel).
 buffer : pour un signal qui ne peut être que en sortie et lisible en interne.
12 Structure d’une description VHdL

L’Entité

Les type utilisés pour les signaux d’entrées et de sorties est :


₋ Le bit pout un signal.
₋ Le std_logic pour un signal.
₋ Le bit_vector pour un bus composé de plusieurs signaux.
₋ Le std_logic_vector pour un bus composé de plusieurs signaux.
13 Structure d’une description VHdL

L’Entité
14 Structure d’une description VHdL

L’Entité

ISE de Xilinx
15 Structure d’une description VHdL

L’Entité

Syntaxe :

entity Nom_de_Entité is
port (
Entrée1 : in std_logic:='0';
Entrée2 : in std_logic_vector (3 downto 0):=" 0000 ";
Sortie : out std_logic_vector (3 downto 0):=" 0000 "
);
end Nom_de_Entité;
16 Structure d’une description VHdL

L’Architecture

L’architecture correspond à la structure interne du composant. Elle décrit le


fonctionnement du système, l'implémentation de la fonctionnalité voulue. Son
fonctionnement peut être combinatoire ou séquentiel. Pour modéliser un système
complet, on utilise une série de paires entité-architecture. Au sein d’une architecture,
on peut définir des signaux, qui représente l'équivalent le plus proche des variables
en programmation informatique : ils servent à passer les résultats intermédiaires d'un
bloc fonctionnel à un autre.
17 Structure d’une description VHdL

L’Architecture

Il existe trois méthodes pour décrire la structure interne du composant :

Flots de données
L’architecture est déclarée sous forme d’équations logiques
(Data flow)

L’architecture est déclarée sous forme de structure, c'est-à-dire sous


Structurelle forme de composants (component) interconnectés avec des signaux
interne.

Comportementale L’architecture est déclarée sous forme d’algorithmes


18 Structure d’une description VHdL

L’Architecture

A l’intérieur d’une architecture, on peut déclarer des signaux interne au composant en cas
de besoin. Un signal permet la communication entre les états concurrents à l'intérieur d'une
architecture. Dans la définition, on doit spécifier le type au signal et l’on peut attribuer une
valeur par défaut.
Types de signaux :
₋ Constant
₋ Signal
Exemple:
signal count : integer range 0 to 100:=0;
signal S0 : std_logic:='0';
signal S1 : std_logic_vector (3 downto 0 ):="0000";
constant gain : std_logic_vector (7 downto 0):="00010001";
19 Structure d’une description VHdL

L’Architecture

Syntaxe :

architecture Nom_de_Architecture of Non_de _Entité is


signal Y : std_logic:='0';
Begin
S <= A and B;
end Nom_de_Architecture;
20 Structure d’une description VHdL

L’Architecture

Méthode de Description Flots de données (Data flow)

 L’évaluation des sorties se fait en parallèle, les instructions, qui sont déclarées
sous forme d’équations logiques, sont dites des instructions concurrentes,
l’échange des deux lignes n’a aucun effet sur la description.

 L’évaluation des instructions concurrentes n’a lieu que si l’un des signaux à droite
change, c.à.d. les sorties ne seront évalué que si les entrées change d’état.
21 structure d’une description VHdL

Description Flots de données (Data flow)

L’opérateur d’affectation simple <=

C’est l’opérateur le plus utilisé. En effet il permet de modifier l’état d’un signal en
fonction d’autres signaux et/ou d’autres opérateurs.
Les valeurs numériques que l’on peut affecter à un signal sont les suivantes :
⁻ ‘1’ ou ‘H’ pour un niveau haut avec un signal de 1 bit.
⁻ ‘0’ ou ‘L’ pour un niveau bas avec un signal de 1 bit.
⁻ ‘Z’ pour un état haute impédance avec un signal de 1 bit.
⁻ ‘-’ pour un état quelconque, c’est à dire ‘0’ ou ‘1’.
Pour les signaux vecteurs, composés de plusieurs bits, on utilise les guillemets " … "
22 structure d’une description VHdL

Description Flots de données (Data flow)

L’opérateur d’affectation simple <=

Pour l’affectation des vecteurs en utilisant les bases numériques :


BINAIRE :
exemple : BUS <= "1001" ; -- BUS = 9 en décimal
HEXA :
exemple : BUS <= X"9" ; -- BUS = 9 en décimal
OCTAL :
exemple : BUS <= O"11" ; -- BUS = 9 en décimal
Remarque : La base décimale ne peut pas être utilisée lors de l’affectation de signaux.
On peut seulement l’utiliser avec certains opérateurs, comme + et – .
23 structure d’une description VHdL

Description Flots de données (Data flow)

L’opérateur d’affectation simple <=

Exemple:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity COMPOSANT is
port (
A : in std_logic_vector (3 downto 0):=" 0000 ";
S : out std_logic_vector (3 downto 0):=" 0000 "
);
end COMPOSANT;
architecture ARCHITECTURE of COMPOSANT is
Begin
S <= A;
end ARCHITECTURE ;
24 structure d’une description VHdL

Description Flots de données (Data flow)

L’opérateur d’affectation simple <= library IEEE;


use IEEE.STD_LOGIC_1164.ALL;
Exemple: entity COMPOSANT is
port (
A , B : in std_logic :=‘0’;
S1 : out std_logic :=‘0’;
C : out std_logic_vector (3 downto 0):=" 0000 ;
S2 : out std_logic_vector (3 downto 0):=" 0000 "
);
end COMPOSANT;
architecture ARCH of COMPOSANT is
Begin
S1 <= A and B; -- S1 = A.B.
S2 <= B sll 2; -- S2 = A décalé de 2 bits à gauche.
end ARCH;
25 structure d’une description VHdL

Description Flots de données (Data flow)

Opérateur VHDL
Les Opérateurs Logiques
ET and
NON ET nand
Ils sont définis pour les types
OU or
boolean, bit, std_logic et std_logic
NON OU nor
_vector :
OU EXCLUSIF xor
NON OU EXCLUSIF xnor
NON not
26 structure d’une description VHdL

Description Flots de données (Data flow)

Les Opérateurs Logiques library IEEE;


use IEEE.STD_LOGIC_1164.ALL;
Exemple: entity COMPOSANT is
port (
A , B : in std_logic :=‘ 0’;
S1 : in std_logic :=‘ 0’
);
end COMPOSANT;
architecture ARCH of COMPOSANT is
Begin
S1 <= A and B; -- S1 = A.B.
end ARCH ;
27 structure d’une description VHdL

Description Flots de données (Data flow)

L’Opérateur de Concaténation : &


library IEEE;
Cet opérateur permet de joindre des use IEEE.STD_LOGIC_1164.ALL;
signaux entre eux. entity COMPOSANT is
port (
A : in std_logic_vector (1 downto 0):="01" ;
Exemple: B : in std_logic_vector (1 downto 0):="11" ;
S : out std_logic_vector (3 downto 0):=" 0000 "
);
end COMPOSANT;
architecture ARCH of COMPOSANT is
Begin
S <= A & B; -- S1 = "0111".
end ARCH ;
28 structure d’une description VHdL

Description Flots de données (Data flow)

Les Opérateurs arithmétiques

Pour pouvoir utiliser les opérateurs


Opérateur VHDL
arithmétiques, il faut rajouter les
ADDITION +
bibliothèques suivantes au début du
SOUSTRACTION -
fichier VHDL:
MULTIPLICATION *
Use ieee.numeric_std.all ;
DIVISION /
Use ieee.std_logic_arith.all ;

En plus des bibliothèques, il faut


utiliser les fonctions de conversion.
29 structure d’une description VHdL

Description Flots de données (Data flow)

Opérateur VHDL
Les Opérateurs relationnels
Egal =
Non égal /=
Ils permettent de modifier l’état d’un
Inférieur <=
signal ou de signaux suivant le résultat
Inférieur ou égal <=
d’un test ou d’une condition. En logique
Supérieur >
combinatoire ils sont souvent utilisés
Supérieur ou égal >=
avec les instructions de conditions.
30 structure d’une description VHdL

Description Flots de données (Data flow)

Les opérateurs d’assignation et d’association

Assignation de signal (dynamique) : Dans la zone de déclaration des signaux


dans une architecture
nom_signal <= expression ;

Assignation de signal (statique) : Dans la zone de déclaration d’une architecture


signal nom_signal_interne : type_signal := valeur_initiale ;
Association de signaux : Comme connecteur de signaux dans une instanciation de
composant ( description structurelle)
nom_signal_formel => nom_signal_effectif ;
31 structure d’une description VHdL

Description Flots de données (Data flow)

Exercice 1

• Réaliser un Additionneur Complet sur un bit.


• Réaliser un Additionneur sur 2 bits.
32 structure d’une description VHdL

Description Flots de données (Data flow)

Exercice 2

• Réaliser un Comparateur sur un bit.


• Réaliser un Comparateur sur 2 bits.
33 structure d’une description VHdL

Description Flots de données (Data flow)

Affectation conditionnelle

Cette instruction modifie l’état d’un signal suivant le résultat d’une condition
logique entre un ou des signaux, valeurs, constantes.
Syntaxe 1:
SIGNAL <= expression1 when condition1
[else expression2 when condition2 ]
[else expression3 when condition3 ]
[else expression4];
Remarque : l’instruction [else expression] n’est pas obligatoire mais elle fortement conseillée, elle
permet de définir la valeur du SIGNAL dans le cas où la condition n’est pas remplie.
34 structure d’une description VHdL

Description Flots de données (Data flow)

Affectation conditionnelle

Syntaxe 2:

Sortie <= expression1 when condition1 else


expression2 when condition2 else
expression3 when condition3
else expression4;
35 structure d’une description VHdL

Description Flots de données (Data flow)

Affectation Sélective

Cette instruction permet d’affecter différentes valeurs à un signal, selon les valeurs
prises par un signal dit de sélection.
Syntaxe 1:
with SIGNAL_DE_SELECTION select
SIGNAL <= expression1 when valeur_de_selection1,
[expression2 when valeur_de_selection2,]
[expression3 when valeur_de_selection3,]
[expression4 when others];
Remarque: l’instruction [expression when others] n’est pas obligatoire mais fortement conseillée,
elle permet de définir la valeur du SIGNAL dans le cas où la condition n’est pas remplie.
36 structure d’une description VHdL

Description Flots de données (Data flow)

Affectation Sélective

Syntaxe 2:
with SIGNAL_DE_SELECTION select
SIGNAL <= expression1 when valeur_de_selection1,
expression2 when valeur_de_selection2,
expression3 when valeur_de_selection3,
expression4 when others;
37 structure d’une description VHdL

Description Flots de données (Data flow)

Exercice 3

• Réaliser un Décodeur BCD.


• Réaliser un Décodeur BCH.
38 structure d’une description VHdL

Description Flots de données (Data flow)

Exercice 4

• Réaliser d’un multiplexeur 1 parmi 4.


39 structure d’une description VHdL

Description Flots de données (Data flow)

Exercice 5

• Réaliser d’un démultiplexeur 6 vers 1.


40 structure d’une description VHdL

Description structurelle

L’architecture est déclarée sous forme


de structure, c'est-à-dire sous forme de
composants (component) interconnectés
avec des signaux interne (Y) à l’aide de
la fonction component. En effet, il faut
déclarer et définir les composants de la
fonction puis dans le corps de
l'architecture, il suffit de les connecter en
suivant un schéma structurel. La
connexion peut être interne en utilisant
des signaux ou externe avec les pin de
l’entité globale.
41 structure d’une description VHdL

Description structurelle

Etape 1 : Recensement du ou des composants utilisés dans l’architecture doivent être


définis par le mot component suivi du nom l’entité à utiliser et la description de la
nature des ports du composant.
Syntaxe :

component Nom_de_Entité is
port (
Entrée1 , Entrée2 : in std_logic:='0';
Sortie : out std_logic_vector (3 downto 0):=" 0000 "
);
end component;

Remarque: La description des composants utilisés dans l’architecture doit être incorporé dans la zone de
déclaration de l’architecture, avant le début de l’architecture précisé par le mot clé "Begin".
42 structure d’une description VHdL

Description structurelle

Etape 2 : Pour indiquer les connexions entre les pins des composants utilisés et les
pins du composant principal, il existe deux méthodes :
Syntaxe 1 :

Composant1: Nom_de_Entité port map (E1, E2, Y);


Composant1: Nom_de_Entité port map (E3, Y, S);

Syntaxe 2 :
Composant1: Nom_de_Entité port map (Entrée1 =>E1, Entrée2 =>E2, Sortie=>Y);
Composant1: Nom_de_Entité port map (Entrée1=>E3, Entrée2=>Y, Sortie=>S);

Remarque: Pour la méthode 2, on peut spécifier les connexions entre les pins, sans besoin de respecter
l’ordre.
43 structure d’une description VHdL

Description structurelle

Exemple Additionneur 2bits :


44 structure d’une description VHdL

Description structurelle

Exemple Additionneur 2bits :

library IEEE;
use IEEE.STD_LOGIC_1164.ALL

entity ADD_2bits is
port
(
A, B : in std_logic_vector(1 downto 0);
Cin : in std_logic;
S : out std_logic_vector (1 downto 0);
Cout : out std_logic
);
end ADD_2bits;
45 structure d’une description VHdL

Description structurelle

Exemple Additionneur 2bits :

Méthode 1 Méthode 2

architecture Structure_ADD_2bits of Adder2bits is architecture Structure_ADD_2bits of Adder2bits is


component FullAdder is component FullAdder is
port( port(
P, Q, Ci : in std_logic; P, Q, Ci : in std_logic;
S, Co: out std_logic S, Co: out std_logic
); );
end component; end component;
signal Y: std_logic; signal Y: std_logic;
begin begin
adder0: FullAdder port map(A(0), B(0), Cin, S(0), Y); adder0: FullAdder port map(P=>A(0), Q=>B(0), Ci=> Cin, S=>S(0), Co=>Y);
adder1: FullAdder port map(A(1), B(1), Y, S(1), Cout); adder1: FullAdder port map(P=>A(1), Q=>B(1), Ci=> Y, S=>S(1), Co=>Cout);
end Structure_ADD_2bits; end Structure_ADD_2bits;
46 structure d’une description VHdL

Description structurelle

Exercice 6

• Réaliser un composant qui permet d’afficher sur l’un de deux afficheurs 7


segments, la valeur en hexadécimal qui correspond à la valeur binaire sur 4 bits.

Vous aimerez peut-être aussi