Académique Documents
Professionnel Documents
Culture Documents
(FSM)
Les machines à états finis
AU 2021/2022 198
Les machines à états finis
AU 2021/2022 199
Les machines à états finis
• Machine de Moore
Horloge c
S(t) = F(X(t))
X(t + 1) = G[E(t), X(t)]
AU 2021/2022 200
Les machines à états finis
• Machine de Mealy
AU 2021/2022 201
Les machines à états finis
Exemple : détecteur de séquence
P=0 E2
Entrée = ‘3’
E3 P=1
AU 2021/2022 203
Les machines à états finis
Graphe d’état
Définition :
•Un diagramme ou graphe d’états permet d’avoir une représentation
graphique d’un système séquentiel.
•Il est constitué par l’énumération de tous les états possible du système.
•Un seul de ces états peut être actif à la fois.
•A chaque état est associé la valeur de la (ou des) grandeur(s) de sortie.
Transition Etat
1 2
• Codage binaire
Le numéro de l’état est codé en binaire
état 0 = "00", état 1 = "01", état 2 = "10", état 3 = "11"
• One-Hot-One
Chaque état correspond à 1 bit d’un même bus
état 0 * state = "0001", état 1 * state = "0010",
état 2 * state = "0100", état 3 * state = "1000"
• One-Hot-Zero
Même principe que One-Hot-One mais l’état 0 se code "0000"
AU 2021/2022 205
Les machines à états finis
AU 2021/2022 206
Les machines à états finis
* Prévoir une clause par défaut dans le cas ou le circuit se trouve dans un
état non utilisé
* Si le résultat d’une opération est utilisé par plusieurs états, il faut définir
l’opération à l’extérieure de la machine à états
Description VHDL
Les FSM sont composées de trois parties: deux fonctions
combinatoires et un registre.
Exemple :
AU 2021/2022 208
Les machines à états finis
AU 2021/2022 209
Les machines à états finis
AU 2021/2022 210
Les machines à états finis
!E
repos
F !M, !P
E
E
cyc_2 lavage
! F M , !P M, P E
E
F !E
cyc_1
M, !P
!F
AU 2021/2022 211
Les machines à états finis
Type state is (repos, lavage, cyc_1, cyc_2)
signal etat, etat_f : state;
P1 : process(clk)
begin
if clk'event and clk='1' then
etat <= etat_f;
Registre
end if;
end process P1;
P2 : process(etat)
begin
if etat= repos then
M <= '0'; P <= '0';
elsif etat = lavage then Description
M <= '1'; P <= '1'; des sorties
else
M <= '1'; P <= '0';
end if;
end process P2;
AU 2021/2022 212
Les machines à états finis
P3 : process(F, E, etat) Circuit
begin
d'excitation
case etat is
when repos => if E='1' then
etat_f <= lavage ;
else etat_f <= etat; end if;
when lavage => if E = '0' then
etat_f <= cyc_1 ;
else etat_f <= etat; end if;
when cyc_1 => if E ='1' then
etat_f <= lavage ;
elsif F= '1' then etat_f <= cyc_2 ;
else etat_f <= cyc_1; end if;
when cyc_2 => if E = '1' then
etat_f <= lavage ;
elsif F= '1' then etat_f <= repos ;
else etat_f <= etat; end if;
end process P3;
AU 2021/2022 213
Les machines à états finis
Simplification de l'écriture
Il est possible de regrouper les parties combinatoires dans
un processus, ce qui allège l'écriture au détriment de la
lisibilité.
AU 2021/2022 216
Les machines à états finis
P3 : process(F, E, etat)
Begin
if clk'event and clk='1' then
case etat is Description du
when repos => registre d’état
if E='1' then etat <= lavage ;
else etat <= etat; end if;
when lavage =>
if E = '0' then etat <= cyc_1 ;
else etat <= etat; end if;
when cyc_1 =>
if E ='1' then etat <= lavage ;
elsif F= '1' then etat <= cyc_2 ;
else etat <= etat; end if;
when cyc_2 =>
if E = '1' then etat <= lavage ;
elsif F= '1' then etat <= repos ;
else etat <= etat; end if;
end case;
end process P3;
AU 2021/2022 217
Les packages
Paquetages
AU 2021/2022 219
Paquetage STANDARD
AU 2021/2022 220
Paquetage TEXTIO
Le paquetage prédéfini TEXTIO déclare des types et des sous-programmes pour la
manipulation de fichiers textes. Il déclare aussi des procédures pour lire et écrire les valeurs
d'objets de types prédéfinis.
La lecture d'un fichier texte est effectuée en deux étapes:
1) lire une ligne complète avec la procédure read-line et stocker la ligne dans un tampon de
type line,
2) lire chaque élément de la ligne lue avec l'une des version de la procédure read relative au
type de valeur à lire. La procédure read peut retourner l'état de l'opération par le
paramètre good.
L'écriture dans un fichier est aussi effectuée en deux étapes:
1) une ligne complète est construite dans un tampon de type line au moyen d'une des
versions de la procédure write, en fonction des types de valeurs à écrire,
2) la ligne est écrite dans le fichier avec la procédure write-line.
AU 2021/2022 221
Paquetage TEXTIO
AU 2021/2022 222
Paquetage STD_LOGIC_1164
Le paquetage STD_LOGIC_1164 ne fait pas partie de la définition du langage VHDL,
mais est défini comme un standard séparé.
Le paquetage déclare deux types logiques à neuf états std_ulogic et std_logic :
• Les états '0', '1' et 'X' représentent respectivement l'état faux, vrai et inconnu (ou
indéterminé).
• Les états 'L', 'H' et 'W' représentent des états résistifs du type pull-down ou pull-up.
• L'état 'Z' représentent un état haute-impédance.
• L'état 'U' est l'état initial par défaut et identifie les signaux qui n'ont pas été affectés en
simulation.
• L'état '-' est parfois utilisé pour des vecteurs de test ou en synthèse pour spécifier que
certains bits ne sont pas importants.
AU 2021/2022 223
Paquetage STD_LOGIC_1164
AU 2021/2022 224
Paquetage STD_LOGIC_1164
Le paquetage déclare des versions des opérateurs logiques pour ces nouveaux types. Il
n'est par contre pas possible d'utiliser sans autre des opérateurs arithmétiques sur des
objets appartenant à ces types.
L'utilisation du paquetage STD_LOGIC_1164 dans une unité de conception requiert la
spécification d'une clause de contexte.
Le corps de paquetage inclut les corps des sous-programmes déclarés dans la déclaration
de paquetage correspondante.
A titre d'exemple, la fonction de résolution resolve utilise une table constante
resolution_table pour définir les valeurs résolues de toutes les paires de sources possibles.
Le corps de la fonction traite d'abord le cas pour lequel le signal résolu n'a qu'une seule
source de manière à optimiser le temps de calcul. Dans le cas contraire, une boucle est
utilisée pour appliquer la table de résolution à chaque source du signal.
AU 2021/2022 225
Paquetage STD_LOGIC_1164
AU 2021/2022 226
Paquetage MATHEMATIQUE
AU 2021/2022 227
Paquetage NUMERIC_BIT
AU 2021/2022 228
Paquetage NUMERIC_STD
AU 2021/2022 229
VHDL pour la synthèse
VHDL pour la synthèse
AU 2021/2022 231
VHDL pour la synthèse
AU 2021/2022 232
VHDL pour la synthèse
Types supportés
*Types énumérés :
❖ boolean, bit et character
*Types entiers :
❖ integer
*Types array d’éléments scalaires :
❖ bit_vector et string
*std_ulogic, std_ulogic_vector, std_logic et std_logic_vector, du
package std_logic_1164
*unsigned et signed, du package numeric_bit
*unsigned et signed, du package numeric_std
Types non supportés
*Types réels : real
*Types physiques : time
AU 2021/2022 233
VHDL pour la synthèse
Opérations :
AU 2021/2022 234
VHDL pour la synthèse
Affectation d’un signal
signal_assignment_statement ::=
[ label : ] target <= [ delay_mechanism ] waveform ;
delay_mechanism ::=
transport | [ reject time_expression ] inertial
[
after time expression ]
AU 2021/2022 235
VHDL pour la synthèse
Instructions séquentielles
*WAIT
❖ Une seule instruction wait par process
❖ L’instruction wait doit être au début du process
❖ Pas de wait for
*IF
❖ Si un signal est affecté sous seulement certaines conditions de
l’instruction IF, un élément mémoire peut être créé
*CASE
*LOOP
❖ WHILE n’est pas supporté
❖ FOR avec un intervalle statique de valeurs entières
AU 2021/2022 236
VHDL pour la synthèse
Instructions concurrentielles
* BLOCK
* PROCESS
❖ Postponed n’est pas supporté
* Affectation conditionnelle
❖ Affectation avec WHEN
❖ Affectation WITH … SELECT
* GENERATE
* Instructions d’initialisation de signaux
AU 2021/2022 237
VHDL pour la synthèse
AU 2021/2022 238
VHDL pour la synthèse
AU 2021/2022 239
VHDL pour la synthèse
Note : L’instruction WAIT doit être la première instruction du process Une seule
instruction WAIT par process
AU 2021/2022 240
Banc d’essai « testbench »
AU 2021/2022 241
Un bon code HDL
Commentaires intelligents
* Mauvais commentaire
❖ i := i +1 ; -- incrémenter la valeur de i
* Bon
commentaire -- incrémenter la valeur du compteur jusqu’à
❖ i := i+1 -- atteindre la valeur 4, ce qui permet de diviser
❖
❖
le signal d’entrée par 8
AU 2021/2022 242
Conclusion
CODE VHDL
Autres
AU 2021/2022 243
Conclusion
AU 2021/2022 244