Vous êtes sur la page 1sur 99

École Nationale des Sciences de l’Informatique

Module : Introduction aux systèmes embarqués


Niveau : II2 – Tronc commun

AU : 2016/2017
I-STRUCTURE DES CIRCUITS LOGIQUES
PROGRAMMABLES:

Toute fonction logique de n variables peut se


mettre sous une forme de somme de produits ou
de produit de sommes.

Imed abdesslem 23/04/2018 11:54 2


On peut donc utiliser une structure comportant:

Un ensemble d’opérateurs ET organisé sous forme


d’une matrice qui génère les produits des variables
d’entrée, éventuellement complémentées.

Un ensemble d’opérateur OU, appelé matrice OU,


qui somme les produits.

Imed abdesslem 23/04/2018 11:54 3


a b c
Programmable
connections

P1 Matrice OU

P2

P3

P4

Matrice ET
f1 f2
Imed abdesslem 23/04/2018 11:54 4
?
II-CLASSIFICATION DES RESEAUX LOGIQUES
COMBINATOIRES :

Une classification est adoptée en fonction de la


structure de chaque matrice on distingue :

II-1-Les PLE ou PROM :(Programmable Logic


Elément, ou Programmable Read Only Mémoires) :

Imed abdesslem 23/04/2018 11:54 5


Ces réseaux Logiques disposent :

D’une matrice ET fixée et complète, c’est-à-dire


que le nombre de termes produits est égal à 2n s’il
y a n entrées (5 ≤ n ≤ 16) ; autrement dit, la
matrice ET a la structure d’un décodeur binaire à
n bits.

D’une matrice OU programmable.

Imed abdesslem 23/04/2018 11:54 6


Imed abdesslem 23/04/2018 11:54 7
En conséquent, une fonction f est réalisée en
programmant sa table de vérité c’est-à-dire en
mettant en mémoire la valeur de f pour
l’ensemble des combinaisons des entrées.
Imed abdesslem 23/04/2018 11:54 8
II-2-Les PAL : (Programmable Array Logic) :

La structure de base d’un circuit PAL est opposée à


celle d’une PROM. Il dispose :

D’une matrice d’opérateur ET programmable


(jusqu’à 20 entrées) dont le nombre de termes
produit reste relativement réduit (n<120).

D’une matrice OU figée.

Imed abdesslem 23/04/2018 11:54 9


Yannick Herve, Wilfried Uhring, Jihad
Zallat 23/04/2018 11:54 10
a b c d

Imed abdesslem 23/04/2018 11:54 11


Yannick Herve, Wilfried Uhring, Jihad
Zallat 23/04/2018 11:54 12
Yannick Herve, Wilfried Uhring, Jihad
Zallat 23/04/2018 11:54 13
Yannick Herve, Wilfried Uhring, Jihad
Zallat 23/04/2018 11:54 14
Imed abdesslem 23/04/2018 11:54 15
II-3-Les PLA ou FPLA : (Field Programmable
Logic Array) :

Dans ce cas les matrices ET et OU sont


programmables indépendamment, ce qui offre
une très grande souplesse. Les FPLA disposent
également d’un circuit de sortie programmable.

Imed abdesslem 23/04/2018 11:54 16


Circuit de sortie : on adjoint parfois un circuit de
sortie à la matrice OU. Ce circuit de sortie peut
être soit :
Un opérateur OU exclusif dont l’une des entrées
est employée comme commande d’inversion.

Imed abdesslem 23/04/2018 11:54 17


Un élément à trois état ou C représente une
commande de mise en haute impédance de la
sortie.

Imed abdesslem 23/04/2018 11:54 18


Yannick Herve, Wilfried Uhring, Jihad
Zallat 23/04/2018 11:54 19
Application:

1°) Réalisation d’un générateur de parité 3 bits.

2°) Réalisation d’un compteur décompteur


module 5 programmable en utilisant un PAL 16
R6 (e=1 compteur)
(e=0 décompteur)

Imed abdesslem 23/04/2018 11:54 20


II-4-Les CPLD (Complex Programmable Logic
Devices)
Un CPLD est composé d'un certain nombre de
PALs, ou macro cellule. Ces macro cellules sont
regroupées en blocs logiques, qui sont reliés via
une matrice de connexion programmable .
Les CPLD commerciales contiennent de 2 à 100
blocs et chaque bloc se compose de 16 macro
cellules

Imed abdesslem 23/04/2018 11:54 21


Imed abdesslem 23/04/2018 11:54 22
Imed abdesslem 23/04/2018 11:54 23
 Qu’est ce qu’un FPGA

 Constituants d’un FPGA

 Flot de conception

 Langage de description VHDL

 Kit de développement Cyclone® III EP3C25


FPGA

24
FPGA (Field Programmable Gate Arrays) :
c’est un circuit intégré qui contient des blocs logiques
configurables (programmables), ainsi que des
interconnexions configurables entre ces blocs.

La configuration du circuit, c'est-à-dire la programmation


de sa fonction, se fait sur place (Field Programmable),
sans envoi chez un fabricant.

25
Voici la structure interne d'un FPGA de type matrice symétrique. Il s'agit de
l'architecture que l'on retrouve dans les FPGA de la série XC4000 de Xilinx.

Un réseau de blocs logiques


programmables (Configurable
Logic Block -CLB), chaque
bloc pouvant réaliser des
fonctions combinatoires et
séquentiels

Un réseau d’interconnexions
programmables entre les blocs

Des blocs spéciaux d’entrée et


de sortie avec le monde
extérieur (Input/Output Block –
IOB).
La programmation se fait par création/destruction
de connections sur la structure prédéfinie:

Fuse
Antifuse Programmable (configurable) une seule fois

(E)EPROM Nombre de configuration limité ( x.103 à x.


106)

SRAM Configuration réalisée à chaque mise sous


tension

27
28
Fusible : destruction d’un fusible par passage d’un
courant supérieur à celui de l’alimentation
Antifusible : en appliquant une tension importante
à une zone isolante entre deux zones semi-
conductrices fortement dopées. Cette technique
rend la zone isolante conductrice. Ceci permet
une intégration plus grande

29
Technologie SRAM
Technologie CMOS standard
Portes de transmission ou multiplexeurs commandés par
des cellules SRAM
Les mémoires SRAM permettent de configurer les
interconnexions et de programmer les cellules
Programmation illimitée
Programmation à chaque mise en tension

30
Tableau
a b c y LUT programmable
Fonction 0 0 0 1
LUT
0 0 1 0 1
a 0
0 1 0 1
b 1
y
0 1 1 1 1
c MUX y
1
1 0 0 1
y  a b  c
0
1 0 1 0 1
1
1 1 0 1 a,b,c
1 1 1 1

SRAM

23/04/2018 11:54 31
Qu’est ce qu’un FPGA

Constituants d’un FPGA

Flot de conception

Langage de description VHDL

Kit de développement Cyclone® III EP3C25


FPGA

32
Constituants d’un FPGA :
Les blocks logiques programmables (CLB, Configurable
Logic Block)
Des blocks d’E/S (IOB)
Des matrices d’interconnexions programmables
(Programmable switching matrices, PSM)
Des horloges
I/O

I/O

I/O
Interconnection switches

Logic block

33
I/O
◦ Les CLBs sont constitués de :
 LUT (Look Up Table)
 bascules D (Flip-Flop) Choix configurable
 multiplexeurs par bitstream

0
Entrées
D
4-LUT Q 1 Sortie
Tableau
a b c y LUT programmable
Fonction 0 0 0 1
LUT
0 0 1 0 1
a 0
0 1 0 1
b 1
y
0 1 1 1 1
c MUX y
1
1 0 0 1
y  a b  c
0
1 0 1 0 1
1
1 1 0 1 a,b,c
1 1 1 1

23/04/2018 11:54 35
Ce sont de petits éléments de mémorisation, qui reflètent la
table de vérité d’une fonction logique.

Look Up Table Réalisation d’un LUT

36
Bit de
configuration

Multiplexeur

37
Le bitstream décrit la configuration de tous les
éléments configurables du circuit

Les blocks logiques


programmables
38
C1
S0 S1 S2
A2 A1 A0
B2 B1 B0 0 C0

C0 C1 C2

39
CLB CLB

Matrice de connexions
Programmables
(Programmable Switch Matrix)

CLB

40
Les blocs d’entrée/sortie (IOBs) contrôlent le
flot de données entre les broches du FPGA et
la logique interne. Les I/O sont:
Bidirectionnelles (entrée ou sortie)
3 états (haute impédance)
A retards programmables

41
Le signal d'horloge d'un FPGA vient généralement
de l'extérieur. Il y a des entrées spécialisées pour
recevoir les signaux d'horloge et les distribuer
ensuite à l'intérieur du circuit

42
La distribution du signal d'horloge se fait par le biais d'un arbre, minimisant
ainsi les retards d'arrivée du signal aux flip-flops les plus éloignés (skew)

43
Qu’est ce qu’un FPGA

Constituants d’un FPGA

Flot de conception

Langage de description VHDL

Kit de développement Cyclone® III EP3C25


FPGA

44
Tous les fabricants de FPGA proposent
des outils de CAO qui permettent de
réaliser tout le flot de conception de la
synthèse à la configuration:

 Pour Xilinx c’est ISE Foundation


 Pour Altera c’est Quartus ou MAX+II

45
Les outils de CAO permettent une entrée
Schématique, syntaxique(VHDL)…

46
47
48
Qu’est ce qu’un FPGA

Constituants d’un FPGA

Flot de conception

Langage de description VHDL

Kit de développement Cyclone® III EP3C25


FPGA

49
23/04/2018 11:54 50
Language de description du hardware:
VHDL = VHSIC Hardware Description Langage
VHSIC (Very High Speed Integrated Circuit)

Objectif: fournir un environnement de développement


hardware complet (de la spécification à la réalisation en
passant par la simulation)
rendre les réalisations indépendantes des
technologies et des systèmes-hôtes (portabilité).

23/04/2018 11:54 51
Standardisé en 1987 (IEEE1076), complété en 1993
(IEEE1076, IEEE1164):
 Langage unique pour
1. la spécification, la documentation
2. la vérification , la simulation
3. la synthèse : le langage sert d'entrée à des outils
intelligents qui permettent la réalisation de circuits
numériques sur des (ASICs) ou des circuits logiques
programmables (PALs, PLDs, CPLDs, FPGAs).
 Indépendant des technologies, indépendant des
systèmes-hôtes

23/04/2018 11:54 52
Modélisation des systèmes numériques
 Langage de haut niveau
Synthèse des système numérique
Cibles de synthèse
 FPGAs & CPLDs
 ASICs

53
Entrée
Diagrammes
schématique
Entrée syntaxique d’états
langages:
- VHDL

23/04/2018 11:54 54
Entrée syntaxique
Entrée Diagrammes
langages:
schématique d’états
- VHDL
VHDL VHDL VHDL

TESTBENCH
Vérification des erreurs Simulation
de schéma et de syntaxe comportementale

SYNTHETISEUR
SYNTHETISEURS CONNUS: Il convertit en fonction du ciruit cible (CPLD ou
- FPGA Expres (Synosys). FPGA…) le projet en portes logiques et bascules
- EXEMPLAR (Exemplar).
- SYNPLICITY (Synplicity).
de bases. Simulation après
De plus on peut lui spécifier des contraintes synthèse
technologiques, par exemple la vitesse de
fonctionnement TESTBENCH

Outils de placement et Optimisation


routage interne au circuit. Cet
outil est propre à chaque Placement / routage Simulation
fabriquant dans le circuit choisi temporelle
TESTBENCH

La programmation du circuit
peut se faire soit:
- En utilisant un
programmateur. 23/04/2018 11:54 55
Une description VHDL est composée de 3 parties indissociables à savoir :
- Les bibliothèques.
- L’Entité (ENTITY), elle définit les entrées et sorties.
- L’Architecture (ARCHITECTURE), elle contient les instructions VHDL
permettant de réaliser le fonctionnement attendu.

Exemple : Un décodeur 1 parmi 4. library ieee; Déclaration des


Use ieee.std_logic_1164.all; bibliothèques

entity DECOD1_4 is
Déclaration de l’entité du Port (IN0, IN1: in std_logic;
décodeur D0, D1, D2, D3: out std_logic);
end DECOD1_4;

architecture DESCRIPTION of DECOD1_4 is


begin
D0 <= (not(IN1) and not(IN0));
D1 <= (not(IN1) and IN0);
D2 <= (IN1 and not(IN0));
D3 <= (IN1 and IN0);
end DESCRIPTION; Déclaration de
l’architecture du
décodeur
23/04/2018 11:54 56
Contiennent:
 les définitions des types de signaux
électroniques.
 des fonctions et sous programmes
permettant de réaliser des opérations
arithmétiques et logiques,...
Déclaration des bibliothèques.
Library ieee;
Use ieee.std_logic_1164.all;
Use ieee.numeric_std.all;
Use ieee.std_logic_unsigned.all;
-- cette dernière bibliothèque est souvent utilisée pour l’écriture
de compteurs

23/04/2018 11:54 57
◦ Entité :C’est la description de l’interface du Circuit
avec le monde extérieur celle-ci est constituée par la
liste des signaux, leur sens et leur nature etc.
◦ Architecture :C’est la description de la réalisation du
circuit qui peut contenir quatre formes de descriptions:
 Comportementale (description du comportement du circuit
(table de verité))
 Temporelle ou flot de données (réaliser a partir des équations
booléennes )
 Structurelle (réaliser a partir des composants prédéfinis)
 Mixte (réaliser a partir des composants prédéfinis et des
équations booléennes)
58
A
S
B
Additionneur
1 Bit
Cin Cout

Modèle comportemental A B Cin S Cou


t
0 0 0 0 0
0 0 1 1 0
Sans référence à des
structures ou des équations 0 1 0 1 0
0 1 1 0 1
Comment faire? 1 0 0 1 0
1 0 1 0 1
1 1 0 0 1
1 1 1 1 1
59
architecture comportementale of Additionneur is
begin
process(A,B,Cin)
begin
if (A ='0' and B='0' and Cin='0' ) then Sum<='0';Cout<='0';

elsif (A ='0' and B='0' and Cin='1' ) then Sum<='1';Cout<='0';

elsif (A ='0' and B='1' and Cin='0' ) then Sum<='1';Cout<='0';

elsif (A ='0' and B='1' and Cin='1' ) then Sum<='0';Cout<='1';

elsif (A ='1' and B='0' and Cin='0' ) then Sum<='1';Cout<='0';

elsif (A ='1' and B='0' and Cin='1' ) then Sum<='0';Cout<='1';

elsif (A ='1' and B='1' and Cin='0' ) then Sum<='0';Cout<='1';

else Sum<='1';Cout<='1';
end if;
end process; ;
end comportementale

60
library IEEE;
A use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
MUX2-1

use IEEE.STD_LOGIC_UNSIGNED.ALL;
S entity Mux21_comportementale is
B Port ( A : in STD_LOGIC;
B : in STD_LOGIC;
Sel : in STD_LOGIC;
S : out STD_LOGIC);
end Mux21_comportementale;

architecture Behavioral of Mux21_comportementale is

Sel begin
S <= A WHEN Sel='0' ELSE B WHEN Sel='1' ELSE ‘-';

end Behavioral;

61
A
équations booléennes
S
B
Additionneur
Comment faire?
1 Bit
Cin Cout

A B Cin S Cou
t
0 0 0 0 0 AB 00 01 11 10 AB 00 01 11 10
Cin Cin
0 0 1 1 0
0 0 1 0 1 0 0 0 1 0
S
0 1 0 1 0
0 1 1 0 1 1 1 0 1 0 1 0 1 1 1
1 0 0 1 0
S = A  B  Cin Cout=(A.B) + Cin (AB)
1 0 1 0 1
1 1 0 0 1
1 1 1 1 1
62
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity Additionneur_FD is
Port ( A : in STD_LOGIC;
B : in STD_LOGIC;
Cin : in STD_LOGIC;
S : out STD_LOGIC;
Cout : out STD_LOGIC);
end Additionneur_FD;

architecture Behavioral of Additionneur_FD is

Begin

S<= A xor B xor Cin;


Cout<= (A and B) or (Cin and (A xor B));

end Behavioral;

63
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
A use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
MUX2-1

S entity Mux21_FD is
Port ( A : in STD_LOGIC;
B B : in STD_LOGIC;
Sel : in STD_LOGIC;
S : out STD_LOGIC);
end Mux21_FD;

architecture Behavioral of Mux21_FD is

Sel begin
S<= (not(sel)and A) OR (sel and B) ;
S= not(Sel).A + Sel.B
end Behavioral;

64
Elle est composée de 2 parties :
La déclaration des composants utilisés
L’instanciation des composants et leur interconnexion

On peut utiliser une connexion explicite par nom

Chaque instance a sa propre étiquette unique

65
VHDL supporte et encourage la conception modulaire

COMPONENT 2
COMPONENT 1

Les modules de niveaux inférieurs sont des COMPONENTs

66
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
A
ENTITY half_adder IS
S PORT (a,b: IN std_logic;
B Additionneur s,Cout: OUT std_logic);
1 Bit END half_adder;
Ci
Cout ARCHITECTURE beh OF half_adder IS
n begin
s <= a XOR b;
Cout<= a AND b;
end beh;

library IEEE;
In1 use IEEE.STD_LOGIC_1164.ALL;
A Cout use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
In2 HalfAdder carry
ENTITY OR_2 IS
B S A Cout PORT(a,b: IN std_logic; c: OUT
std_logic);
END OR_2;
HalfAdder
Cin Sum
ARCHITECTURE beh OF OR_2 IS
B S
Begin
c <= a OR b;
end beh;
67
déclaration des library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
A composants
use IEEE.STD_LOGIC_ARITH.ALL;
utilisés use IEEE.STD_LOGIC_UNSIGNED.ALL;
S
B Additionneur ENTITY full_adder IS
1 Bit PORT(in1,in2,cin: IN std_logic;
Cin sum,carry: OUT std_logic);
Cout
END full_adder;
ARCHITECTURE structural OF full_adder is

COMPONENT half_adder
PORT(a,b: IN std_logic;
s,Cout: OUT std_logic);
END COMPONENT; L’instanciation
In1
des composants
A Cout S2 COMPONENT OR_2 et leur
PORT(a,b: IN std_logic;
interconnexion
In2 HalfAdder carry c : OUT std_logic);
END COMPONENT;
S1 S3
B S A Cout SIGNAL s1,s2,s3 : std_logic;
BEGIN
HalfAdder H1 : half_adder PORT MAP(in1,in2, s1, s2);
Cin Sum H2 : half_adder PORT MAP(s1,cin, sum,s3);
B S O1 : or_2 PORT MAP(s2,s3, carry);
END structural;

68
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
A use IEEE.STD_LOGIC_UNSIGNED.ALL;

S Entity add1 is
B Additionneur Port ( A : in STD_LOGIC;
B : in STD_LOGIC;
1 Bit Cin : in STD_LOGIC;
Cin
Cout Cin : out STD_LOGIC;
S : out STD_LOGIC);
end add1;
A B
ARCHITECTURE structure OF add1 IS
COMPONENT et PORT(e1,e2:IN std_logic; s:OUT
std_logic);
a1 END COMPONENT;
COMPONENT ou PORT(e1,e2:IN std_logic;s:OUT

Cout
std_logic);
f1 END COMPONENT;
o1 x1 COMPONENT oux PORT(e:IN std_logic; s:OUT
f2 std_logic);
f3 END COMPONENT;
a2 SIGNAL f1,f2,f3: std_logic;
r1 BEGIN
Cin a1: et
a2: et
PORT MAP (A,B,f1);
PORT MAP (f3,Cin,f2);
x2
Cette description o1: ou PORT MAP (f1,f2,Cout);
x1: oux PORT MAP (A,B,f3);
structurelle utilise x2: oux PORT MAP (f3,Cin,S);
des portes et, ou et END structure;
oux. S 69
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
A use IEEE.STD_LOGIC_UNSIGNED.ALL;
MUX2-1
entity Mux21_FD is
S Port ( A : in STD_LOGIC;
B : in STD_LOGIC;
B sel : in STD_LOGIC;
S : out STD_LOGIC);
end Mux21_FD;

ARCHITECTURE structure OF mux2 IS


-- déclarations de modèles de composants
COMPONENT inv
PORT(e:IN std_logic; s:OUT std_logic);
Sel END COMPONENT;
COMPONENT et
PORT(e1,e2:IN std_logic;s:OUT std_logic);
sel bs
END COMPONENT;
COMPONENT ou
a2 PORT(e1,e2:IN std_logic; s:OUT std_logic);
B S END COMPONENT;
o1 -- déclarations de signaux internes (fils)
n1 nsel SIGNAL nsel,as,bs: std_logic;
-- instanciation et cablage des composants (schéma)
A a1
as
BEGIN
n1: inv PORT MAP (sel,nsel);
a1: et PORT MAP (nsel,A,as);
a2: et PORT MAP (sel,B,bs);
o1: ou PORT MAP (bs,as,S);
END structure; 70
La déclaration de l’entité se fait à l’aide de
l’instruction entity. Elle permet de définir le NOM
de la description VHDL ainsi que les entrées et
sorties utilisées.
Syntaxe:
entity NOM_DE_L_ENTITE is
port ( Description des signaux d’entrées /sorties …);
end NOM_DE_L_ENTITE;

Exemple :
entity Compteur is
port (
CLOCK : in std_logic;
RESET : in std_logic;
Q : out std_logic_vector(1 downto 0) );
end Compteur; 23/04/2018 11:54 71
L’instruction port définit les entrées et les
sorties .
Syntaxe: port( NOM_DU_SIGNAL : sens et type;

Exemple:
CLOCK: in std_logic;
BUS : out std_logic_vector (7 downto 0);

23/04/2018 11:54 72
- in : pour un signal en entrée.
- out : pour un signal en sortie.
- inout : pour un signal en entrée sortie
- buffer : pour un signal en sortie mais utilisé comme
entrée dans la description

Out
In
Entrée Inout
schématique
Buffer

23/04/2018 11:54 73
Le TYPE utilisé pour les signaux d’entrées / sorties est :
- le std_logic pour un signal.
- le std_logic_vector pour un bus composé de plusieurs signaux.

Par exemple un bus bidirectionnel de 5 bits s’écrira :


S : inout std_logic_vector (4 downto 0) ;
avec
S(4) correspond au MSB et
S(0) correspond au LSB.

La valeur que peut prendre un signal de type std_logic est :


- ‘0’ ou ‘L’ : pour un niveau bas.
- ‘1’ ou ‘H’ : pour un niveau haut.
- ‘Z’ : pour état haute impédance.
- ‘-‘ : Quelconque, c’est à dire n’importe quelle valeur.

23/04/2018 11:54 74
La déclaration de l’architecture se fait à l’aide
de l’instruction architecture. Elle permet de
préciser le NOM de l’architecture et de
l’entité correspondante.

23/04/2018 11:54 75
Qu’est ce que le mode « concurrent » ? Pour une
description VHDL toutes les instructions sont
évaluées et affectent les signaux de sortie en même
temps. L’ordre dans lequel elles sont écrites n’a aucune
importance. En effet la description génère des
structures électroniques, c’est la grande différence
entre une description VHDL et un langage
informatique classique.

23/04/2018 11:54 76
Exemple : Pour le décodeur 1 parmi 4, l’ordre dans lequel
seront écrites les instructions n’a aucune importance.

architecture DESCRIPTION of DECOD1_4 is L’architecture ci dessous est équivalente :


begin architecture DESCRIPTION of DECOD1_4 is
D0 <= (not(IN1) and not(IN0)); begin
D1 <= (not(IN1) and IN0); D1 <= (not(IN1) and IN0);
D2 <= (IN1 and not(IN0)); D2 <= (IN1 and not(IN0));
D3 <= (IN1 and IN0); D0 <= (not(IN1) AND not(IN0));
end DESCRIPTION; D3 <= (IN1 AND IN0);
end DESCRIPTION;

23/04/2018 11:54 77
L’affectation simple : <=

permet de modifier l’état d’un signal en fonction


d’autres signaux et/ou d’autres opérateurs.

Exemple :

S1 <= E2 and E1 ;

78
23/04/2018 11:54
Les valeurs numériques que l’on peut affecter à un signal sont les
suivantes :
‘1’ ou ‘H’ pour un niveau haut avec un signal de 1 bit.
‘0’ ou ‘L’ pour un niveau bas avec un signal de 1 bit.
‘Z’ pour un état haute impédance avec un signal de 1 bit.
‘-’ pour un état quelconque, c’est à dire ‘0’ ou ‘1’. Cette
valeur est très utilisée avec les instructions : when … else et
with …. Select ….

Pour les signaux composés de plusieurs bits on utilise les


guillemets
" … " , voir les exemples ci dessous :

Les bases numériques utilisées pour les bus peuvent être :


BINAIRE, exemple : BUS <= "1001" ; -- BUS = 9 en décimal
HEXA, exemple : BUS <= X"9" ; -- BUS = 9 en décimal
OCTAL, exemple : BUS <= O"11" ; -- BUS = 9 en décimal

23/04/2018 11:54 79
Exemple 3

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 'Z'; -- S4 = 1 si E1=1
sinon S4-- prend --la valeur haute impédance
BUS1 <= "1000"; -- BUS1 = "1000"
BUS2 <= E1 & E2 & "10"; -- BUS2 = E1 & E2 & 10
BUS3 <= x"A"; -- valeur en HEXA -> BUS3 = 10(déc)
end DESCRIPTION;

23/04/2018 11:54 80
Opérateur de concaténation : &.
Cet opérateur permet de joindre des signaux entre eux .

Exemple 1:

-- Soit A et B de type 3 bits et S1 de type 8 bits


-- A = "001" et B ="110"
S1 <= A & B & "01" ;
-- S1 prendra la valeur suivante après cette affectation
-- S1 = "001110 01"

Valeur de A Valeur de B
"001" "110"

23/04/2018 11:54 81
Opérateurs logiques : Opérateur VHDL
ET AND

Exemple 2: NON ET NAND

OU OR

NON OU NOR
S1 <= A sll 2 ; -- S1 = A décalé de 2 bits à
gauche. OU EXCLUSIF XOR

S2 <= A rol 3 ; -- S2 = A avec une rotation COÏNCIDENCE XNOR

de 3 bits à gauche NON NOT

S3 <= not (R); DECALAGE A GAUCHE SLL

DECALAGE A DROITE SRL

ROTATION A GAUCHE ROL


ROTATION A DROITE ROR

23/04/2018 11:54 82
Décalage à droite :

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


S1 <= ‘0’ & A(7 downto 1); -- décalage d’un bit à droite
S1 <= "000" & A(7 downto 3); -- décalage de trois bits à droite

Décalage à gauche :

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


S1 <= A(6 downto 0) & ‘0’; -- décalage d’un bit à gauche
S1 <= A(4 downto 0) & "000"; -- décalage de trois bits à gauche

23/04/2018 11:54 83
Opérateurs arithmétiques.

Opérateur VHDL Remarque N°1 : Pour pouvoir utiliser


ADDITION + les opérateurs arithmétiques il faut
SOUSTRACTION - rajouter les bibliothèques suivantes au
début du fichier VHDL:
MULTIPLICATION *
Use ieee.numeric_std.all ;
DIVISION / Use ieee.std_logic_arith.all ;

S1 <= A – 3 ; -- S1 = A – 3
-- On soustrait 3 à la valeur de l’entrée / signal A
S1 <= S1 + 1 ; -- On incrémente de 1 le signal S1

23/04/2018 11:54 84
Remarque N°2 : Attention l’utilisation de ces
opérateurs avec des signaux comportant un
nombre de bits important peut générer de
grandes structures électroniques.

S1 <= A * B ;-- S1 = A multiplié par B : A et B sont codés sur 4 bits


S2 <= A / B ;-- S2 = A divisé par B : A et B sont codés sur 4 bits

23/04/2018 11:54 85
Opérateurs relationnels
Ils permettent de modifier l’état d’un signal ou de signaux suivant le
résultat d’un test ou d’une condition. En logique combinatoire ils sont
souvent utilisés avec les instructions :
- when … else …
- with …. Select ….

Opérateur VHDL
Egal =
Non égal /=
Inférieur <
Inférieur ou égal <=
Supérieur >
Supérieur ou égal >=

23/04/2018 11:54 86
4.2.1) Affectation conditionnelle :

Cette instruction modifie l’état d’un signal suivant le résultat d’une


condition logique entre un ou des signaux, valeurs, constantes.

SIGNAL <= expression when condition


[else expression when condition]
[else expression];

Exemple 1: Exemple 2:
-- S1 prend la valeur de E2 quand E1=’1’ -- Structure évoluée d’un
sinon S1 prend la valeur ‘0’ multiplexeur 4 vers 1
S1 <= E2 when ( E1= ‘1’) else ‘0’; S2 <= E1 when (SEL="00" ) else
E2 when (SEL="01" ) else
Schéma correspondant : E3 when (SEL="10" ) else
E4 when (SEL="11" )
else ‘0’;

23/04/2018 11:54 87
4.2.2) Affectation sélective :
Cette instruction permet d’affecter différentes valeurs à un
signal, selon les valeurs prises par un signal dit de sélection.

with SIGNAL_DE_SELECTION select


SIGNAL <= expression when valeur_de_selection,
[expression when valeur_de_selection,]
[expression when others];

Remarque: l’instruction [expression when others] n’est


pas obligatoire mais fortement conseillée, elle permet de
définir la valeur du SIGNAL dans le cas où la condition
n’est pas remplie.

23/04/2018 11:54 88
Exemple 1:
-- Multiplexeur 4 vers 1
with SEL select
S2 <= E1 when "00",
E2 when "01",
E3 when "10",
E4 when "11",
‘0' when others;
Remarque: when others est nécessaire car il faut
toujours définir les autres cas du signal de sélection pour
prendre en compte toutes les valeurs possibles de celui-ci.

23/04/2018 11:54 89
Exemple 2: Affectation sélective avec les autres cas
forcés à ‘0’.
Library ieee;
Use ieee.std_logic_1164.all;
entity TABLE1 is
port (
E1,E2 : in std_logic;
SEL : in std_logic_vector(1 downto 0);
Schéma correspondant après synthèse:
S2 : out std_logic);
end TABLE1;
architecture DESCRIPTION of TABLE1 is
begin
with SEL select
S2 <= E1 when "00",
E2 when "01",
'0' when others;
-- Pour les autres cas de SEL S2
-- prendra la valeur 0 logique
end DESCRIPTION;

23/04/2018 11:54 90
Exemple 3: Affectation sélective avec
les autres cas forcés à ‘1’.
Library ieee;
Use ieee.std_logic_1164.all;
entity TABLE1 is
port (
E1,E2 : in std_logic; Schéma correspondant après synthèse:
SEL : in std_logic_vector(1 downto 0);
S2 : out std_logic);
end TABLE1;
architecture DESCRIPTION of TABLE1 is
begin
with SEL select
S2 <= E1 when "00",
E2 when "01",
‘1' when others;
-- Pour les autres cas de SEL S2
-- prendra la valeur 1 logique
end DESCRIPTION;

23/04/2018 11:54 91
Exemple 4: Affectation sélective avec
les autres cas forcés à ‘-’.
Library ieee;
Use ieee.std_logic_1164.all;
entity TABLE1 is
port (
E1,E2 : in std_logic; Schéma correspondant après synthèse:
SEL : in std_logic_vector(1 downto 0);
S2 : out std_logic);
end TABLE1;
architecture DESCRIPTION of TABLE1 is
begin
with SEL select
S2 <= E1 when "00",
E2 when "01",
‘-' when others;
-- Pour les autres cas de SEL S2
-- prendra la valeur quelconque
end DESCRIPTION;

23/04/2018 11:54 92
Définition d’un PROCESS.

Un process est une partie de la description d’un circuit dans


laquelle les instructions sont exécutées séquentiellement.
L’exécution d’un process est déclenchée par un ou des
changements d’états de signaux logiques. Ces signaux doivent
être dans la liste de sensibilité lors de la déclaration du
process.
[Nom_du_process :] process (Liste_de_sensibilité_nom_des_signaux)
Begin
-- instructions du process
end process [Nom_du_process] ;

Remarque: Le nom du process entre crochet est facultatif, mais il


peut être très utile pour repérer un process parmi d’autres lors de
phases de mise au point ou de simulations.

23/04/2018 11:54 93
5.3) Exemples de process :
Exemple N°1 :
Déclaration d’une bascule D.

Library ieee;
Use ieee.std_logic_1164.all;
entity BASCULE_D is
port (
D,CLK : in std_logic;
S : out std_logic);
end BASCULE_D;
architecture DESCRIPTION of BASCULE_D is
begin
PRO_BASCULE_D : process (CLK)
begin
if (CLK'event and CLK ='1') then
S <= D;
end if;
end process PRO_BASCULE_D;
end DESCRIPTION;

Schéma correspondant après synthèse:

23/04/2018 11:54 94
Commentaires
Seul le signal CLK fait partie de la liste de sensibilité. D’après
les règles de fonctionnement énoncées précédemment, seul un
changement d’état du signal CLK va déclencher le process et par
conséquent évaluer les instructions de celui-ci.

L’instruction if (CLK'event and CLK='1') then permet de


détecter un front montant du signal CLK. La détection de front
est réalisée par l’attribut event appliqué à l’horloge CLK. Si on
veut un déclenchement sur un front descendant, il faut écrire
l’instruction suivante : if (CLK'event and CLK='0').

Les bibliothèques IEEE possèdent deux instructions permettant de


détecter les fronts montants ) rising_edge(CLK) ou descendants
falling_edge(CLK).

- Si la condition est remplie alors le signal de sortie S sera


affecté avec la valeur du signal d’entrée D.

23/04/2018 11:54 95
Exemple N°1 :
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_unsigned.all;

entity compteur1 is
port (H:in std_logic;
Q :out std_logic_vector(3 downto 0));
end compteur1;

architecture ARCH_COMPT_4 of compteur1 is


signal X :std_logic_vector(3 downto 0);
begin
process(H)
begin
if(H'event and H='1') then X <= X + 1;
end if;
end process;
Q <= X;
end ARCH_COMPT_4;0
23/04/2018 11:54 96
23/04/2018 11:54 97
Clk
X X X
f2
X
X X
f1
X X X

A B C D

98
99