Sie sind auf Seite 1von 46

VHDL Logique programmable

1/46

Partie 2 La structure dun programme VHDL

VHDL - Logique programmable


Partie 2- La structure dun programme VHDL

Denis Giacona
ENSISA
cole Nationale Suprieure d'Ingnieur Sud Alsace
12, rue des frres Lumire
68 093 MULHOUSE CEDEX
FRANCE
Tl.

33 (0)3 89 33 69 00

D.Giacona

VHDL Logique programmable

2/46

Partie 2 La structure dun programme VHDL

1. Prambule ......................................................................................................................................................................................................................4
1.1. Les objectifs de la programmation VHDL pour un circuit FPGA ...............................................................................................................4
1.2. Quelques caractristiques du langage .............................................................................................................................................................5
1.3. La porte des instructions .................................................................................................................................................................................6
1.4. Quelques rgles adopter .................................................................................................................................................................................7
1.4.1. Indenter les instructions .............................................................................................................................................................................7
1.4.2.
Appliquer une rgle de dnomination des identificateurs ................................................................................................................8
2. Aperu de la programmation VHDL .....................................................................................................................................................................9
3. lments fondamentaux du langage VHDL ...................................................................................................................................................... 15
3.1. Les commentaires ............................................................................................................................................................................................... 15
3.2. Les identificateurs ......................................................................................................................................................................................... 15
3.3. Les objets donnes : signal, constante, variable .................................................................................................................................... 16
3.4. Les types des objets donnes ...................................................................................................................................................................... 17
3.4.1.
Les types prdfinis par tous les compilateurs ................................................................................................................................ 17
3.4.2. Les types complmentaires .................................................................................................................................................................... 18
3.4.3. Conversions de type ................................................................................................................................................................................. 19
3.4.4. Usage courant du type integer ............................................................................................................................................................. 20
3.4.5. Les littraux .............................................................................................................................................................................................. 21
3.5. Les oprateurs ................................................................................................................................................................................................ 22
3.5.1.
Oprateurs de construction dexpressions ....................................................................................................................................... 22
3.5.2. Oprateurs dassignation et dassociation ......................................................................................................................................... 23
3.6. Les dclarations et les assignations des signaux vecteurs .................................................................................................................. 24
3.7. Surcharge doprateurs ................................................................................................................................................................................ 25
3.8. Les attributs ................................................................................................................................................................................................... 26
4. Rle de l'entit ...................................................................................................................................................................................................... 28
4.1. Description dune entit non gnrique ........................................................................................................................................................ 28

D.Giacona

VHDL Logique programmable

3/46

Partie 2 La structure dun programme VHDL

4.2. Description dune entit gnrique ............................................................................................................................................................. 31


4.3. Les modes des ports ...................................................................................................................................................................................... 34
5. Rle du corps d'architecture ............................................................................................................................................................................. 36
5.1. Syntaxe ................................................................................................................................................................................................................ 36
5.2. Dclarations dans larchitecture ................................................................................................................................................................ 37
5.3. Instructions concurrentes ........................................................................................................................................................................... 39
5.3.1.
Proprits .................................................................................................................................................................................................. 39
5.3.2. Classification des styles de description ............................................................................................................................................ 40
5.3.3. Exemple 1 : architecture comportant trois styles diffrents ..................................................................................................... 43
5.3.4. Exemple 2 : comparatif de deux styles pour un mme bloc logique ............................................................................................ 45
5.3.5. Exemple 3 : style description structurelle ................................................................................................................................. 46

D.Giacona

VHDL Logique programmable

4/46

Partie 2 La structure dun programme VHDL

1. Prambule
1.1. Les objectifs de la programmation VHDL pour un circuit FPGA
Des instructions pour dcrire
les signaux de test
Logiciel de simulation
Des instructions pour dcrire le
comportement du systme
- fonctions combinatoires
- fonctions squentielles
Logiciel de synthse
(configuration de
circuits logiques
programmables)

D.Giacona

VHDL Logique programmable

5/46

Partie 2 La structure dun programme VHDL

1.2. Quelques caractristiques du langage

Syntaxe complexe
o pour aider le concepteur, les outils de dveloppement proposent des modles
(templates) et des convertisseurs de schmas en code VHDL
Langage strict par rapport aux types et aux dimensions des donnes
o avantage : limination dun grand nombre derreurs de conception ds la compilation
Trs bonne portabilit
o condition d'crire un code indpendant de la technologie
Plusieurs styles de description
o tous les styles ne conviennent pas toutes les applications
o toutes les instructions ne sont pas synthtisables

D.Giacona

VHDL Logique programmable

6/46

Partie 2 La structure dun programme VHDL

1.3. La porte des instructions


Les instructions modlisent un cblage matriel lorsquelles sont destines la
configuration dun circuit CPLD/FPGA ou la ralisation dun ASIC.
Les instructions ressemblent celles dun langage impratif, mais pour bon
nombre dentre elles, lordre na pas dimportance ; dans ce cas, elles modlisent
naturellement le paralllisme.
Le style de code et les types dinstructions influent sur les niveaux logiques des
circuits ; utiliser : certains oprateurs, clock enable, one hot encoding (grosses
FSM), shift registers ddis, I/O regsters ddis,

D.Giacona

VHDL Logique programmable

7/46

Partie 2 La structure dun programme VHDL

1.4. Quelques rgles adopter


1.4.1.

Indenter les instructions

architecture arch_bcdcnt4_ar_en_comb of bcdcnt4_ar_en_comb is


signal count_i : std_logic_vector(3 downto 0);
begin
count_proc: process (clk)
begin
Une bonne indentation et des
if clk'event and clk = '1' then
espaces de part et dautre des
if en = '1' then
oprateurs
if count_i < x"9" then
amliorent la clart,
count_i <= count_i + 1;
rduisent le risque derreur.
else
count_i <= x"0";
end if;
end if;
end if;
end process;
-- Elaboration du signal carry "co" hors processus (assignation combinatoire)
co
<= '1' when (count_i = x"9") else '0';
q
<= count_i;
end arch_bcdcnt4_ar_en_comb;

D.Giacona

VHDL Logique programmable

1.4.2.

8/46

Partie 2 La structure dun programme VHDL

Appliquer une rgle de dnomination des identificateurs

Donner des noms qui ont une signification


Anglais, minuscules et undescore
Quelques suggestions :
o
o
o
o
o
o
o
o
o
o
o
o
o
o

Horloge
Reset synchrone (mise 0)
Set synchrone (mise 1)
Read/write actif l'tat haut
Dcodeur 1 parmi 8
Multiplexeur 2 vers
Registre de mmorisation 4 bits
Registre dcalage 4 bits
Compteur 8 bits (binaire naturel)
Entre incrmentation dun compteur 8 bits
Sortie retenue dun compteur 8 bits
Compteur BCD
Compteur (signal interne)
tiquette de processus de comptage

: clk
: rst, sr
: set, sp
: rw
: dec1of8
: mux2to1
: reg4
: shift_reg4
: count8, cnt8
: up_count8, up_cnt8
: co_count8, co_cnt8
: cntbcd, bcdcnt
: count_int
: count_proc

D.Giacona

VHDL Logique programmable

9/46

Partie 2 La structure dun programme VHDL

2. Aperu de la programmation VHDL


Imaginer un schma-bloc (tape importante)

Dcomposition hirarchique du
systme en un bloc principal et
des sous-blocs (qui peuvent
leur tour tre dcomposs).

Cahier des charges


Spcifications
fonctionnelles
Spcifications
technologiques
Systme
A

D.Giacona

VHDL Logique programmable

Partie 2 La structure dun programme VHDL

10/46

Exemple de dcomposition

tempo1ms

control

Signal externe

cnt10

up_cnt10
a
rst_cnt10
clk

en

cnt(9:0)

rst

clk
clk

compare
cnt10(9:0)
max_cnt10
(d = max)

d(9:0)
Signal interne

D.Giacona

VHDL Logique programmable

11/46

Partie 2 La structure dun programme VHDL

Comment passer du schma-bloc au code VHDL ?

Cas : on dispose dun diteur


de schma
Au niveau le plus lev (top
level), le schma est converti
automatiquement en code
VHDL dans un style appel
description structurelle .

Cas : on dispose uniquement


dun diteur de texte
On crit soi-mme le code
VHDL en choisissant un ou
plusieurs styles de codage
(parmi 3)

D.Giacona

VHDL Logique programmable

Partie 2 La structure dun programme VHDL

12/46

Aperu des styles de codage

Style description structurelle

Les 3 sous-blocs A, B et C sont dcrits en premier, par


3 couples (entity, architecture) dans 3 units de
compilation.1
Larchitecture de chaque sous-bloc est dcrite dans un
style au choix du concepteur.

Le bloc principal Systme est dcrit ensuite,


galement par un couple (entity, architecture).
Larchitecture comporte 3 instructions dinstanciation
de composants (les 3 sous-blocs).
1

entity -- entres sorties du bloc A


Unit de compilation 1
end ;
architecture -- description des fonctions du bloc A
end ;
entity -- entres sorties du bloc B
Unit de compilation 2
end ;
architecture -- description des fonctions du bloc B
end ;
entity -- entres sorties du bloc C
Unit de compilation 3
end ;
architecture -- description des fonctions du bloc C
end ;
entity -- entres sorties du bloc Systme
end ;
Unit de compilation 4
architecture
-- instructions dinstanciation des blocs A, B et C
end ;

Les units de compilation peuvent, par dfinition, tre compiles sparment.


D.Giacona

VHDL Logique programmable

13/46

Partie 2 La structure dun programme VHDL

Autres styles

Le bloc principal Systme est obligatoirement dcrit


par un couple (entity, architecture).
Larchitecture est dcrite dans un style au choix du
concepteur.

entity
-- entres sorties du bloc Systme
end ;

architecture
-- description des fonctions des blocs A, B et C
end ;

D.Giacona

VHDL Logique programmable

14/46

Partie 2 La structure dun programme VHDL

La description VHDL du bloc principal tempo1ms comporte obligatoirement deux parties :


une dclaration dentit qui dfinit les entres-sorties
une architecture qui dtermine le comportement
-- dclaration des entres-sorties
entity tempo1ms is
Dclaration des signaux externes
...
end tempo1ms;
-- description du comportement
architecture arch_tempo1ms of tempo1ms is
...
Dclaration des signaux internes
begin
-- description du compteur
cnt10_proc: process (rst,clk)
-- description du contrleur
control_proc: process (rst, clk)
-- description du comparateur
compare: max_cnt10 <= 1 when

3 instructions concurrentes

end arch_tempo1ms;

D.Giacona

VHDL Logique programmable

15/46

Partie 2 La structure dun programme VHDL

3. lments fondamentaux du langage VHDL


3.1. Les commentaires
-- Un commentaire commence par deux tirets conscutifs et s'arrte la fin de la ligne
/* Ici commence un bloc de commentaire.
Autoris uniquement avec la norme VHDL-2008 */

3.2. Les identificateurs


Les identificateurs sont des appellations dobjets du langage (donnes et types).
Ils sont constitus de caractres alphabtiques (26 lettres), numriques (10 chiffres
dcimaux) et du caractre soulign _ ; les lettres accentues sont exclues
Le premier caractre doit tre une lettre
Les lettres majuscules et minuscules sont quivalentes
Le dernier caractre doit tre diffrent de _
Deux _ la file sont interdits
Le nom ne doit pas tre un mot rserv
La longueur dun mot est quelconque (mais une ligne maximum)
D.Giacona

VHDL Logique programmable

3.3. Les objets donnes :

16/46

Partie 2 La structure dun programme VHDL

signal, constante, variable

signal count : std_logic_vector(3 downto 0) := 0000;


Les signaux portent les informations des liaisons dentre, des liaisons de sortie et des liaisons internes.
Lassignation initiale de certains signaux internes est conseille pour une synthse.

constant max : std_logic_vector(9 downto 0) := "1111100111";


Les constantes reoivent leur valeur dfinitive au moment de leur dclaration.

variable temp : integer range 0 to 999 := 0 ;


Les variables ne sont dclares et utilises que dans les processus, les fonctions et les procdures.
Lassignation initiale est facultative.

D.Giacona

VHDL Logique programmable

17/46

Partie 2 La structure dun programme VHDL

3.4. Les types des objets donnes


3.4.1.

Les types prdfinis par tous les compilateurs

integer

: entier ngatif ou positif

natural

: entier positif ou nul

positive

: entier positif

bit

: numr dont les deux seules valeurs possibles sont 0 et 1

bit_vector

: composite tableau reprsentant un vecteur de bits

boolean

: numr dont les deux valeurs possibles sont false et true

real

: flottant compris entre -1.0E38 et 1.0E38

D.Giacona

VHDL Logique programmable

3.4.2.

Partie 2 La structure dun programme VHDL

Les types complmentaires

std_logic
U
X
0
1
Z
W
L
H
-

18/46

-- 9 valeurs dcrivant tous les tats dun signal logique


: non initialis (uninitialized, unconnected)2
: niveau inconnu (unknown)3
: niveau bas
: niveau haut
: haute impdance
: niveau inconnu, forage faible (weak unknown)1
: niveau bas, forage faible (weak low)
: niveau haut, forage faible (weak high)
: indiffrent (dont care)

std_logic_vector

Ce sont les types quil faut


utiliser de prfrence dans
toutes les dclarations des
ports dentre-sortie.
Ils sont compatibles pour la
simulation et la synthse.

-- vecteur de std_logic

Pour autoriser lusage de ces types, il faut inclure les directives suivantes avant la dclaration dentit.
library ieee;
use ieee.std_logic_1164.all;
2
3

Interdit pour la synthse, destin la simulation uniquement


En synthse, trait comme dont care
D.Giacona

VHDL Logique programmable

3.4.3.

19/46

Partie 2 La structure dun programme VHDL

Conversions de type

Les environnements de dveloppement fournissent en gnral des paquetages comportant des


fonctions de conversion de type. Par exemple, la bibliothque de Xilinx ISE contient :
conv_integer (a)
o pour convertir un std_logic_vector a en un integer
conv_unsigned (x,n)
o pour convertir un std_logic_vector, integer, unsigned ou signed x en un unsigned de n
bits (ralise un changement de taille)
conv_signed (x,n)
o pour convertir un std_logic_vector, integer, signed ou unsigned x en un signed de n bits
(ralise un changement de taille)
conv_std_logic_vector (x,n)
o pour convertir un integer, unsigned ou signed x en un std_logic_vector de n bits
Pour utiliser ces fonctions, il suffit daccder au paquetage std_logic_arith de la bibliothque
ieee
library ieee ;
use ieee. std_logic_arith.all;
D.Giacona

VHDL Logique programmable

3.4.4.

20/46

Partie 2 La structure dun programme VHDL

Usage courant du type integer

pour un signal servant de compteur (logique squentielle synchrone) ; en synthse,


la valeur courante de comptage doit tre convertie en std_logic_vector avant
d'tre applique sur une sortie
pour une variable servant d'indice pour un std_logic_vector

D.Giacona

VHDL Logique programmable

3.4.5.

21/46

Partie 2 La structure dun programme VHDL

Les littraux

Les entiers dcimaux


1234
1_520_473

-- pour amliorer la lisibilit

Les bits
0, 1
0, 1 ,U, X, H, L, W, Z, -

Les vecteurs de bits


1010
O12
XA

-- type bit
-- type std_logic
-- reprsentation binaire
-- reprsentation octale
-- reprsentation hexadcimale

Les caractres
a

Les chanes de caractres


ERREUR, ERREUR & N

D.Giacona

VHDL Logique programmable

22/46

Partie 2 La structure dun programme VHDL

3.5. Les oprateurs


3.5.1.

Oprateurs de construction dexpressions

Les oprateurs relationnels permettent de comparer des oprandes de mme type et dindiquer
lgalit, lingalit ou leur relation dordre. Ils sont utiliss dans des instructions de test. Ils rendent
une valeur boolenne (false ou true).
=
<
<=
>
>=
/=
Les oprateurs logiques sont dfinis pour les types boolean, bit, std_logic et les vecteurs
correspondants
and
or
not
nand
nor
xor
and nest pas prioritaire par rapport or (utiliser des parenthses)
Les oprateurs arithmtiques sont dfinis pour les types entiers et rels
+
*
/
**
mod

rem

abs

Les oprateurs de concatnation et dagrgation groupent des lments de mme type


&
( , , )
Les oprateurs de dcalage et de rotation sont dfinis sur le type bit_vector
sll
srl
sla
sra
ror
rol

D.Giacona

VHDL Logique programmable

3.5.2.

23/46

Partie 2 La structure dun programme VHDL

Oprateurs dassignation et dassociation

Assignation de variable
o lintrieur dun processus

nom_variable := expression ;

Assignation de signal (dynamique) nom_signal <= expression ;


o dans la zone dinstructions dune architecture

Assignation de signal (statique)


signal nom_signal_interne : type_signal := valeur_initiale ;
o dans la zone de dclaration dune architecture

Association de signaux
nom_signal_formel => nom_signal_effectif ;
o connecteur de signaux dans une instanciation de composant

D.Giacona

VHDL Logique programmable

Partie 2 La structure dun programme VHDL

24/46

3.6. Les dclarations et les assignations des signaux vecteurs


gauche

droite

signal a : std_logic_vector (0 to 7);


signal b : std_logic_vector (7 downto 0);
a <= 11110000;
b <= 11110000;
MSB (toujours gauche)

LSB ( droite)
a(0)

a(1)

a(2)

a(3)

a(4)

a(5)

a(6)

a(7)

MSB (toujours gauche)

LSB ( droite)
b(7)

b(6)

b(5)

b(4)

b(3)

b(2)

b(1)

b(0)

La notation downto est la plus conventionnelle pour les applications de synthse.

D.Giacona

VHDL Logique programmable

25/46

Partie 2 La structure dun programme VHDL

3.7. Surcharge doprateurs


Les environnements de programmation comportent des paquetages dans lesquels certains
oprateurs sont redfinis.
Dans loutil Xilinx ISE, laddition (+), la soustraction (-), la multiplication et la division de
vecteurs sont dfinies dans le paquetage std_logic_unsigned de la bibliothque ieee
library ieee ;
use ieee.std_logic_unsigned.all ;
A propos de la multiplication et de la division :
Loprateur de multiplication * est synthtisable (c.--d. que le compilateur est capable de
produire une structure matrielle RTL)
Loprateur de division / nest pas synthtisable de faon gnrale
xint <= conv_integer(a) / 10;
x <= conv_std_logic_vector (xint,16);
Parce quil sagit dune division par 10, ce code gnre, avec Xilinx ISE, lerreur suivante :
Operator <DIVIDE> must have constant operands or first operand must be power of 2

D.Giacona

VHDL Logique programmable

26/46

Partie 2 La structure dun programme VHDL

3.8. Les attributs


Les attributs sont des proprits spcifiques que lon peut associer aux signaux et aux types. La
valeur dun attribut peut tre exploite dans une expression.
Attribut valeur sur des types scalaires ou des lments (signaux, constantes, variables) de
type scalaire
'left, 'right, 'high, 'low, 'length
Attribut fonction sur des types discrets ordonns
'pos, 'val, 'succ, 'pred, 'leftof, 'rightof
Attribut fonction sur des signaux
'event
Attribut intervalle sur un signal dimensionn
'range, 'reverse_range

D.Giacona

VHDL Logique programmable

27/46

Partie 2 La structure dun programme VHDL

library ieee;
use ieee.std_logic_1164.all;
entity attributs is port(
vector_dwn
: in std_logic_vector(15 downto 0);
vector_up : in std_logic_vector(0 to 7);
x
: out std_logic_vector(7 downto 0);
y
: out std_logic_vector(0 to 11);
z
: out std_logic_vector(7 downto 0));
end attributs;
architecture arch_attributs of attributs is
begin
x(0) <= vector_dwn(vector_dwn'left);
x(1) <= vector_dwn(vector_dwn'right);
x(2) <= vector_up(vector_up'left);
x(3) <= vector_up(vector_up'right);
x(4) <= vector_dwn(vector_dwn'high);
x(5) <= vector_dwn(vector_dwn'low);
x(6) <= vector_up(vector_up'high);
x(7) <= vector_up(vector_up'low);
y(vector_up'range)
<= "00001111";
z(vector_up'reverse_range)
<= "00110011";

x(0)
x(1)
x(2)
x(3)
x(4)
x(5)
x(6)
x(7)

=
=
=
=
=
=
=
=

vector_dwn(15)
vector_dwn(0)
vector_up(0)
vector_up(7)
vector_dwn(15)
vector_dwn(0)
vector_up(7)
vector_up(0)

y(0)
y(1)
y(2)
y(3)
y(4)
y(5)
y(6)
y(7)

=
=
=
=
=
=
=
=

GND
GND
GND
GND
VCC
VCC
VCC
VCC

z(0)
z(1)
z(2)
z(3)
z(4)
z(5)
z(6)
z(7)

=
=
=
=
=
=
=
=

VCC
VCC
GND
GND
VCC
VCC
GND
GND

end arch_attributs;

D.Giacona

VHDL Logique programmable

28/46

Partie 2 La structure dun programme VHDL

4. Rle de l'entit
La dclaration dentit dcrit une interface externe unique.
La dclaration comprend :
o ventuellement, une liste de paramtres gnriques,
o la dfinition des ports, c.--d. une liste de signaux dentre et de signaux de
sortie, chaque signal possdant un nom, un mode et un type.

4.1. Description dune entit non gnrique


entity nom_entit is
port (
[signal] nom_signal {,nom_signal} : [mode] type_signal
{;[signal] nom_signal {,nom_signal} : [mode] type_signal}
);
end [entity] nom_entit;

D.Giacona

VHDL Logique programmable

Partie 2 La structure dun programme VHDL

29/46

tempo1ms

control

cnt10

up_cnt10
rst_cnt10

clk

en

cnt(9:0)

rst

clk
clk

compare
cnt10(9:0)
max_cnt10
(d = max)

d(9:0)

D.Giacona

VHDL Logique programmable

30/46

Partie 2 La structure dun programme VHDL

Nom de lentit
Mode du signal

entity tempo1ms is
Type de signal
Nom du signal

port (
clk
a
t

: in
: in
: out

std_logic;
std_logic;
std_logic);

end tempo1ms;

D.Giacona

VHDL Logique programmable

31/46

Partie 2 La structure dun programme VHDL

4.2. Description dune entit gnrique

entity nom_entit is
generic (
nom_paramtre {,nom_paramtre} : type_paramtre [:= expression_statique]
{; nom_paramtre {,nom_paramtre} : type_paramtre [:= expression_statique]} );
port (
[signal] nom_signal {,nom_signal} : [mode] type_signal
{; [signal] nom_signal {,nom_signal} : [mode] type_signal} );
end [entity] nom_entit;

D.Giacona

VHDL Logique programmable

Partie 2 La structure dun programme VHDL

32/46

Exemple : calcul de loppos arithmtique

Schma de principe pour une fonction de dimension 3

opposite_3
inverse

b
a(0)

HA

s
co

y(0)
c(0)

x(0)
b
a(1)

HA

s
co

y(1)
c(1)

x(1)
b
a(2)

HA

s
co

y(2)
c(2)

x(2)

D.Giacona

VHDL Logique programmable

33/46

Partie 2 La structure dun programme VHDL

Paramtre gnrique

entity opposite_n is
Valeur par dfaut

generic (n : integer := 3);


port (
x
: in std_logic_vector(n-1 downto 0);
inverse
: in std_logic;
y
: out std_logic_vector (n-1 downto 0));
end opposite_n;

D.Giacona

VHDL Logique programmable

34/46

Partie 2 La structure dun programme VHDL

4.3. Les modes des ports


VHDL dfinit quatre modes qui dterminent le sens de transfert dune donne au travers du
port :
in

Lentit lit un signal dentre fourni par lextrieur


(ex : load, reset, clock, donnes unidirectionnelles)

out

Lentit fournit un signal de sortie, mais ne peut pas relire ce signal

buffer

Larchitecture de lentit fabrique un signal utilisable en sortie,


qui peut aussi tre relu par lentit comme un signal interne

inout

Le signal est bidirectionnel :


en sortie, il est fourni par lentit; en entre, il est fourni par lextrieur.
Ce mode autorise aussi le bouclage interne
(ex : bus de donnes)

Par dfaut, le mode dun port est in.


Ne pas utiliser le mode buffer pour une synthse : peut provoquer des erreurs !!

D.Giacona

VHDL Logique programmable

35/46

Partie 2 La structure dun programme VHDL

In
Out

Buffer

In

Inout

In

Out

D.Giacona

VHDL Logique programmable

36/46

Partie 2 La structure dun programme VHDL

5. Rle du corps d'architecture


Le corps darchitecture dcrit le fonctionnement interne du bloc logique

5.1. Syntaxe
architecture nom_architecture of nom_entit is
{ dclaration_de_composant
| dclaration_de_constante
| dclaration_de_signal_interne
| dclaration_de_type
| dclaration_d'alias}
begin
{ instruction_concurrente_d'assignation_de_signal
| instruction_concurrente_d'instanciation_de_composant
| instruction_concurrente_de_processus
| instruction_de_gnration}
end [architecture] [nom_architecture];
D.Giacona

VHDL Logique programmable

Partie 2 La structure dun programme VHDL

37/46

5.2. Dclarations dans larchitecture


Composant half adder

opposite_3
inverse

b
a(0)

HA

s
co

lsb

y(0)

c(0)

x(0)
b
a(1)

HA

s
co

y(1)
c(1)

x(1)
b
a(2)

HA

s
co

msb

y(2)

c(2)

x(2)

D.Giacona

VHDL Logique programmable

38/46

Partie 2 La structure dun programme VHDL

architecture behavioral of opposite_3 is


-- dclaration de composant
component ha port(
a, b : in std_logic;
co, s : out std_logic);
end component;
-- dclaration des signaux internes
signal a, c : std_logic_vector(n-1 downto 0);
-- dclaration dalias
alias lsb : std_logic is y(0) ;
alias msb : std_logic is y(n-1) ;

begin
...

end behavioral ;

D.Giacona

VHDL Logique programmable

39/46

Partie 2 La structure dun programme VHDL

5.3. Instructions concurrentes


5.3.1.

Proprits

Lordre dcriture des instructions na pas dimportance (cest le paralllisme)


Une instruction concurrente dcrit une opration qui porte sur des signaux (entre, interne)
pour produire dautres signaux (interne, sortie)
Tous les signaux mis en jeu dans larchitecture sont disponibles au mme moment

Le corps darchitecture est dcrit dans un ou plusieurs styles


Le style nest pas impos par le type de logique (combinatoire ou squentielle) ou le type de
traitement des donnes (parallle ou squentiel)
Le style est choisi pour apporter concision ou par prfrence personnelle

Trois styles peuvent coexister au sein dune mme architecture

D.Giacona

VHDL Logique programmable

5.3.2.

40/46

Partie 2 La structure dun programme VHDL

Classification des styles de description

Description flot de donnes : instructions concurrentes dassignation de signal


Description de la manire dont les donnes circulent de signal en signal, ou dune entre vers
une sortie
Trois types dinstructions :
tiquette : <=
tiquette : <= when else
tiquette : with select <= when
Lordre dcriture des instructions dassignation de signaux est quelconque

D.Giacona

VHDL Logique programmable

41/46

Partie 2 La structure dun programme VHDL

Description structurelle : instructions concurrentes dinstanciation de composant


Interconnexion de composants (components), la manire dun schma, mais sous forme dune
liste
Dans larchitecture utilisatrice, un composant peut tre considr comme une bote noire
Un composant est instanci laide dune instruction dappel de composant :
tiquette : nom_composant port map ( liste_des_entres_et_sorties );
Lordre dcriture des instructions dinstanciation de composants est quelconque
Par dfinition, un composant est aussi un systme logique (un sous-sytme) ; ce titre, il doit
aussi tre dcrit par un couple (entity, architecture) dans lequel sont dfinis ses entressorties et son comportement
Le corps darchitecture du composant (le comportement) est dcrit selon un ou plusieurs
styles ; par exemple, un composant peut faire appel dautres composants
Un composant peut tre rang dans une bibliothque

D.Giacona

VHDL Logique programmable

42/46

Partie 2 La structure dun programme VHDL

Description comportementale : instructions concurrentes dappel de processus


Certains comportements peuvent tre dcrits de faon algorithmique ; il faut alors les dfinir
comme des processus
Dans larchitecture utilisatrice, un processus est considr comme une instruction concurrente
Instruction dappel de processus :
tiquette: process dclarations begin instructions_squentielles end process;
Lordre dcriture des instructions dappel de processus est quelconque
Un processus contient des instructions squentielles qui ne servent qu traduire simplement et
efficacement, sous forme dun algorithme, le comportement dun sous-ensemble matriel
Des instructions squentielles (un algorithme) peuvent dcrire un systme combinatoire ; a
contrario, une instruction concurrente peut dcrire un systme squentiel !!
lintrieur dun processus, trois types dinstruction dassignation de signaux et deux types
dinstruction ditration :
<=
if then else
case when
for loop
while loop
Lordre dcriture des instructions lintrieur du processus est dterminant
D.Giacona

VHDL Logique programmable

5.3.3.

43/46

Partie 2 La structure dun programme VHDL

Exemple 1 : architecture comportant trois styles diffrents

Conception schmatique laide dun diteur de schmas (par exemple Active-HDL)

D.Giacona

VHDL Logique programmable

44/46

Partie 2 La structure dun programme VHDL

Conception directe VHDL laide dun diteur de texte


entity systeme is port(
...
architecture arch_systeme of systeme is
signal x,y ...
-- dclaration des signaux internes
...
begin
-- B1 (Description par flot de donnes)
-- Instruction concurrente dassignation de signal
B1 : x <= a and b;
...
-- B2 (Description comportementale)
-- Instruction dappel de processus
B2 : process (...)
-- Instruction squentielle
y <= ...
end process;

Lien par les


noms des
signaux

-- B3 (Description structurelle)
-- Instanciation de composant
B3 : composant_B3 port map (x, y,...);

end arch_systeme;

D.Giacona

VHDL Logique programmable

5.3.4.

45/46

Partie 2 La structure dun programme VHDL

Exemple 2 : comparatif de deux styles pour un mme bloc logique


-- Style flot de donnes
architecture archmux of mux4_1
begin
x <= a when (s = "00")
b when (s = "01")
c when (s = "10")
d;
end archmux;

is
else
else
else

-- Style flot de donnes


architecture archmux of mux4_1 is
begin
with s select
x <= a when "00",
b when "01",
c when "10",
d when others;
end archmux;

-- Style flot de donnes


architecture archmux of mux4_1 is
begin
x <=
(not s(1) and not s(0)
or
(not s(1) and
s(0)
or
(
s(1) and not s(0)
or
(
s(1) and
s(0)
end archmux;

and
and
and
and

a)
b)
c)
d);

-- Style comportemental
architecture arch_mux of mux4_1 is
begin
process (s, a, b, c, d)
begin
case s is
when "00"
=> x <= a;
when "01"
=> x <= b;
when "10"
=> x <= c;
when others => x <= d;
end case;
end process;
end arch_mux;

D.Giacona

VHDL Logique programmable

5.3.5.

Partie 2 La structure dun programme VHDL

46/46

Exemple 3 : style description structurelle


opposite_3
inverse

b
a(0)

HA

s
co

y(0)
c(0)

x(0)
b
a(1)

HA

s
co

y(1)
c(1)

x(1)
b
a(2)

HA

s
co

y(2)
c(2)

x(2)

begin
a(0) <= x(0) xor inverse;
ha0 : ha port map (a(0),inverse,c(0),y(0));
haloop : for i in 1 to n-1 generate
a(i) <= x(i) xor inverse;
han : ha port map (a(i),c(i-1),c(i),y(i));
end generate;
end Behavioral;
D.Giacona