Vous êtes sur la page 1sur 119

Chapitre 2 : Prsentation des

lments du langage VHDL


Vhsic Hardware Description Language
Vhsic : Very High Speed Integrated Circuit

Langage de description de systmes matriels

2.

2.1.

Prsentation des lments du VHDL


Quest ce que le VHDL?

Labrviation VHDL signifie VHSIC Hardware Description Language


(VHSIC : Very High Speed Integrated Circuit). Ce langage a t crit
dans les annes 70 pour raliser la simulation de circuits lectroniques.
On la ensuite tendu en lui rajoutant des extensions pour permettre la
conception (synthse) de circuits logiques programmables (P.L.D.
Programmable Logic Device).
Auparavant pour dcrire le fonctionnement dun circuit lectronique
programmable les techniciens et les ingnieurs utilisaient des langages
de bas niveau ou plus simplement un outil de saisie de schmas.
Actuellement la densit de fonctions logiques (portes et bascules)
intgre dans les PLDs est telle (plusieurs milliers de portes voire
millions de portes) quil nest plus possible dutiliser les outils dhier pour
dvelopper les circuits daujourdhui.

28/10/2014 11:18

R. EL ALAMI

2.

2.1.

Prsentation des lments du VHDL


Quest ce que le VHDL?

Les socits de dveloppement et les ingnieurs ont voulu saffranchir


des contraintes technologiques des circuits. Ils ont donc cr des
langages dits de haut niveau savoir VHDL et VERILOG.
Ils permettent au code crit dtre portable, cest dire quune
description crite pour un circuit peut tre facilement utilise pour un
autre circuit.
Il faut avoir lesprit que ces langages dits de haut niveau permettent de
matrialiser les structures lectroniques dun circuit.
En effet les instructions crites dans ces langages se traduisent par une
configuration logique de portes et de bascules qui est intgre
lintrieur des circuits. Cest pour cela quon prfre parler de description
VHDL ou VERILOG que de langage.

28/10/2014 11:18

R. EL ALAMI

2.

2.2.

Prsentation des lments du VHDL


Pourquoi un langage de description?

Le schma structurel que l'on utilise depuis si longtemps et si souvent


n'est en fait qu'un outil de description graphique.

Aujourd'hui, l'lectronique numrique est de plus en plus prsente et


tend bien souvent remplacer les structures analogiques utilises
jusqu' prsent.

Ainsi, l'ampleur des fonctions numriques raliser nous impose


l'utilisation d'un autre outil de description.

Il est en effet plus ais de dcrire un compteur ou un additionneur 64


bits en utilisant l'outil de description VHDL plutt qu'un schma.

28/10/2014 11:18

R. EL ALAMI

2.

2.3.

Prsentation des lments du VHDL


Historique

Le VHDL (Very High Speed Integrated Circuit, Hardware Description


language) est le fruit du besoin de normalisation des langages de
description de matriel (Premire norme IEEE 1076-87 en
dcembre 1987).
Auparavant, chaque fournisseur de CAO proposait son propre
langage de modlisation (GHDL chez GENRAD, BLM ou M chez
Mentor Graphics, Verilog chez Cadence etc...) mais aussi un autre
langage pour la synthse et encore un autre pour le test. Au dbut
des annes 80, le ministre de la dfense des Etats Unis (D.O.D)
confiait le soin Intermetrics, IBM et Texas Instruments de mettre
au point ce langage.
L'objectif tait bien sre de s'assurer une certaine indpendance vis
vis des fournisseurs de matriels et de logiciels et ainsi une
assurance de maintenabilit des quipements.

28/10/2014 11:18

R. EL ALAMI

2.

2.3.

Prsentation des lments du VHDL


Historique

En 1994 la version IEEE 1076-93 suivie du standard IEEE 1164 fut


tablie (Normalisation des signaux logiques multivaleurs)
Il y aura aussi la norme IEEE 1076.3 (Numeric Standart pour la
synthse). Implantation d un nombre sign
En 1995, afin de normaliser les mthodes de modlisation des
retards des circuits ASIC ou FPGA, de grands industriels se sont
associs, fournissant des bibliothques normalises. Ceci est
concrtis par la norme IEEE 1076.4
Rcemment, le VHDL a connu une nouvelle extension avec la
premire norme IEEE-1076.1-1999 du langage de modlisation
mixte et multi-technologique VHDL-AMS

28/10/2014 11:18

R. EL ALAMI

2.

2.4.

Prsentation des lments du VHDL


Structure dune description VHDL

En VHDL, une structure logique est dcrite l'aide d'une entit et


d'une architecture de la faon suivante :

28/10/2014 11:18

R. EL ALAMI

2.

2.4.

Prsentation des lments du VHDL


Structure dune description VHDL

28/10/2014 11:18

R. EL ALAMI

2.4.

Structure dune description VHDL

2.4.1. Dclaration des bibliothques

Toute description VHDL utilise pour la synthse a besoin de


bibliothques. LIEEE (Institut of Electrical and Electronics
Engineers) les a normalises et plus particulirement la bibliothque
IEEE1164. Elles contiennent les dfinitions des types de signaux
lectroniques, des fonctions et sous programmes permettant de
raliser des oprations arithmtiques et logiques,...

La directive Use permet de slectionner les bibliothques utiliser.

28/10/2014 11:18

R. EL ALAMI

2.4.

2.4.2

Structure dune description VHDL

Dclaration de lentit (entity) et des entres/sorties


In 1

Out 1

Bloc A

In 2
In 3

Out 2

Vue externe : Dfinition de l'entit


Bloc A
In 1
In 2

In 3

Bloc B

Bloc C

Out 1

Bloc D

Bloc E

Out 2

Vue interne : Dfinition de l'architecture


28/10/2014 11:18

R. EL ALAMI

10

2.4.

2.4.2
. Port :

Structure dune description VHDL

Dclaration de lentit (entity) et des entres/sorties

. Signal d interface entre lentit et lextrieur


. Chaque port est associ un nom, un mode et un type
. Ordre de la dclaration des diffrents signaux : aucune importance
. Ordre conserv lors dune utilisation un plus haut niveau de cette entit

. Mode :

- Instanciation d'un composant (component)

. Dfinition du sens du signal


. VHDL interdit lassociation de deux ports de mode contre nature
. 4 modes sont dfinis

- in : Signal dentre monodirectionnel


- out : Signal de sortie monodirectionnel
- inout : Signal dentre/sortie bidirectionnel
- buffer : Signal de sortie/entre monodirectionnel
. Utile lorsquil y a rebouclage (sortie considre comme une entre)
. Peu utilis (remplac par une sortie associe un signal interne)

28/10/2014 11:18

R. EL ALAMI

11

2.4.

2.4.2

Structure dune description VHDL

Dclaration de lentit (entity) et des entres/sorties


.
.
.
.

. Mode : 4 modes de ports


CS

In
Out
Inout
Buffer

R/W
Adresse

Mmoire

Donnes

28/10/2014 11:18

Busy
Erreur

R. EL ALAMI

12

2.4.

2.4.2

Structure dune description VHDL

Dclaration de lentit (entity) et des entres/sorties

. Dclaration :

ENTITY nom_entite IS
PORT ( entrees : IN type_entrees;
sorties : OUT type_sorties;
entreessorties : INOUT type_entreessorties;
entreessorties_buffer : BUFFER type_entreessorties_buffer)
END nom_entite;

28/10/2014 11:18

R. EL ALAMI

13

2.4.

2.4.2

Structure dune description VHDL

Dclaration de lentit (entity) et des entres/sorties

a)
Le NOM_DU_SIGNAL.
Il est compos de caractres, le premier caractre doit tre une lettre, sa
longueur est quelconque, mais elle ne doit pas dpasser une ligne de code.
VHDL nest pas sensible la casse , cest dire quil ne fait pas la
distinction entre les majuscules et les minuscules.

28/10/2014 11:18

R. EL ALAMI

14

2.4.

Structure dune description VHDL

b)

Le SENS du signal

2.4.2

Dclaration de lentit (entity) et des entres/sorties

- in
- out
- inout
- buffer
description.

28/10/2014 11:18

: pour un signal en entre.


: pour un signal en sortie.
: pour un signal en entre sortie
: pour un signal en sortie mais utilis comme entre dans la

R. EL ALAMI

15

2.4.

Structure dune description VHDL

c)

Le TYPE

2.4.2

Dclaration de lentit (entity) et des entres/sorties

Le TYPE utilis pour les signaux dentres / sorties est :


- le std_logic pour un signal.
- le std_logic_vector pour un bus compos de plusieurs signaux.

Par exemple un bus bidirectionnel de 5 bits scrira :


LATCH : inout std_logic_vector (4 downto 0) ;
O LATCH(4) correspond au MSB et LATCH(0) correspond au LSB.
Les valeurs que peuvent prendre un signal de type std_logic sont :
- 0 ou L
- 1 ou H
- Z
- -

28/10/2014 11:18

: pour un niveau bas.


: pour un niveau haut.
: pour tat haute impdance.
: Quelconque, cest dire nimporte quelle valeur.

R. EL ALAMI

16

Exercices
Exercice 1 : Dfinir
lentit dcrivant un
additionneur de deux
fois un bit.

Exercice 2 : Dfinir
lentit dcrivant un
additionneur de deux
mots de quatre bits.

17

2.4.

2.4.2

Structure dune description VHDL

Dclaration de lentit (entity) et des entres/sorties

. Exemple additionneur 8 bit:


ENTITY adder_pip IS
PORT(

clk : IN bit;
a,b : IN bit_vector(7 DOWNTO 0);
cin : IN bit;
s : OUT bit_vector(7 DOWNTO 0);
cout : OUT bit)

END adder_pip;

28/10/2014 11:18

R. EL ALAMI

18

2.4.

2.4.3

Structure dune description VHDL


Architecture

. dcrit le fonctionnement souhait pour un circuit ou une partie du circuit.


. Plusieurs architectures peuvent tre dfinies pour le mme modle
. Dclaration
ARCHITECTURE nomdelarchitecture OF nomdelentit IS
dclarations de procdures, de types, de constantes,
de composants, de signaux
BEGIN
dfiniton de processus
et/ou
d'instances de composants, ...
END nomdelarchitecture;
28/10/2014 11:18

R. EL ALAMI

19

2.4.

Structure dune description VHDL

2.4.3 Architecture
. Exemples
ARCHITECTURE comportementale OF adder_pip IS
BEGIN
PROCESS(clk)
VARIABLE carry : bit;

VARIABLE sum : bit_vector (7 DOWNTO 0);


BEGIN
IF (CLK = '1') THEN
carry := cin;
FOR i IN 0 TO a'length-1 LOOP
sum(i) := a(i) XOR b(i) XOR carry;
carry := (a(i) AND b(i)) OR (a(i) AND carry) OR (b(i) AND carry);
END LOOP;
cout <= carry;
s <= sum;
END IF;
END PROCESS;
END comportementale;

28/10/2014 11:18

R. EL ALAMI

20

2.4.

Structure dune description VHDL

2.4.3 Architecture
. Exemples -- Dcodeurs

7 segments
entity DEC7SEG4 is
port (DEC :in std_logic_vector(3 downto 0);
SEG:out std_logic_vector(6 downto 0));
end DEC7SEG4;
architecture DESCRIPTION of DEC7SEG4 is
begin
SEG <= "1111110" when DEC = 0
else "0110000" when DEC = 1
else "1101101" when DEC = 2
else "1111001" when DEC = 3
else "0110011" when DEC = 4
else "1011011" when DEC = 5
else "1011111" when DEC = 6
else "1110000" when DEC = 7
else "1111111" when DEC = 8
else "1111011" when DEC = 9
else "-------";
end DESCRIPTION;

28/10/2014 11:18

R. EL ALAMI

21

2.4.

Structure dune description VHDL

2.4.3 Architecture
. 3 Types de description :

. Description comportementale

- Description purement fonctionnelle du circuit


- Portabilit, lisibilit, maintenance, volutivit
- Description flot de donnes pour traduire une table de vrit

. Description structurelle

- Traduction dune reprsentation schmatique


- Efficacit, compacit, clart

. Description mixte

- Au sein dune mme architecture, il est possible d utiliser


des modules dcrits de manire comportementale ou structurelle

28/10/2014 11:18

R. EL ALAMI

22

2.4.

Structure dune description VHDL

A.
Architecture : Description comportementale
. Description haut niveau
ARCHITECTURE haut_niveau OF adder IS
BEGIN
S <= A + B;
END haut_niveau;

. Description

niveau quations logiques


ARCHITECTURE niveau_equations_logiques OF adder IS
BEGIN
S(0) <= A(0) XOR B(0);
S(1) <= A(0) AND B(0) XOR A(1) XOR B(1);
END niveau_equations_logiques;

. Description

bas niveau

ARCHITECTURE bas_niveau OF adder IS


BEGIN
S(0) <= '1' WHEN A(0)!= B(0) ELSE '0';
S(1) <= '1' WHEN (
A(0)!=B(0) AND A(1)!=B(1) OR
A(1)=B(1) AND A(0)=B(0)=1) OR
A(1)!=B(1) AND A(0)=B(0)=0 ) ELSE '0';
END bas_niveau;
28/10/2014 11:18

R. EL ALAMI

23

2.4.
A.

Structure dune description VHDL

Architecture : Description comportementale

. Exemple : Description
D

comportementale d'une bascule D sur niveaux

Q
Horloge
Q

28/10/2014 11:18

Q-1

R. EL ALAMI

24

2.4.

Structure dune description VHDL

A.
Architecture : Description comportementale
. Exemple : Description comportementale d'une bascule D
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_arith.all;
ENTITY basculed IS
PORT
(
d,clk : IN bit;
q: OUT bit);
END basculed;
ARCHITECTURE comportementale OF basculed IS
BEGIN
PROCESS(clk)
BEGIN
IF (clk='1') THEN q<=d;END IF;
END PROCESS;
END comportementale;

28/10/2014 11:18

R. EL ALAMI

25

2.4.
A.

Structure dune description VHDL


Architecture : Description structurelle

. Traduction d'une reprsentation schmatique


A(0)
B(0)

VHDL

S(0)

A(1)
B(1)
A(0)
B(0)

28/10/2014 11:18

S(1)

ARCHITECTURE structurelle OF adder IS


COMPONENT xor2
port(e1,e2 : in bit;s : out bit); end
COMPONENT and2
port(e1,e2 : in bit;s : out bit); end COMPONENT
SIGNAL inter1,inter2 :bit;
BEGIN
u1 : PORT MAP xor2 (e1=>A(0),e2=>B(0),s=>S(0));
u2 : PORT MAP xor2 (e1=>A(1),e2=>B(1),s=>inter1);
u3 : PORT MAP and2 (e1=>A(0),e2=>B(0),s=>inter2);
u4 : PORT MAP xor2 (e1=>inter1,e2=>inter2,s=>S(1));
end structurelle;
R. EL ALAMI

26

2.4.

Structure dune description VHDL

A.

Architecture : Description mixte

. Au sein d'une mme architecture, il est possible d'utiliser du comportemental

et du structurel

reset
D
b
a

Adder

28/10/2014 11:18

S_inter

clk
s

VHDL

ENTITY integration IS PORT(


a : IN bit_vector(0 to 1);
reset,clk : IN bit;
s : OUT bit_vector(0 to 1));
END integration
ARCHITECTURE mixte OF integration IS
SIGNAL b,s_inter :bit_vector(0 to 1);
COMPONENT adder
PORT(a,b : IN bit_vector(0 to 1);
s : OUT bit_vector(0 to 1); END COMPONENT;
BEGIN
PROCESS(clk)
IF rising_edge(clk) THEN
IF reset = "1" THEN b <= '00';
ELSE b <= s_inter;
END IF;
END IF;
END PROCESS;
u1 : PORT MAP adder (a,b,s_inter);
s <= s_inter;
END mixte;
R. EL ALAMI

27

2.4. Structure dune description VHDL


Exemple : un dcodeur 1 parmi 4

28/10/2014 11:18

R. EL ALAMI

28

2.4. Structure dune description VHDL


Exemple : un dcodeur 1 parmi 4

28/10/2014 11:18

R. EL ALAMI

29

2.4. Structure dune description VHDL


Exemple : Additionneur 1 bit

28/10/2014 11:18

R. EL ALAMI

30

2.

2.4.

Prsentation des lments du VHDL


Structure dune description VHDL

L'entit donne les informations concernant les signaux d'entres et


de sorties de la structure ainsi que leurs noms et leurs types.

L'architecture dcrit le comportement de l'entit.

Il est possible de crer plusieurs architectures pour une mme


entit. Chacune de ces architectures dcrira l'entit de faon
diffrente.

28/10/2014 11:18

R. EL ALAMI

31

2.4. Structure dune description VHDL


Exemple : description comportementale

28/10/2014 11:18

R. EL ALAMI

32

2.4. Structure dune description VHDL


Exemple : description comportementale

Dans ce type de description, le comportement de la structure est


directement inscrit dans l'architecture l'aide d'instructions
squentielles ou sous forme de flot de donnes.

28/10/2014 11:18

R. EL ALAMI

33

2.4. Structure dune description VHDL


Exemple : description structurelle

28/10/2014 11:18

R. EL ALAMI

34

2.4. Structure dune description VHDL


Exemple : description structurelle

28/10/2014 11:18

R. EL ALAMI

35

2.

2.5.

Prsentation des lments du VHDL


Les Objets

3 types dobjets :

Constantes :

Variables :

valeur fixe aprs initialisation


valeur modifiable par affectation (affectation instantane)

Signaux :

spcifiques aux langages de description de matriel


modlisent les informations qui circulent sur les fils ou bus

28/10/2014 11:18

R. EL ALAMI

36

2.

2.5.

Prsentation des lments du VHDL


Les Objets

Constantes :
. Utilisation des constantes et des variables : proche des
langages traditionnels
. Constantes (Constant)
. Objets internes valeurs fixes et dfinitives
. Synthse : Mise VCC ou au GND Surface nulle
. Dclaration : constant nom : type := valeur;
. Exemple :
CONSTANT pi : real:=3.141592 ;

28/10/2014 11:18

R. EL ALAMI

37

2.

2.5.

Prsentation des lments du VHDL


Les Objets

Variables :
. Variables (Variable)
. Objets permettant de conserver une valeur pendant un
certain temps
. Utilisable qu'au sein d'un processus (dfinition dans le
process)
. Peu utilis en synthse logique
. Exemple:
VARIABLE octet1 : std_logic_vector(0 TO 7) := "00000001";

28/10/2014 11:18

R. EL ALAMI

38

2.

2.5.

Prsentation des lments du VHDL


Les Objets

Signaux : (signal)

ils sont la base des langages de description de matriel


ils vhiculent les informations entre composants
ils ne sont pas de type pointeur, pas de type fichier
Utilisation en mode concurrent et squentiel
Signaux internes, temporaires
Synthse (reprsentation matrielle : un fil ou une mmoire)
Synthse d'une VARIABLE Synthse d'un SIGNAL
Une valeur courante et une valeur future

28/10/2014 11:18

R. EL ALAMI

39

2.

2.5.

Prsentation des lments du VHDL


Les Objets

Signaux : (signal)

. Synthse d'une VARIABLE Synthse d'un SIGNAL

ARCHITECTURE ex_sig OF exemple IS


BEGIN
PROCESS(a,b,c)
VARIABLE tmp : bit;
BEGIN
tmp := a and b;
y <= tmp or c;
END PROCESS;
END ex_sig;
ARCHITECTURE ex_sig OF exemple IS
SIGNAL tmp : bit;
BEGIN
PROCESS(a,b,c)
BEGIN
tmp <= a and b;
y <= tmp or c;
END PROCESS;
END ex_sig;

28/10/2014 11:18

R. EL ALAMI

a
b

Tmp (fil)

a
b

Tmp (fil)

40

2.

2.5.

Prsentation des lments du VHDL


Les Objets

Affectation des signaux :


VHDL permet de spcifier des dlais dans les affectations.

2 modes de fonctionnement :

mode inertiel :
filtre les impulsions de longueur insuffisante

mode transmission :
transmission de toutes les impulsions

28/10/2014 11:18

R. EL ALAMI

41

2.

2.5.

Prsentation des lments du VHDL


Les Objets

Mode inertiel
utiliser pour les composants dont le temps de travers est non
nul (tous les composants dcrits de faon raliste)

28/10/2014 11:18

R. EL ALAMI

42

2.

2.5.

Prsentation des lments du VHDL


Les Objets

Mode transport
toutes les transitions en entre sont transmises en sortie avec un
dcalage gal au temps de propagation.

28/10/2014 11:18

R. EL ALAMI

43

2.

2.5.

Prsentation des lments du VHDL


Les Objets

Mode inertiel vs mode transport


Le type inertiel permet de "filtrer" les variations de S trop courtes
par rapport au dlai de la transaction.
Par exemple si S est 1 pendant 5 ns, l'affectation S1 <= S after
10 ns; ne changera pas la forme d'onde de S1 qui restera 0.
Contrairement au mode inertiel , le type transport n'opre pas
de "rjection des parasites". Il respecte les temps de propagation.

28/10/2014 11:18

R. EL ALAMI

44

2.

2.5.

Prsentation des lments du VHDL


Les Objets

Diffrences entre variables et signaux


Les variables sont toujours locales un processus: il ny a pas de
variables globales
Les signaux peuvent tre dclars nimporte o dans le programme,
sauf lintrieur dun processus. Sils sont dclars au dbut de
larchitecture, ils sont communs toute larchitecture
Contrairement aux signaux, les variables sont mises jour de faon
instantane, au moment de laffectation, sans retard possible

28/10/2014 11:18

R. EL ALAMI

45

2.

2.6.

Prsentation des lments du VHDL


Types et sous-types

Le VHDL est un langage fortement typ. Chaque objet doit tre


dclar et appartenir un type connu (ensemble de valeurs possibles).
Type = ensemble de valeurs + oprateurs associs
Sous-type = type driv d'un type de base (type parent) avec
contraintes
4 classes de types
Types scalaires: entier, rel, numr, physique
Types composites: tableaux, enregistrements
Pointeurs
Fichiers
Dclaration de type:
Dclaration de sous-type:

28/10/2014 11:18

R. EL ALAMI

46

2.

2.6.

Prsentation des lments du VHDL


Types et sous-types

28/10/2014 11:18

R. EL ALAMI

47

2.

Prsentation des lments du VHDL

2.6.1 Types : scalaire


. Types

entiers :
-231 + 1 entier 231 - 1

. Types
donn

TYPE chiffre_ascendant IS RANGE 0 TO 9;


TYPE chiffre_descendant IS RANGE 9 DOWNTO 0;
flottants :
Approximation discrte de l'ensemble des rels dans un intervalle
TYPE tension IS RANGE 0 TO 5;

-1E38 Flottant 1E38


Oprateurs
Arithmtiques: + * / abs
mod rem (seulement pour types entiers)
** (puissance entire)
Relationnels: = /= < <= > >=
28/10/2014 11:18

R. EL ALAMI

48

2.

Prsentation des lments du VHDL

2.6.1 Types : scalaire

. Types

numrs :

Ensemble de valeurs dsignes par des identificateurs ou des caractres


TYPE boolean IS (false, true);
TYPE bit IS ('0','1');
TYPE std_logic IS ('U', X', O', 1' Z', W', L', H' , -');
TYPE jour IS (lundi, mardi, mercredi, jeudi, vendredi, samedi, dimanche);
Remarques :
. Chaque caractre ou chane de caractres au sein d'un mme type doit tre
distinct
. Possibilit d'utiliser le mme caractre dans 2 types distincts
Oprateurs
Relationnels: = /= < <= > >=
Logiques: and or nand nor xor xnor not (types bit & boolean seulement)
28/10/2014 11:18

R. EL ALAMI

49

2.

Prsentation des lments du VHDL

2.6.1 Types : scalaire


. Types

physiques :

Valeurs numriques de quantits physiques

un type physique est caractris par :

son unit
par des sous units
on peut effectuer des calculs sur ces types

TYPE resistance IS RANGE 0 TO 1E8;


UNITS ohms;
kohms = 1000 ohms;
Mohms = 1E6 ohms;
END UNITS;

Oprateurs
Arithmtiques: + * / abs
Relationnels: = /= < <= > >=
28/10/2014 11:18

R. EL ALAMI

50

2.

Prsentation des lments du VHDL

Tableaux et enregistrements (array & record) :

2.6.2 Types : composs

tableau : lments homognes, de mme type


enregistrements : lments htrognes, types diffrents

Les tableaux :
dimensions multiples
les indices sont de type discret (numr ou entier)
2 sortes de tableaux :
contraint : on spcifie le sens de variation des indices
non contraint : on repousse la dfinition de la taille plus tard

28/10/2014 11:18

R. EL ALAMI

51

2.

Prsentation des lments du VHDL

2.6.2.1

Type : tableaux

Exemples de types non prdfinis


type word is array (31 downto 0) of bit; -- intervalle descendant
type memory is array (0 to 255) of word; -- intervalle montant
type truth_table is array (bit, bit) of bit;
L'indice peut-tre un type entier dfini par dclaration
TYPE adresse IS RANGE 0 TO 255;
type memory is array (adresse) of octet;

Accs aux lments d'un tableau

-- soit W un objet de type word, M de type memory, et TT de type


truth_table
W(15)
--bit d'indice 15
M(122)
--mot d'indice 122
M(122)(8)
-- bit d'indice 8 du mot d'indice 122
TT(0, 1)
-- bit la ligne 1 et colonne 2
-- tranches
W(31 downto 16) -- 16 bits les plus significatifs
M(129 to 255) -- portion haute de la mmoire

28/10/2014 11:18

R. EL ALAMI

52

2.

Prsentation des lments du VHDL

2.6.2.1

Type : tableaux

Les tableaux non contraint :


permet de repousser la dfinition de la taille plus tard.
la manipulation de ces tableaux demande lutilisation dattributs
range <>
Types prdfinis
type bit_vector is array (natural range <>) of bit;
type string is array (positive range <>) of character;

28/10/2014 11:18

R. EL ALAMI

53

2.

Prsentation des lments du VHDL

2.6.2.1

Type : tableaux

Oprateurs
Relationnels: = /= < <= > >=
Logiques*: and or nand nor xor xnor not
Dcalage et rotation*: sll srl sla sra rol ror
(* tableaux 1 dimension de types bit ou boolean seulement;
oprations logiques effectues bit bit)
Concatnation: & (tableaux 1 dimension seulement)

28/10/2014 11:18

R. EL ALAMI

54

2.

Prsentation des lments du VHDL

2.6.2 Types : composs

Un type enregistrement dfinit une collection d'lments (ou de champs) nomms dont
les valeurs peuvent tre de types diffrents. Chaque nom d'lment doit tre unique.
Exemples de types non prdfinis
type memory_bus is record

Accs aux lments d'un enregistrement

addr : bit_vector(15 downto 0);


data : bit_vector(7 downto 0);
read, write: bit;
enable : boolean;
end record memory_bus;
type complex is record
real_part, imag_part: real;
end record complex;

-- soit MB1 et MB2 deux objets de type memory_bus et Z de type complex


MB1.addr -- tout le tableau addr
MB1.addr(7 downto 0) -- tranche du tableau addr
MB1.data(7) -- lment d'indice 7 du tableau addr
Z.real_part, Z.imag_part -- nombres rels
Affectation par champs ou globale
MB1:=MB2
MB1.addr:=MB2.addr
28/10/2014 11:18

R. EL ALAMI

55

2.

Prsentation des lments du VHDL

2.6.3 Types : Accs

Allocation dynamique de mmoire


Pointeur sur un objet de type prdfini
Instructions :
new
deallocate

Exemple :
type article is record
champs1 : integer;
champs2 : bit;
end record;
type pointeur is access article;
variable p, q : pointeur;
p:= new pointeur ;

28/10/2014 11:18

R. EL ALAMI

56

2.

Prsentation des lments du VHDL

2.6.4 Types : Fichier

Les fichiers (FILE) sont trs utiliss pour stocker des donnes telles que
Mmoires ROM, Donnes de test.
type text is file of string ;
Type prdfini (dans paquetage TEXTIO)
L'usage du paquetage TEXTIO requiert la dclaration de la clause use
suivante:
use STD.TEXTIO.all;
Exemples de types non prdfinis
type word is bit_vector(7 downto 0);
type word_file is file of word;
type real_file is file of real;

28/10/2014 11:18

R. EL ALAMI

57

2.

Prsentation des lments du VHDL

2.6.4 Sous-Types

Un sous-type reste compatible avec son type dorigine contrairement un type


nouvellement cr.
SUBTYPE narurel IS integer RANGE 0 TO integerhigh
naturel reste compatible avec integer
TYPE nouvel_entier IS RANGE 0 TO 99

nouvel_entier est un type diffrent

28/10/2014 11:18

R. EL ALAMI

58

2.

Prsentation des lments du VHDL

2.6.5 Types prdfinis

Prdfinis

Integer

Natural

28/10/2014 11:18

Positive

bit

Boolean

Real

Time

Bit-vector

R. EL ALAMI

59

2.

2.7

Prsentation des lments du VHDL


Oprateurs standards

. Remarque :

Le VHDL est un langage dvelopp initialement pour la


modlisation et la simulation, par consquent certains oprateurs sont
dconseiller en synthse

. Oprateurs

logiques
Nom

Signification

And

Et

Nand

Non et

Or

Ou

Nor
Xor

28/10/2014 11:18

Type oprandes

Boolean
Bit ou Bit_vector

Non ou
Ou exculsif

Xnor

Egal

Not

Non
R. EL ALAMI

60

2.

2.7

Prsentation des lments du VHDL


Oprateurs standards

. Oprateurs
. Exemple 1

logiques

SIGNAL a,b,c : bit_vector(0 TO 1);


c <= a AND b;

Synthse

a(0)
b(0)

c(0)

a(1)
b(1)

c(1)

Exemple 2

SIGNAL d, e, f, g : bit;
g <= (d AND e) AND f;

28/10/2014 11:18

Synthse

R. EL ALAMI

d
e
f

61

2.

2.7

Prsentation des lments du VHDL


Oprateurs standards

. Oprateurs relationnels

Ils permettent de modifier


ltat dun signal ou de
signaux suivant le rsultat
dun test ou dune condition

Nom
=
/=
<
<=
>
>=

Type oprandes

Signification
Egal
Non gal
Entres : Tout scalaire
Infrieur
Sortie : Boolean
Infrieur ou gal
Suprieur
Suprieur ou gal

Exemple

SIGNAL a,b : bit_vector(1 DOWNTO 0);


SIGNAL s : bit;
IF a > b THEN s <= "1";
END IF;

Synthse

a0
a1
!b0
a0
!b1
!b0

a1

!b1
28/10/2014 11:18

R. EL ALAMI

62

2.

Prsentation des lments du VHDL

2.7

Oprateurs standards

. Oprateurs
Nom

de dcalages

Type oprandes

Signification

Sll Sla

Dcalage gauche

Srl Sra

Dcalage droite

Rol
Ror

Bit_vector

Rotation gauche
Rotation droite

Exemple

SIGNAL a,b : BIT_VECTOR(0 TO 3);


...
b <= a sll 1; --b = a dcal de 1 bit gauche
...

Synthse

a0
a1

b0

a2

b1

a3

b2

'0'

b3

clk
28/10/2014 11:18

R. EL ALAMI

63

2.

2.7

Prsentation des lments du VHDL


Oprateurs standards

Oprateurs

arithmtiques

Nom

Type oprandes

Incrmentation de 1 ou addition

Dcrmentaion de 1 ou soustraction

Integer, Real

28/10/2014 11:18

Multiplication

Division

abs

Valeur absolue

**

Exponentiel

mod

Autres

Signification

Modulo

Integer

rem

Reste

oprateurs
Nom

Type oprandes

Signification

&

Bit, Bit_vector

Concatnation

R. EL ALAMI

64

2.

2.7
. Exemple

Prsentation des lments du VHDL


Oprateurs standards

: addition

S = (A + B) + (C - 1)
T = ((A + B) + C - 1)

Synthse

A
B
C

-1

A
B
C

-1

Remarque : Pour pouvoir utiliser les oprateurs ci-dessus il faut rajouter


les bibliothques suivantes au dbut du fichier VHDL:

Use ieee.numeric_std.all ;
Use ieee.std_logic_arith.all ;
28/10/2014 11:18

R. EL ALAMI

65

2.

2.7

Prsentation des lments du VHDL


Oprateurs standards

. Oprateur

de concatnation

Nom

Type oprandes

Signification

&

Bit, Bit_vector

Concatnation

ARCHITETCURE ...
SIGNAL A : BIT_VECTOR(2 DOWNTO 0 );
SIGNAL B : BIT;
SIGNAL C : BIT_VECTOR(5 DOWNTO 0 );
BEGIN
C <= not B & "101" & not A(2 DOWNTO 1);

bon & jour produira bonjour ;


101 & 10 produira 10110
28/10/2014 11:18

R. EL ALAMI

A(1)

C(0)

A(2)

C(1)

VDD
GND
VDD

C(2)
C(3)
C(4)

C(5)

66

2.

2.7

Prsentation des lments du VHDL


Oprateurs standards

. Oprateur

de concatnation

Utilisation de loprateur de concatnation pour raliser des dcalages logiques


en synthse logique :
Dcalage droite :

-- Si A est de type std_logic_vector(7 downto 0)


S1 <= 0 & A(7 downto 1); -- dcalage dun bit droite
S1 <= " 000" & A(7 downto 3); -- dcalage de trois bits droite
Dcalage gauche :

-- Si A est de type std_logic_vector(7 downto 0)


S1 <= A(6 downto 0) & 0; -- dcalage dun bit gauche
S1 <= A(4 downto 0) & " 000" ; -- dcalage de trois bits gauche

28/10/2014 11:18

R. EL ALAMI

67

2.

2.7

Prsentation des lments du VHDL


Oprateurs standards

Laffectation simple : <=


Dans une description VHDL, cest certainement loprateur le plus utilis.
Permet de modifier ltat dun signal en fonction dautres signaux et/ou
dautres oprateurs.
Exemple avec des portes logiques : S1 <= E2 and E1 ;
Pour les signaux composs de plusieurs bits on utilise les guillemets " "
Les bases numriques utilises pour les bus peuvent tre :
BINAIRE, exemple : BUS <= " 1001" ;
HEXA, exemple : BUS <= X" 9" ;
OCTAL, exemple : BUS <= O" 11" ;

-- BUS = 9 en dcimal
-- BUS = 9 en dcimal
-- BUS = 9 en dcimal

Remarque : La base dcimale ne peut pas tre utilise lors de laffectation de


signaux.
28/10/2014 11:18

R. EL ALAMI

68

2.

2.7

Prsentation des lments du VHDL


Oprateurs standards

Exemple:
Library ieee;
Use ieee.std_logic_1164.all;
entity AFFEC is
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 S4'; -- S4 = 1 si E1=1 sinon S4
BUS1 <= "1000"; -- BUS1 = "1000"
BUS2 <= E1 & E2 & "10"; -- BUS2 = E1 & E2 & 10
BUS3 <= x"A"; -- valeur en HEXA -> BUS3 = 10(dc)
end DESCRIPTION;
28/10/2014 11:18

R. EL ALAMI

69

2.

2.8

Prsentation des lments du VHDL


Attributs

Un attribut est une caractristique associe un type ou un objet. Chaque


attribut est rfrenc par son nom consistant en un prfixe, une apostrophe et
lattribut lui-mme. Le prfixe doit tre un type, sous-type, tableau, ou bloc.
Attribut = information sur un lment du langage
Utilisation : toto'att avec toto un objet ou un type et att un attribut
Par exemple: longueur d'un signal bus = bus'length
ils permettent de connatre les caractristiques :

28/10/2014 11:18

des signaux
des tableaux
des types

R. EL ALAMI

70

2.

2.8

Prsentation des lments du VHDL


Attributs

. Attributs d'un scalaire


T'left
T'right
T'low
T'high

->
->
->
->

Limite
Limite
Limite
Limite

gauche de T
droite de T
basse de T
haute de T

. Attributs d'un ensemble discret


T'pos(X)
T'val(N)
T'leftof(X)
T'rightof(X)
T'pred(X)
T'succ(X)

28/10/2014 11:18

-> Numro de la position de X dans T


-> Valeur la position N dans T
-> Valeur une position gauche de X dans T
-> Valeur une position droite de X dans T
-> Valeur une position au dessous de X dans T
-> Valeur une position au dessus de X dans T

R. EL ALAMI

71

2.

2.8

Prsentation des lments du VHDL


Attributs

. Exemples - Attributs d'un scalaire


Type adr is integer range 7 downto 0;
adr
adr
adr
adr

left = 7
right = 0
low = 0
high = 7

. Exemples - Attributs d'un ensemble discret


Type MVL4 is ( U , 0 , 1 , Z );
MVL4'pos( 1 ) = 2
MVL4'val(0) = U
MVL4 rightof( 1 ) = Z
MVL4 leftof( 1 ) = 0
MVL4 succ(2) = Z
MVL4 succ(1) = Z
MVL4 prec(2) = 0
28/10/2014 11:18

R. EL ALAMI

72

2.

2.8

Prsentation des lments du VHDL


Attributs

. Attributs d'un tableau


A'left(N)
->
A'right(N)
->
A'low(N)
->
A'highof(N)
->
A'range(N)
->
A'reverse_range(N)
A'length(N)
->

28/10/2014 11:18

Limite gauche de l'intervalle des indices de la dim. N de A


Limite droite de l'intervalle des indices de la dim. N de A
Limite basse de l'intervalle des indices de la dim. N de A
Limite haute de l'intervalle des indices de la dim. N de A
Intervalle des indices de la dim. N de A
-> Intervalle inverse des indices de la dim. N de A
Longueur de l'intervalle des indices de la dim. N de A

R. EL ALAMI

73

2.

2.8

Prsentation des lments du VHDL


Attributs

. Exemples : Attributs d'un tableau


type word is bit_vector(31 downto 0);
type memory is array(7 downto 0) of word;
variable mem : memory;
mem'left = 7
mem'left(3) = 31
mem'right = 0
mem'low = 0
mem'high = 7
mem high(5) = 31
mem'range = 7 downto 0
mem range(3) = 31 downto 0
mem'reverse_range = 0 to 7
mem'length = 8
mem length(3) = 32

28/10/2014 11:18

R. EL ALAMI

74

2.

2.8

Prsentation des lments du VHDL


Attributs

Attributs de signal
Pour cette catgorie dattribut, le prfixe doit tre un signal. Le type du
rsultat peut tre signal ou fonction.
Objets signaux implicites:
S'delayed (T)

Signal ayant mme valeur que S mais retard de


T units de temps (T 0 ns)

S'stable(T)

Signal de type boolean valant TRUE si aucun


vnement n'est arriv sur S durant T units
de temps (T 0 ns), et FALSE sinon

Fonctions:
S'event

Fonction valeur de type boolean valant TRUE


si un vnement est arriv sur S durant le cycle
de simulation courant, et FALSE sinon

S'last_event

Fonction valeur de type time valant le temps


coul depuis le dernier vnement sur S

S'last_value

Fonction valeur du type de S valant la valeur


de S avant le dernier vnement sur S

28/10/2014 11:18

R. EL ALAMI

75

2.

2.8

Prsentation des lments du VHDL


Attributs

Attributs de signal
Sactive :
boolean
true si il y a eu une transaction (affectation) sur le signal dans le
cycle de simulation en cours
Squiet(T) :
boolean
true si le signal a eu ni transaction ni vnement pendant un temps T
Stransaction :
signal
cest un signal de type bit qui change dtats pour chaque
transaction du signal
Slast_active :
time
rend le temps coul depuis la dernire transaction

28/10/2014 11:18

R. EL ALAMI

76

2.

2.8

Prsentation des lments du VHDL


Attributs

Utilisation des attributs de signaux :


dtection d'un front montant :

dtection d'un front descendant :

28/10/2014 11:18

R. EL ALAMI

77

2.

2.9

Prsentation des lments du VHDL


Excution parallle et squentielle

. Particularisme

du VHDL : Excution parallle ou squentielle

. Excution parallle
. Excution par dfaut
. Les instructions au sein d'une architecture sont excutes en parallle ou de
manire concurrente
. Excution concurrente = Excution combinatoire
. Chaque opration dans une architecture est excute chaque instant
. Excution squentielle
. Ncessit d'utiliser un PROCESS
. Le process est excut chaque fois qu'un signal dclar dans sa liste de
sensibilit change de valeur.
. Les instructions sont excutes squentiellement
. Les modifications des signaux (signal) sont effectives la fin du process

28/10/2014 11:18

R. EL ALAMI

78

2.

2.9

Prsentation des lments du VHDL


Excution parallle et squentielle

. Excution mixte
. Possibilit d'associer dans une mme architecture des modules excution
parallle et squentielle
. Exemple : Comparateur synchrone une horloge clk
LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY comp_synch IS PORT (
a, b, clk, reset : IN std_logic;
qs : OUT std_logic);
END comp_synch;
ARCHITECTURE archi_mixte OF comp_synch IS
SIGNAL q : std_logic;
BEGIN
q<='1 WHEN a=b ELSE '0';
PROCESS(clk, reset)
BEGIN
IF reset='0' THEN qs<='0';
ELSIF (clk'event AND clk='1') THEN qs <= q;
END IF;
END PROCESS;
END archi_mixte;
28/10/2014 11:18

R. EL ALAMI

a
b

Comparateur

q
clk

qs

Reset

79

2.

Prsentation des lments du VHDL

2.10 Instructions
. Deux

types d'excution : Deux familles d'instructions

. Instructions rserves au mode d'excution parallle ou concurrente


- Toutes les oprations sont excutes simultanment
- L'ordre d'criture n'a aucune importance
I1
I1

I2

I3
I2

. Instructions rserves au mode d'excution squentielle

I3

- Chaque opration est effectue l'une aprs l'autre


- L'ordre d'criture a une grande importance
28/10/2014 11:18

R. EL ALAMI

80

2.10 Instructions
2.10.1
Instructions de type parallle

. Assignation inconditionnelle
signal <= expression
. Assignation conditionnelle

signal <= {expression WHEN condition} ELSE expression

ARCHITECTURE flot_de_donnees OF xor IS


BEGIN
c <= '0' WHEN a = '0' AND b = '0' ELSE
'1' WHEN a = '0' AND b = '1' ELSE
'1' WHEN a = '1' AND b = '0' ELSE
'0' WHEN a = '1' AND b = '1' ELSE
'0';
END flot_de_donnees;

28/10/2014 11:18

R. EL ALAMI

81

2.10 Instructions
2.10.1
Instructions de type parallle
. Assignation slective
WITH slecteur SELECT
signal <= {expression WHEN valeur_slecteur1,
expression WHEN valeur_slecteur2,
expression WHEN OTHERS};
ARCHITECTURE flot_de_donnees OF mux IS
SIGNAL selection : std_logic_vector(0 TO 1);
SIGNAL a,b,c,d,s : std_logic_vector(0 TO 7);
BEGIN
WITH selection SELECT
s <= a WHEN "00",
b WHEN "01",
c WHEN "10",
d WHEN OTHERS;
END flot_de_donnees;

28/10/2014 11:18

R. EL ALAMI

82

2.10 Instructions
2.10.1
Instructions de type parallle
.

Assignation d'un composant


label : nom_du_composant PORT MAP (association des ports)
ARCHITECTURE arch_full OF full_adder IS
SIGNAL inter : bit;
COMPONENT half_adder PORT (a,b,cin : IN bit;
cout,s : OUT bit);
END COMPONENT;
BEGIN
u1 : half_adder PORT MAP (a=>a(0),b=>b(0),cin=>cin,cout=>inter,s=>s(0));
u2 : half_adder PORT MAP (a(1),b(1),inter,cout,s(1));
END arch_full;

28/10/2014 11:18

R. EL ALAMI

83

2.10 Instructions
2.10.1
Instructions de type parallle
Instanciation de multiples composants
. Instruction GENERATE
label : FOR variable_boucle IN val_initiale TO val_finale GENERATE
{instructions parallles}
END GENERATE label
label : IF condition GENERATE
{instructions parallles}
END GENERATE label
Notez que :
le ELSE n'existe pas (oubli de VHDL ?) et qu'il faut refaire un 2me IF.
Les deux instructions IF GENERATE et FOR GENERATE ont besoin
obligatoirement d'une tiquette

28/10/2014 11:18

R. EL ALAMI

84

2.10 Instructions
2.10.2
Instructions de type squentiel

. Instruction

PROCESS

- Un processus est un ensemble de phrases squentielles


- Un modle VHDL peut tre vu comme un ensemble de processus
excuts en parallle
- Toutes les instructions comprises dans le PROCESS sont
excutes squentiellement
- Tous les PROCESS sont excuts en parallle
- Les signaux sont utiliss pour contrler lactivation des processus
- Activation d'un PROCESS : 2 possibilits
[label] : PROCESS(liste_signaux)
-- Partie dclarative du process
BEGIN
-- Corps du process
-- phrases squentielles
END PROCESS [label]
28/10/2014 11:18

[label] : PROCESS
-- Partie dclarative du process
BEGIN
-- Corps du process
-- phrases squentielles
WAIT ON (liste_signaux)
END PROCESS [label]

R. EL ALAMI

85

2.10 Instructions
2.10.2
Instructions de type squentiel

. Instruction

PROCESS

Phrases wait:
wait
wait
wait
wait

on A, B;
-- changement de A ou B
for dlai;
-- une certaine dure
until condition;
on ListeDeSignaux until condition

N.B : L'instruction WAIT n'est pas synthtisable avec la condition de dure.


Elle est trs utile pour les testbench pour la simulation.
28/10/2014 11:18

R. EL ALAMI

86

2.10 Instructions
2.10.2
Instructions de type squentiel

Exemple avec des variables:

entity toto is
end toto;
architecture var of toto is
signal trigger, sum : integer := 0;
begin
process
variable var1 : integer := 1;
variable var2 : integer := 2;
variable var3 : integer := 3;
begin
wait on trigger;
var1 := var2 + var3;
var2 := var1;
var3 := var2;
sum <= var1 + var2 + var3;
end process;
end var;

Si trigger change t=10, alors var1=5, var2=5, var3=5 et t=10+D, sum=15


28/10/2014 11:18

R. EL ALAMI

87

2.10 Instructions
2.10.2
Instructions de type squentiel

Exemple avec des signaux:

entity toto is
end toto;
architecture var of toto is
signal trigger, sum : integer := 0;
signal sig1 : integer := 1;
signal sig2 : integer := 2;
signal sig3 : integer := 3;
begin
process
begin
wait on trigger;
sig1 <= sig2 + sig3;
sig2 <= sig1;
sig3 <= sig2;
sum <= sig1 + sig2 + sig3;
end process;
end var;

Si trigger change t=10, tous les signaux sont mis jour t=10+D : sig1=5,
sig2=1, sig3=2 et sum=6
28/10/2014 11:18

R. EL ALAMI

88

2.10 Instructions
2.10.2
Instructions de type squentiel
Un port de sortie ne peut tre utilis que comme destination
dune expression. Exemple:
entity nonet is
port (a, b : in bit;
z, zbarre : out bit);
end nonet;
architecture fausse of nonet is
begin
z <= a and b;
zbarre <= not z;
end fausse;
architecture correcte of nonet is
signal resultat : bit;
begin
resultat <= a and b;
z <= resultat;
zbarre <= not resultat;
end correcte;

28/10/2014 11:18

R. EL ALAMI

89

2.10 Instructions
2.10.2
Instructions de type squentiel

. Instruction

PROCESS : Attribut event

. But : Savoir si le signal auquel il est associ a t modifi


. Trs utile dans un PROCESS dclenchable par plusieurs signaux distincts
. Exemples :
IF CLK'event THEN excution; END IF;

- Excution si CLK passe 0 ou 1


IF CLK'event AND CLK='1' THEN excution; END IF;

- Dclenchement sur front montant

28/10/2014 11:18

R. EL ALAMI

90

2.10 Instructions
2.10.2
Instructions de type squentiel
. Ces instructions sont uniquement utilises dans un Process
. Assignation inconditionnelle de variables et de signaux
Mme traitement que pour le mode parallle
SIGNAL sig : integer;
PROCESS(clk)
VARIABLE var : integer := 0;
BEGIN
sig <= sig + 1;
var := var + 1;
END PROCESS;

. Instruction IF

IF condition THEN
instructions_sequentielles
ELSIF condition THEN
instructions_sequentielles
ELSE
instructions_sequentielles
END IF;

28/10/2014 11:18

R. EL ALAMI

IF up_down = "1" THEN


s <= s + 1;
ELSE
s <= s - 1;
END IF;

91

2.10 Instructions
2.10.2
Instructions de type squentiel

. Instruction CASE

CASE expresssion is
{WHEN valeur_expression => instructions_sequentielles};
{WHEN OTHERS => instructions_sequentielles};
END CASE;

. Instruction LOOP
instruction_pour_iteration LOOP
instructions_sequentielles
END LOOP;
VARIABLE indice,resultat : INTEGER := 0;
Boucle1 : WHILE indice < 10 LOOP
indice := indice + 1;
resultat := resultat + adresse(indice);
END LOOP boucle1;
28/10/2014 11:18

CASE selection IS
WHEN '0' => s <= a;
WHEN '1' => s <= b;
WHEN OTHERS => NULL;
END CASE;

VARIABLE indice,resultat : INTEGER;


Boucle2 : FOR indice IN 0 TO 9 LOOP
resultat := resultat + adresse(indice);
END LOOP boucle2;

R. EL ALAMI

92

2.10 Instructions
2.10.2
Instructions de type squentiel
. Instruction NEXT
NEXT label_boucle WHEN condition

VARIABLE indice,resultat : integer := 0;


Boucle1 : WHILE indice < 10 LOOP
indice := indice + 1;
NEXT boucle1 WHEN indice = 5;
resultat := resultat + adresse(indice);
END LOOP boucle1;

VARIABLE indice,resultat : integer;


Boucle2 : FOR indice IN 0 TO 9 LOOP
NEXT boucle2 WHEN indice = 5;
resultat := resultat + adresse(indice);
END LOOP boucle2;

. Instruction EXIT

EXIT label_boucle WHEN condition

VARIABLE indice,resultat : integer := 0;


Boucle1 : WHILE indice < 10 loop
indice := indice + 1;
EXIT boucle1 WHEN indice = 5;
resultat := resultat + adresse(indice);
END LOOP boucle1;
28/10/2014 11:18

VARIABLE indice,resultat : integer;


Boucle2 : FOR indice IN 0 to 9 LOOP
EXIT boucle2 WHEN indice = 5;
resultat := resultat + adresse(indice);
END LOOP boucle2;

R. EL ALAMI

93

2.10 Instructions
2.10.2
Instructions de type squentiel

. Instruction NULL
Instruction sans aucun effet

CASE commande_moteur IS
WHEN avant => marche_avant;
WHEN arriere => marche_arriere;
WHEN statuquo => NULL;
END CASE;
. Instruction ASSERT
Vrification d'une condition spcifique
Information d'une ventuelle violation de cette condition
ASSERT condition REPORT message SEVERITY {note/warning/error/Failure}
PROCESS(clk)
BEGIN IF clk='1' THEN
ASSERT d'STABLE(15 ns);
REPORT "setup non respect" SEVERITY warning;

END IF;
END PROCESS;
28/10/2014 11:18

R. EL ALAMI

94

2.10 Instructions
2.10.3
Exemples

. Multiplexeur 8 bits : 4 vers 1

1re phase : dfinition des entre/sorties (ENTITY)

Multiplexeur 8 bits
4 vers 1

Entres

Entree1
Entree2
Entree3
Entree4

28/10/2014 11:18

Sorties

8
8
8
8

Multiplexeur 8 bits
4 vers 1

Sel1 Sel2
R. EL ALAMI

Sortie

95

2.10 Instructions
2.10.3
Exemples

. Multiplexeur 8 bits : 4 vers 1


2me phase : dfinition du fonctionnement ou de la structure
(ARCHITECTURE)
- Solution 1 : Instruction IF
- Solution 2 : Instruction CASE

28/10/2014 11:18

R. EL ALAMI

96

2.10 Instructions
2.10.3
Exemples

. Multiplexeur 8 bits : 4 vers 1


- Solution 1 : Instruction IF
LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY mux41 IS
PORT(entree1,entree2,entree3,entree4: IN std_logic_vector(0 TO 7);
sel: IN std_logic_vector(0 to 1);
sortie : OUT std_logic_vector(7 DOWNTO 0));
END mux41;
ARCHITECTURE comportementale OF mux41 IS
BEGIN
PROCESS(sel)
BEGIN
IF (sel="00") THEN sortie<=entree1;
ELSE IF (sel="01") THEN sortie<=entree2;END IF;
ELSE IF (sel="10") THEN sortie<=entree3;END IF;
ELSE sortie<=entree4;END IF;
END PROCESS;
END comportemental;

28/10/2014 11:18

R. EL ALAMI

97

2.10 Instructions
2.10.3
Exemples

. Multiplexeur 8 bits : 4 vers 1


- Solution 2 : Instruction CASE
LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY mux41 IS
PORT(entree1,entree2,entree3,entree4: IN std_logic_vector(0 TO 7);
sel: IN std_logic_vector(0 to 1);
sortie : OUT std_logic_vector(7 DOWNTO 0));
END mux41;
ARCHITECTURE comportementale OF mux41 IS
BEGIN
PROCESS(sel)
BEGIN
CASE sel IS
WHEN "00" => sortie<=entree1;
WHEN "01" => sortie<=entree2;
WHEN "10" => sortie<=entree3;
WHEN OTHERS => sortie<=entree4;
END CASE;
END PROCESS
END comportementale;

28/10/2014 11:18

R. EL ALAMI

98

2.

2.11

Prsentation des lments du VHDL


Description hirarchique

. Descriptions plus simples


. Rapidit de simulation et donc rapidit de mise au point
. Rutilisation de sous-ensembles
. Concepts :
COMPONENT, GENERIC, PACKAGE,
PROCEDURE ET FONCTION
LIBRARY, CONFIGURATION
. Utilisation d'un objet dcrit l'extrieur de la description utilisatrice :
- 2 fichiers VHDL distincts
. Compilation distincte :
- le composant
- l'entit utilisatrice de ce composant
. Entit compile : Stockage dans la bibliothque WORK

28/10/2014 11:18

R. EL ALAMI

99

2.11 Description hirarchique


2.11.1 Description hirarchique : Component
. Description structurelle
. Utilisation de composants
2 phases : - Dclaration
- Instanciation
Dclaration
La syntaxe est presque identique celle de l'entit :
component AND_2
port (
a : in bit;
b : in bit;
s : out bit);
end component;

28/10/2014 11:18

R. EL ALAMI

100

2.11 Description hirarchique


2.11.1 Description hirarchique : Component
Instanciation :
L'instanciation d'un composant se fait dans le corps de l'architecture de cette
faon :
NOM_INSTANCE : NOM_COMPOSANT port map (LISTE DES CONNEXIONS);

entity AND_3 is
port(
e1 : in bit;
e2 : in bit;
e3 : in bit;
s : out bit);
end entity;

28/10/2014 11:18

architecture arc of AND_3 is


signal z : bit;
component and2
port (
a : bit;
b : bit;
s : bit);
end component;
begin
inst1 : and2 port map (a=>e1, b=>e2 , s=>z);
inst2 : and2 port map (z, e3, s);
end arc
R. EL ALAMI

101

2.11 Description hirarchique


2.11.1 Description hirarchique : Component
Dans cet exemple , 2 instances de composant "and2" sont appeles
pour crer une porte ET 3 entres.
L'association des ports du composants aux signaux de l'instance se
fait l'aide de la clause port map.
La syntaxe des associations est soit :
par nom o chaque broche du composant est associe un signal :
cas de inst_1
positionnelle o l'ordre des signaux correspond l'ordre des broches :
cas de inst_2

28/10/2014 11:18

R. EL ALAMI

102

2.11 Description hirarchique


2.11.1 Description hirarchique : Component
Exemple additionneur

Adder1.vhd
ENTITY half_adder IS
PORT( a,b,cin : IN bit;
cout,s : OUT bit);
END half_adder
ARCHITECTURE arch_half OF half_adder
IS
BEGIN
s <= a XOR b XOR cin;
cout <= (a AND b) OR (a AND cin)
OR (b AND cin);
END arch_half;
28/10/2014 11:18

Adder2.vhd
ENTITY full_adder IS
PORT(
ENTITY full_adder IS
a,b : IN bit_vector(1 DOWNTO 0);
PORT(
cin : IN bit;
a,b : IN bit_vector(1 DOWNTO 0);
cout : OUT bit;
cin : IN bit;
s : out bit_vector(1 DOWNTO 0));
cout : OUT bit;
END full_adder
s : out bit_vector(1 DOWNTO 0));
ARCHITECTURE arch_full OF full_adder IS
END full_adder
SIGNAL inter : bit;
COMPONENT half_adder
ARCHITECTURE arch_full OF full_adder IS
PORT (a,b,cin : IN bit;
SIGNAL inter : bit;
cout,s : OUT bit);
COMPONENT half_adder PORT (a,b,cin : IN bit;
END COMPONENT;
cout,s : OUT bit);
BEGIN
END COMPONENT;
u1:half_adder PORT MAP
BEGIN
(a(0),b(0),cin,inter,s(0));
u1:half_adder PORT MAP
u2:half_adder PORT MAP
(a(0),b(0),cin,inter,s(0));
(a(1),b(1),inter, cout,s(1));
u2:half_adder PORT MAP (a(1),b(1),inter,s(1));
END arch_full;
END arch_full;
R. EL ALAMI

103

2.11 Description hirarchique


2.11.1 Description hirarchique : Component
En rsum :
Trois oprations sont ncessaires :
- Le couple entit-architecture du sous-ensemble doit tre cr et annex
une librairie de lutilisateur, par dfaut la librairie work .
- Le sous-ensemble prcdent doit tre dclar comme composant dans
lensemble qui lutilise, cette dclaration reprend les lments principaux
de lentit du sous-ensemble.
- Chaque exemplaire du composant que lon souhaite inclure dans le
schma en cours dlaboration doit tre connect aux quipotentielles de
ce schma, cest le mcanisme de linstanciation.
- Au moment de la dclaration : (exemple de add)
component nom_composant -- mme nom que lentit
port ( liste_ports ) ; -- mme liste que dans lentit
end component ;

28/10/2014 11:18

R. EL ALAMI

104

2.11 Description hirarchique


2.11.2 Description hirarchique : Gnricit

. Possibilit d'utiliser un mme objet plusieurs fois avec des tailles diffrentes
. La clause generic map dans l'instanciation du composant ADD permet de fixer

la valeur du paramtre.

. Possibilit d'instancier des entits/architectures fonctionnellement

identiques mais de taille diffrente

Dclaration d'un
additionneur

ENTITY adder is
GENERIC (largeur : integer :=8); -- valeur par dfaut
PORT(

a,b: IN signed_vector(largeur-1 DOWNTO 0);


s : OUT signed_vector(largeur DOWNTO 0);

END adder;

Instanciation avec
une largeur de 16 bits
28/10/2014 11:18

ARCHITECTURE arch_adder OF adder IS


BEGIN
s <= a + b;
END arch_adder;
U0 : adder GENERIC MAP (16)
PORT MAP (a,b,s);

R. EL ALAMI

105

2.11 Description hirarchique


2.11.2 Description hirarchique : Gnricit
La gnricit est un moyen de transmettre une information un bloc ou
un couple entit-architecture.
Cette information est statique pour le bloc.
Vue de extrieur, cest un paramtre.
En fait, il sagit dune constante qui sera fixe au moment de l
instanciation du bloc ou du composant.
Les associations de paramtres (generic map) et de ports (port map)
dfinissent des associations locales entre les noms utiliss dans la
dclaration de composant (paramtres et ports formels) et les
paramtres et ports effectifs de l'instance.

28/10/2014 11:18

R. EL ALAMI

106

2.11 Description hirarchique


2.11.2 Description hirarchique : Gnricit

28/10/2014 11:18

R. EL ALAMI

107

2.11 Description hirarchique


2.11.2 Description hirarchique : Gnricit

Autre exemple : additionneur structurelle gnrique :

construit partir dun additionneur 1 bit


assemblage des N additionneurs 1 bit afin de raliser ladditionneur complet
la valeur de N est inconnue avant linstanciation du composant

28/10/2014 11:18

R. EL ALAMI

108

2.11 Description hirarchique


2.11.2 Description hirarchique : Gnricit

On dispose de lentit Add et son architecture :

entity Add is
port (
A, B, Cin : in std_logic;
S, Cout : out std_logic);
end Add ;

architecture structurelle of AdditionneurN is


component Add
port (
A, B, Cin : in std_logic;
S, Cout : out std_logic);
end component;
signal C : std_logic_vector(0 to N);
begin

Lentit Additionneur
gnrique scrit :

entity AdditionneurN is
generic (N : Natural := 8);
port (
X, Y : in std_logic_vector ( N-1 downto 0);
Cin : in std_logic;
S : out std_logic_vector (N-1 downto 0);
Cout : out std_logic);
end AdditionneurN ;
28/10/2014 11:18

label: for I in 0 to N-1 generate


Instance : Add port map (X(I), Y(I), C(I),
S(I), C(i+1));
end generate label;
C(0) <= Cin;
Cout <= C(N);
end structurelle ;

R. EL ALAMI

109

2.11 Description hirarchique


2.11.3 Description hirarchique : Package

. Regroupement d'objets divers :


- types
- sous-types
- constantes
- sous-programmes
- composants,

. Accessibilit ou visibilit : le package se nomme mon_package et a t


compil et stock dans la bibliothque librairie1
LIBRARY librairie1
USE librairie1.mon_package.all

. Possibilit d'utiliser plusieurs packages dans une mme description


. Les standards IEEE 1164 et IEEE 1076.3 sont accessibles via des
packages

28/10/2014 11:18

R. EL ALAMI

110

2.11 Description hirarchique


2.11.3 Description hirarchique : Package

. 2 parties :

. Partie dclarative (spcification)


- Dclarations des lments visibles l'utilisateur du package
. Corps du package (implantation)
- Chaque lment dfini dans la partie dclarative est visible du corps
PACKAGE data_types IS
SUBTYPES address is bit_vector(24 DOWNTO 0);
SUBTYPES data is bit_vector(15 DOWNTO 0);
CONSTANT vector_table_loc : address;
FUNCTION data_to_int(value : data) RETURN integer;
FUNCTION int_to_data(velue:integer) RETURN data;
END data_types;
PACKAGE BODY data_types is
CONSTANT vector_table_loc : address := X"FFFF00";
FUNCTION data_to_int(value : data) RETURN integer IS;
--body of data_to_int
END data_to_int;
FUNCTION int_to_data(velue:integer) RETURN data IS;
--body of int_to_data
END int_to_data;
end data_types;

28/10/2014 11:18

R. EL ALAMI

112

2.11 Description hirarchique


2.11.4 Description hirarchique : Procdures

Il existe trois modes pour les paramtres des procdures:

in: le paramtre est pass en valeur et ne peut donc pas tre modifi par la
procdure
out: le paramtre est modifi par la procdure,
inout: le paramtre est pass par rfrence et il peut donc tre lu et
modifi

. Dclaration

. Appel

28/10/2014 11:18

de procdures
PROCEDURE nom (liste de paramtres) IS dclaration
BEGIN instructions END nom;

instruction forme du nom de la procdure et des paramtres


effectifs

R. EL ALAMI

113

2.11 Description hirarchique


2.11.4 Description hirarchique : Procdures
Exemple:
type byte is array (7 downto 0) of std_logic;

procedure ByteToInteger (ib: in byte; oi: out integer) is


variable result : integer := 0;
begin
for i in 0 to 7 loop
if ib(i) = '1' then
result := result + 2**i;
end if;
end loop;
oi := result;
end ByteToInteger;

28/10/2014 11:18

R. EL ALAMI

114

2.11 Description hirarchique


2.11.4 Description hirarchique : Fonctions

Tous les paramtres dune fonction sont de mode in: en dehors de ses
variables locales, une fonction ne peut modifier que la valeur retourne.
En plus, les paramtres ne peuvent pas tre de type variable: ils ne
peuvent tre que des constantes ou des signaux

. Dclaration

des fonctions

FUNCTION nom (liste de paramtres) RETURN type IS dclarations


BEGIN instructions end nom;
Rsultat d'une fonction : return expression;
Exemple
function f (a, b, c : std_logic) return std_logic is
variable x : std_logic;
begin
x := ((not a) and (not b) and c);
return x;
end f;

N.B : Par rapport la fonction, La procdure permet d'avoir plusieurs sorties,


mais condition de dclarer les entres et les sorties comme dans une entit
ou composant.
28/10/2014 11:18

R. EL ALAMI

115

Fonction de calcul de minimum


et maximum en procdure.
procedure MinMax( a,b : in unigned (7 downto 0);
min : out unsigned(7 downto 0);
max : out unsigned(7 downto 0)) is
begin
if (a < b) then
min <= a; max <= b;
else
min <= b; max <= a;
end if;
end procedure MinMax;

MinMax(x, y, z, t);

Il faut 2
fonctions min et max pour avoir
l'quivalent en fonction. Voici
l'exemple de min :
function min (a,b : unsigned(7 downto 0)
return unsigned(7 downto 0) is
varaiable min : unsigned(7 downto0);
begin
if (a < b) then
min := a;
else
min := b;
end if;
return min;
endfunction
...
z := min(x, y);

28/10/2014 11:18

R. EL ALAMI

116

2.11 Description hirarchique


2.11.5 Description hirarchique : Library
Une librairie est une collection de modules VHDL qui ont dj t compils. Ces
modules peuvent tre des paquetages, des entits ou des architectures.
. Les programmes objets sont placs dans des bibliothques
. Elments d'une bibliothque :
. Dfinitions de types, constantes, procdures PACKAGE
. Architecture de circuits ARCHITECTURE
. Associations composants/architectures CONFIGURATION
. 2 types de bibliothque
. Bibliothque de l'utilisateur (user library)
. Bibliothque systme

28/10/2014 11:18

R. EL ALAMI

117

2.11 Description hirarchique


2.11.5 Description hirarchique : Library
Les librairies
Facilite la tche du concepteur
Rajout de fonctionnalits supplmentaires

La librairie IEEE
A mettre au dbut de votre description
Pour rajouter les types tendues std_logic et std_logic_vector
use IEEE.STD_LOGIC_1164.all;

DORENAVANT nous remplacerons SYSTEMATIQUEMENT


BIT par STD_LOGIC
BIT_VECTOR par STD_LOGIC_VECTOR

Pour utiliser des fonctions arithmtiques sur ces STD_LOGIC_VECTOR


USE IEEE.NUMERIC_STD.ALL;
Et aussi USE IEEE.std_logic_arith.all;

Q<=Q+1; -- Q tant par exemple un std_logic_vector et 1 est un entier!!


A<B -- A et B des std_logic_vector

28/10/2014 11:18

R. EL ALAMI

118

Complment sur les oprations arithmtiques

Le rajout de use IEEE.numeric_std.all;


permet
De travailler avec des valeurs signes et non signes
signal A,B: signed(3 downto 0);
signal tempo: unsigned(3 downto 0);
De convertir un std_logic_vector en signed ou unsigned
A<= signed(SW(3 downto 0));
B<=unsigned(RES);
De convertir des signed ou unsigned en std_logic_vector
LEDG(3 downto 0)<=std_logic_vector(tempo);
De travailler avec les oprateurs arithmtiques standard
>, >=, =<,<, + ,- etc.
Le rajout de use IEEE.std_logic_unsigned.all;
permet
De travailler avec les oprateurs arithmtiques standard
de mlanger des entiers avec des std_logic_vector: A<= A +1;

28/10/2014 11:18

R. EL ALAMI

119

2.11 Description hirarchique


2.11.5 Description hirarchique : Library

. Bibliothque WORK
- En ralit : Un espace de travail
- Tous les lments crs par l'utilisateur au sein d'un mme projet
y sont rangs
- Ces lments sont rutilisables tout instant dans le projet aprs
les avoir dclars
. Exemple d'utilisation d'un package issu de la bibliothque WORK
- L'utilisateur a cr un package operateur_arithmetique dans WORK
- Pour y avoir accs
USE WORK.operateur_arithmetique.ALL
- Pour utiliser l'lment mult de ce package
FOR ALL : multiplieur USE ENTITY WORK.mult(comportementale)

28/10/2014 11:18

R. EL ALAMI

120