You are on page 1of 22

Conception Architecturale et

Fonctionnelle
Conception de circuits numriques laide du langage VHDL

C. TANOUGAST - LICM

Universit Paul Verlaine de Metz


Master EAII - Spcialit Radiocommunications et
Systmes Embarqus

C. Tanougast

Introduction
Objectif
 Rappeler les notions essentielles de la conception de circuits

numriques.
 Conception des systmes numriques hirarchiques
 Mise en uvre des techniques doptimisation darchitecture
 Concevoir des circuits laide d'une description en VHDL

Prrequis
Connaissance des technologies de circuits numriques et de la
conception des circuits combinatoires et squentiels

PLAN

Logique Combinatoire

 Logique Combinatoire
Reprsentations
Description VHDL
Macro
- fonctions

 Reprsentations des fonctions combinatoires


Algbrique :
oprateurs et, ou, non, . , +, A , AND, OR, NOT
Table de vrit : utilise pour la rsolution des problmes
Tableau de Karnaugh : utilis pour la simplification des
fonctions
Schmatique

 Conception squentielle synchrone


Modles machines d tat
Mthodes d analyse et de synthse
Description VHDL des machines d tat

positifs : 10112 = 1110


ngatifs :
(n bits excdent

2n-1

6,2510 = 110,012

standard IEEE 754-1985 sur 32 bits :


SmE
(-1)Sx1,mx2E ; S sur 1er bit, m mantisse sur 23
bits, E exposant sur 8 bits excdent 127

Logique combinatoire

Logique Combinatoire


2. Les circuits de transformation de codes

Le codeur : circuit qui transforme une entre (celle qui est active) parmi plusieurs en un

Sk = Fk (E0, E1, , En) o Fk est une fonction boolenne

Entres du circuit
- Entres de porte connectes

Sortie du circuit

C0

n sorties

Le Dcodeur: Active une sortie selon la valeur binaire dun code dentre.
Code dentre C1
C0

Cn-1

Dcodeur
S2n-1

S0

Exemple :
Le dcodeur binaire : suivant la valeur
binaire dentre la sortie de mme valeur
est active (mis 1) les autres restent
dsactives.

N1

S1
ET1

OU1

OU1

S3

S2
ET2

- Interconnexions sans boucle :

S3

N2

S4

10

Logique Combinatoire

C. TANOUGAST

 Le transcodeur: circuit permettant de passer dun code C1 un autre code C2.


Code dentre C1

Exemple :
Le transcodeur binaire 7 segments
(dcodeur binaire 7 segments)
(Cf Projet !)

C0

Cn

Transcodeur
Cx

C0

x sorties
Code de sortie C2

Code gnr

n entres

A
B
C

E2 E1 E0

Cn-1

Circuit
Combinatoire

Entres dune porte

n entres

Codeur

a
b
c
d

Sortie dune porte

- Sortie de porte connectes

Entres codes

Exemple :
Encodeur dcimal vers le code binaire
pure : Transforme une entre parmi 10
(chacune reprsentant lun des 10 chiffres
dcimales) en un code binaire sur 4 bits
(nombre binaire correspondant au chiffre
dcimal)

Sorties

Sp

C. TANOUGAST

S0
S1
S2

Circuit
Combinatoire

Systme physique constitu dun ensemble de portes logiques interconnectes :

E2

XOR

C. TANOUGAST

E0
E1
E2

Caractres alphanumriques : code ASCII

entres

1
=1

Seules les valeurs des entres interviennent sur les valeurs des sorties (pas de mmoire du
passe logique squentielle)

Nombres virgule flottante

n-1

NOT

En

Nombres dcimaux virgule fixe

2n

1. Systme Logique Combinatoire

Entres

complment 2 (complment + 1)
binaire dcal codage par excdent pour un nombre N sur n bits

code dfini.

OR

Logique Combinatoire

Entiers

Nc = N10 +

&

 Nombres et codes

2n-1

AND

3. Circuit de comparaison

Circuit permettant la comparaison de deux nombres binaires en fournissant trois sorties :


A< B, A = B et A > B

S1 (= 1 si A < B)

An A0
Comparateur

S2 (=1 si A = B)

Bn B0

2n sorties

S3 (= 1 si A > B)
Sorties du dcodeur

11

12

Logique Combinatoire

Logique Combinatoire

C. TANOUGAST

5. Porte logique 3 tats: Tris-state

4. Circuit daiguillage : Multiplexeur (Mux)

- Circuit permettant daiguiller une entres parmi plusieurs vers une sortie :
- Permet de slection une entre (un bit ou plusieurs) parmi plusieurs partir dune ou
plusieurs entres de slection
-frquemment utilis dans les applications de transmission de donnes (permet un transfert
conditionnel des donnes)

- Porte logique disposant de trois tats possibles en sorties en fonction dune entre de
slection :
0 ou 1 et Z (Haut impdance)
- Z : Haut impdance = circuit ouvert. La sortie est dconnecte et le circuit na aucune
signification logique

Tris-state logique ngative


E

An A0
Bn B0

Valeur Entre de slection

Sortie

00..00
00..01
00..10

An A0
Bn B0
Cn C0

Sortie de
slection

MUX
Xn X0

11 ..11

Xn X0

C. TANOUGAST

Tris-state logique positive

S: Entre de slection

S : Entre de slection

Valeur de lentre de slection S Sortie X

Entre de slection

0
1

Valeur de lentre de slection S

Sortie X

0
1

E
Z (Hi)

Z (Hi)
E

Si entre active ltat bas  pas de sortie


13

Modles de description
 Fonctions combinatoires

 Look Up Table : LUT


b
0
0
1
1
0
0
1
1

c
0
1
0
1
0
1
0
1

F
1
1
0
1
1
1
1
1

Si entre active ltat bas  sortie

14

Table de transformation

a
0
0
0
0
1
1
1
1

ROM
1
1
0
1
1
1
1
1

0
1
2
3
4
5
6
7
a

Equations logiques
Tables de vrit
Schmas logiques (logigrammes)
Tableaux de Karnaugh
description HDL (Verilog, VHDL)

 Limitations
Par le nombre de variables

 Remde : utilisation de fonctions gnriques


Multiplexeurs, comparateurs, codeurs, fonctions
arithmtiques

15

16

Initiation Logique Squentielle

Initiation Logique Squentielle

C. TANOUGAST

1. Introduction : Logique squentiel

Systme dont les sorties dpendent la fois des entres et de ltat du systme. Un
systme squentiel volue en fonction des squences reues son entre, de son tat
prsent et initial.

Pour une mme combinaison dentres, il est donc possible davoir plusieurs tats du
systmes et de sorties diffrentes = effet mmoire (Par opposition un systme
combinatoire o pour une mme combinaison dentres nous avons toujours les mmes valeurs
de sortie !)

St+1 = F (Et , S t ) o F est un comportement boolenne ( systme combinatoire o S t = F (Et


) avec F fonction boolenne)

Systme physique constitu dun ensemble interconnect de portes logiques et dlments de


mmorisation de ltat du systme

C. TANOUGAST

2. lments de mmorisation: les registres

Registre = lments de base des systmes squentielles. Il permet demmagasiner de


linformation.

2 types de registre qui diffrent par leur signal dactivation :


- Les bistables (Latchs) : Signal dactivation sensible une transition de niveau :
_ Si le signal dactivation est actif  lentre est transfre vers la sortie
_ Si le signal dactivation est inactif  la sortie conserve la valeur dentre prcdemment
acquise.
- Les bascules (Flip flop) : Signal dactivation bas sur un niveau logique:
_ Transition sur front montant :0 1 :

Entres

Sorties

Circuit
Squentiel

_ Transition sur front descendant : 1  0 :


Linformation en entre est copi la sortie sur une transition spcifique du signal dactivation

17

18

Initiation Logique Squentielle

Initiation Logique Squentielle

C. TANOUGAST

3. 2. lments de mmorisation :Bistable D

Description :
- Fonction de mmorisation o lentre est copie la sortie tant que le signal dhorloge est
actif. Lhorloge est active sur un niveau haut (1) ou bas (0).

- Une entre D (Data) : entre de donne mmoriser


- Une horloge H : signal dactivation de mmorisation sur niveau
- Une sortie Q : recopie lentre si activation

D Bistable
Q
D

C. TANOUGAST

3. 2. lments de mmorisation : Bistable D

Table de vrit (H active au niveau haut):

Qt+1

0
0
1
1

0
1
0
1

Qt
0
Qt
1

- Diagramme de fonctionnement (H actif sur niveau haut):

Qt

Qt+1

0
0
0
0
1
1
1
1

0
0
1
1
0
0
1
1

0
1
0
1
0
1
0
1

0
1
0
0
0
1
1
1

Qt : valeur de sortie avant activation


Qt+1 : valeur de sortie aprs activation

D
H
Q
temps

19

20

Initiation Logique Squentielle





Initiation Logique Squentielle

C. TANOUGAST

3. 3. lments de mmorisation : Bascule D

Description :
- Fonction de mmorisation o lentre est copie la sortie si activation sur front dun
signal dhorloge. Lhorloge est active sur front montant ou descendant.

3. 3. lments de mmorisation : Bascule D

Table de vrit :

- Une entre D (Data) : entre de donne mmoriser


- Une horloge H : signal dactivation sur front
- Une sortie Q : recopie lentre si activation horloge

D Bascule
Q
D

D Bascule
Q
D

Bascule front descendant

Bascule front montant

C. TANOUGAST

- Diagramme de fonctionnement (H actif sur front montant):

Q t+1

Qt

Qt

ou

ou

Qt

Qt

D
H
Qt : valeur de sortie avant activation
Q

Qt+1 : valeur de sortie aprs activation


21

Initiation Logique Squentielle





temps

22

Initiation Logique Squentielle

C. TANOUGAST

4. Les compteurs

C. TANOUGAST

4. Les compteurs

Description :
- Systme squentiel ralisant un comptage binaire. Lincrmentation seffectue selon un
signal dhorloge. Lhorloge est active sur front montant ou descendant.

- Diagramme de fonctionnement (H actif sur front descendant, compteur 4 bits):

- Une entre dhorloge H : signal dactivation sur front


H

- Des sorties Q : modlisant les tats binaires de comptage

Q0 0

- Un signal de sortie dindicateur de dbordement (TCO : Terminal count output ou RCO:


Ripple carry output)

Q1 0

Sorties 4 bits
Q2 0

0 0

Q3

10

11

12

13

14 15

Q0

Compteur Q1
H

Q2
Q3
Qn

rco

23

rco
temps

24

Modles de description

Conception des Machines d'tat

 Fonctions squentielles

 Machine de Moore

graphes d tats (Finite State Machines) FSM


Un

systme squentiel quelconque peut tre dcrit par


un ensemble fini d tats (X),
Un ensemble fini dentres (E)
Une fonction de transition G: XxE-> X. Une certaine entre
dans un certain tat fait passer le systme un autre tat.

Horloge
Entres
E(t)

Circuit d'excitation
Calcul combinatoire
des tats FUTURS

S(t) = F(X(t))
X(t + 1) = G[E(t), X(t)]

26

Conception des Machines d'tat

Reprsentation graphique des machines dtats


 Reprsentation par un diagramme

 Machine de Mealy

Horloge

Circuit d'excitation X(t+1)


Calcul combinatoire
des tats FUTURS

Circuit S(t)
de sortie
X(t)

Les nuds sont les tats


Les arcs dfinies par la fonction de transition G(E, X)
Des sorties dfinies par la fonction F(X) ou Fm(E, X)
!y

D Q

!e
A
00

s0

y
1

du systme : G

!y

D
! e 11

S(t) = F[X(t), E(t)]


X(t + 1) = G[E(t), X(t)]

C
10
!e

 Mthode manuelle pour la dtermination des

quations de G et F

s2

!y
1

!y

0
y

s3

y
1

Exemple
 Compteur 2 bits avec Enable

Dfinir la taille N du registre : pour E tats


log2(E)< N E
2Nmin E ; Nmax E
Coder les tats (attribuer une valeur numrique chaque
tat)
Etablir la table de transition

X(t+1)

S
Etats
de
Conditions Etats initiaux tats futurs
sortie
En dduire les quations logiques d'excitation (G) et de
sortie (F)

29

s1

28

Dtermination des quations

X(t)

B
01 !e

27

Circuit S(t)
de sortie

D Q

25

Entres

X(t)

X(t+1)

du systme : G

Deux Modles de machines d tats


Moore : les sorties dpendent exclusivement des tats du
systme
Mealy : les sorties dpendent des tats et des entres.

E(t)

!e
A
00

!e

D
11

B
01
e

!e

C
10
!e
30

Exemple du compteur

Registre : 2bits Q1 ; Q0
Table de transition
Equations
Q1+ = Q1.(!E+!Q0)+!Q1.Q0.E
Q0+ = E.!Q0+Q0.!E
Q0+ = D0
Q1+ = D1

Annotation d'un graphe de Mealy


!y

E Q1 Q0 Q1+ Q0+
0 0
0
0
0
0 0
1
0
1
0 1
0
1
0
0 1
1
1
1
1 0
0
0
1
1 0
1
1
0
1 1
0
1
1
1 1
1
0
0

0
s0

1
!y
0

s1

s2

!y
1

!y
0
y

31

32

Limites des FSM

Machines dtat hirarchiques

 Un nombre de variables et d tats trop important

 Principe

rend la lecture difficile


ralentit la conception
rend la synthse manuelle fastidieuse

Activations
FSM1

 Remdes
Utilisation de langages HDL pour la synthse
Utilisation de fonctions gnriques (compteurs,
registres)
Dcomposition architecturale
Utiliser des graphes de tches

Retours

FSM2

Activations : sorties de FSM 1 ;


conditions de transition sur FSM2
Retours :

sorties de FSM2
conditions de transition sur FSM1

33

34

Machines hirarchiques
A1

S
0
0
1
0
1
1
1
1

s3

Y X(t) X(t+1)
0 S0 S0
0 S1 S1
0 S2 S2
0 S3 S3
1 S0 S2
1 S1 S0
1 S2 S3
1 S3 S2

Problmes de synchronisation
!E

B1

 Gnrer le signal suivant :


H

E
S

A2

B2

Activations

c2/!f

Ai

FSM1

Compteur +
dcodeur 5

Retours

Bn

An
E

!f
cn/f

35

36

Synchronisation et hirarchie
!E

5
tmp

B
SE

tmp

!S !E

Synchronisation et hirarchie
 La machine de droite impose une temporisation ltat B de la

machine principale.

1
Compteur
dcodeur 5

B
SE

2
4

3
!tmp
Il apparat lanalyse des chronogrammes une valeur errone de la
temporisation.
En effet au lieu dune temporisation de 5 priodes B est maintenu
pendant 6 priodes

E
FSM2

H
A

0
5
tmp

tmp

!tmp

FSM1

!E

!S !E

tmp

37

38

Conception architecturale

Solutions architecturales multiples

 Dcomposition dun problme complexe


Unit excutive compose doprateurs et de
macrofonctions (Datapath)
Unit de contrle charge de squencer les
oprations effectuer sur les donnes

 Cas dun Filtre numrique

y(n)= 1 (7.x(n) +5.x(n1)+3.x(n 2)+1.x(n3) )


16
 Solution parallle

Donnes en entre

consignes

X(n)

Unit
excutive

Unit de
contrle

X(n
- 1)

X(n
-

2)

X(n
-

3)

acquiescement
Y(n)

Donnes en sortie
39

40

Solutions architecturales multiples


sel

1 3

 x(n) sur 16 bits FPGA (XILINX)

MUX
coef

sel

Contrle

registre

x(n)

registre

x(n-1)

registre

x(n-2)

registre

x(n-3)

ech

M
U
X

ini

Mult

Ressources ncessaires

MUX

ini

Multiplieur : ~ 60 CLB
Additionneur : ~ 8 CLB
Registres : ~ 8 CLB
Multiplexeur ax16 vers 1x16 : ~ 2a CLB

Architecture parallle
3 mult + 5 reg + 3 add
3x60 + 5x8 + 3x8 = 244 CLB

Architecture squentielle

E
fin

Add
registre

 Solution squentielle

1 mult + 2 mux4entr + 1 mux 2ent + 5 reg + 1add +


FSM_4
1x60 + 2x8 + 1x8 + 5x8 + 8 + 2 = 134 CLB

Acc
y(n)

41

42

FPGA

Les GAL, EPLD et CPLD

(Field Programmable Gate Array)


Programmable
Interconnect

Pads d'entre-sortie
CLB

CLB

Slew
Rate
Control

S witch
Ma trix

Blocs
logiques

CLB

Output
Buffer

Pad

Input
Buffer

C1 C2 C3 C4
horloge
globale

Delay

H1 DIN S/R EC
S/R
Control

G4
G3
G2
G1

CPLD D'ALTERA

Vcc

CLB

rseau
d'interconnexion local

Pistes
d'interconnexion
rapides

Passive
Pull-Up,
Pull-Down

DIN

G
Func.
Gen.

H'

H
Func.
Gen.
F
Func.
Gen.

EC
RD

G'
H'
S/R
Control

DIN

SD

F'

G'

H'

1
H'

G'

F4
F3
F2
F1

I/O Blocks (IOBs)

SD

F'

F'

EC
RD

Configurable
Logic Blocks (CLBs)

43

44

Comparatif

Compromis surface/performance

CPLD

FPGA
Cellule logique

Mmoire enfouie

Contrainte de cot

Surface
de Si

Espace de
conception

Contrainte
De temps

Macrocell

Point optimal
A rchite cture
D e nsit
P e rfo rma nc es
Interc o nne xio ns

C P LD
D e typ e P A L
5 0 0 0 0 p o rtes ma x
d la is d te rmin s f > 2 0 0 M H z
to tale (cro ssb a r)

FPGA
d e typ e r sea u d e p o rte s e t re gistre s
jusq u' 2 millio ns d e p o rte s
d la is va ria b le s f 1 0 0 M H z
se gm ente s

45

Temps de
calcul
46

Conception des units dexcution

Modle danalyse des units dexcution

 Objectif
A partir de la solution fonctionnelle dcrite
sous forme comportementale
Dduire larchitecture matrielle sous la forme
dun ensemble de constituants interconnects
Cette architecture doit satisfaire la solution
fonctionnelle

 Graphe flot de donnes (Data flow graph)


Permet de reprsenter les dpendances
temporelles entre les donnes et les oprateurs
Il est constitu

 2 catgories
Circuits orients contrle
Circuits orients traitement

47

De nuds (cercles), chacun reprsentant une


opration de transformation
De liens, chacun dfinissant la dpendance temporelle
entre oprations
De symboles rectangulaires reprsentant la
mmorisation dune donne.

48

Exemple de DFG
A

B C

Dfinition dun graphe flot de donnes

 Le graphe se dcrit de haut en

bas ou de gauche droite, dans


le sens temporel croissant des
oprations.
 Chaque donne doit tre
assignation unique : mise jour
quune seule fois. La fin de la
donne correspond sa dernire
utilisation.
 Met en vidence le paralllisme
maximum dexcution li
lexistence des donnes

 Un graphe flot de donnes est un graphe orient

G=(V,E) o :
 - V = {v1, , vn} est un ensemble fini de sommets
 - E VxV est une relation asymtrique de

dpendance de donnes dont les lments sont des


arcs orients
 Les sommets correspondent aux oprations et un
arc orient eij de vi V vers vj V existe si la
donne produite par lopration oi est consomme
par lopration oj

49

50

Oprateurs

Architectures cibles
A

GFD :
or

and

Exemple de graphe flow de donnes

B
C

>

CDFG : Control-data-flow-graph

Extension du modle DFG pour les


instructions conditionnelles (If, case,
while etc)

F
G

51

52

Architecture dexcution
squentielle
A
Mux

Paralllisme de donnes
A

BCDEFG
!E

Mux

0
3

UC
6
4
5

Cot ?
53

 Dfinir larchitecture de

calcul

Transformation pour accrotre


Le paralllisme

54

Excution pipeline
Op1

Op2

Excution squentielle
Une seule unit de calcul
do

Op1

d1
do

Op2
Op3

Excution pipeline
Trois units de calcul

Op2
d1

Op3

Op1 do
d1

do

Excution pipeline

d1

d2

do

d1 d2
do

Op3

d1

Temps de latence ?
Frquence dhorloge ?
Dbit de donnes ?
Cot ?
Architecture ?

d2

56

VHDL

Description VHDL

 VHDL : VHSIC Hardware Description Language (VHSIC :

 Trame principale

Very High Speed Integrated Circuit)

 1981 Etude de l'arme amricaine sur un moyen de raliser


des documentations techniques sans ambiguts et
facilement interprtables.
 1987 Standard IEEE 1076-1987
 1993 rvision IEEE 1134-1993

Nom du
rpertoire dans
lequel se
trouve
std_logic_1164

 Utilis pour :
dcrire le comportement de fonctions
synthtiser un circuit
modliser un circuit (modle logique et technologique)
simuler une description ( description des signaux
d'entre)

Entit et
Architecture sont
les parties
principales d'une
description

57

-- Library Clause
LIBRARY ieee;
-- Use Clause
USE ieee.std_logic_1164.all;
-- Package Declaration (optional)
-- Package Body (optional)
-- Entity Declaration
-- Architecture Body
Description VHDL
58

Entit

Types

Description des entres et des sorties de la structure en


explicitant pour chacune d'entre elles le nom, la direction
(IN, OUT et INOUT) et le type.
ENTITY _entity_name IS
GENERIC( _parameter_name
parameter_name : string := _default_value
_default_value ;
_parameter_name
_parameter_name : integer:= _default_value
_default_value );
PORT(
_input_name, _input_name

: IN STD_LOGIC;

_input_vector_name
: IN STD_LOGIC_VECTOR(high downto low );
_bidir_name, __bidir_name
: IN OUT STD_LOGIC;
_output_name, __output_name : OUT STD_LOGIC );

END __entity_name ;
Exemple :

55

entity XOU is
port (E1, E2 : in bit;
S : out bit);
end XOU;

E1
E2

XOU

 Types utiliss en lectronique numrique


Les signaux, variables et constantes ont obligatoirement un
type qui dfinit l ensemble auquel ils appartiennent.
Nom du type
BIT
INTEGER
REAL
BOOLEAN
CHARACTER
TIME

Dfinition de l'ensemble
Deux valeurs possibles 0 ou 1
Entiers (nombre positif ou ngatif sur 32 bits)
Rels +ou- nombre.nombre[E +ou- nombre]
Deux valeurs possibles True ou False
Caractres a, b, c ..., 1, 2 ...
Nombre rel de temps fs, ps, ns, us, ms, sec, min, hr

Dfinition d'un type entier pour le signal A :


A INTEGER RANGE 255 DOWNTO 0 (0to255)
Description VHDL

59

Description VHDL
60

10

Vecteurs

Vecteurs

 Vecteurs pour la manipulation de bus

 Vecteurs pour la manipulation de bus

Dclaration de trois signaux correspondant des bus (un vecteur


de signaux) comportant 8 signaux A(0), A(1) ,..., A(7) et B(0), B(1) ,
..., B(7) ainsi que S(0), S(1) , ..., S(7).

Dclaration de trois signaux correspondant des bus (un vecteur


de signaux) comportant 8 signaux A(0), A(1) ,..., A(7) et B(0), B(1) ,
..., B(7) ainsi que S(0), S(1) , ..., S(7).

rangement descendant A : in bit_vector (7 downto 0);


rangement ascendant B : in bit_vector (0 to 7);
S : out bit_vector (7 downto 0);

rangement descendant A : in bit_vector (7 downto 0);


rangement ascendant B : in bit_vector (0 to 7);
S : out bit_vector (7 downto 0);

 Assigner une valeur un des lments d'un bus: B(3) <= '1

 Assigner une valeur un des lments d'un bus: B(3) <= '1

 Assigner une valeur l'ensemble du bus, plusieurs mthodes

 Assigner une valeur l'ensemble du bus, plusieurs mthodes

S <= "11001010"; assigne 11001010 aux lments S(7), S(6), ..., S(0).

Diffrence entre rangement ascendant et descendant :


si A <= "11110000" alors A(7) = '1'
si B <= "11110000" alors B(7) = '0'

S <= (7 => '1', 6 => '1', 5 downto 4 => '0', 3 => '1', 2 => '0', 1 => '1', 0
=> '0') ; assigne la valeur 11001010 aux lments S(7), S(6), ..., S(0).
S <= (7 => '1', others => 0'); assigne la valeur 10000000 au vecteur S.
61

Description VHDL

62

Description VHDL

Types std_logic et std_ulogic

Types std_logic et std_ulogic

Le type bit est insuffisant dfinir des tats haute impdance


ou indfinis!

Le type bit est insuffisant dfinir des tats haute impdance


ou indfinis!

Le standard IEEE de 1993 ( std_logic_1164) remdie ce


problme en dfinissant les types std_ulogic et std_logic le
standard std_logic est rsolu (des affectations multiples
sont prvues)

Le standard IEEE de 1993 ( std_logic_1164) remdie ce


problme en dfinissant les types std_ulogic et std_logic le
standard std_logic est rsolu (des affectations multiples
sont prvues)

'U' = Non initialis,


X ' = inconnu forage fort,
0 = forage fort, (bas)
1 = forage fort, (haut)
Z ' = haute impdance,

W = inconnu forage faible,


L = forage faible, (bas)
H = forage faible,
- = quelconque. (haut)

std_logic_vector et std_ulogic_vector sont des bus de type


std.

Seuls ces quatres tats ont une signification pour


la synthse
1 = forage fort, (haut)
Z ' = haute impdance,

0 = forage fort, (bas)


- = quelconque. (haut)

std_logic_vector et std_ulogic_vector sont des bus de type


std.

Description VHDL

Description VHDL

63

64

Type numr et tableau

Type Record

 numration

Type compos de plusieurs lments diffrents et juxtaposs .


L utilisation du . permet ensuite d accder l lment
souhait.

Cration personnalise d un type correspondant une


numration d lments explicites.
Exemple :
TYPE libelle_instruction IS (MOVE, ADD, JNE, BRS, RTS) ;
SIGNAL Instruction : libelle_instruction ;

 Tableau
dfinition de tableau de valeurs de type quelconque.
Exemple :
TYPE Tableau_4x8xbit IS ARRAY (3 downto 0, 7 downto 0) OF bit ;
ou bien encore
TYPE Tableau_8xbit IS ARRAY (7 downto 0) OF bit ;
TYPE Tableau_4x8xbit IS ARRAY (3 downto 0) OF Tableau_8xbit ;

Exemple de type :
TYPE Bus_micro IS RECORD
Nbr_bit_adresse : integer ;
Nbr_bit_donnee : integer ;
Vitesse : time ;
END RECORD ;
Exemple d assignation sur ce type :

Bus_micro.Nbr_bit_adresse <= 24 ;
Bus_micro.Nbr_bit_donnee <= 16 ;
Bus_micro.vitesse <= 10us ;

Description VHDL
65

Description VHDL
66

11

Architecture

Assignation concurrente de signaux

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.

Dfinitions
Signal
Le signal est vu dans toute l architecture. Il est synthtis
sous la forme d un quipotentiel. L assignation d une valeur
cre des connexions.

ARCHITECTURE _architecture_name OF _entity_name IS


SIGNAL __signal_name : STD_LOGIC;
BEGIN
-- Process Statement

Concurrence
Lorsque l'on tudie une structure logique, il apparat
lvidence que les signaux qui la constituent voluent de
faon indpendante et parallle. Exemple

-- Concurrent Signal Assignment


-- Conditional Signal Assignment
-- Selected Signal Assignment

Assignation simple

-- Component Instantiation Statement

__signal <= __expression;

-- Generate Statement

exemple : c <= a and b ;

-- Concurrent Procedure Call


END _architecture_name ;

Description VHDL

Description VHDL

67

68

Assignation concurrente de signaux

Assignation conditionnelle

 Exercice

_signal <= _expression WHEN _boolean_expression ELSE


_expression WHEN _boolean_expression ELSE

Raliser la description des trois fonctions de base

_expression ;
ENTITY fonc_de_base IS
PORT (a, b : IN BIT;
et, ou, non : OUT BIT);
END fonc_de_base ;

Exemple :

a
&

ARCHITECTURE ex OF fonc_de_base IS
BEGIN
et <= a AND b;
ou <= a OR b;
non <= notb ;
END ex;

ENTITY ou IS
PORT (a, b : IN bit;
c
: OUT bit);
END ou ;

et

ou

Description VHDL

Description VHDL
70

Assignation conditionnelle

Description structurelle
A

AUTRE Instruction conditionnelle : WITH SELECT

E1 U1
XOU

Som

E2
E1

U2
ET

Ret

E2

Dclaration du
composant XOU

mux

Dclaration du
composant ET.
Spcification de l'entit
et de l'architecture
utiliser pour les
composants ET et XOU.

Description VHDL
71

ARCHITECTURE conditionnelle OF ou IS
BEGIN
c <= '0' WHEN (a = '0' AND b = '0' ) ELSE
'1';
END conditionnelle;

non

69

ARCHITECTURE with OF exemple IS


BEGIN
a
WITH G SELECT
S <= a WHEN " 00 " ,
b
b WHEN " 01 " ,
c WHEN " 10 " ,
c
d WHEN " 11 " ;
d

Cblage (instanciation)
des composants XOU et
ET appels U1 et U2.

Entit add is
port (A, B : in bit; Som, Ret : out bit);
end add;
architecture Arch_structurelle of add is
component XOU
port (E1, E2 : in bit; S : out bit);
end component;
component ET
port (E1, E2 : in bit; S : out bit);
end component;
for U1 : XOU use entity work.XOU(Ar_XOU);
for U2 : ET use entity work.ET(Ar_ET);
begin
U1 : XOU port map (A, B, Som);
U2 : ET port map (A, B, Ret);
end arch_structurelle;

Description VHDL

72

12

Description comportementale
Le process
Le processus est une instruction concurrente dfinie l aide
d instructions squentielles architecture Arch_comport of add is
Il est activ si un des
signaux de la liste de
sensibilit change d tat
Description du
comportement de la fonction
L'examen squentiel des
instructions a pour
consquence de rendre le
dernier if prioritaire

begin
process (A, B)
begin
if (A = '0' and B = '0') then
Som <= '0'; Ret <= '0'; end if;
if (A = '0' and B = '1') then
Som <= '1'; Ret <= '0'; end if;
if (A = '1' and B = '0') then
Som <= '1'; Ret <= '0'; end if;
if (A = '1' and B = '1') then
Som <= '1'; Ret <= '1';
end if;
end process;
end Arch_comport;

Description comportementale
 Interprtation de If, then, elsif,

IF condition1 THEN

instructions squentielles;
ELSIF condition2 THEN
instructions squentielles;
ELSIF condition3 THEN
instructions squentielles;

ELSIF

ELSE

instructions squentielles;
END IF;
ELSIF

Description VHDL
73

74

Description comportementale
 Instruction CASE s'utilise dans un process
CASE signal IS
WHEN valeur1 => instructions squentielles ;
WHEN valeur2 => instructions squentielles ;
WHEN valeur3 => instructions squentielles ;
WHEN OTHERS => instructions squentielles ;
END CASE;

Description comportementale
LIBRARY ieee; USE ieee.std_logic_1164.all;
ENTITY combi4 IS
PORT (c :IN INTEGER RANGE 0 TO 3;
e : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
S : OUT STD_LOGIC );
END combi4;

ARCHITECTURE archi OF combi4 IS


BEGIN
PROCESS(c)
BEGIN
CASE c IS
WHEN 0 => s<= e(0);
WHEN 1 => s<= e(1);
WHEN 2 => s<= e(2);
WHEN 3 => s<= e(3);
END CASE;
END PROCESS;
END archi;

75

e(0)

e(1) mux
e(2)
e(3)

76

Description comportementale

Description comportementale

 Concurrence dans un process

 Instruction for loop

architecture Arch of Ent is


begin
Process (A, B)
begin
if (A = 1 and B = 1) then S1 <= 1;
else S1 <= 0; end if;
end process;
Process (B, C)
begin
if (B = 0) then S2 <= A;
elsif (C = 1) then S2 <= not(A);
else S2 <= D; end if;
end process;
end ;
77

Comme son nom l'indique l'instruction loop permet de


rpter une opration de manire itrative en fonction d'un
paramtre.
architecture Arch of Ent is
begin
S1 <= A and B;
S2 <= A when B = 0 else
notA
when C = 1 else
D;
end Arch;

FOR paramtre IN intervalle LOOP


instructions squentielles;
END LOOP;

Description VHDL

Description VHDL
78

13

Description comportementale
Exemple d'application de l'instruction for loop
LIBRARY ieee;USE ieee.std_logic_1164.all;
ENTITY adder4 IS
PORT (a,b : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
cin : IN STD_LOGIC; cout : OUT STD_LOGIC;
sum : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) );
END adder4 ;

ARCHITECTURE compor OF adder4 IS


signal c : STD_LOGIC_VECTOR(4 DOWNTO 0);
BEGIN
PROCESS (a,b,cin,c)
BEGIN
c(0) <= cin;
FOR i IN 0 TO 3 LOOP
sum(i) <= a(i) xor b(i) xor c(i);
c(i+1) <= (a(i) and b(i)) or (c(i) and (a(i) or b(i)));
END LOOP;
cout <= c(4);
END PROCESS;
END compor;
Description VHDL
79

Description comportementale
 Signaux, variables et constantes
Ce sont les trois objets manipuls dans une description
VHDL. Les trois objets sont ncessairement typs.
Le signal est connu dans toute l'architecture o il est dclar.
Les ports sont des signaux. Dans un process la dernire
assignation dtermine la valeur attribue au signal.
(assignation : s <= a) (initialisation par s := '0')
La variable ne peut tre utilis que dans un process o elle est
locale. Elle est mise jour instantanment.
(assignation : i := '1')
La constante peut tre utilise partout mais aucune assignation
n'est possible. Seule l'initialisation est prvue exemple :
CONSTANT PI : real := 3.1414
Description VHDL
80

Description comportementale

Description comportementale

Mauvaise utilisation d'un signal

Mauvaise utilisation d'un signal

LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_arith.all;

ENTITY mux_faux IS
PORT (a, b :IN STD_LOGIC;
e : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
S : OUT STD_LOGIC);
END mux_faux;
ARCHITECTURE archi OF mux_faux IS
signal muxval : integer;
BEGIN
PROCESS(a, b, e)

BEGIN
muxval <= 0;
if (a= '1') then
muxval <= muxval + 1; end if;
if (b= '1') then
muxval <= muxval + 2; end if;
CASE muxval IS
WHEN 0 => s<= e(0);
WHEN 1 => s<= e(1);
WHEN 2 => s<= e(2);
WHEN 3 => s<= e(3);
WHEN OTHERS => null ;
END CASE;
END PROCESS;
END archi;

Description VHDL
81

Pour muxval, il s'agit


d'une assignation multiple
dans un process. En
consquence, c'est la
dernire ligne qui dfinit
la valeur de muxval

Description VHDL
82

Description comportementale
PROCESS(a, b, e)
variable muxval : integer;
BEGIN
muxval := 0;
Correction :
if (a= '1') then
La variable tant
muxval := muxval + 1; end if ;
mise jour
if (b= '1') then
instantanment,
muxval := muxval + 2; end if ;
la description est
CASE muxval IS
WHEN 0 =>
s<= e(0);
correctement
WHEN 1 =>
s<= e(1);
interprte
WHEN 2 =>
s<= e(2);
WHEN 3 =>
s<= e(3);
WHEN others => null;
END CASE;
END PROCESS; END archi;

Erreur frquente dans les processus


Exemple : conception d'un dcodeur 3 vers 8 binaire
library IEEE;
use IEEE.std_logic_arith.all ;
use IEEE.std_logic_1164.ALL;
ENTITY dec3vers8 IS
PORT ( sel : IN BIT_VECTOR (2 DOWNTO 0);
en : IN STD_LOGIC;
Y : OUT STD_LOGIC_VECTOR (7 DOWNTO 0));
END dec3vers8;
ARCHITECTURE numero1 OF dec3vers8 IS
BEGIN

Description VHDL
83

84

14

Erreur frquente dans les processus

Erreur frquente dans les processus


PROCESS(sel, en)
BEGIN
Y <= "0000 0000";- - valeur par dfaut
IF (en='1') THEN
CASE sel IS
WHEN "000" => Y(0)<= '1';
WHEN "001" => Y(1)<= '1';
WHEN "010" => Y(2)<= '1' ;
WHEN "011" => Y(3)<= '1' ;
WHEN "100" => Y(4)<= '1' ;
WHEN "101" => Y(5)<= '1' ;
WHEN "110" => Y(6)<= '1' ;
WHEN "111" => Y(7)<= '1' ;
END CASE;
END IF;
END PROCESS;
END numero1;

PROCESS(sel, en)
BEGIN
IF (en='1') THEN
CASE sel IS
WHEN "000" => Y(0)<= '1';
WHEN "001" => Y(1)<= '1';
WHEN "010" => Y(2)<= '1' ;
WHEN "011" => Y(3)<= '1' ;
WHEN "100" => Y(4)<= '1' ;
WHEN "101" => Y(5)<= '1' ;
WHEN "110" => Y(6)<= '1' ;
WHEN "111" => Y(7)<= '1' ;
END CASE;
END IF;
END PROCESS;
END numero1;

85

86

Systmes squentiels

Bascule D avec reset

 Principes fondamentaux

 Avec Reset synchrone

Pour des raisons de reproductibilit et de robustesse par


rapport aux alas des fonctions combinatoires, seules les
fonctions squentielles synchrones sont recommandes!

 Bascule D
Process (clk)
Begin
IF clk'event AND clk='1' THEN
Q <= D;
END IF;
END Process;

L'erreur frquente
dans les processus est
d'oublier d'attribuer
une valeur par dfaut.
Dans l'exemple lorsque
en=0, alors Y n'est pas
attribue.
Le synthtiseur
affecte dans ce cas un
latch chaque sortie Y

Attribut 'event
vrai lorsque le signal
associ subit une
variation d'tat

Process (clk)
Begin
IF clk'event AND clk='1' THEN
IF reset = '0' then
Q <= '0';
ELSE
Q <= D;
END IF;
END IF;
END Process;

Systmes Squentiels

Systmes Squentiels

87

88

Bascule D avec reset

Bascule D avec Enable


 Avec Reset synchrone

Avec Reset asynchrone


Process (clk, reset)
La condition
Begin
sur le reset
IF reset = '0' THEN
est prioritaire
Q <= '0';
ELSIF clk'event AND clk='1' THEN
Q <= D;
END IF;
END Process;

Process (clk)
BEGIN
IF EN = '0' THEN
NULL ; -- Q <= Q ;
ELSIF clk'event AND clk='1' THEN
Q <= D;
END IF;
END Process;
Question : La commande Enable est-elle synchrone ou
asynchrone ?

Systmes Squentiels
89

Systmes Squentiels
90

15

Compteurs

Compteurs

 Problmes poss par les compteurs

Solution pour le problme de type :

Les compteurs sont des machines d'tat soit de MOORE soit


de MEALY. Raliser un compteur ou tout circuit
d'incrmentation se traduit par une opration d'addition du
type : Q <= Q + 1 ;
Cette expression rvle deux problmes :
- Le port de sortie Q est utilis comme entre, ce qui
n'est pas compatible avec son mode "out".
- L'incrmentation de la valeur Q du type bit_vector,
n'est pas possible avec l'oprateur arithmtique " + ".

Utiliser un convertisseur de type


exemple : CONV_STD_LOGIC_VECTOR
ENTITY adder IS
PORT (op1, op2 : IN UNSIGNED(7 DOWNTO 0);
result : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)
);
END adder;
ARCHITECTURE archi OF adder IS
BEGIN
result <= CONV_STD_LOGIC_VECTOR(op1 + op2, 8 );
END archi;

Systmes Squentiels

Systmes Squentiels

91

92

Compteurs

Machines d'tat (FSM)

ENTITY cpt3 IS

 Machine de Moore

PORT(e: IN INTEGER RANGE 255 DOWNTO 0;


h, prepn, razn : IN STD_LOGIC;
S: OUT INTEGER RANGE 0 TO 15 );
END cpt3;

Horloge

ARCHITECTURE archi OF cpt3 IS

SIGNAL test : INTEGER RANGE 0 TO 15;


BEGIN

PROCESS(razn,h,prepn)
BEGIN
IF razn = '0' THEN test<= 0;
ELSIF (h'EVENT AND h ='1') THEN
IF prepn='0' THEN test<=e;
ELSE test<=test+1; END IF;
ELSE test <= test; END IF;
END PROCESS;
S <= test;

Solution au
problme de port :
Utiliser un signal ou
une variable pour
effectuer les
oprations puis
mettre la sortie jour
la fin.

END archi;

Entres
E(t)

Circuit d'excitation X(t+1)


Calcul combinatoire
des tats FUTURS

Systmes Squentiels
94

Machines d'tat (FSM)

Type numr

 Machine de Mealy

 numration

E(t)
Entres

S(t) = F(X(t))
X(t + 1) = G[E(t), X(t)]

Systmes Squentiels

Circuit d'excitation X(t+1)


Calcul combinatoire
des tats FUTURS

Circuit S(t)
de sortie

du systme : G

93

Horloge

X(t)
D Q

Circuit S(t)
de sortie
X(t)

D Q

Cration personnalise d un type correspondant une


numration d lments explicites.
Trs utile pour identifier les tats d'une machine d'tats.
Exemple :
TYPE libelle_instruction IS (MOVE, ADD, JNE, BRS, RTS) ;
SIGNAL Instruction : libelle_instruction ;

du systme : G

S(t) = F[X(t), E(t)]


X(t + 1) = G[E(t), X(t)]
Description VHDL

Systmes Squentiels
95

96

16

Machines d'tat (FSM)

Machines d'tat (FSM)

 Description VHDL

 Description trois parties

Les FSM sont composes


de trois parties,
deux fonctions combinatoires et un registre.

Chacune de ces parties peut tre dcrite sparment ou de


manire compose avec une autre .
Les tats peuvent tre identifis explicitement l'aide
d'un type numr appropri !
Exemple :
TYPE state IS (lecture, incrment, dcode, excute) ;

ARCHITECTURE FSM3p of exemple IS


TYPE state IS (lecture, incrment, dcode, excute) ;
signal etat, etat_futur : state ;
BEGIN
Pr : process(horloge)
Horloge c
..... IF horloge'event ....
E
etat_futur
...... etat <= etat_futur ;
Pr
Pe
ps : process(etat)
..... S <= ....
pe : process(E, etat)
...... etat_futur <= ...

Systmes Squentiels

etat

Ps

Systmes Squentiels

97

98

Exemple de machine d'tat

Exemple de machine d'tat

 Commande d'essuie glace

 Commande d'essuie glace

On considre un essuie glace avec pompe de lavage. Le


maintien de la commande E active le moteur M de balayage
simultanment au moteur de pompe P. La libration de E
arrte la pompe P. Le moteur M reste activ pendant deux
cycles complet de balayage. Le systme est quip d'un
contact de fin de course f.
Reprsenter le graphe de la machine d'tat du dispositif.
Dcrire la machine en VHDL.

!E
repos
!M, !P

!F

cyc_2
M , !P

lavage
M, P E

E
F

cyc_1
M, !P

!E

!F
Systmes Squentiels
99

Exemple de machine d'tat


Type state is (repos, lavage, cyc_1, cyc_2)
signal etat, etat_f : state;
P1 : process(clk)
begin
if clk'event and clk='1' then
Registre
etat <= etat_f;
end if;
end process P1;
P2 : process(etat)
begin
if etat= repos then
M <= '0'; P <= '0';
elsif etat = lavage then
Description
M <= '1'; P <= '1';
des sorties
else
M <= '1'; P <= '0';
end if;
end process P2;
101

Systmes Squentiels
100

Exemple de machine d'tat

Systmes Squentiels

P3 : process(F, E, etat)
Circuit
begin
d'excitation
case etat is
when repos => if E='1' then
etat_f <= lavage ;
else etat_f <= etat; end if;
when lavage => if E = '0' then
etat_f <= cyc_1 ;
else etat_f <= etat; end if;
when cyc_1 => if E ='1' then
etat_f <= lavage ;
elsif F= '1' then etat_f <= cyc_2 ;
else etat_f <= etat; end if;
when cyc_2 => if E = '1' then
etat_f <= lavage ;
elsif F= '1' then etat_f <= repos ;
else etat_f <= etat; end if;
end process P3;
Systmes Squentiels
102

17

Machine d'tat

Machine d'tat

 Simplification de l'criture

Pour l'exemple cela donne :

Il est possible de regrouper les parties


combinatoires dans un processus, ce qui
allge l'criture au dtriment de la
lisibilit.

Type state is (repos, lavage, cyc_1, cyc_2)


signal etat, etat_f : state;
reg : process(clk)
begin
if clk'event and clk='1' then
etat <= etat_f;
end if;
end process reg ;

Systmes Squentiels

Systmes Squentiels

103

104

Machine d'tat

Instructions avances

P3 : process(F, E, etat)
begin
case etat is
when repos => M <= '0'; P <= '0'
if E='1' then etat_f <= lavage ;
else etat_f <= etat; end if;
when lavage => M <= '1'; P <= '1';
if E = '0' then etat_f <= cyc_1 ;
else etat_f <= etat; end if;
when cyc_1 => M <= '1'; P <= '0';
if E ='1' then etat_f <= lavage ;
elsif F= '1' then etat_f <= cyc_2 ;
else etat_f <= etat; end if;
when cyc_2 => M <= '1'; P <= '0';
if E = '1' then etat_f <= lavage ;
elsif F= '1' then etat_f <= repos ;
else etat_f <= etat; end if;
end process P3;

 Generate
Etats de sorties

Generate est une instruction qui simplifie de manire trs


sensible l'criture de descriptions structurelles complexes.
L'instruction permet de rpliquer automatiquement des
composants en incrmentation les indices de bus.

Etat futur

__generate_label :
FOR __index_variable IN _plage GENERATE
instruction;
_instruction;
END GENERATE;
Description VHDL

Systmes Squentiels

105

106

Generate : exemple

Generate : exemple suite

 ralisation d'un registre dcalage

Begin
(d, clk : In std_logic;
q : out std_logic);
z(0) <= a ;
instance : For i In 0 to 3 generate
Dx : D_basc port MAP( z(i), clk, z(i+1));
End Generate;
b <= z(4) ;
End gen_decal;

Use work.std_logic_1164.all;
Entity decalage is
port (a, clk : in std_logic;
b : out std_logic);
end decalage;
Architecture gen_decal of decalage is
component D_basc
port (d, clk : In std_logic;
q : out std_logic);
end component;
signal z : std_logic_vector(0 to 4)

D_basc(0)

Z(0)

D_basc(1)

Z(1)

D_basc(2)

Z(2)

Z(4)

D Q

D Q

D Q

D Q

clk

clk

clk

clk

clk
Description VHDL

107

D_basc(3)

Z(3)

Description VHDL
108

18

Instructions avances

Generic : exemple

 Generic
Il est possible de rajouter une dclaration de GENERIC
correspondant des paramtres. Ces paramtres pourront,
par la suite, tre modifis lors de l'utilisation de la
description en temps que composant.
Generic est utilis pour deux applications principales :
dfinition de paramtres de dlai
Paramtrage de la taille des bus
GENERIC(_parameter_name : string := __default_value;
_parameter_name : integer:= __default_value);

Dans ces premiers exemples TP est une constante


de type time. L'attribut after modlise le dlai
pour la fonction ralise.
Entity ET is
GENERIC (TP : time := 0 ns);
port (E1, E2 : in bit; S1 : out bit);
end ET;

Entity OU is
GENERIC (TP : time := 20 ns);
port (E1, E2 : in bit; S1 : out bit);
end OU;

architecture ET of ET is
begin
S1 <= E1 and E2 after TP;
end ET;

architecture OU of OU is
begin
S1 <= E1 or E2 after TP;
end OU;

Description VHDL

Description VHDL

109

110

Generic suite de l'exemple


Entity ET_OU is
port (A, B : in bit; X, Y : out bit);
end ET_OU;
architecture ET_OU of ET_OU is
component OU
generic (TP : time);
port (E1, E2 : in bit; S1 : out bit);
end component;
component ET
generic (TP : time);
port (E1, E2 : in bit; S1 : out bit);
end component;
for U1 : OU use entity work.OU(OU);
for U2 : ET use entity work.ET(ET);

Packages

begin
U1 : OU generic map ( TP => 5 ns )
port map (A, B, X);
U2 : ET generic map ( TP => 15 ns )
port map (A, B, Y);
end ET_OU;

 regroupement de donnes, variables, fonctions, procdures,

etc., que l'on souhaite pouvoir utiliser ou appeler partir


d'architectures. Au sein d'un projet contenant plusieurs
entits, les packages permettent d utiliser des ressources
(constantes, variables particulires, fonctions...) identiques.
 Deux units pour les paquetages :
La dclaration de paquetage
Le corps de paquetage qui contient les valeurs dclares et la
description des sous- programmes (procedure et fonction)
PACKAGE __package_name IS
-- Type Subtype Declaration
-- Constant Declaration
-- Signal Declaration
-- Component Declaration
-- procedure, fonction Declaration
END __package_name;

Description VHDL

Description VHDL

111

112

Exemple d application du
paquetage
Dclaration de la
constante de type time
Initialisation de la
constante 27ns
Use work.exemple.all
entity A is
.......;
end A;
architecture arch_X of A is
begin
......;
S <= E after delai ;
......;
end arch_X;

Package exemple is
constant delai : time;
end exemple ;
package body ex_bod of exemple is
constant delai : time := 27ns;
end ex_bod;

Utilisation
de la mme
constante
de temps
dans deux
entits
A et B
Description VHDL
113

Non support par


certains
compilateurs

Use work.exemple.all
entity B is
.......;
end B;
architecture arch_X of B is
begin
......;
Sb <= Ex after delai ;
......;
end arch_X;

Conception avance
 Fonction
Le langage VHDL permet l'utilisation et la cration de
fonctions ou de procdures que l'on peut appeler partir
d'une architecture. A la diffrence de la procdure la
fonction renvoie une valeur unique.
FUNCTION nom de la fonction ( liste des paramtres de la
fonction avec leur type ) RETURN type du paramtre de retour IS
zone de dclaration des variables ;
BEGIN
...........;

instructions squentielles ;
...........;

RETURN nom de la variable de retour ou valeur de retour;


END;
Description VHDL
114

19

Conception avance

Conception avance
Exemple 2 : fonction au sein d'un package

Exemple 1 :
FUNCTION bool_vers_bit (X : boolean) RETURN bit IS
BEGIN
if X then
RETURN '1';
else
RETURN '0';
end if;
END;

Description VHDL

Package outil is
function xor3 (a,b,c : bit) return bit ;
end outil;
package body outil is
function xor3 (a,b,c : bit) return bit is
begin
return (a xor b xor c) ;
end xor3 ; end outil;
library work ; use work.outil.all ;
entity exemple2 is port (a,b,c : in bit; sum : out bit);
end exemple2
architecture RTL of exemple2 is
begin
sum <= xor3(a, b, c) ;
Description VHDL
end RTL;

115

116

Conception avance

Macrofonctions combinatoires

 Procdure

 Dcodeur binaire

Les procdures diffrent des fonctions par le fait qu'elles


acceptent des paramtres dont la direction peut tre IN,
INOUT et OUT. Une procdure ne possde donc pas un
ensemble de paramtres d'entres et un paramtre de
sortie mais un ensemble de paramtres d'entres-sorties
Exemple :
PROCEDURE RS (signal A, B : IN bit; signal Q, Qb : INOUT bit) IS
BEGIN
Q <= not (A or Qb);
Qb <= not (B or Q);
END;
Description VHDL

Fonction qui convertit des donnes codes en binaire en


bits pondrs dcimal. Ainsi toutes les valeurs sur n bits
d'entre sont reprsentes sur 2n sorties.
Exercice : raliser la description VHDL d'un dcodeur 2
vers 4.
LIBRARY ieee; USE ieee.std_logic_1164.all;
ENTITY decodeur IS
PORT ( a :IN STD_LOGIC_VECTOR(1 DOWNTO 0);
S : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) );
END decodeur;

Macrofonctions combinatoires

ARCHITECTURE archi OF decodeur IS


BEGIN
s <= "0001" when a = "00" else
"0010" when a = "01" else
"0100" when a = "10" else
"1000" when a = "11" ;
END archi;

117

118

Macrofonctions

Macrofonctions

 Exercice
Raliser un dcodeur BCD-7segments
 library IEEE;
 use IEEE.std_logic_arith.all;
 use IEEE.std_logic_1164.ALL;
 ENTITY dec7seg IS


PORT ( n : IN INTEGER RANGE 0 TO 15;

 segments : OUT STD_LOGIC_VECTOR (6 DOWNTO 0));


 END dec7seg;

Macrofonctions combinatoires
119

ARCHITECTURE numero1 OF dec7seg IS


BEGIN
PROCESS(n)
BEGIN
CASE n IS
WHEN 0 =>segments <= "1111110";
WHEN 1 =>segments <= "0110000" ;
WHEN 2 =>segments <= "1101101" ;
WHEN 3 =>segments <= "1111001" ;
WHEN 4 =>segments <= "0110011" ;
WHEN 5 =>segments <= "1011011" ;
WHEN 6 =>segments <= "1011111" ;
WHEN 7 =>segments <= "1110000" ;
WHEN 8 =>segments <= "1111111";
WHEN 9 =>segments <= "1111011" ;
WHEN others =>segments <= "0000001" ;
END CASE;
END PROCESS;
END numero1;
Macrofonctions combinatoires
120

20

Encodeur

Encodeur

L'encodeur binaire ralise la fonction inverse du dcodeur. Les


2n entres sont pondres dcimal. L'entre active de plus
fort poids est code en binaire sur n bits.
Raliser un encodeur 4 entres en utilisant when else

Raliser un encodeur 4 entres en utilisant If then else

LIBRARY ieee; USE ieee.std_logic_1164.all;


ENTITY encodeur1 IS
PORT ( a :IN STD_LOGIC_VECTOR(3 DOWNTO 0);
S : OUT STD_LOGIC_VECTOR(1 DOWNTO 0));
END encodeur1;

ARCHITECTURE archi OF encodeur1 IS


BEGIN
s <= "11" when a(3) = '1' else
"10" when a(2) = '1' else
"01" when a(1) = '1' else
"00" when a(0) = '1' ;
END archi;

Macrofonctions combinatoires

LIBRARY ieee; USE ieee.std_logic_1164.all;


ENTITY encodeur2 IS
PORT (a :IN STD_LOGIC_VECTOR(3 DOWNTO 0);
S : OUT STD_LOGIC_VECTOR(1 DOWNTO 0));
END encodeur2;

ARCHITECTURE archi OF encodeur2 IS


BEGIN
PROCESS (a)
BEGIN
IF a(3) = '1' THEN s<= "11" ;
ELSIF a(2) = '1' THEN s<= "10";
ELSIF a(1) = '1' THEN s<= "01";
ELSE s<= "00";
END IF;
END PROCESS ;
END archi;

121

Macrofonctions combinatoires

122

Encodeur

Multiplexeur

Variante de l'encodeur utilisant trois instructions IF


LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_arith.all;
ENTITY encodeur3 IS
PORT (a :IN STD_LOGIC_VECTOR(3 DOWNTO 0);
S : OUT STD_LOGIC_VECTOR(1 DOWNTO 0));
END encodeur3;

ARCHITECTURE archi OF encodeur3 IS


BEGIN
PROCESS (a)
Assignation multiple
BEGIN
qui n'est possible
S<= "00";
que parce qu'elle
IF a(1) = '1' THEN s<= "01"; END IF;
est faite dans un
IF a(2) = '1' THEN s<= "10"; END IF;
process : la
IF a(3) = '1' THEN s<= "11"; END IF;
dernire est
END PROCESS ;
END archi;
conserve

Un multiplexeur permet d'aiguiller une donne parmi N


d'entre vers une seule sortie. (cf exemple ch. assignation
conditionnelle).
Exercice : dcrire un mux n bits d'entre en utilisant une
affectation de type :
S <= e(sel)

Macrofonctions combinatoires

Macrofonctions combinatoires

123

124

Multiplexeur

Macrofonction de la bibliothque

LIBRARY ieee; USE ieee.std_logic_1164.all;


ENTITY mux_n IS
GENERIC(n : integer:= 4);
PORT (e: IN bit_vector(n-1 downto 0) ;
sel : IN integer range (2**n-1) downto 0 ;
S : OUT bit);
END mux_n;
ARCHITECTURE RTL OF mux_n IS
BEGIN
S <= e(sel);
END RTL;

 Utilisation des macrofonctions LPM (Altera)


LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_arith.all;
LIBRARY lpm;
USE lpm.lpm_components.ALL;

Dclaration des
bibliothques

ENTITY cpt2 IS
PORT(
e : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
h, prepn, razn : IN STD_LOGIC;
s : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
END cpt2;
Macrofonctions combinatoires

125

Systmes Squentiels
126

21

Macrofonction de la bibliothque

Conversion de type

ARCHITECTURE archi OF cpt2 IS


SIGNAL raz, prep : STD_LOGIC;

 Ncessit
Instanciation de
la macrofonction

BEGIN
mon_compteur : lpm_counter
GENERIC MAP ( LPM_WIDTH => 4,
LPM_DIRECTION => "UP")

PORT MAP (data => e(3 DOWNTO 0), clock => h,


sload => prep, aclr => raz, q => s(3 DOWNTO 0));

Dclaration
des
paramtres

Certains oprateurs peuvent tre prvus uniquement sur


un type fix (ex : integer). L'utilisation de cet oprateur
sur d'autres types (ex : std_logic_vector) ncessite une
conversion de type.
Ces convertisseurs sont parfois spcifiques au package
utilis. LIBRARY ieee;
USE ieee.std_logic_1164.all; USE ieee.std_logic_arith.all;

Connexion des
ports

ENTITY adder IS

PORT (op1, op2 : IN UNSIGNED(7 DOWNTO 0);


result : OUT INTEGER);

razn <= NOT raz;


prepn <= NOT prep;
END archi;

END adder;
ARCHITECTURE maxpld OF adder IS
BEGIN

result <= CONV_INTEGER(op1 + op2);


Systmes Squentiels

Description VHDL

END maxpld;

127

128

Bibliothques standard

Oprateurs

 Bibliothques du standard IEEE

 + , - , *, **, / valides sur entiers et

IEEE.std_logic_1164 : contient les types STD_logic et


std_logic_vector ainsi que les oprateurs logiques :
and, nand, or, nor, xor, xnor, not
IEEE.std_logic_arith : contient un groupe d'oprateurs
arithmtiques : "+", "-", "abs", "*", "<", ">", "<=", ">=", "/=",
"=", shr, shl, conv_integer etc..
std_logic_signed : contient des oprateurs sur nombres
entiers signs.
std_logic_unsigned : contient des oprateurs sur
nombres entiers non signs.

flottants
 & : concatnation ex : a et b sur 2bits

c<=a&b : sur 4 bits


 notation des bases :
base#nombre# (la base est crite en dcimal)
exemple : 16#A8# = 10#24# = 2#11000#

Description VHDL
129

Description VHDL
130

22