Vous êtes sur la page 1sur 43

Elément de module M10.

VHDL et fpga

FILIERE : DUT – SYSTEMES EMBARQUES


NIVEAU : 2ème ANNEE
PROFESSEUR : Mr. Zakaria Moutakki
Chapitre II:
VHDL
VHDL
Présentation

1. HDL (Hardware description langage)

 C’est un langage qui décrit le matériel.

 Des langages comme C/C++ permet de traiter les données au niveau


logiciel.
 Au niveau matériel, les langages HDL permettent de décrire le
comportement des circuits qui peuvent contenir des portes logiques,
des bascules….
 Le langage HDL est une nécessité dans le cas des circuits complexes.
3
VHDL
Présentation

2. VHDL:

 VHDL signifie VHSIC Hardware Description Language (VHSIC : Very


High Speed Integrated Circuit).
 Ce langage a été écrit dans les années 70 pour réaliser la simulation
de circuits électroniques.
 On l’utilise pour :
• Programmer des composants programmables du type PLD, CPLD et FPGA.
• Concevoir des modèles de simulations numériques ou des bancs de tests.

4
VHDL
Architecture d’une description VHDL

 Entité (entity)

 Architecture

 Configuration

 Déclaration package

 Corps package (Body package)

 L’entité et l’architecture sont les blocs les plus utilisés dans les
descriptions.
5
VHDL
Architecture d’une description VHDL

6
VHDL
Architecture d’une description VHDL

Exemple 1: Commutateurs et Leds

7
Exemple 2: Décodeur 1 parmi 4

8
VHDL
Architecture d’une description VHDL

1. Déclaration des 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 la
directive Use permet de sélectionner les bibliothèques à utiliser :
• Std_logic_1164 : contiennent les définitions des types de signaux
électroniques, des fonctions et sous programmes permettant de réaliser des
opérations logiques ;
• Numeric_std : contient la définition des types numériques et les fonctions et
sous programmes permettant de réaliser des opérations arithmétiques. 9
VHDL
Architecture d’une description VHDL

2. Les noms des entrées et sorties:

Les noms attribués par l'utilisateur doivent être constitués uniquement à partir des

26 lettres de l'alphabet (non accentuées), des chiffres de 0 à 9 et du caractère "_"

(souligné), commencer par une lettre et ne pas se terminer par le souligné.

10
VHDL
Architecture d’une description VHDL

3. Les modes :

 Le mode indique si le port va être lu ou écrit (entrée ou sortie).

 Cela indique également la direction du driver.

 4 types de modes:

• Mode IN

• Mode OUT

• Mode INOUT

• Mode BUFFER 11
VHDL
Architecture d’une description VHDL

3. Les modes :

 IN

 La valeur peut être seulement lue mais pas assignée.

12
VHDL
Architecture d’une description VHDL

3. Les modes :

 OUT

 La valeur peut être seulement assignée mais pas lue

13
VHDL
Architecture d’une description VHDL

3. Les modes :

 INOUT

 La valeur peut être assignée et lue (Bidirectionnelle).

14
VHDL
Architecture d’une description VHDL

4. Les types des données:

Les types utilisés sont nombreux (entiers, réels, tableaux, enregistrement, etc..),
mais l'électronicien se servira surtout des types :

• bit pour un signal binaire qui peut prendre uniquement 2 valeurs 0 et 1 ;


• bit_vector pour un bus dont les signaux ne peuvent prendre que 2 valeurs 0 et
1.

15
VHDL
Architecture d’une description VHDL

4. Les types des données:

Pour la synthèse des circuits logiques, on utilise des types dérivés et plus
complets qui sont définis dans la bibliothèque IEEE : (Le paquetage
STD_LOGIC_1164)
• std_logic pour un signal.
• std_logic_vector pour un bus composé de plusieurs signaux.
• port représente les canaux de communication par lesquels des signaux
transitent entre le composant et le monde extérieur.
16
VHDL
Architecture d’une description VHDL

4. Les types des données:

 BIT

La valeur peut être 0 ou 1.


 BOOLEAN

Supporte deux états TRUE ou FALSE.

17
VHDL
Architecture d’une description VHDL
4. Les types des données:

STD_LOGIC

Un type de donnée qui fait partie de la bibliothèque IEEE nommée std_logic_1164.


• ‘0’ ou ‘L’ : pour un niveau bas ou état résistif type pull-down
• ‘1’ ou ‘H’ : pour un niveau haut ou état résistif type pull-up
• ‘Z’ : pour état haute impédance.
• ‘X‘ : Quelconque, c’est à dire n’importe quelle valeur.
• 'U' : l'état initial par défaut et identifie les signaux non affectés en simulation.
18
VHDL
Architecture d’une description VHDL
5. Les opérateurs logiques :
OPERATEUR VHDL
ET and
NON ET nand
OU or
NON OU nor
OU EXCLUSIF xor
NON OU EXCLUSIF xnor
NON not
DECALAGE A GAUCHE sll
DECALAGE A DROITE srl
ROTATION A GAUCHE rol
ROTATION A DROITE ror 19
VHDL
Architecture d’une description VHDL
6. Les opérateurs relationnels :

OPERATEUR VHDL
EGAL =
NON EGAL /=
INFERIEUR <
INFERIEUR OU EGAL <=
SUPERIEUR >
SUPERIEUR OU EGAL >=
20
VHDL
Architecture d’une description VHDL

7. Les signaux :

 Représente les fils du circuit.

 Ces signaux peuvent être utilisés :

• Pour relier les entités de conception (Design) entre elles et communiquer les
changements de valeurs au sein d'une conception.

• Au lieu des ports d'entrée et de sortie (Inout). 21


VHDL
La logique combinatoire

1. Description comportementale et structurelle :

Il existe deux façons distinctes de décrire une structure :


• Comportementale : le comportement de la structure est directement inscrit
dans l'architecture à l'aide d'instructions séquentielles ou sous forme de flow
de données (équation logique).
• Structurelle : c’est une réalisation « matérielle » de l’équation logique
avec des composants logiques préalablement décrits en VHDL dans une
bibliothèque.
22
VHDL
La logique combinatoire

1. Description comportementale et structurelle :

Exemple: Description comportementale


Comparateur de deux bits:

23
VHDL
La logique combinatoire

1. Description comportementale et structurelle :

 Description structurelle:

Cette description correspond à un assemblage de modules (circuits élémentaires).


Chaque module est prédéfini de manière comportementale et fait partie ensuite
d’une bibliothèque de modules. Ces modules sont ensuite interconnectés de
manière similaire à un schéma.

24
VHDL
La logique combinatoire

1. Description comportementale et structurelle :

Exemple: Description structurelle


Additionneur complet 1 bit:

Table de vérité d’un demi-additionneur Circuit d’un additionneur complet


25
VHDL
La logique combinatoire

1. Description comportementale et structurelle :

Exemple: Additionneur complet 1 bit:


Description comportementale?

26
VHDL
La logique combinatoire

2. Instructions du mode « concurrent » :

Pour une description VHDL toutes les instructions sont évaluées et affectent les
signaux de sortie en même temps. L’ordre dans lequel elles sont écrites n’a
aucune importance : c’est le mode « concurrent ». C’est la grande différence entre
une description VHDL et un langage informatique classique ou un système à
microprocesseur qui exécute les instructions séquentiellement.

27
VHDL
La logique combinatoire

2. Instructions du mode « concurrent » :

 Dans un langage « Software » comme C++, l’instruction suivante ‘X=X+Y;’


s’exécutera de la façon suivante:
• X et Y sont des emplacements dans les registres.

• Le contenu de X et Y est additionné puis le résultat est

stocké dans X.

 Dans VHDL qui est un langage « Hardware », l’instruction devient ‘X<= X+Y;’.
• On utilise la notion des instructions simultanées «Concurrent statements »

• Ce qui implique qu’il n'y a pas de registres.


28
VHDL
La logique combinatoire
2. Instructions du mode « concurrent » :

2.1. Instruction d’affectation ‘ <= ‘ :

C’est l’opérateur le plus utilisé. Il permet de modifier l’état d’un signal en fonction d’autres signaux
et/ou d’autres opérateurs :
S1 <= E2 and E1 ;
Remarque :
Pour les signaux composés de plusieurs bits on utilise les guillemets " … " ;
Les bases numériques utilisées pour les bus peuvent être :
• BINAIRE : BUS <= "1001" ; -- BUS = 9 en décimal
• HEXA : BUS <= X"9" ; -- BUS = 9 en décimal
29
• OCTAL : BUS <= O"11" ; -- BUS = 9 en décimal
VHDL
La logique combinatoire
2. Instructions du mode « concurrent » :

2.1. Affectation conditionnelle :

Une sortie ne peut pas avoir deux valeurs à la fois (deux drivers). Donc une affectation conditionnelle est
nécessaire dans ce cas.
30
VHDL
La logique combinatoire
2. Instructions du mode « concurrent » :

2.1. Affectation conditionnelle :

L’instruction when…else modifie l’état d’un signal suivant le résultat d’une condition logique entre
un ou des signaux, valeurs, constantes :
Signal <= expression when condition else
expression when condition else
expression;
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.

31
VHDL
La logique combinatoire
2. Instructions du mode « concurrent » :
2.1. Affectation conditionnelle :
Exemple 1: Multiplexeur 4 vers 1
library ieee;
use ieee.std_logic_1164.all;
entity mux1 is
PORT (a, b, c, d : in std_logic;
s : in std_logic_vector(1 downto 0);
x : out std_logic);
end mux1;
architecture archmux of mux1 is
begin
x <= a when ( s="00" ) else
b when ( s="01" ) else
c when ( s="10" ) else
d;
end archmux;
32
VHDL
La logique combinatoire
2. Instructions du mode « concurrent » :

2.1. Affectation conditionnelle :

Exemple 2:

33
VHDL
La logique combinatoire
2. Instructions du mode « concurrent » :

2.1. Affectation conditionnelle :

Exemple 3: Buffer à trois états

34
VHDL
La logique combinatoire
2. Instructions du mode « concurrent » :

2.2. Affectation sélective :

L’instruction with … select permet d’affecter différentes valeurs à un signal, selon les valeurs prises
par un signal dit de sélection :
with signal_de_selection select
signal <= expression1 when choix1,
expression2 when choix2,
expression3 when others;
 L'instruction with...select évalue signal_de_selection et compare cette valeur à chaque valeur de
choix.
 Dans l'instruction when, la valeur de choix correspondante voit son expression assignée à la cible.
 Chaque valeur de l'intervalle du type signal_de_selection doit être assignée à un seul choix.
Remarque : L’instruction expression when others n’est pas obligatoire mais elle fortement conseillée. Elle
permet de définir la valeur du signal dans le cas où aucune condition n’est remplie. 35
VHDL
La logique combinatoire
2. Instructions du mode « concurrent » :
2.2. Affectation sélective :
Exemple 1: Multiplexeur 4 vers 1
library ieee;
use ieee.std_logic_1164.all;
ENTITY mux2 IS
PORT ( a,b,c,d : IN STD_LOGIC;
s : IN STD_LOGIC_VECTOR(1 downto 0);
x : OUT STD_LOGIC);
END mux2;
ARCHITECTURE archmux OF mux2 IS
BEGIN
WITH s SELECT
x <= a WHEN "00" ,
b WHEN "01" ,
c WHEN "10" ,
d WHEN OTHERS;
END archmux;
36
VHDL
La logique combinatoire
2. Instructions du mode « concurrent » :

2.2. Affectation sélective :

Exemple 2:

37
VHDL
La logique séquentielle

1. Définition d’un process :

Un process est une partie de la description d’un circuit dans laquelle les instructions sont exécutées
séquentiellement c’est à dire les unes à la suite des autres. Il permet d’effectuer des opérations sur
les signaux en utilisant les instructions standard de la programmation structurée.

L’exécution d’un process est déclenchée par un ou des changements d’états de signaux logiques. Le
nom de ces signaux est défini dans la liste de sensibilité lors de la déclaration du process :
Nom_du_process : process (Liste_de_sensibilité_nom_des_signaux)
begin
-- instructions du process
end process Nom_du_process;

38
VHDL
La logique séquentielle

1. Définition d’un process :

• Le nom du process est facultatif, mais il peut être très utile pour repérer un process parmi

d’autres lors de phases de mise au point ou de simulations.

• L’exécution d’un process a lieu à chaque changement d’état d’un signal de la liste de sensibilité.

• Les instructions du process s’exécutent séquentiellement.

• Les changements d’état des signaux par les instructions du process sont pris en compte à la fin du

process.
39
VHDL
La logique séquentielle
Exemple: Bascule D
library ieee; Commentaires :
use ieee.std_logic_1164.all; - Seul le signal CLK fait partie de la liste de
use ieee.numeric_std.all; sensibilité. Donc, seul un changement d’état du signal
use ieee.std_logic_unsigned.all; CLK va déclencher le process et par conséquent
ENTITY basculeD IS évaluer les instructions de celui-ci.
Port (D,CLK : in std_logic ; S : out std_logic); - L’instruction if (CLK'event and CLK='1') then
END basculeD; permet de détecter un front montant du signal CLK.
ARCHITECTURE description OF basculeD IS - La détection de front est réalisée par l’attribut event
BEGIN appliqué à l’horloge CLK. Si on veut un
BD : PROCESS (CLK) déclenchement sur un front descendant, il faut écrire
Begin l’instruction suivante : if (CLK'event and CLK='0').
IF (CLK'event and CLK ='1') THEN - Les bibliothèques IEEE possèdent deux instructions
S <= D; permettant de détecter les fronts montants
END IF; rising_edge(CLK) ou descendants falling_edge(CLK).
END PROCESS BD; - Si la condition est remplie alors le signal de sortie S
END description; sera affecté avec la valeur du signal d’entrée D.
40
VHDL
La logique séquentielle
2. Instructions séquentielles utilisées dans un ‘process’ :

2.1. Assignation conditionnelle :

IF condition THEN instructions


ELSIF condition THEN instructions
ELSE instructions
END IF ;

Exemple :
IF (RESET=’1’) THEN SORTIE <= ”0000”;
END IF ;

41
VHDL
La logique séquentielle
2. Instructions séquentielles utilisées dans un ‘process’ :

2.2. Assignation sélective :

CASE signal_de_selection IS
WHEN valeur_de_selection => instructions;
WHEN others => instructions;
END CASE;
Exemple :
CASE sel IS
WHEN “000” => S1 <= E1;
WHEN “001” => S1 <= ‘0’;
WHEN “010” | “011” => S1 <=’1’;
WHEN OTHERS => S1 <= ‘0’;
END CASE;
42
VHDL
La logique séquentielle
2. Instructions séquentielles utilisées dans un ‘process’ :

2.3. Boucle For…loop :


etiquette : for variable_de_boucle in valeur_debut to valeur_fin loop
{
Instructions
}
End loop etiquette;
Exemple : process (A) begin
Z <= "0000";
for I in 0 to 3 loop
if (A = I) then
Z(I) <= '1';
end if;
end loop;
end process;
43

Vous aimerez peut-être aussi