4 VHDL
4 VHDL
4 VHDL
142
Pr. Abdelmajid HAJAMI
Le langage VHDL
Introduction
Écrit dans les années 70 pour réaliser la simulation de circuits électroniques.
On l’a ensuite étendu en lui rajoutant des extensions pour permettre la conception
(synthèse) de circuits logiques programmables (P.L.D. (Programmable Logic Device).
Auparavant on utilisait des langages de bas niveau (ABEL, PALASM, ORCAD/PLD,..)pour
décrire le fonctionnement d’un circuit électronique programmable.
Actuellement il n’est plus possible d’utiliser ces outils car la densité de fonctions logiques
(portes et bascules) intégrée dans les PLDs est grande(plusieurs milliers de portes voire
millions de portes).
Les sociétés de développement et les ingénieurs ont créé des langages dits de haut niveau
(VHDL et VERILOG). Ces deux langages font abstraction des contraintes technologies des
circuits PLDs.
Ils permettent au code écrit d’être portable, c’est à dire qu’une description écrite pour un
circuit peut être facilement utilisée pour un autre circuit
143
Pr. Abdelmajid HAJAMI
Le langage VHDL
Introduction
144
Pr. Abdelmajid HAJAMI
Le langage VHDL
Introduction
VHDL est utilisé pour :
145
Pr. Abdelmajid HAJAMI
Le langage VHDL
Langage de description VS Langage de programmation
VHDL n’est pas un langage de programmation comme le C, c’est un langage de
description matériel.
un langage de description matériel comme VHDL décrit une réalité matérielle, c’est-
à-dire le fonctionnement d’un système numérique. Il va être traduit (synthétisé) en un
ensemble de circuits logiques combinatoires et séquentiels qui vont être implémentés
dans un circuit intégré.
146
Pr. Abdelmajid HAJAMI
Le langage VHDL
Langage de description VS Langage de programmation
comparaison des conceptions pour processeur
et pour circuit logique programmable
147
Pr. Abdelmajid HAJAMI
Le langage VHDL
Description VHDL & PLD
Lors de la phase de synthèse chaque bloc sera matérialisé par des portes et/ou des
bascules. La phase suivante sera d’implanter les portes et les bascules à l’intérieur du
circuit logique.
Cette tâche sera réalisée par le logiciel placement/routage («Fitter»), au cours de laquelle
les entrées et sorties seront affectées à des numéros de broches.
On peut remarquer sur le schéma la fonction particulière du bloc VHDL N°5.
En effet dans la description fonctionnelle d’un PLD on a souvent besoin d’une fonction qui
sert à cadencer le fonctionnement de l’ensemble
149
Pr. Abdelmajid HAJAMI
Le langage VHDL
Organisation fonctionnelle de développement d’un PLD.
Entrée syntaxique
Entrée schématique Langage: Diagrammes d’états
- VHDL
150
Pr. Abdelmajid HAJAMI
151
Pr. Abdelmajid HAJAMI
Le langage VHDL
Structure d’une description VHDL
152
Pr. Abdelmajid HAJAMI
153
Pr. Abdelmajid HAJAMI
Le langage VHDL
Les bases du VHDL
Comme la majorité des langages, le VHDL :
fait appel à des bibliothèques (library).
Il utilise des mots clés.
Les lignes de commandes se terminent par « ; »
Les commentaires sont précédés par « -- »
Il utilise indifféremment les majuscules et minuscules.
Les modèles peuvent être décrits en comportemental, structurel ou mixte
Il utilise les concepts de base suivant : l’entité (entity), l’architecture (architecture), la
configuration (configuration) et le boitier(Package).
154
Pr. Abdelmajid HAJAMI
Le langage VHDL
Déclaration des bibliothèques
Toute description VHDL utilisée pour la synthèse a besoin de bibliothèques. L’ IEEE les a
normalisées et plus particulièrement la bibliothèque IEEE1164. 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,...
Library ieee;
Use ieee.std_logic_1164.all;
Use ieee.numeric_std.all;
Use ieee.std_logic_unsigned.all;
Exemple : Remarque :
entity SEQUENCEMENT is Après la dernière définition de signal de
port ( l’instruction Port il ne faut jamais mettre
CLOCK : in std_logic; de point virgule.
RESET : in std_logic;
Q : out std_logic_vector(1 downto 0)
);
end SEQUENCEMENT;
156
Pr. Abdelmajid HAJAMI
Le langage VHDL
Déclaration de l’entité et des E/S (I/O)
L’instruction port :
Syntaxe:
NOM_DU_SIGNAL : sens type;
Exemple:
CLOCK: in std_logic;
BUS : out std_logic_vector (7 downto 0);
157
Pr. Abdelmajid HAJAMI
Le langage VHDL
Déclaration de l’entité et des E/S (I/O)
L’instruction port :
Le nom du signal :
Il est composé de caractères, le premier caractère doit être une
lettre, sa longueur est quelconque, mais elle ne doit pas dépasser une
ligne de code.
VHDL n’est pas sensible à la « casse », c’est à dire qu’il ne fait pas
la distinction entre les majuscules et les minuscules.
158
Pr. Abdelmajid HAJAMI
Le langage VHDL
Déclaration de l’entité et des E/S (I/O)
L’instruction port :
Le sens du signal :
- in : pour un signal en entrée.
- out: pour un signal en sortie.
- inout: pour un signal en entrée sortie
- buffer: pour un signal en sortie mais utilisé comme entrée dans la description.
159
Pr. Abdelmajid HAJAMI
Le langage VHDL
Déclaration de l’entité et des E/S (I/O)
L’instruction port :
Le type du signal :
Le TYPE utilisé pour les signaux d’entrées / sorties est :
- le std_logic pour un signal.
- le std_logic_vector pour un bus composé de plusieurs signaux.
160
Pr. Abdelmajid HAJAMI
Le langage VHDL
Déclaration de l’entité et des E/S (I/O)
L’instruction port :
161
Pr. Abdelmajid HAJAMI
Le langage VHDL
Déclaration de l’entité et des E/S (I/O)
Exemples de description d’entités
entity COUNT is
port(CLK, RST: in std_logic;
CNT : inout std_logic_vector(2 downto 0)
);
end COUNT;
entity COMP4BIT is
port (A,B :in std_logic_vector(3 downto 0);
PLUS,MOINS,EGAL :out std_logic);
end COMP4BIT;
162
Pr. Abdelmajid HAJAMI
Le langage VHDL
Déclaration de l’entité et des E/S (I/O)
Exemples de description d’entités
entity DEC7SEG is
port (
A : in std_logic;
B : in std_logic; entity DEC7SEG4 is
C : in std_logic; port (DEC :in std_logic_vector(3 downto 0);
D : in std_logic; SEG:out std_logic_vector(0 downto 6)
SA : out std_logic; );
SB : out std_logic; end DEC7SEG4;
SC : out std_logic;
SD : out std_logic;
SE : out std_logic;
SF : out std_logic;
SG : out std_logic
);
end DEC7SEG;
163
Pr. Abdelmajid HAJAMI
Le langage VHDL
Déclaration de l’entité et des E/S (I/O)
Exemples de description d’entités
Exemple:
Soit le signal d’entré A de 8 bits, on le déclarera en VHDL comme suit :
A : in std_logic_vector ( 7 downto 0 ) ;
Ou bien : A : in std_logic_vector (0 to 7);
La différence entre les deux expressions est l’indice du MSB et du LSB. Dans la première expression,
l’indice du MSB est A(7), celui du LSB est A(0). Dans la deuxième expression, l’indice du MSB est
A(0), celui du LSB est A(7).
164
Pr. Abdelmajid HAJAMI
Le langage VHDL
Déclaration de l’entité et des E/S (I/O)
Remarque
On peut utiliser le type bit à la place de std_logic, et le type bit_vector à la
place de std_logic_vector,
la différence entre eux est que le type bit ne possède que deux état : ‘0’ et ‘1’
ce qui est très limité car il faut prendre en considération les autres états, c’est
pourquoi on préfère le type std_logic au type bit.
165
Pr. Abdelmajid HAJAMI
Le langage VHDL
Déclaration de l’architecture correspondante à l’entité
description du fonctionnement
L’architecture décrit le fonctionnement souhaité pour un circuit ou une partie du circuit.
En effet le fonctionnement d’un circuit est généralement décrit par plusieurs modules VHDL.
Un module représente le couple ENTITE/ARCHITECTURE.
Dans le cas de simples PLDs on trouve souvent un seul module.
À travers les instructions, l’architecture établit les relations entre les entrées et les sorties.
On peut avoir un fonctionnement purement combinatoire, séquentiel voire les deux séquentiel
et combinatoire.
166
Pr. Abdelmajid HAJAMI
Le langage VHDL
Déclaration de l’architecture correspondante à l’entité
Exemple 1 : Opérateurs logiques de base
-- Opérateurs logiques de base
entity PORTES is
port (A,B :in std_logic;
Y1,Y2,Y3,Y4,Y5,Y6,Y7:out std_logic);
end PORTES;
architecture DESCRIPTION of PORTES is
begin
Y1 <= A and B;
Y2 <= A or B;
Y3 <= A xor B;
Y4 <= not A;
Y5 <= A nand B;
Y6 <= A nor B;
Y7 <= not(A xor B);
end DESCRIPTION; 167
Pr. Abdelmajid HAJAMI
Exemple 2 : Décodeurs 7 segments
-- Décodeurs 7 segments
entity DEC7SEG4 is
port (DEC :in std_logic_vector(3 downto 0);
SEG:out std_logic_vector(0 downto 6));
end DEC7SEG4;
architecture DESCRIPTION of DEC7SEG4 is
begin
SEG <= "1111110" when DEC = 0
a
else "0110000" when DEC = 1
else "1101101" when DEC = 2
else "1111001" when DEC = 3 f b
else "0110011" when DEC = 4 g
else "1011011" when DEC = 5
else "1011111" when DEC = 6
else "1110000" when DEC = 7 e c
else "1111111" when DEC = 8
else "1111011" when DEC = 9
else "-------"; d
end DESCRIPTION;
168
Pr. Abdelmajid HAJAMI
Exemple 3/1 : Décodage d’adresses
-- Décodage d’adresses
Library ieee;
Use ieee.std_logic_1164.all;
Use ieee.numeric_std.all;
entity DECODAGE is
port (
A15, A14, A13, A12, A11, A10 : in std_logic;
RAM0 : out std_logic;
RAM1 : out std_logic;
RAM2 : out std_logic;
RAM3 : out std_logic;
ROM : out std_logic;
INTER1 : out std_logic;
INTER2 : out std_logic;
INTER3 : out std_logic );
end DECODAGE;
169
Pr. Abdelmajid HAJAMI
Exemple 3/2 :Décodage d’adresses
-- Décodage d’adresses
architecture DESCRIPTION of DECODAGE is
signal ADRESSE: std_logic_vector(15 downto 0);
begin
ADRESSE <= A15 & A14 & A13 & A12 & A11 & A10 & "----------";
-- définition du bus d’adresses
ROM <= '0' when (ADRESSE >= x"E000") and (ADRESSE <= x"FFFF") else '1';
RAM0 <= '0' when (ADRESSE >= x"0000") and (ADRESSE <= x"03FF") else '1';
RAM1 <= '0' when (ADRESSE >= x"0400") and (ADRESSE <= x"07FF") else '1';
RAM2 <= '0' when (ADRESSE >= x"0800") and (ADRESSE <= x"0BFF") else '1';
RAM3 <= '0' when (ADRESSE >= x"0C00") and (ADRESSE <= x"0FFF") else '1';
INTER1 <= '0' when (ADRESSE >= x"8000") and (ADRESSE <= x"8001") else '1';
INTER2 <= '0' when (ADRESSE >= x"A000") and (ADRESSE <= x"A001") else '1';
INTER3 <= '0' when (ADRESSE >= x"C000") and (ADRESSE <= x"C00F") else '1';
end DESCRIPTION;
170
Pr. Abdelmajid HAJAMI
Le langage VHDL
Les types de base
Le VHDL est un langage fortement typé. Chaque objet doit être déclaré et appartenir
à un type connu (ensemble de valeurs possibles). Parmi ces types :
Bit_vector, Std_logic_vector,
Chaîne de caractères : entre guillemets (attention ici les minuscules et majuscules sont
significatives) "Bonjour "
172
Pr. Abdelmajid HAJAMI
Le langage VHDL
Les instructions de base («mode concurrent ») Logique combinatoire
le 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 les instructions n’a aucune
importance.
La description VHDL génère des structures électroniques, c’est la
grande différence entre une description VHDL et un langage
informatique classique.
Dans un système à microprocesseur, les instructions sont exécutées
les unes à la suite des autres
173
Pr. Abdelmajid HAJAMI
Le langage VHDL
Les instructions de base («mode concurrent ») Logique combinatoire
Exemple
architecture DESCRIPTION of DECOD1_4 is
begin
D0 <= (not(IN1) and not(IN0)); -- première instruction
D1 <= (not(IN1) and IN0); -- deuxième instruction
D2 <= (IN1 and not(IN0)); -- troisième instruction
D3 <= (IN1 and IN0); -- quatrième instruction
end DESCRIPTION;
architecture DESCRIPTION of DECOD1_4 is
begin
D1 <= (not(IN1) and IN0); -- deuxième instruction
D2 <= (IN1 and not(IN0)); -- troisième instruction
D0 <= (not(IN1) AND not(IN0)); -- première instruction
D3 <= (IN1 AND IN0); -- quatrième instruction
end DESCRIPTION;
174
Pr. Abdelmajid HAJAMI
Le langage VHDL
Les instructions de base («mode concurrent ») Logique combinatoire
Les opérateurs : l’affectation simple <=
Il permet de modifier l’état d’un signal en fonction d’autres signaux et/ou d’autres
opérateurs.
S1 <= E2 and E1 ;
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 1bit.
- ‘0’ ou ‘L’ pour un niveau bas avec un signal de 1bit.
- ‘Z’ pour un état haute impédance avec un signal de 1bit.
- ‘-’ pour un état quelconque, c’est-à-dire ‘0’ ou ‘1’.
- Pour les signaux composés de plusieurs bits on utilise les guillemets " … ",
Les bases numériques utilisées pour les bus peuvent être :
BINAIRE , exemple : BUS <= "1001" ; -- BUS = 9 en décimal
HEXA , exemple : BUS <= X"9" ; -- BUS = 9 en décimal
Pr. Abdelmajid HAJAMI
OCTAL , exemple : BUS <= O"11" ; -- BUS = 9 en décimal 175
Le langage VHDL Les opérateurs : l’affectation simple <=
Library ieee; Les opérateurs d’affectation :
Use ieee.std_logic_1164.all; <= affectation à un signal
entity AFFEC is := affectation à une variable
port (
E1,E2 : in std_logic;
BUS1,BUS2,BUS3 : out std_logic_vector(3 downto 0);
S1,S2,S3,S4 : out std_logic);
end AFFEC;
architecture DESCRIPTION of AFFEC is
begin
S1 <= '1'; -- S1 = 1
S2 <= '0'; -- S2 = 0
S3 <= E1; -- S3 = E1
S4 <= '1' when (E2 ='1') else 'Z'; -- S4 = 1 si E1=1 sinon S4
-- prend la valeur haute impédance
BUS1 <= "1000"; -- BUS1 = "1000"
BUS2 <= E1 & E2 & "10"; -- BUS2 = E1 & E2 & 10
BUS3 <= x"A"; -- valeur en HEXA -> BUS3 = 10(déc)
end DESCRIPTION;
176
Pr. Abdelmajid HAJAMI
Le langage VHDL
Les instructions de base («mode concurrent ») Logique combinatoire
L’opérateur de concaténation : &
Valeur de A Valeur de B
"001" « 110"
177
Pr. Abdelmajid HAJAMI
Le langage VHDL
Les instructions de base («mode concurrent ») Logique combinatoire
Les opérateurs logiques
Opérateur VHDL
ET and
NON ET nand
OU or
NON OU nor S1 <= A sll 2 ; -- S1 = A décalé de 2 bits à gauche.
S2 <= A rol 3 ; -- S2 = A avec rotation de 3 bits à gauche
OU EXCLUSIF xor
S3 <= not (R); -- S3 = R
N OU EXCLUSIF xnor
NON not
Décalage à droite :
-- Si A est de type std_logic_vector(7 downto 0)
S1 <= ‘0’ & A(7 downto 1); -- décalage d’un bit à droite
S1 <= "000" & A(7 downto 3); -- décalage de trois bits à droite
Décalage à gauche :
-- Si A est de type std_logic_vector(7 downto 0)
S1 <= A(6 downto 0) & ‘0’; -- décalage d’un bit à gauche
S1 <= A(4 downto 0) & "000"; -- décalage de trois bits à gauche
179
Pr. Abdelmajid HAJAMI
Le langage VHDL
Les instructions de base («mode concurrent ») Logique combinatoire
Les opérateurs arithmétiques
Pour pouvoir utiliser les opérateurs ci-dessus il faut rajouter les bibliothèques
suivantes au début du fichier VHDL:
Use ieee.numeric_std.all ;
Use ieee.std_logic_arith.all ;
180
Pr. Abdelmajid HAJAMI
Le langage VHDL
Les instructions de base («mode concurrent ») Logique combinatoire
Les opérateurs relationnels
Ils permettent de modifier l’état d’un signal ou de signaux suivant le résultat d’un
test ou d’une condition. En logique combinatoire ils sont souvent utilisés avec les
instructions :
- when … else …
- with …. Select ….
181
Pr. Abdelmajid HAJAMI
Le langage VHDL
Les instructions de base («mode concurrent ») Logique combinatoire
L’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.
182
Pr. Abdelmajid HAJAMI
Le langage VHDL
Les instructions de base («mode concurrent ») Logique combinatoire
L’affectation conditionnelle
-- Structure évoluée d’un multiplexeur 4 vers 1
S2 <= E1 when (SEL="00" ) else
E2 when (SEL="01" ) else
E3 when (SEL="10" ) else
E4 when (SEL="11" )
else ‘0’;
183
Pr. Abdelmajid HAJAMI
Le langage VHDL
Les instructions de base («mode concurrent ») Logique combinatoire
L’affectation sélective
Cette instruction permet d’affecter différentes valeurs à un signal, selon les valeurs
prises par un signal dit de sélection.
184
Pr. Abdelmajid HAJAMI
Le langage VHDL
Les instructions de base («mode concurrent ») Logique combinatoire
L’affectation sélective
-- Multiplexeur 4 vers 1
with SEL select
S2 <= E1 when "00",
E2 when "01",
E3 when "10",
E4 when "11",
'0' when others;
185
Pr. Abdelmajid HAJAMI
Le langage VHDL
Les instructions du mode séquentiel Logique séquentielle
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 comme dans les systèmes à
microprocesseurs.
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.
186
Pr. Abdelmajid HAJAMI
Le langage VHDL
Les instructions du mode séquentiel Logique séquentielle
Process
[Nom_du_process :] process(Liste_de_sensibilité_nom_des_signaux)
Begin
-- instructions du process
end process [Nom_du_process] ;
Remarque:
Le nom du process entre crochet 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.
187
Pr. Abdelmajid HAJAMI
Le langage VHDL
Les instructions du mode séquentiel Logique séquentielle
Process
Règles de fonctionnement d’un process.
1) L’exécution d’un process a lieu à chaque changement d’état d’un signal de la liste
de sensibilité.
2) Les instructions du process s’exécutent séquentiellement.
3) Les changements d’état des signaux par les instructions du process sont pris en
compte à la fin du process.
188
Pr. Abdelmajid HAJAMI
Le langage VHDL
Les instructions du mode séquentiel Logique séquentielle
190
Pr. Abdelmajid HAJAMI
Le langage VHDL
Les instructions du mode séquentiel Logique séquentielle
195
Pr. Abdelmajid HAJAMI
Library ieee;
Use ieee.std_logic_1164.all;
Use ieee.numeric_std.all;
Use ieee.std_logic_unsigned.all;
entity BASCULEDSRS is
port (
D,CLK,SET,RESET : in std_logic;
S : out std_logic);
end BASCULEDSRS;
architecture DESCRIPTION of BASCULEDSRS is
begin
PRO_BASCULEDSRS : process (CLK)
Begin
if (CLK'event and CLK ='1') then
if (RESET =’1’) then
S <= ‘0’;
elsif (SET =’1’)then
S <= ‘1’;
else
S <= D;
end if;
end if;
end process PRO_BASCULEDSRS;
end DESCRIPTION; 196
Pr. Abdelmajid HAJAMI
Le langage VHDL
197
Pr. Abdelmajid HAJAMI
Le langage VHDL
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
198
Pr. Abdelmajid HAJAMI
Le langage VHDL
TestPorteET
199
Pr. Abdelmajid HAJAMI
Le langage VHDL
s_entree1
s_sortie
s_entree1, s_entree2 et s_sortie
sont des signaux internes au
programme de test,
s_entree2
200
Pr. Abdelmajid HAJAMI
Le langage VHDL
PorteET
s_entree2 entree1
sortie
entree2
201
Pr. Abdelmajid HAJAMI
Le langage VHDL
TestPorteET
Il s’agit d’une instanciation d’un
s_entree1 PorteET composant de type PorteET
s_sortie
entree1
sortie
entree2
PorteET
s_entree2 Porte
entree1
sortie
entree2
202
Pr. Abdelmajid HAJAMI
Le langage VHDL
203
Pr. Abdelmajid HAJAMI
Le langage VHDL PROCESS
BEGIN
WAIT FOR 10 ns;
s_entree1 <= '0';
Simulation : Porte ET Step 7 s_entree2 <= '0';
WAIT FOR 10 ns;
s_entree1 <= '0';
Géneration des signaux s_entree2 <= '1';
Le maping s’effectue en prenant WAIT FOR 10 ns;
en compte l’ordre des signaux s_entree1 <= '1';
dans PorteET s_entree2 <= '1';
TestPorteET WAIT FOR 10 ns;
s_entree1 <= '1';
s_entree2 <= '0';
s_entree1 PorteET WAIT FOR 10 ns;
s_sortie
entree1 s_entree1 <= '0';
sortie
entree2 s_entree2 <= '0';
PorteET WAIT FOR 10 ns;
s_entree2 Porte
entree1
sortie WAIT ;
entree2
END PROCESS
Pr. Abdelmajid HAJAMI
END Test; 204
Le langage VHDL
T oD o
205
Pr. Abdelmajid HAJAMI
Le langage VHDL
TD 1
D inter2
206
Pr. Abdelmajid HAJAMI
Le langage VHDL
TD 2
207
Pr. Abdelmajid HAJAMI