Académique Documents
Professionnel Documents
Culture Documents
04 Modélisation Des Systèmes Numériques
04 Modélisation Des Systèmes Numériques
Spécialité : INFOTRONIQUE
&
IMAGERIE ET APPARAILLAGE BIOMEDICALE
V.Tourtchine et M.Izouin
MODELISATION DES SYSTEMES NUMERIQUES
DANS L'ENVIRONNEMENT Xilinx ISE 13.2 (VHDL)
BOUMERDES - 2012
-0-
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
Introduction Générale.............................................................................. 4
1
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
3
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
Introduction générale
VHDL est l’acronyme de VHSIC HDL (Very High Speed Integrated Circuit
Hardware Description Language), c’est un langage de description matérielle qui a
été créé dans les années 1980 à la demande du département de la défense
américaine (DOD).
De nos jours, le langage VHDL devient un outil indispensable pour la conception des
systèmes électroniques intégrés, il est proposé par la grande majorité des sociétés
de développement et la commercialisation d’ASIC et d’FPGA telle que la société
américaine Xilinx.
Toutefois, les concepts VHDL ne sont pas toujours simples à comprendre, cette
brochure introduit les principaux concepts de ce langage à travers d’exemples
concrets.
Les descriptions VHDL des circuits ont été développées avec l’outil Xilinx ISE 13.2.
Dans le premier chapitre, on présente les concepts de base du langage VHDL, les
objets et types de données seront présentés dans le deuxième chapitre, ainsi que
les opérations applicables sur ces derniers, on verra les différents styles de
description d’une architecture dans le troisième chapitre, on modélisera des circuits
séquentiels dans le quatrième chapitre et enfin on traite les machines à états finis
(FSM) dans le cinquième chapitre.
Un guide pratique d’utilisation de l’outil Xilinx ISE 13.2 est donné en annexe.
4
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
Chapitre 1
Les concepts de base du langage VHDL.
Prenons comme exemple le circuit intégré 7400 (Figure 1.1(a)). Ce dernier est constitué de
quatre portes logiques NAND à deux entrées (Figure 1.1(b)).
Figure 1.1 Circuit intégré 7400 (Vue externe (a) et vue interne (b)).
La description du circuit intégré 7400 en langage VHDL est donnée par le listing 1.1
5
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
- Les deux premières lignes définissent les bibliothèques et les paquetages dont nous avons
besoin pour la conception de notre circuit. Dans notre code, on fait appel au paquetage
std_logic_1164 qui se trouve dans la bibliothèque IEEE.
Les bibliothèques et les paquetages nous permettent d’utiliser les types et les opérateurs
disponibles en VHDL.
Pour le TYPE du port, il faut savoir que le langage VHDL est un langage typé, c’est-à-dire
que chaque objet manipulé doit avoir un type de données.
Dans le listing 1.1, le type du port utilisé est STD_LOGIC. Il est défini dans le paquetage
STD_LOGIC_1164, et possède neuf états :
Etat Définition
0 Niveau logique 0, forçage fort
1 Niveau logique 1, forçage fort
Z Haute impédance
U Niveau non initialisé
X Niveau inconnu, forçage fort
- Niveau quelconque (Don’t care)
L Niveau logique 0, forçage faible
H Niveau logique 1, forçage faible
W Niveau inconnu, forçage faible
6
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
Exemple :
A : in std_logic_vector ( 7 downto 0 ) ;
Ou bien :
A : in std_logic_vector (0 to 7);
La différence entre les deux expressions est l’indice du MSB et du LSB. Dans la première
expression, l’indice du MSB est A(7), celui du LSB est A(0). Dans la deuxième expression,
l’indice du MSB est A(0), celui du LSB est A(7).
Remarque :
La description principale d’une architecture comprend toujours les deux mots réservés
‘’BEGIN’’ et ‘’END’’ (ligne 11 et 16 successivement). Les expressions des opérations du
circuit se trouvent entre elles. Ces expressions sont des instructions qui s’exécutent en
concurrence contrairement à un langage informatique comme le langageC, où les
instructions s’exécutent séquentiellement.
7
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
A B EG PG PP EG A.B A.B
0 0 1 0 0
0 1 0 0 1 PG A.B
1 0 0 1 0
1 1 1 0 0 PP A.B
Simulation :
A B Ri S Rout
0 0 0 0 0
0 0 1 1 0
S A B Ri
0 1 0 1 0
0 1 1 0 1 Rout A.B A.Ri B.Ri
1 0 0 1 0
1 0 1 0 1
1 1 0 0 1
1 1 1 1 1
10
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
Simulation :
Les signaux intermédiaires correspondent aux connexions qui se trouvent à l’intérieur d’un
circuit. Pour bien comprendre la notion et l’utilisation de ces signaux, prenons l’exemple de
notre additionneur complet 1 bit de la figure 1.3. On peut le concevoir à partir de deux
demi-additionneurs et une porte logique OR (figure 1.4).
11
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
Listing 1.4 Description VHDL d’un additionneur complet 1 bit en utilisant les
signaux
intermédi
aires.
choix_1 ELSE
valeur_expressio
n_n ;
12
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
Exemple :
Listing 1.5 Description VHDL d’un multiplexeur 2 vers 1 avec l’assignation conditionnelle.
Simulation :
13
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
Exemple :
Remarque :
Dans l’assignation conditionnelle des signaux, il n’y a pas de point virgule après le ELSE.
Dans l’assignation de selection des signaux, il faut faire attention à ne pas oublier la virgule à
la fin de chaque expression de choix, et ne pas oublier de spécifier l’expression à exécuter si
aucun choix n’a été trouvé (WHEN OTHERS).
14
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
Ces types de données peuvent représenter un fil de connexion dans un circuit, ou bien un
ensemble de fils de connexion.
La correspondance entre les types de données est très stricte, il n’est pas possible par
exemple d’affecter directement la valeur d’un type de données entier (INTEGER) à un type
de donnéesSTD_LOGIC_VECTOR, pour y remedier, des fonctions de conversion de types
bien définis sont disponilbes.
Les types de données dans le langage VHDL ainsi que les fonctions de conversion sont
abordés dans le prochain chapitre (Objets et types de données).
15
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
Chapitre 2
Objets et types de données.
Les trois types de base utilisés lors d’une description VHDL sont :
- Les signaux
- Les variables
- Les constants
Chaque objet déclaré possède un type de données spécifique ainsi qu’un ensemble de
valeurs possibles.
Les valeurs que peut prendre un objet dépendent de la définition du type utilisé pour cet
objet, par exemple un objet de type STD_LOGIC possède 9 valeurs (états) possibles ; ‘0’,
‘1’, ‘U’, ‘X’, ‘Z’, ‘W’, ‘L’, ‘H’, ‘-‘, tandis qu’un objet de type bit n’en possède que deux; ‘0’ et ‘1’.
Chaque objet est spécifié par un identificateur, ce dernier doit respecter les conventions
d’écriture suivantes :
Note :
- Le langage VHDL ne respecte pas la casse c’est-à-dire qu’il ne fait pas la différence
entre minuscules et majuscules.
- A l’intérieur d’un programme VHDL, un commentaire est introduit par deux tirets ; - -
- On ne peut pas utiliser certains mots comme identificateur car ils sont réservés à la
syntaxe VHDL, cette liste de mots réservés est donnée en annexe.
Les signaux sont des objets qui sont utilisés pour connecter des éléments concurrents
(comme par exemple, lors des instanciations des composants, les processus, et les
assignations concurrentes), de la même façon que les fils sont utilisés pour connecter des
composants dans un circuit électronique ou dans un schéma.
Un signal peut être déclaré globalement dans un package externe, ou localement à l’intérieur
d’une architecture ou d’un bloc.
16
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
La déclaration d’un signal se fait avec le mot réservé SIGNAL comme suit :
Dans l’exemple ci-dessus, le signal est nommé « SIG » et est déclaré à l’intérieur de
l’architecture « RTL », et est du type standard STD_LOGIC.
Si plusieurs signaux du même type sont nécessaires dans une conception, on peut les
spécifier dans une seule déclaration comme suit :
Au lieu d’écrire seize fois l’état ‘0’ (Pire si on avait un bus de 128 Mbit) :
On a utilisé un agrégat qui est un moyen d’indiquer la valeur de chaque élément d’un type
composé.
17
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
Les signaux peuvent être aussi utilisés pour décrire des expressions logiques complexes.
Les objets de types variables et constants sont traités dans le prochain chapitre (Les
différents styles de description d’une architecture).
18
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
19
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
Remarque :
Généralement les tableaux à deux dimensions (matrices) ne sont pas supportés par les
outils de synthèse, mais ils sont utiles pour décrire les tests de stimuli, les éléments de
mémoires, ou autre donnée qui requièrent une forme de tableaux à deux dimensions.
Explication :
« A » est un tableau à une dimension, de taille 8 (7 downto 0) dont les éléments sont tous
de type std_logic(figure 2.1).
Figure 2.1
b. type B is array (0 to 3) of A;
« B » est un tableau à une dimension de taille 4 (0 to 3) dont les éléments sont de type
« A », c’est-à-dire des tableaux de taille 8 (7 downto 0) dont les éléments sont de type
std_logic(figure 2.2).
Figure 2.2
20
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
« C » est un tableau à une dimension de taille 4 (3 downto 0) dont les éléments sont de type
std_logic_vector de taille 8 (7 downto 0) (figure 2.3).
Figure 2.3
« D » est un tableau à deux dimensions de taille 4x8 (0 to 3, 7 downto 0) dont les éléments
sont de type std_logic (figure 2.4).
Figure 2.4
21
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
Exemple d’assignations :
L’emplacement n°0du signal x reçoit le contenu l’emplacement n°2 qui se trouve dans
l’emplacement n°1du signal y (figure 2.5).
Figure 2.5
L’article ci-dessus dont le nom est « MON_ARTICLE » est constitué de trois champs
(CLOCK, DATA, X) (figure 2.6).
Figure 2.6
22
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
Les valeurs de chaque type de données se trouvent dans un intervalle défini, par exemple
l’intervalle de type de données entier (INTEGER) est [-2147483647, +2147483647].
Le langage VHDL nous permet de spécifier un sous-ensemble de valeurs d’un type, par
exemple la déclaration suivante crée un objet de type entier qui ne peut avoir que des
valeurs positives allant de 0 à 255 :
On peut déclarer un sous-type d’un type de données, par exemple la déclaration ci-dessous
crée un sous-type (SHORT) du type scalaire entier (INTEGER) avec un intervalle limité :
Le langage VHDL nous permet de faire plusieurs opérations sur les objets, suivant leurs
types et le type du résultat de l’opération.
Les opérations logiques AND, OR, NAND, NOR, XOR, NXOR sont utilisées pour décrire des
opérations booléennes, ou pour effectuer des opérations au niveau des bits.
Le résultat d’une opération relationnelle est toujours une valeur booléenne TRUE ou FALSE.
23
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
Les opérations d’addition peuvent être utilisées pour décrire des fonctions arithmétiques ou
des opérations de concaténations.
Les opérations de multiplication peuvent être utilisées pour décrire des fonctions
arithmétiques ou de types numériques.
Les opérations de signes sont utilisées pour spécifier le signe (positif ou négatif).
Les opérations d’exponentiation, ou de valeur absolue peuvent être appliquées à des objets
de type numérique.
Un attribut est une caractéristique du VHDL qui permet d’extraire des informations
supplémentaires à propos d’un type de données ou d’un signal.
Nous rencontrerons des attributs prédéfinis tout au long de cette brochure et nous les
présenterons au fur et à mesure de leur nécessité, néanmoins nous citerons ci-dessous les
principaux attributs prédéfinis les plus utilisés.
Attribut Description
Il nous informe sur la position de l’élément X par un nombre
Attribut POS(X) entier.
25
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
Chapitre 3
Les différents styles de descriptions d’une architecture
En VHDL, il existe plusieurs styles descriptions d’une architecture qui diffèrent les unes des
autres.
Il existe aussi des styles de descriptions mixtes, ces derniers combinent les trois styles de
descriptions citées auparavant, et enfin une description très importante pour la simulation qui
est l’architecture de test.
C’est une description qui décrit la façon dont les données transitent à l’intérieur d’un circuit.
Les codes VHDL vus précédemment étaient des descriptions de type flot de données.
Elle se base sur des expressions booléennes (les opérateurs logiques) des fonctions de
sorties en fonction des entrées.
Prenons comme exemple un multiplexeur 4 vers 1 (Figure 3.1) et décrivons-le avec le style
de description flot de données (Listing 3.1).
26
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
Listing 3.1 Description VHDL avec le style de description flot de données d’un multiplexeur
4 vers 1.
Simulation :
Appelée aussi description procédurale, elle décrit le comportement d’un circuit selon des
conditions (IF), des cas (CASE, WHILE), et des boucles (FOR).
C’est une description qui comporte des processus (PROCESS) qui s’exécutent en parallèles.
Les instructions à l’intérieur d’un processus s’exécutent séquentiellement.
Il faut bien faire la différence entre les modes d’exécutions parallèles et séquentielles.
3.2.1 Le PROCESS :
On peut le considérer comme une boite noire où il y’a des instructions à l’intérieur qui
s’exécutentséquentiellement (Figure 3.2).
Ces PROCESS comportent une grande variété de construction, mais il faut faire attention
quand on les utilise car beaucoup d’entre eux n’ont pas une homologie matérielleclaire, et
conduisent souvent à des implémentations complexes, ou ne peuvent pas être synthétisés
dans le cas où ils sont mal codés.
Cette liste contient les noms des signaux qui activent ce PROCESS.
Exemple :
L’instruction dans le PROCESSne s’exécute que lorsqu’il y’a un changement d’état dans le
signal A ou B.
Ainsi, à chaque changement d’état du signal A ou B, l’instruction S <= A and B est
exécutée. 28
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
On a vu qu’en VHDL il y’a trois types d’objet ; les signaux, les variables et les constantes.
Une variable est un objet auquel on peut affecter, à tout moment, la valeur qu’on désire, elle
ne peut être déclarée qu’à l’intérieur d’un PROCESS.
Une constante permet de paramétrer une valeur non modifiable lors de l’exécution de la
description, elle peut être déclarée dans un PROCESS (constante locale), ou en dehors de
celui-ci (constante globale).
Dans le code ci-dessus, la constante de la ligne 11 est une constante globale, déclarée en
dehors du PROCESS, contrairement à la ligne 15, où elle est locale au PROCESS.
29
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
La condition est vraie quand la valeur du signal « signal_x » est à l’état logique ‘1’, et elle
est fausse dans le cas contraire.
Quand la condition est vraie, les instructions entre « if » et « end if » sont exécutées.
Dans notre exemple, le signale « y » recevra le niveau logique ‘0’, si la valeur du signal
« signal_x » vaudra le niveau logique ‘1’, dans le cas contraire les instructions entre « if »
et « end if » ne seront pas exécutées.
Exemple 2 :
Dans cet exemple, il y’a un signal nommé « s » qui dépend de la valeur du if (a > 5) then
signal nommé « a ».
s <= ‘1’;
Les tests se font séquentiellement.
elsif (a < 3 then) then
Le signal « s »recevra le niveau logique ‘1’ si la valeur du signal « a » sera
s <= ‘0’;
supérieure à 5, si cette dernière sera inférieure à 3, alors le signal « s »
else
recevra le niveau logique‘0’.
s <= ‘z’;
Si par contre, aucune des conditions précédentes ne seront satisfaites alors
end if;
lesignal « s » recevra l’état de la haute impédance.
Remarque :
30
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
Exemple pratique :
On étudie les mêmes circuits vus précédemment, pour qu’on puisse faire la différence entre
les différents styles de descriptions d’une architecture en VHDL.
Simulation :
31
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
Cette description débute avec le mot réservé « case » suivi when choix_3 => instruction_3;
L’instruction entre « case » et « is », renvoie une valeur qui when others => instruction_n;
correspond à un des choix qui se trouvent dans les déclarations « WHEN » et « OTHERS ».
Important :
La description avec l’instruction case doit obligatoirement avoir le choix « others » à la fin, si
toutes les valeurs de l’expression ne sont pas énumérées.
Exemple :
On donne dans le listing 3.3 une autre architecture de l’entité mux_4v1,décrit avec la
description « case ».
En VHDL, les boucles sont utilisés quand il y’a répétition d’une opération. Les répétitions
peuvent être itératives (for), conditionnelles (while), et infinie (loop). On étudie dans ce
chapitre les 2 premières boucles.
32
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
instructions_séquentielles ;
end loop;
La boucle forest basée sur un indice, et répète les instructions séquentielle pour un nombre
fixe d’itérations (intervalle_boucle).
Exemple :
L’utilisation de la boucle for est montré par un exemple simple : description d’un circuit xor
de 4 bits (listing3.4).
Listing 3.4Description VHDL d’uncircuit numérique xor de 4 bits décrit avec la boucle
« for ».
Commentaire :
L’indice prends toujours la valeur qui est à gauche dans l’intervalle d’itération, dans notre
exemple, l’indice« I » vaudra 3 dans la première itération, 2 dans la deuxième itération, 1
dans la troisième itération, et enfin 0 dans la quatrième itération.
33
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
instructions_séquentielles ;
end loop;
La boucle while est une variante de la boucle for, mis à part que l’incrémentation de l’indice
de la boucle while se fait tant que la condition booléenne associée est vraie.
Exemple :
L’utilisation de la boucle while est démontré par le même exemple vu avec la boucle for :
description d’un circuit xor de 4 bits (listing 3.5).
Listing 3.5Description VHDL d’un circuit numérique xor de 4 bits décrit avec la boucle
« while ».
Commentaire :
variable I : integer := 0 ;
L’instruction S(I) <= A(I) xor B(I) ;va s’exécuter tant que la condition sera vrai (c’est à dire
tant que la variable I sera strictement inférieure à 5).
34
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
Cet additionneur est composé de deux demi-additionneurs et une porte logique OR (figure
3.3).
Les deux demi-additionneurs et la porte logique OR peuvent être considérés comme des
blocs.
Chaque bloc est appelé « component » (composant), et est une instance du modèle.
Chaque bloc doit être décrit séparément (c’est-à-dire avoir son entité et l’architecture
associée) (listing 3.6 et listing 3.7).
Nous avons besoin des signaux intermédiaires pour décrire l’assemblage des instances
utilisées.
3.3.1 Instanciation :
36
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
L’instanciation par position consiste à interconnecter pour chaque instance, les signaux
connectés à ses broches exactement selon l’ordre choisi dans la déclaration « component »
(listing 3.9).
Listing 3.9 Description structurelle d’un additionneur complet 1 bit avec instanciation par
position.
L’instanciation par nom consiste à interconnecter pour chaque instance, les signaux
connectés à ses broches sans respecter l’ordre choisi dans la déclaration « component »
(listing 3.10).
Il faut cependant utiliser le symbole « => » pour la correspondance entre les broches de
l’instance et le signal auquel elle est connectée.
37
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
Listing 3.10 Description structurelle d’un additionneur complet 1 bit avec instanciation par
nom.
L’instanciation mixte permet d’utiliser les instanciations par position et par nom en même
temps, mais dans ce cas-là, l’instruction « port map » autorise une association par position
pour commencer, ensuite une association par nom pour finir.
Listing 3.11 Description structurelle d’un additionneur complet 1 bit avec instanciation mixte
38
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
Chapitre 4 (Partie 1)
La modélisation des circuits séquentiels
4.1 Introduction :
Dans ce chapitre, nous allons d’abord décrire en VHDL ces bascules, puis on modélisera
des circuits séquentiels complexes.
Nous rappelons que dans les circuits séquentiels, les sorties ne dépendent pas que des
entrées, mais aussi de la valeur de l’état de sortie précédente.
Le modèle général d’un circuit séquentiel est montré dans la figure 4.1.
Comme on peut le constater, un circuit séquentiel est composé d’un circuit combinatoire et
d’un élément de mémoire (bascules).
Le circuit combinatoire reçoit deux signaux d’entrées ; un signal primaire (régi par
l’environnement du circuit) et un signal secondaire (régi par l’élément de mémoire).
La partie combinatoire du circuit séquentiel possède deux sorties ; une sortie primaire qui
contrôle les opérations, et une sortie secondaire utilisée pour la spécification de l’état qui
sera assumé par la mémoire.
Les variables de sortie secondaire sont appelées variables d’excitation et dépendent du type
de la bascule utilisée.
39
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
Dans les circuits synchrones, l’état de la variable de sortie change à des instants discrets du
temps, ce dernier est sous le contrôle d’une pulsation synchrone appelée horloge.
Dans les circuits séquentiels synchrones, les changements de l’état de la variable de sortie
se font lors des transitions de l’horloge.
Ces transitions sont des fronts montants (de ‘0’ à ‘1’) ou des fronts descendants (de ‘1’ à ‘0’)
(figure 4.2).
En VHDL, la fonction des fronts d’une horloge (nommée par exemple CLK) est :
Dans les circuits séquentiels asynchrones, les changements de l’état de la variable de sortie
peuvent changer à des instants irréguliers.
Le modèle vu dans la Figure 4.1 montre bien que l’unité mémoire est la partie essentielle
d’un circuit séquentiel.
40
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
(a) (b)
Figure 4.3 (a) LATCH R-S formé avec des portes logiques NOR et (b) LATCH R-S formé
avec des portes logiques NAND.
Le LATCH R-S a un très grand inconvénient, c’est son état indéterminé (état interdit). Dans
le cas où le LATCH est formé avec des portes logiques NOR (figure 4.3 – (a)), l’état
indéterminé arrive quand les entrées R et S sont à ‘1’.
Dans le cas où le LATCH est formé avec des portes logiques NAND (figure 4.3 – (b)), l’état
indéterminé arrive quand les entrées R et S sont à ‘0’.
R S Q(t) Q (t+1)
0 0 Q Q
0 1 1 0
1 0 0 1
1 1 Etat indéterminé Etat indéterminé
Figure 3.4Symbole logique d’un LATCH R-S
R S Q(t) Q (t+1)
0 0 Etat indéterminé Etat indéterminé
0 1 1 0
1 0 0 1
1 1 Q Q Figure 3.5Symbole logique d’un LATCH R-S
(à base de NAND).
41
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
C’est un LATCH R-S avec une troisième entrée qui sert d’activation (figure 4.7).
Table de vérité :
H R S Q(t) Q (t+1)
0 0 0 Q Q
0 0 1 Q Q
0 1 0 Q Q
0 1 1 Q Q
1 0 0 Q Q
1 0 1 1 0
1 1 0 0 1
1 1 1 Etat indéterminé Etat indéterminé
Remarque :
On a supposé que l’état indéterminé arrive lorsque les signaux d’entrées R et S sont à ‘1’.
43
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
4.3.3 LATCH D :
Un LATCH R-S peut être converti en un autre LATCH, connu sous le nom de LATCH D, en
ajoutant un inverseur (Figure 4.7).
H D Q(t+1) Q (t+1)
0 - Q Q
1 0 0 1
1 1 1 0
La figure 4.7 montre un LATCH D construit à partir d’un LATCH R-S à base de porte
logique NAND.
Comme on peut le voir sur la table de vérité du LATCH D, la sortie Q suit l’entrée D si
l’entrée H = ‘1’. Si l’entrée H est à ‘0’, la sortie Q garde l’état précédent.
L’avantage du LATCH D par rapport au LATCH R-S, c’est qu’il n’y a pas une combinaison
qui produira un état indéterminé.
45
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
4.4.1 Flip-Flop D :
Remarque :
Lorsque les deux entrées « Reset » et « Set » sont à l’état logique ‘0’, une priorité doit être
conçue soit pour « Reset », soit pour « SET ».
46
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
47
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
4.4.2Flip-Flop J-K :
Le Flip-Flip J-K a les fonctions similaires du LATCH R-S, avec l’entrée J qui est équivalente
à l’entrée S (mise à ‘1’), et l’entrée K qui est équivalente à l’entrée R (remise à ‘0’).
Contrairement au LATCH R-S, le Flip-Flop J-K ne possède pas des combinaisons d’entrée
qui donneront un état indéterminé.
Remarque :
J 1
Q Q
K 1
48
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
49
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
4.4.3 Flip-Flop T:
Connu aussi sous le nom de « trigger flip-flop », le flip-flip T possède une seule entrée de
données.
Le symbole logique d’un flip-flip T (actif sur front montant) est montré dans la figure 4.14.
Lorsque le flip-flop T détecte un front montant sur l’horloge Clk et que T = ‘1’, la sortie
prend la valeur inverse de l’état précédent.
51
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
Chapitre 4 (Partie 2)
La modélisation des circuits séquentiels complexes
Les compteurs et les registres sont des circuits logiques séquentiels, ils ont une architecture
similaire, c’est-à-dire qu’ils comprennent des bascules mises en cascade, reliées ou non
avec un système logique combinatoire.
Dans cette deuxième partie du chapitre 4, on va étudier plusieurs types de compteurs, ainsi
que les registres.
4.5.1 Compteurs :
Plusieurs types de compteurs existent, suivant l’application, ils peuvent être synchrones ou
asynchrones, compter ou décompter.
La figure 4.14 représente un schéma général d’un compteur asynchrone de n bits, formé à
partir de bascules JK actives sur front descendant.
52
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
Noter que l’horloge CLK n’est appliquée qu’au premier Flip-Flop (FF0) qui représente le bit le
moins significatif (LSB) du compteur.
La seconde bascule (FF1), est pilotée par le signal de sortie Q de la première bascule (FF0).
Par conséquent, les changements d’états des deux bascules n’arrivent jamais en même
temps.
Diagramme de temps :
La figure 4.16 illustre les changements d’états des Flip-Flops en fonction de l’horloge.
Les entrées (J et K) des deux bascules sont mises à l’état logique ‘1’, et on suppose que
l’état initial de chaque bascule est à l’état logique ‘0’.
53
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
On voit dans la figure 4.16 qu’un front descendant du signal d’horloge (CLK) change l’état
de sortie Q0 de la première bascule (FF0), tandis qu’il n’y a aucun changement dans la
deuxième bascule, cette dernière (FF1) change d’état lorsqu’elle détecte un front descendant
de la première bascule (FF0).
Notre compteur est composé de deux Flip-Flop JK actives sur front descendant, donc on
commence par décrire un Flip-Flop JK actif sur front descendant (listing 4.7) sans prendre
en compte le signal RESET et SET (comme on la fait dans le listing 4.5), car ils n’y figurent
pas dans la figure 4.15.
La description VHDL du compteur de la figure 4.15 est donnée par le listing 4.8.
Les séquences d’états d’un décompteur 3 bitssont données par le tableau ci-dessous, le
schéma de ce compteur est donné par la figure 4.17.
55
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
Diagramme de temps :
La figure 4.18 illustre les changements d’états des Flip-Flops en fonction de l’horloge.
Les entrées (J et K) des deux bascules sont mises à l’état logique ‘1’, et on suppose que
l’état initial de chaque bascule est à l’état logique ‘0’.
On voit dans la figure 4.18 qu’un front descendant du signal d’horloge (CLK) change l’état
de sortie Q0 de la première bascule (FF0), tandis qu’il n’y a aucun changement dans les
deux autres bascules.
La bascule FF1 change d’état lorsqu’elle détecte un front descendant de la première bascule
(FF0).
La bascule FF2 change d’état lorsqu’elle détecte un front descendant de la bascule (FF1).
57
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
Dans les diagrammes de temps qu’on a vus ultérieurement, le temps de propagation des
signaux n’était pas pris en considération pour la compréhension du fonctionnement des
compteurs.
D’abord, l’effet de l’horloge n’est pris en considération que par la première bascule.
L’effet de la première bascule est ensuite ressenti par la deuxième bascule, donc la
deuxième bascule doit attendre par l’intermédiaire de la première bascule l’effet de l’horloge
et ainsi de suite pour les bascules qui suivent.
Les numéros (en vert) dans le diagramme de temps de la figure 4.20 correspondent à ce
qui suit :
1 : Le temps de la transition de l’état logique ‘1’ à l’état logique ‘0’ (T PHL), correspond au
temps de propagation de l’horloge (CLK) à Q0.
2 : Le temps de la transition de l’état logique ‘0’ à l’état logique ‘1’ (T PLH), correspond au
temps de propagation de Q0 à Q1.
3 : Le temps de la transition de l’état logique ‘0’ à l’état logique ‘1’ (T PLH), correspond au
temps de propagation de Q1 à Q2.
La somme des délais de propagation de toutes les bascules doit être inférieure à la période
de l’horloge.
58
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
Un compteur asynchrone modulo N est un compteur qui compte de 0 jusqu’à N-1, il possède
N états.
Figure 4.21 Schéma d’un compteur asynchrone modulo 6 formé par des bascules JK
activent par front descendant.
Pour réaliser un compteur modulo N, il faut que le compteur se remette à 0 après l’état (N-1),
donc il faut utiliser les entrées de réinitialisation (RESET).
Dans le schéma de la figure 4.21, on a utilisé une autre appellation de RESET : Clr (Clear).
Dans le cas d’un compteur modulo 6, il faut que le comptage soit interrompu après le 5 et
soit remis à 0 pour recommencer.
59
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
Un compteur synchrone est un compteur où toutes les bascules qui le constituent sont
synchronisées avec une horloge commune, par conséquent, toutes les bascules changent
d’états en même temps.
Le délai de propagation dans le cas d’un compteur synchrone est égal au délai de
propagation d’une seule bascule, ce qui le rend indépendant du nombre de bascules
utilisées (c’est-à-dire indépendant de sa taille), c’est un avantage par rapport aux compteurs
asynchrones vus précédemment.
60
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
La figure 4.23 représente un schéma général d’un compteur synchrone de n bits, formé à
partir de bascules JK actives sur front descendant.
Noter que l’horloge CLK est appliquée aux deux Flip-Flops, FF0 et FF1, où FF0 représente
le bit le moins significatif (LSB) du compteur et FF1 représente le bit le plus significatif
(MSB).
Les changements d’états des deux bascules arrivent en même temps, car ils sont pilotés par
la même horloge (CLK), ce qui est un avantage.
Diagramme de temps :
La figure 4.25 illustre les changements d’états des Flip-Flops en fonction de l’horloge. 61
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
On voit dans la figure 4.25 qu’un front descendant du signal d’horloge (CLK) change l’état
de sortie Q0 de la première bascule (FF0), tandis qu’il n’y a aucun changement dans la
deuxième bascule.
La bascule FF1 change d’état lorsqu’elle détecte un front descendant de l’horloge (CLK) et
un front descendant de la première bascule (FF0) en même temps.
On va décrire notre compteur (figure 4.24) avec une description structurelle (Listing 11).
Listing 4.11 Description VHDL d’un compteur synchrone 2 bits avec une description
structurelle.
62
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
Comme on l’a déjà cité, plusieurs méthodes existent pour décrire nos circuits.
Prenons comme exemple, un compteur synchrone 3 bits actif sur front montant, sa
description en VHDL est donnée par le listing 4.12 et le schéma résultant est donné par la
figure 4.26.
Listing 4.12 Description VHDL d’un compteur synchrone 3 bits avec une description
comportementale.
61
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
Figure 4.26 Simulation du compteur synchrone 3 bits modélisé avec le style de description
comportementale.
4.5.1.2.b) Description d’un compteur synchrone 3 bits :
Noter que l’horloge CLK est appliquée au trois Flip-Flops, FF0, FF1 et FF2 où FF0
représente le bit le moins significatif (LSB) du compteur, et FF2 représente le bit le plus
significatif (MSB).
62
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
Diagramme de temps :
Le diagramme de temps du compteur synchrone 3 bits est montré dans la figure 4.28.
Listing 4.13 Description VHDL d’un compteur synchrone 3 bits avec une description
structurelle.
63
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
Figure 4.29 Simulation du compteur synchrone 3 bits modélisé avec le style de description
structurelle.
Les bascules dans un compteur synchrone sont pilotées par la même horloge, par
conséquent les changements d’états de ces bascules se font tous en même temps, ce qui
présente un très grand avantage par rapport aux compteurs asynchrones.
Etudions un compteur synchrone très connu et beaucoup utilisé dans les applications de
comptage et d’affichage de celle-ci : Les décades (compteur synchrone modulo 10).
Un compteur décade possède 10 états, c’est avec 4 bits (4 bascules) qu’il est conçu.
64
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
Le diagramme du temps :
On voit que la première bascule (FF0) agit sur front descendant de l’horloge (CLK), et n’est
dépendante que de celle-ci. Les équations booléennes de ce compteur sont données par :
65
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
CLK Valeur Q3(t) Q2(t) Q1(t) Q0(t) Q3(t+1) Q2(t+1) Q1(t+1) Q0(t+1)
0 0 0 0 0 0 0 0 1
1 0 0 0 1 0 0 1 0
2 0 0 1 0 0 0 1 1
3 0 0 1 1 0 1 0 0
4 0 1 0 0 0 1 0 1
5 0 1 0 1 0 1 1 0
6 0 1 1 0 0 1 1 1
7 0 1 1 1 1 0 0 0
8 1 0 0 0 1 0 0 1
9 1 0 0 1 0 0 0 0
Décrivons en VHDL, le compteur décade synchrone avec les deux styles de description,
comportementale (listing 4.14) et structurelle (listing 4.15).
Listing 4.14 Description VHDL avec le style comportemental d’un compteur décade.
66
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
Listing 4.15 Description VHDL d’un compteur décade synchrone une description
structurelle.
Figure 4.33 Simulation du compteur synchrone décade modélisé avec le style de description
structurelle.
Figure 4.34 Schéma d’un compteur synchrone 3 bits avec mode de comptage.
Le tableau qui suit montre les transitions du compteur selon le choix du mode de comptage.
Mode de comptage
Comptage Décomptage
CLK Valeur Q2(t) Q1(t) Q0(t) Q2(t+1) Q1(t+1) Q0(t+1) Q2(t+1) Q1(t+1) Q0(t+1)
0 0 0 0 0 0 1 1 1 1
1 0 0 1 0 1 0 0 0 0
2 0 1 0 0 1 1 0 0 1
3 0 1 1 1 0 0 0 1 0
4 1 0 0 1 0 1 0 1 1
5 1 0 1 1 1 0 1 0 0
6 1 1 0 1 1 1 1 0 1
7 1 1 1 0 0 0 1 1 0
69
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
Figure 4.36 Simulation du compteur synchrone bidirectionnel 4 bits modélisé avec le style
de description comportementale.
log x
Avec n
log2
B) Etablir la « table des transitions du compteur », c’est-à-dire la table de vérité des
états présents et futurs du compteur.
C) Etablir la table des transitions des bascules en fonction de la table des transitions du
compteur.
D) Simplifier les équations des entrées des bascules à l’aide des tableaux de Karnaugh.
E) Implémentation du compteur.
Remarque :
log x
Dans le cas où le résultat de n n’est pas un nombre entier, le ramener à un nombre
log2
entier à la valeur supérieur.
70
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
On suppose qu’on veut concevoir un compteur formé par des bascules type JK actives sur
front descendant.
Q(t) Q(t+1) J K
0 0 0 X
0 1 1 X
1 0 X 1
1 1 X 0
A partir de la table de transition de la bascule JK, on peut établir la table des transitions
des bascules en fonction des états présents et futurs du compteur :
Q2(t)Q1(t)\Q0(t) 0 1
J2 : 00 0 0
K2 :
Q2(t)Q1(t)\Q0(t) 0 1
01 1 0
00 X X
11 X X
01 X X
10 X X
11 0 0
10 1 0
J0 Q2.Q1 Q2.Q1 Q2 Q1
K 0 Q2.Q1 Q2.Q1 Q2 Q1
J1 Q2.Q0
K1 Q2.Q0
J2 Q1.Q0
K2 Q1.Q0
E) Implémentation du compteur :
72
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
Nous sommes tous familiers avec le rôle et l’utilisation des différents types de registres
utilisés à l’intérieur d’un microprocesseur, ou d’un microcontrôleur.
Un registre est un circuit séquentiel synchrone qui est formé principalement par des
bascules D.
Le schéma d’un registre à n bits formé par des bascules type D qui s’activent sur front
montant est représenté par la figure 4.38.
Un registre à décalage est un registre qui décale ses données à droite ou à gauche à travers
des bascules mises en cascade.
C’est un registre qui décale ses données à droite lorsqu’un signal d’horloge (CLK) est
appliqué à l’ensemble de bascules qui le constituent.
Prenons un exemple d’un registre à décalage à droite, formé par 3 bascules type D qui
s’activent sur front montant.
On voit que la donnée DATA passe à la première bascule (FF0) après une impulsion
d’horloge (CLK), après une autre impulsion d’horloge, cette donnée est transmise de la
première bascule (FF0) vers la deuxième bascule (FF1), et après une autre impulsion
d’horloge, la donnée DATA est transmise de la deuxième bascule (FF1) vers la troisième
bascule (FF2).
Autrement dit, la donnée DATA est transmise à la première bascule (FF0) après une
impulsiond’horloge (CLK), cette donnée est transmise à la deuxième bascule (FF1) après
deux impulsionsd’horloge, et elle est transmise à la troisième bascule (FF2) après trois
impulsions d’horloges.
On utilise ce genre de registre dans les circuits de temporisation, car on peut obtenir une
temporisation de n’importe quelle durée, il suffit de calculer le nombre de bascules
nécessaires ainsi que la fréquence d’horloge à appliquer sur celles-ci.
Modélisons en VHDL, le registre de la figure 4.39, par une description structurelle (listing
4.18) et part une description comportementale (listing 4.19).
74
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
Tout d’abord, donnons le code VHDL d’un Flip-Flop D actif sur front montant (listing 4.17).
Remarque : Le Flip-Flop D de la figure 4.29 ne possède pas les entrées asynchrones (SET
et RESET).
Listing 4.17 description VHDL d’un Flip-Flop D actif sur front montant.
Simulation :
76
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
C’est un registre qui décale ses données à gauche lorsqu’un signal d’horloge (CLK) est
appliqué à l’ensemble de bascules qui le constituent.
Prenons un exemple d’un registre à décalage à gauche, formé par 4 bascules type D qui
s’activent sur front montant.
La donnée DATA est transmise à la première bascule (FF0) après quatre impulsions
d’horloge (CLK).
77
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
Modélisons en VHDL, le registre de la figure 4.42, par une description structurelle (listing
4.20) en utilisant le composant décrit en listing 4.17, et par une description
comportementale (listing 4.21).
Simulation :
C’est un registre qui peut décaler ses données à droite ou à gauche suivant le choix du
mode de décalage choisi.
On peut concevoir un tel registre en combinant les deux registres étudiés précédemment et
en ajoutant une entrée supplémentaire (MODE) pour la sélection du mode de décalage tel
que :
0 Décalage à droite
MODE
1 Décalage à gauche
Le schéma de la figure 4.45 montre un exemple d’un registre à décalage avec mode de
décalage formé de quatre bascules type D qui s’activent sur front montant.
Dans la figure 4.45, l’entrée DATA_R représente la donnée à décaler à droite, et l’entrée
DATA_L représente la donnée à décaler à gauche.
79
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
Figure 4.45 Schéma d’un registre à décalage avec mode de décalage (à droite ou à
gauche).
Diagramme de temps :
VHDL le registre à décalage avec mode de décalage avec les deux styles de
descriptions, structurelle (listing 4.23) et comportementale (listing 4.24).
80
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
Figure 4.47 Les composants utilisés dans la description VHDL avec le style structurel du
registre à décalage de la figure 4.45.
Le bloc en rouge de la figure 4.47 représente les bascules type D qu’on a déjà modélisées
dans le listing 4.17.
On remarque que le bloc en vert de la figure 4.47 possède quatre entrées, et une sortie.
Les opérations effectuées au niveau de ce bloc sont basiques (and, or) ; modélisons-le en
VHDL avec le style de description : flot de données.
La figure qui se trouve à droite du listing 4.22 est un agrandissement du bloc en vert du
registre, les signaux intermédiaires y sont illustrés, ainsi que ses quatre entrées et la sortie.
81
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
Lorsqu’on a affaire à des circuits électroniques complexes, c’est difficile de ne pas faire
appel au style de description structurelle, car comme on l’a déjà cité auparavant, c’est un
style qui structure notre circuit dans des blocs faciles à manipuler.
Néanmoins, il faut faire très attention lorsqu’on instancie les composants qu’on veut utiliser
dans le circuit, car l’inconvénient du style structurel, c’est qu’on peut se tromper lorsqu’on
instancie des composants et on s’y perd assez vite lorsqu’on manipule un gros système.
La simulation du registre à décalage de la figure 4.45 est donnée dans la figure 4.48.
82
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
83
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
Les registres sont également utilisés pour la conversion de données (sérielles en parallèles,
ou parallèles en sérielles).
C’est la façon dont les données sont chargées dans le registre, et la façon de lecture de ces
données qui identifie le type de registre.
Dans ce type de registre, les données sont chargées en série, et lues en série.
Le schéma de la figure 4.50 montre un exemple de ce type de registre formé par quatre
bascules type D qui s’activent sur front montant.
Comme on l’a déjà cité ultérieurement, on peut avoir n’importe quel délai souhaité, avec un
nombre de bascules et une fréquence d’horloge déterminés.
84
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
Figure 4.50 Schéma d’un registre à décalage à entrée série et sortie série.
Diagramme de temps :
On voit bien que la sortie reçoit la donnée après quatre impulsions d’horloge (CLK).
85
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
Simulation :
Dans ce type de registre, les données sont chargées en série, et lues en parallèle.
Le schéma de la figure 4.53 montre un exemple de ce type de registre formé par quatre
bascules type D qui s’activent sur front montant.
Figure 4.53 Schéma d’un registre à décalage à entrée série et sortie parallèle.
Diagramme de temps :
Dans le code VHDL du listing 4.26, on a utilisé une boucle « LOOP » (de ligne 17 à ligne
19) pour éviter l’affectation de la valeur de la variable à celle de la sortie plusieurs fois.
87
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
Dans ce type de registre, les données sont chargées en parallèle, c’est-à-dire que toutes les
bascules qui constituent le registre reçoivent les données simultanément, et sont lues en
série (bit par bit) c’est-à-dire séquentiellement donc synchronisées avec une horloge.
Un tel registre, possède une entrée supplémentaire qui indique au registre ce qu’il doit faire ;
charger les données ou bien les décaler.
Nommons cette entrée par SH/LD (pour LOAD/SHIFT), car c’est l’appellation qu’on trouve le
plus souvent dans les circuits intégrés tels que le 74166N de chez TEXAS INSTRUMENTS.
L’entrée SH/LD peut être conçue pour fonctionner de façon asynchrone ou synchrone.
Si l’entrée SH/LD est asynchrone, le chargement des données agit sur les entrées
asynchrones de la bascule (SET et RESET).
Si par contre l’entrée SH/LD est synchrone, il faut appliquer une impulsion d’horloge (CLK)
pour chaque chargement d’une donnée dans la bascule.
Soit « DAT A_0, DATA_1, DAT A_2, DATA_3 »les données à charger dans le registre à
décalage, et « S » la sortie.
Chargement Décalage
Pour :
0 Chargement
SH / LD
1 Décalage
On aura les équations du registre :
88
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
Figure 4.57 Schéma d’un registre à décalage à entrée parallèle et sortie série.
Diagramme de temps :
Figure 4.58 Diagramme de temps du registre à décalage à entrée parallèle et à sortie série.
89
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
90
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
Dans ce type de registre, les données sont chargées et lues en parallèle, c’est-à-dire
simultanément.
Ce type de registre a les mêmes caractéristiques que celui étudié auparavant (mode de
chargement de données, mode de décalage), mis à part que, dès que les données sont
chargées dans les bascules, elles apparaissent aussitôt dans les sorties parallèles.
Figure 4.60 Schéma d’un registre à décalage à entrée parallèle et sortie parallèle.
C’est un registre qui a la capacité de charger des données en série ou en parallèle, de les
décaler à droite ou à gauche, et où on peut lire ces données en série ou en parallèle, pour
cela, il possède des entrées de commande qui permettent de choisir son mode de
fonctionnement.
91
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
Les entrées S0 et S1 sont les entrées de commande qui permettent de choisir le mode de
fonctionnement du registre (chargement, décalage…).
Le chargement parallèle des données est synchrone, actif sur front montant de l’horloge
(CLK), et est activé lorsque les deux entrées de commande S0 et S1 sont à l’état logique ‘1’.
Le décalage à droite est synchrone, actif sur front montant de l’horloge (CLK), et est activé
lorsque l’entrée de commande S0 est à l’état logique ‘1’ et l’entrée de commande S1 est à
l’état logique ‘0’.
Les données sérielles à décaler à droite sont prises par l’entrée SR_SER, et celles à décaler
à gauche sont prises par l’entrée SL_SER.
Le décalage à gauche est synchrone, actif sur front montant de l’horloge (CLK), et est activé
lorsque l’entrée de commande S0 est à l’état logique ‘0’ et l’entrée de commande S1 est à
l’état logique ‘1’.
Lorsque les entrées de commande S0 et S1 sont à l’état logique ‘0’, il y’ a inhibition de
l’horloge.
92
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
MR : Master Reset.
93
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des systèmes
numériques.
94
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
Chapitre 5
Machine à états finis (FSM)
5.1 Introduction :
Une FSM (Finite State Machine), machine à états finis, est utilisée pour modéliser un
systeme qui transite entre un nombre fini d’état interne.Ces transitions dépendent de l’état
courant et des entrées.
Dans ce chapitre, nous donnons un aperçu des caractéristiques de base ainsi que la
représentation d’une FSM, nous aborderons aussi l’aspect VHDL des FSM.
Il se compose d'un registre d'état, d’un bloc logique du prochain état, et d’un bloc logique des
sorties.
Une FSM est une machine de Moore si la sortie est uniquement en fonction de l'état courant,
et est une machine de Mealy si la sortie est en fonction de l'état courant ainsi que les
entrées externes.
Les deux machines, FSM de Moore et FSM de Mealy sont similaires mais pas
identiques.L’exemple qui est présenté dans le paragraphe 5.3.1 illustre les comportements
et les constructions des deux types d’FSM.
95
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
Une FSM est généralement représentée par un diagramme d'état abstrait ou d'un
diagrammeASM (Algorithmic State Machine), où il y’a les entrées de la FSM, les sorties,
les états, ainsi que les transitions.
Les deux représentations fournissent les mêmes informations.La représentation FSM est
plus compacte et mieux adaptée pour les applications simples, tandis que la représentation
en diagrammeASM est plus descriptive pour les applications où il y’a des transitions
complexes, des conditions, et des actions, c’est un peu comme un organigramme.
- Diagramme d’état :
Un diagramme d'état est composé de nœuds, qui représentent les états.Ces derniers sont
représentés par des cercles, ainsi que des arcs notés par des transitions.
Une expression logique exprimée en termes de signaux d'entrée est associée à chaque arc
de transition et représente une condition spécifique.L’arc est pris lorsque l'expression
correspondante est évaluée comme vrai.
Les valeurs de sortie de Moore sont placées à l'intérieur du cercle, car elles ne dépendent
que de l’état courant, tandis que les valeurs de sortie de Mealy sont placées sur les arcs de
transition car elles dépendent de l'état courant ainsi que des entrées externes.Pour que le
diagramme soit clair, seules les valeurs de sorties sont représentées.
Un exemple d’un diagramme d’état de type Moore est donné à la figure 5.3 (a), et àla figure
5.3 (b) de type Mealy, c’est un détecteur de séquence ‘’11’’, le signal de sorti « y » est activé
lorsque le circuit détecte deux fois de suite l’état logique "1" du signal d’entrée A.
- Diagramme ASM :
Un diagramme ASM est composé d'un réseau de blocs ASM.Ce dernier est constitué d’un
bloc d'état relié à un réseau optionnel où il y’a des blocs de choix (bloc conditionnel) ainsi
que des blocs de sorties conditionnelles.
Une représentation d’un diagramme ASM de type Moore est montrée à la figure 5.3 (c),
etde type Mealy à la figure 5.3 (d).
Un bloc d’état représente un état dans un ASM, les valeurs de sortie de Moore sont
affichées à l’intérieur de ce bloc, notez qu'il n'a qu'un seul chemin de sortie.
Il indique que le signal de sortie ne peut être activé que lorsque la condition correspondante
dans le bloc conditionnel est rencontrée.
96
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
Figure 5.2 (a) Symbole d’état d’un nœud et ses arcs de transition.
97
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
Remarque :
Le diagramme d’état de type Mealy contient moins d’état que le diagramme d’état de type
Moore, ce qui est avantageux économiquement.
98
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
99
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
La procédure de développement de code VHDL pour une FSM est similaire à celle d’un
circuit séquentiel, car il n’y a pas un standard en VHDL pour la description d’une FSM.
Par conséquent, tout en respectant la syntaxe VHDL, il existe plusieurs façons de décrire
une FSM donnée.
Un exemple de code VHDL pour le FSM de la figure 5.3 (a) est donnée dans le listing
5.1(a), celui de la figure 5.3 (b) dans le listing 5.1 (b).
La ligne 10 dans le listing 5.1 introduit le mot-clé TYPE, qui est une caractéristique du
langage VHDL que nous n'avons pas utilisé auparavant.
Le mot-clé TYPE nous permet de créer un type de signal défini par l'utilisateur.
Le nouveau type de signal est nommé « ETAT », ainsi la ligne 10 spécifie qu'un signal de ce
type peutavoir trois valeurs possibles : S0, S1, ou S2.
La ligne 11 du listing 5.1 définitun signal nommé « SIG », qui est du type « ETAT ».
Le signal « SIG » est utilisé dans le corps « architecture » pour représenter les sorties des
bascules qui mettent en œuvre les états de la FSM, le code ne précise pas le nombre de bits
représentés par lesignal « SIG », mais précise qu’il peut avoir les trois valeurs d’état S0, S1
ou S2.
Cela signifie que nous n'avons pas à spécifier le nombre d'états des bascules qui devrait être
utilisé pour la FSM, comme nous allons le voir ci-dessous, c’est le compilateur qui choisit
automatiquement un nombre approprié d’états des bascules lors de la synthèse d'un circuit
pour mettre en œuvre cette FSM.
Après avoir défini un signal pour représenter l'état des bascules, la prochaine étape consiste
àspécifier les transitions entre ces états.
Les signaux d'entrée qui déclenchent le PROCESS sont « CLOCK » et « RESET », ainsi ils
apparaissentdans la liste de sensibilité.
Notez que le signal « A » n'est pas inclus dans la liste de sensibilité du PROCESS, car un
changementdans la valeur de ce signal ne peut pas affecter le signal « SIG » jusqu'à ce
qu'un changement seproduise dans le signal d'horloge (CLOCK), (comme par exemple la
détection d’un front), ou dans le signalRESET qui est asynchrone et donc, indépendant de
l’horloge.
Les lignes 15 et 16 précisent que la FSM devrait être à l'état S0, dans le cas
d’uneréinitialisation (RESET = ‘0’).
Les lignes 37 et 38 précisent que si l’FSM est à l'état S2, la sortie « Y » prend l’état logique
‘1’, sinon, elle prend l’état logique ‘0’.
100
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
101
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
La description VHDL d’une FSM de type Mealy peut être faite de la même manière que celle
de Moore.
La principale différence dans le cas d’une description d’FSM de type Mealy, est la façon dont
le code de la sortie est écrit.
Remarque :
On a décrit un autre PROCESS pour la sortie, sa liste de sensibilité prend en compte les
entrées, car dans le cas d’une FSM de type Mealy, la sortie ne dépend pas que de l’état
courant mais dépend également des entrées.
102
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
Lors de la synthèse, le logiciel associe automatiquement les valeurs des types de données
énumérés en représentations binaires, ce processus est connu sous le nom de
« assignation des états ».
Toutefois il existe un mécanisme pour effectuer cette opération manuellement, mais il est
rarement nécessaire.
Un détecteur de front montant est un circuit qui génère une impulsion d’horloge courte qu’on
appelle « un tick » quand un signal d’entrée passe de l’état logique ‘0’ à l’état logique ‘1’, il
est généralement utilisé pour indiquer le début d’un signal d’entrée variable dans un temps
lent.
Nous allons concevoir un détecteur de front montant en utilisant les deux modèles ; Moore
et Mealy afin de les comparer.
Le diagramme d’état et le diagramme ASM basé sur le modèle de Moore du circuit détecteur
de front montant sont donnés à la figure 5.5, l’état « S0 » indique que le signal d’entrée est à
l’état logique ‘0’, tandis que l’état « S1 » indique que le signal d’entrée est à l’état logique ‘1’.
Un front montant se produit lorsque l’état logique ‘0’ de l’état « S0 » change à l’état logique
‘1’, dans ce cas l’FSM passe de l’état « S0 » à l’état « F », et le signal de sortie « tick »
reçoit l’état logique ‘1’.
Figure 5.5 Diagramme d’état et diagramme ASM du détecteur de front montant, basé sur le
modèle de Moore.
103
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
Listing 5.2 Description VHDL du détecteur de front montant, basé sur le modèle de Moore.
La méthode de conception qu’on a utilisée dans le listing 5.2 est plus pratique que celle
utilisée dans le listing 5.1 (a).
Dans le listing 5.2, on a séparé le registre d’état de bloc logique du prochain état, et on a
décrit ce dernier ainsi que la logique de sortie (revoir la figure 5.1).
104
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
Simulation :
Figure 5.6 Résultat de simulation du détecteur de front montant, basé sur le modèle de
Moore.
Le diagramme d’état et le diagramme ASM basé sur le modèle de Mealy du circuit détecteur
de front montant sont donnés à la figure 5.7.
Figure 5.7 Diagramme d’état et diagramme ASM du détecteur de front montant, basés sur le
modèle de Mealy.
105
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
Listing 5.3 Description VHDL du détecteur de front montant, basé sur le modèle de Mealy.
Simulation :
Figure 5.8 Résultat de simulation du détecteur de front montant, basé sur le modèle de
Mealy.
106
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
Comparaison :
Bien que les deux types de machines ; Moore et Mealy soit similaires, c’est-à-dire qu’ils
produisent « un tick » lorsqu’ils détectent un front montant, il faut savoir qu’ils ne sont pas
identiques et qu’il y a plusieurs différences entre ces machines.
La machine de Mealy requiert moins d’état que la machine de Moore, et elle est plus rapide
que cette dernière, mais la largeur de ses sorties peut varier, et les « GLITCHS » peuvent
être transmises à la sortie.
Le choix entre les deux conceptions dépend de la façon dont on veut traiter les signaux de
sorties.
Par exemple, les applications qui utilisent des sous-systèmes synchrones contrôlés par une
unique horloge, les « GLITCHS » n’ont pas besoin d’être pris en considération tant que le
signal de sortie soit stable autour d’un front montant ou descendant, et par conséquent, dans
ce type de circuit on préférera la machine de type Mealy.
Les commutateurs ainsi que les boutons poussoirs qui se trouvent dans la carte de
prototypage d’FPGA sont des dispositifs mécaniques, lorsqu’on presse l’un d’eux, il peut
rebondir plusieurs fois (dans le voisinage de 20 ms) avant de se fixer, ces rebondissement
conduisent à des instabilités dans le signal comme le montre la figure 5.9 (le signal en
haut).
Pour y remédier, on utilise un circuit anti-rebond pour filtrer les instabilités (rebondissements)
présentes dans le signal après les transitions de commutation.
Le signal de sortie du circuit anti-rebond est montré dans la figure 5.9 (le signal en bas).
L’FSM de type Moore du circuit anti-rebond est montrée dans la figure 5.10, elle utilise une
minuterie qui génère une impulsion d’horloge après chaque 10ms pour éviter de vérifier la
stabilité du signal d’entrée.
107
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
Supposons que l’FSM est initialement à l’état « S0 », elle passe à l’état « T1 » lorsque le
signal « BP » passe à l’état logique ‘1’, et elle attend le « tick » (10ms) pour passer à l’état
« T2 », ce dernier processus se répète trois fois (c’est-à-dire de l’état « T1 » à l’état « T2 »,
de l’état « T2 » à l’état « T3 » et de l’état « T3 » à l’état « S1 ») pour que le signal de sortie
« Sout » passe à l’état logique ‘1’.
Le processus d’attente se déroule trois fois pour être sûr que le signal d’entrée « BP » est
stabilisé, et de revenir à l’état initiale dans le cas contraire.
108
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
109
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
110
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
PS : Pour le système d’exploitation Linux, il faut choisir Full Installer for Linux.
111
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
- Aller dans le répertoire où se trouve l’outil Xilinx ISE 13.2 et cliquer sur l’icône
xsetup.exe (Si la fenêtre du Contrôle de compte d’utilisateur s’ouvre, cliquer
sur oui).
- Cocher la case :I accept and agree to the terms and conditions aboveet
cliquer sur Next
112
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
113
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
- Cocher la case :I accept and agree to the terms and conditions aboveet
cliquer sur Next
114
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
115
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
116
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
117
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
118
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
119
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
120
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
121
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
- Aller dans le répertoire où Xilinx ISE 13.2 a été installé, suivre le chemin
suivant puis supprimer le fichier xilinx.lic :
C :\Xilinx\13.2\ISE_DS\EDK\data\core_licenses\Xilinx.lic
122
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
1 Introduction
1.1 Survol
Le logiciel Xilinx ISE 13.2 est un outil de synthèse et d’analyse de conception HDL, produit
par la société américaine Xilinx.
Il permet aux développeurs de faire la synthèse de leurs conceptions, effectuer une analyse
temporelle, examiner les diagrammes RTL, et de simuler des conceptions sous différents
stimuli.
Lancez Xilinx ISE 13.2 en cliquant deux fois sur l’icône correspondante sur le bureau.
Ou aller à : Démarrer Tous les programmes Xilinx ISE Design Suite 13.2
ISEDesign Tools Project Navigator
123
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
Une boite de dialogue apparaitra où vous devrez saisir le nom du projet (Name),
l’emplacement du projet (Location), la description de votre projet (Description), et spécifier le
type de source de la conception de haut niveau (Top-level source type).
124
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
Vous devez remplir certains champs correspondants aux différents outils et FPGA utilisés.
Reproduisez les choix de la figure suivante, puis cliquez sur Next, puis sur Finish.
Note :
- Evaluation Development Board : Spécifie la carte de développement utilisée avec
la conception.
125
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
A B Ci S Cout
0 0 0 0 0
0 0 1 1 0
0 1 0 1 0
0 1 1 0 1
1 0 0 1 0
1 0 1 0 1
1 1 0 0 1
1 1 1 1 1
Dans la fenêtre de Design, à gauche, cliquez avec le bouton droit sur le nom de votre projet,
et cliquez sur New Source…
Dans la boîte de dialogue qui apparait, choisissez comme type VHDL Module et donnez un
nom pour votre fichier source (ici additionneur), et cliquez sur Next.
126
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
Vous pouvez maintenant donner les entrées et sorties de votre module, pour l’instant,
cliquez sur Next, puis Finish.
Un nouveau fichier VHDL est automatiquement crée dans votre projet, ce dernier comporte
déjà un début de structurepour votre description matérielle.
Enregistrez votre code après l’avoir écrit : File Save ou bien Ctrl + S.
Après avoir développé n’importe quel code VHDL, il faut vérifier les erreurs de syntaxe pour
une éventuelle correction.
127
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
Pour la vérification des erreurs de syntaxe, il faut utiliser la partie inférieure de l’onglet
Design :
Défilez le menu de « Synthesize – XST » en cliquant sur le « + » se trouvant à sa gauche.
128
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
Créez un nouveau fichier dans la fenêtre de Design, à gauche, cliquez avec le bouton droit
sur le nom de votre projet, et cliquez sur New Source…
Dans la boîte de dialogue qui apparait, choisissez comme type VHDL Test Benchet donnez
un nom pour votre fichier de test (ici test_additionneur), et cliquez sur Next.
Choisir le code VHDL associé à ce code de test (en général il est sélectionné par défaut) et
cliquez sur Next, puis Finish.
129
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
Un nouveau fichier de test VHDL est automatiquement crée dans votre projet, ce dernier
comporte déjà un début de structurepour test de votre description matérielle.
Enregistrez votre code après l’avoir écrit : File Save ou bien Ctrl + S.
Dans la fenêtre de Design, à gauche, cliquez sur Simulation, et sélectionnez le Test Bench
que vous avez créé.
130
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
Cliquez deux fois sur « Simulate Behavioral Model » pour lancer la simulation :
L’outil de simulation ISim se lance, utilisez les options de ZOOM pour régler l’affichage des
résultats.
131
V.Tourtchine et M.Izouine. Initiation au langage VHDL. Application pour la modélisation des
systèmes numériques.
132