Vous êtes sur la page 1sur 63

Rappel Electronique Numérique

Version 2022 - 2023

A. Nketsa

VHDL SYNTHETISABLE A. Nketsa 1 14/11/2022


1 – Rappel de logique
Logique combinatoire

Logique séquentielle

Logique séquentielle synchrone

Machine à états

Systèmes complexes

VHDL SYNTHETISABLE A. Nketsa 2 14/11/2022


Bibliographie
1- Systèmes électroniques numériques complexes
Editions Ellipses
par A. Nketsa - D. Delauzun

VHDL SYNTHETISABLE A. Nketsa 3 14/11/2022


1 – Rappel de logique
1-1 Logique combinatoire
 Fonctions logiques de base : ET (AND) – OU (OR) – NON (NOT)
 Fonctions usuelles Non-ET (NAND) – Non-OU (NOR) – OU_exclusif (XOR)

Fonctions logiques de base Fonctions usuelles


NON (NOT) ET (AND) OU (OR) Non-ET (NAND) Non-OU (NOR) OU_exclusif (XOR)
S= A S=A.B S=A+B S = A.B S = AB S= AB
Entrées Sortie Entrées Sortie Entrées Sortie Entrées Sortie Entrées Sortie Entrées Sortie
A S A B S A B S A B S A B S A B S
0 1 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0
1 0 0 1 0 0 1 1 0 1 1 0 1 0 0 1 1
1 0 0 1 0 1 1 0 1 1 0 0 1 0 1
1 1 1 1 1 1 1 1 0 1 1 0 1 1 0

A A. B A A
A A A+B A A.B A AB AB
B B B
B B

VHDL SYNTHETISABLE A. Nketsa 4 14/11/2022


Algébre de Boole
Commutativité A +B =B+A A.B =B.A
Associativité A+ ( B + C) = (A + B) + C = A + B + C A. ( B . C) = (A . B) . C = A . B . C

Elément neutre A= A+ 0 A=A .1

Absorption 1 = A+ 1 0=A.0
Involution A= A A= A
Complémentarité A+ A = 1 A. A =0

Idempotence A=A+A A=A .A

Distributivité A + B .C = ( A + B ) . ( A + C ) A. (B + C) = A . B + A . C

Théorème de De Morgan AB = A . B A.B = A + B

VHDL SYNTHETISABLE A. Nketsa 5 14/11/2022


Terme-produit ET entre les variables binaires complémentées ou non
Expressions d'une fonction logique
Algébrique (forme ΣΠ privilégiée) = Σ(OU) des Π(termes-produits)
Tabulaire (Table de vérité)

Table de vérité simple Table de vérité sans priorité Table de vérité avec priorité
Définition Définition Définition
- Toutes les combinaisons sont - Toutes les combinaisons sont - Certaines combinaisons sont décrites avec
explicitement décrites. explicitement décrites. des * (correspondant au fait que la valeur 0
- A chaque combinaison, on associe - A chaque combinaison, on associe ou 1 des variables concernées ne change pas
une valeur de la fonction (0 ou 1). une valeur de la fonction (0 ou 1). la valeur de la fonction).
- A chaque combinaison, on associe une valeur
de la fonction (0 ou 1).

f(A,B,C) = A . B . C + A . B . C + A . B . C f(A,B,C) = A . B . C + B
+ A .B.C + A .B.C + A .B.C
Exemple
Exemple
Exemple sraz sload en Terme_produit id
A B C Terme_produit f
A B C Terme_produit f 1 * * sraz 0
0 0 0 A .B.C 0
0 0 0 A .B.C 0 0 1 * s raz . sload 1
0 0 1 A .B.C 1
0 0 1 A .B.C 1 0 0 1 sraz . sload . en 1
0 1 0 A .B.C 1
0 1 0 1 0 0 0 s raz . sload . en 0
0 1 1 1 A .B.C
A .B.C 0 1 1 1
1 0 0 0 A .B.C
A .B.C 1 0 0 0 Id = s raz . sload + sraz . sload . en
1 0 1 0 A .B.C
A .B.C 1 0 1 0
1 1 0 1 A .B.C
A .B.C 1 1 0 1
1 1 1 A .B.C 1 A .B.C
1 1 1 A .B.C 1

VHDL SYNTHETISABLE A. Nketsa 6 14/11/2022


Table de vérité incomplètement spécifiée
La valeur d'une fonction peut être notée * pour indiquer que pour la combinaison concernée la valeur de la fonction n'a
aucune importance.

Table de vérité à variables introduites

Définition
Une table de vérité à variables introduites est une table de vérité pour laquelle la valeur de la fonction peut être *, 0, 1 ou une expression.
Dans ce contexte, les variables de la fonction sont divisées en deux groupes :
- les variables dites principales qui apparaîtront comme entrées principales de la table
- les variables dites introduites qui apparaissent dans les expressions qui représentent la valeur de la fonction
Exemples de table de vérité à variables introduites
Exemple1 Exemple 2

A B C Terme_produit f sraz sload en Terme_produit f


0 0 0 A .B.C 0 1 * * sraz 0000
0 0 1 D 0 1 * s raz . sload E
A .B.C
0 1 0 /D 0 0 1 sraz . sload . en Iq
A .B.C
+1
0 1 1 A .B.C 1
0 0 0 s raz . sload . en iq
1 0 0 A .B.C *
1 0 1 A .B.C 0 f(sraz, sload, en, E, iq) =
1 1 0 A .B.C D. E s raz . sload .E
1 1 1 A .B.C D + sraz . sload . en .(1q + 1)
+ s raz . sload . en .iq
f(A,B,C,D,E) = A . B . C . D + A . B . C . D + A . B . C + A . B . C . D . E + A . B . C . D

L'intérêt de la table de vérité à variables introduites est d'obtenir une table compacte sans modifier
la définition (valeurs) de la fonction correspondante.
VHDL SYNTHETISABLE A. Nketsa 7 14/11/2022
Théorème d'expansion de Shannon
Ce théorème permet de décrire la même fonction sous différente forme en développant celle-ci selon des variables choisies.
Ce théorème permet aussi de construire la ou les tables de vérité à variables introduites de la dite fonction.
Soit la fonction f(xn..x0)
- développement suivant une variable
f(xn .. xi .. x0) = xi . f(xn .. 1 .. x0) + xi . f(xn .. 0 .. x0)

- développement suivant deux variables (par exemple x1 et x0)


f(xn .. xi .. x0) = x1 . x0 . f(xn .. 0, 0)
+ x1 . x0 . f(xn .. 0, 1)
+ x1 . x0 . f(xn .. 1, 0)
+ x1 . x0 . f(xn .. 1, 1)

Ce développement permet d'obtenir une table de vérité sans priorité à variables introduites

Exemple
Soit la fonction f(A, B, C) = A . B . C + B
En déduire les tables de vérités à
variables introduites A B f A f
0 0 f(0,0,C) 0+C=C 0 f(0,B,C) B.C + B = B.C + B
0 1 f(0,1,C) 0+1 =1 1 f(1,B,C) 0 +B =B
1 0 f(1,0,C) 0+ 0 =0
1 1 f(1,1,C) 0+ 1 =1

VHDL SYNTHETISABLE A. Nketsa 8 14/11/2022


Fonctions de moyenne complexité
1- Multiplexage
a) Principe
Une fonction de multiplexage consiste en un aiguillage une information parmi plusieurs vers la sortie.
C’est la fonction la plus utilisée en électronique numérique.
Cette fonction comporte 3 parties :
- les entrées d’information,
- les entrées de sélection (ou d’adresse)
- la sortie
- (éventuellement une entrée de validation)

Description Description
MUX Symbole
générale algébrique

Entrées
I0
Sortie
Sortie = Ii
d’information I1 Avec i = numéro formé par le nombre
(1 bit) Sortie = Ii.An-1..A0
2n vers 1 (2n bits)
S binaire naturel An-1..A0
Avec An-1..A0 = code binaire naturel de i
I2n-1
cas général
A0 An-1
Entrées de sélection (n bits)

Remarque :
Toute fonction logique de (n+1) variables peut être réalisée en utilisant un inverseur et un multiplexeur de 2n vers 1.

VHDL SYNTHETISABLE A. Nketsa 9 14/11/2022


Exemple multiplexeur de 8 vers 1 (Mux8v1)

Vue externe Table de vérité à variables introduites

A2 A1 A0 S_mux
I7
0 0 0 I0
I6

MUX8V1
I5
0 0 1 I1
I4
0 1 0 I2
I3 S
0 1 1 I3
I2 1 0 0 I4
I1 1 0 1 I5
I0
A0 1 1 0 I6
A1
A2 1 1 1 I7

Remarque :
Si table de vérité simple alors il aurait fallu 211lignes = 2048 lignes

Réalisation de fonction logique par multiplexeurs


Méthode
1- Choisir la fonction (ou l'expression) à réaliser
2- Identifier le multiplexeur (nombre d'entrées de sélection)
3- Dresser la table de vérité à variables introduites de la fonction en considérant les entrées de sélection du multiplexeur choisi comme
les entrées principales de la fonction.
4- Connecter les expressions introduites déduites aux entrées d'information correspondantes
5- Si chaque expression introduite n'est pas une variable simple ou complémentée, recommencer la méthode pour cette expression

VHDL SYNTHETISABLE A. Nketsa 10 14/11/2022


Exemple d'application
Réaliser la fonction f(A, B, C, D, E) = /A./B./C./D./E + A.B./C + A.E + B.D + A. C . D
a) En utilisant un multiplexeur de 8 vers 1, des multiplexeurs de 2 vers 1 et des inverseurs
b) En utilisant un multiplexeur de 16 vers 1 et inverseur
a) Multiplexeur de 8 vers 1
Donc 3 entrées de sélection  3 variables principales
E
Table de vérité à variables introduites I7
D
Vcc I6
A B C f I5
0 0 0 f(0,0,0,D, E) = D . E I0 Mux8v1
E
0 0 1 f(0,0,1,D, E) = 0 I1 I4
f
0 1 0 f(0,1,0,D, E) = D I2 D
I3 S
0 1 1 f(0,1,1,D, E) = D I3
1 0 0 f(1,0,0,D, E) = E I4 I2
1 0 1 f(1,0,1,D, E) = D  E I5 gnd I1
1 1 0 f(1,1,0,D, E) = 1 I6 E
1 1 1 f(1,1,1,D, E) = D  E I7 I0
A0
A2 A1 A0
D A1
A2
C
B
A

VHDL SYNTHETISABLE A. Nketsa 11 14/11/2022


b) Multiplexeur de 16 vers 1
Donc 4 entrées de sélection  4 variables principales
Table de vérité à variables introduites

VHDL SYNTHETISABLE A. Nketsa 12 14/11/2022


Généralisation
Structure à multiplexeurs
Réaliser la fonction
I1
Y
f(A, B, C, D, E) = /A./B./C./D./E + A.B./C + A.E + I0
S S

B.D + A. C . D I1 Y
I0

en utilisant cette structure à base de multiplexeurs I1


I0
Y
S

C1
Application directe du théorème d'expansion de Shannon
a) On commence par le C5 en choisissant une variable dont le
I1
développement permet d'obtenir les expressions à appliquer à I1 et I0 I0
Y
S S
I1 Y
b) On recommence le processus pour les deux autres mux de C5 I0 I1
Y
I1 I0
Y S S
I0
c) connaissant les expressions, on recommence en a) pour chaque S I1 Y
I0
cellule de base C2
I1 Y
I0
S

I1
C5
Y
I0
S S
I1 I1 Y
Y I0
I0
S S
I1
I1 Y I0
Y
I0 S

I1 C3
Y
I0
S

C1
I1
Y
I0
S S
I1 Y
I0
I1
Y
I0
S

C4

VHDL SYNTHETISABLE A. Nketsa 13 14/11/2022


2- Décodage

Exemple décodage 1 parmi 8


Table de vérité

Vue externe A2 A1 A0 Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0

3- Encodage

VHDL SYNTHETISABLE A. Nketsa 14 14/11/2022


4- Calcul binaire (addition – soustraction)

- Nombres binaires non signés - Nombres binaires signés


bn-1 b0 bn-1 b0
signe

Pas de signe N0 signe = partie intégrante


0  N  2n - 1 Signe = 0  N  0
1N<0
nombres relatifs - 2n-1  N  + 2n-1 - 1

Schéma de calcul

Addition Application aux nombres non signés (NS) Application aux nombres signés (SG)
n n

A B CF
soust_addb 4 OF
Indicateur ZF
Rbrut SF
n

VHDL SYNTHETISABLE A. Nketsa 15 14/11/2022


Soustraction Application aux nombres non signés (NS) Application aux nombres signés (SG)
n n

A B CF
soust_addb 4 OF
Indicateur ZF
Rbrut SF
n

Interprétation et Correction du résultat


Addition Nombres non signés Nombres signés
OF = 0
CF bn-1 b0 bn-1 b0

Non signé signé


OF = 1
CF bn-1 b0

signé

VHDL SYNTHETISABLE A. Nketsa 16 14/11/2022


Interprétation et Correction du résultat
Soustraction Nombres non signés Nombres signés
OF = 0
CF bn-1 b0 bn-1 b0

signé signé
OF = 1
CF bn-1 b0

signé

VHDL SYNTHETISABLE A. Nketsa 17 14/11/2022


1-2 Logique séquentielle

Asynchrone Synchrone
Définition Définition

Composant de base Bascule RS Composants de base Bascule D Bascule JK - bascule T

Bascule RS

Table de fonctionnement d'une bascule D flip-flop:


Entrées Entrée
horloge Sortie
asynchrones synchrone
Remarques
Clearb Presetb
CK D Qn+1
(arazb) (asetb)
A éviter
0 0 * * instable

asynchrone
Les entrées asynchrones sont actives à 0 0 1 * * 0 Mise à 0 asynchrone

1 0 * * 1 Mise à 1 asynchrone
Mode de fonctionnement

asetb Mémoire et passage


1 1 Qn Mémoire
ck dans le mode synchrone
Q
D
arazb 1 1 0 0 Mise à 0 synchrone
1 1 1 1 Mise 1 à synchrone
synchrone

1 1 * Qn

1 1 0 * Qn Mémoire

1 1 1 * Qn

VHDL SYNTHETISABLE A. Nketsa 18 14/11/2022


1-3 Logique séquentielle synchrone simple
Structure générale

Arazb
CK

CK Arazb
Entrees
synchrones Bloc Q(..)
combinatoire D(..) Q(..)
iQ(..)

Bascules D

Conclusion
Tout système séquentiel synchrone simple peut se résumer à la connexion de deux composants:
- le bloc des bascules
- le bloc combinatoire (table de vérité)

VHDL SYNTHETISABLE A. Nketsa 19 14/11/2022


Exemple de compteur : compteur modulo 8

VHDL SYNTHETISABLE A. Nketsa 20 14/11/2022


Exemples systèmes séquentiels synchrones simples

Registre tampon
Vue externe Table de vérité
E[n-1..0] S[n-1..0] Table de commande asynchrone
entrée Sortie
ck

arazb
arazb clrn prn remarque
0 0 1 Mise à 0 asynchrone
sraz
en 1 1 1 mémoire

Table de commande synchrone


sraz en iD[n-1..0] Remarque
1 * 0..0 Mise à 0 synchrone
Chargement
0 1 E[n-1..0]
synchrone
0 0 Iq[] Mémoire

VHDL SYNTHETISABLE A. Nketsa 21 14/11/2022


Compteur-decompteur modulo m = 2n (comptage de 0 à m-1 - décomptage m-1 à 0)

arazb
ck cptg
sraz
sload Q[]
en
ud finc
E[]
find

Table de vérité de la partie combinatoire (max = m-1)


Entrées synchrones Sorties
sraz sload en ud Id[] Fin_c Fin_d D_depass D_debord
1 * * * 0 0 0
0 1 * * E 0 0
0 0 1 0 Iq + 1 Iq=max Iq=0 Iq =max 0
1 Iq -1 0 Iq=0
0 0 Iq 0 0

VHDL SYNTHETISABLE A. Nketsa 22 14/11/2022


Compteur - decompteur modulo m  2n (comptage de 0 à m-1 - décomptage m-1 à 0
Version simple

Table de vérité de la partie combinatoire (max = m-1)


Entrées synchrones Sorties
sraz sload en ud Id[] Fin_c Fin_d arazb
1 * * * 0 ck cptg
sraz
0 1 * * E sload Q[]
1 Iq  m-1 Iq + 1 en
ud finc
0 0 1 Iq = m-1 0 Iq=max Iq=0 E[]
find
0 Iq  0 Iq -1
Iq = 0 m-1
0 0 0 Iq

Version avec contrôle de chargement

Table de vérité de la partie combinatoire (max = m-1)


Entrées synchrones Sorties
sraz sload en ud Id[] Fin_c Fin_d
1 * * * 0 arazb
ck cptg
0 1 E  m-1 * * E sraz
sload Q[]
E > m-1 Iq
Iq=max Iq=0 en
ud finc
1 Iq  m-1 Iq + 1 E[]
find
0 0 1 Iq = m-1 0
0 Iq  0 Iq -1
Iq = 0 m-1
0 0 0 Iq

VHDL SYNTHETISABLE A. Nketsa 23 14/11/2022


Compteur-décompteur modulo programmable Em+1
Table de vérité de la partie combinatoire (max = Em)
Entrées synchrones Sorties
sraz sload en ud Id[] Fin_c Fin_d
1 * * * 0
0 1 * * E
1 Iq  Em Iq + 1
0 0 1 Iq = Em 0 Iq=max Iq=0
0 Iq  0 Iq -1
Iq = 0 Em
0 0 0 Iq

Version avec contrôle de chargement

Table de vérité de la partie combinatoire (max = Em)


Entrées synchrones Sorties
sraz sload en ud Id[] Fin_c Fin_d
1 * * * 0 arazb
ck cptg
0 1 E  Em * * E sraz
sload Q[]
E > Em Iq
Iq=Em Iq=0 en
ud finc
1 Iq  Em Iq + 1 E[]
find
0 0 1 Iq = Em 0 Em[]

0 Iq  0 Iq -1
Iq = 0 Em
0 0 0 Iq

VHDL SYNTHETISABLE A. Nketsa 24 14/11/2022


Machine à états finis

1 - Définition
Une machine à états finis est une représentation des systèmes séquentiels ayant au plus un seul état actif à la fois. Cette remarque montre
qu’il existe une notion de mémoire semblable à celle que nous avons décrite pour une bascule. Le mécanisme de mémorisation est le
même.
Le modèle de machine à états finis est très utilisé en électronique numérique et informatique industrielle et embarquée.
Notation ;
Dans ce cours, nous utiliserons :
mae ou MAE ou graphe d'états pour désigner une machine à états finis
Approche intuitive d’une machine à états
I- Deux exemples simples de machine à états que nous avons traités concernent :
- le compteur simple par exemple modulo 4 que l'on peut représenter de la façon suivante :
Q1Q0 Cet exemple montre que les ronds sont les états de comptage et représentent en même temps la
00 01
sortie du compteur.

Le passage d'un état au suivant est implicite au front montant de l'horloge.

On peut cependant remarquer que l'on ne peut pas utiliser cette représentation pour un compteur
11 10
modulo élevé.

- le générateur de séquence
Q1Q0
On peut faire aussi la représentation d'un générateur de séquence comme une mae avec le même
00 11 inconvénient que pour un compteur.

01

VHDL SYNTHETISABLE A. Nketsa 25 14/11/2022


II- Nous avons traité d'un compteur avec autorisation de comptage en.
Nous pouvons aussi représenter ce compteur avec une évolution conditionnelle.
Un compteur avec autorisation en

Q1Q0 Sur ce nouveau graphe, le passage d'un


en état au suivant est conditionné par en =1.
00 01
Donc
si en = 0 alors le compteur n'évolue pas
en sinon il évolue (passage à l'état suivant)
en

en
11 10

Remarques importantes :
Parfois dans la définition d’une MAE, on inclut les actions.
Nous considérons que les actions sont déduites de l’évolution des états et pas le contraire.
Nous verrons par la suite que cette remarque est très importante car elle va permettre d’obtenir des MAE simples.

Conclusion :
1- nous considérons que la MAE décrit l’évolution du système.
2- on superpose des actions sur la mae.

Cette approche qui découple l’évolution et la génération des actions montre qu’une même MAE peut être utilisée pour
commander plusieurs systèmes pourvu que ceux-ci aient la même évolution.

VHDL SYNTHETISABLE A. Nketsa 26 14/11/2022


2- Représentation
Le graphe d’états est une représentation graphique des évolutions possibles entre les différents états du système. Ce graphe est
constitué de 2 éléments de base : des états et des transitions associées à des arcs orientés.
 L'état

L’état est représenté par un rond nommé (souvent le nom est un numéro). n

Cas particulier : n
L'état initial : il est représenté par un double rond avec un nom
n
Un état actif sera agrémenté d’un jeton pour des besoins de visualisation.
 La transition
La transition est représentée par un arc étiqueté par une condition booléenne.
Plusieurs représentations graphiques de la transition sont possibles. condition
Nous en avons choisi une pour laquelle la lecture nous semble aisée.
 Règles de représentation

i j
Une transition relie toujours deux états.
condition

c3

c2
Un état peut recevoir plusieurs transitions. n
c1

VHDL SYNTHETISABLE A. Nketsa 27 14/11/2022


Plusieurs transitions peuvent partir d’un même état vers d'autres états. Dans ce cas, les conditions
associées aux transitions doivent être mutuellement exclusives. Ceci permet d’éviter que plusieurs états
deviennent actifs en même temps, ce qui serait contradictoire avec la définition de la MAE.
Définition :
Deux conditions booléennes c1 et c2 sont exclusives c2
si c1 . c2 = 0
n
On peut rendre les conditions booléennes exclusives entre elles, en utilisant la notion de priorité. c1

Exemple
Si c1 et c2 ne sont pas exclusives, alors on peut les rendre exclusives en remplaçant c1 par c1. c2 ce
qui permet de rendre c2 plus prioritaire que c1. c2
El la condition d'exclusivité est respectée : c2 . (c1. c2 ) = 0

3- Règles d’évolution
Vocabulaire
- si l'état de départ (état amont d'une ou plusieurs transitions) est actif, on dit aussi que la (les) transition(s) associées à l'état est (sont)
sensibilisée(s)
- si la condition associée à la transition sensibilisée est vraie, on dit aussi que la transition est tirable.

1- A l'initialisation, l'état initial devient actif


2- on part de l'état actif et on évalue les conditions associées à chaque transition qui part de cet état.
si une des conditions est vraie alors
une opération indivisible est mise en place :
- l’état de départ (état amont de la transition dont la condition associée est vraie) devient inactif,
- et l’état d’arrivée (état aval de la transition dont la condition associée est vraie) devient actif.
si aucune condition n'est vraie alors
pas d'évolution

Remarque importante :
Si l’état doit être désactivé et activé en même temps, il reste actif.
VHDL SYNTHETISABLE A. Nketsa 28 14/11/2022
En d'autres termes :
Le passage d’un état (état de départ) vers un autre état (état d’arrivée dans le sens des arcs des transitions) se fait si et seulement si : la
transition considérée est tirable et elle soit être tirée.

Exemples d’évolution

Avant le tir de la transition condition Après le tir de la transition

c0 c0
i
c0=1 i

i j
j i
c c=1 c

j cj

k
cj = 1
ci = *
cj
i j
ci
k

cj
j i ci
k
cj = *
ci = 1
i
ci

VHDL SYNTHETISABLE A. Nketsa 29 14/11/2022


Nous considérons que les j
cj
conditions cj et ck sont
exclusives. cj=1 et i
ck=0
cj k
j ci
i
cj
j
k
ci cj=0 et i
ck=1
k
ci

Exemple de graphe d’état :


c0 c2
0 1 2

c1

c4

3
c5 c3

On admet que c2 et c3 sont exclusives, de même pour c4 et c5

VHDL SYNTHETISABLE A. Nketsa 30 14/11/2022


4- La génération des actions
4-1 Généralités
Les actions de MOORE et de MEALY
Comme nous l’avons évoqué ci-dessus, les actions sont une conséquence de l’évolution de la machine à états. Nous avons proposé de
les découpler d’un point de vue conception.

On peut donc considérer qu'une machine à états est un système de commande qui commande d'autres systèmes par
l'intermédiaire des actions.

Une littérature abondante traite des actions générées par les MAE.
Ces actions sont regroupées en 2 types :
- les actions de Moore : elles ne dépendent que des états
- les actions de Mealy : elles dépendent à la fois des états et des entrées.

4-2 Les actions généralisées : AMZI - AMZE


Pour des raisons de simplicité de représentation des actions, nous proposons de ne superposer sur le graphe que les actions nécessaires.
En outre, du fait du découplage évolution-actions, une action peut assurer sa propre mémorisation. Nous introduisons alors deux types
d’actions qui intègrent Moore et Mealy.
Ces actions sont : - action à mise à zéro implicite notée : AMZI,
- action à mise à zéro explicite notée : AMZE.

VHDL SYNTHETISABLE A. Nketsa 31 14/11/2022


AMZI
Principe :
Cette action est représentée sur le graphe par des mises 1 éventuellement conditionnelles. C'est-à-dire que par défaut
l'action n'est pas active.

Représentation sur le graphe :


Chaque mise à 1 conditionnelle est notée :
Nom_action = expression

Remarque :
Les mises à 0 sont implicites. Elles ne sont pas indiquées sur le graphe. Ceci permet de ne pas surcharger le graphe.

VHDL SYNTHETISABLE A. Nketsa 32 14/11/2022


AMZE
Principe :
Cette action est représentée sur le graphe par ses mises 1 conditionnelles et ses mises à 0 conditionnelles.
Cela signifie que la dernière valeur affectée à une action reste valable jusqu'à une nouvelle autre valeur. Il y a donc
implicitement une notion de mémoire (la dernière opération effectuée sur l’action est mémorisée).
Représentation sur le graphe :
Elle comporte deux parties :
Les mises à 1 (identiques AMZI)
S = Set
S Nom_action = expression S Nom_action_mu = expression
ou

Les mises à 0 (identiques AMZI)


R = Reset
R Nom_action = expression R Nom_action_mz = expression
ou
Remarque :
Le nom de l’action est suivi des suffixes _mu et _mz respectivement pour les mises à 1 et les mises à 0.
Remarque : AMZI (AMZI Synchronisées)
Les actions AMZI sont purement combinatoires. Elles présentent donc inévitablement des aléas. Une contrainte du cahier des charges,
peut imposer que ces actions soient sans aléas.
Pour cela, il faut les synchroniser à l’aide d’un étage tampon. Ces actions seront alors appelées AMZI synchronisées (par la suite :
AMZIS).

Notation des AMZIS : ces actions sont notées sur le graphe d’état comme une AMZI suivie d’une étoile. Chaque mise à 1 est donc
notée : Nom_action(*) = expression. Les mises à 0 sont implicites (comme pour les AMZI). Elles ne sont pas indiquées sur le graphe.

VHDL SYNTHETISABLE A. Nketsa 33 14/11/2022


4-3 Les sources des actions
Les actions ou leurs constituants (dans le cas des AMZE) peuvent être placés sur des états ou sur des transitions. Les actions sur
transition sont donc les actions de type de Mealy.
- Action sur état : elle dépend de l'état Nom_action = expression
de la machine des états et cx
éventuellement des entrées, etatx etaty

- Action sur transition : elle dépend Nom_action_trans = expression


de l'état amont et de la condition cx
associée à la transition et des etatx etaty

entrées.

Remarque importante :
En électronique numérique, nous démontrons que toutes les actions de commande peuvent se ramener à des actions binaires de
type commande synchrone.

Exemples :
Toutes les commandes synchrones d'un compteur, registres, etc.
Pour cela, on peut associer à la mae un graphe de donnée pour les calculs complexes.

VHDL SYNTHETISABLE A. Nketsa 34 14/11/2022


4-4 Exemple de machine à états avec tous les types d’action
e2 S S1 = 1

R S1 = 1
S S2 = e4
e0
e1
et0 et1 et2 S0 = 1

e3.e2

Analyse et compréhension de la mae


- l'évolution est facile à comprendre
Analyse des actions
S0 est une AMZI => elle est combinatoire et elle prend la valeur 1 sur l'état, et2
S1 et S2 sont des AMZE => elle nécessite chacune une mémoire
S1 est mise à 0 sur l'état, et0. donc S1_mz =1
est mise à 1 sur la transition entre et2 et et1 donc S1_mu = et2. e2
S2 est mise à 1 sur la transition entre et1 et et2 et si e4 =1 donc S2_mu = et1 . e1 . e4
Bascule pour la mémorisation de S1 D_S1 = S1_mu + Q_S1. /S1_mz
Bascule pour la mémorisation de S2 D_S2 = S2_mu

Remarque importante :
Le type d'action AMZE (S1 et S2) a permis de simplifier le graphe car si on avait utilisé Moore et ou Mealy, il aurait fallu quadrupler
l'état et1 pour tenir compte de tous les cas possibles de S2 et S1 dans l'évolution.

VHDL SYNTHETISABLE A. Nketsa 35 14/11/2022


Exemple
Considérons le parcours du graphe pour S1
1- venant de et0 vers et1 S1= 0
2- venant de et2 vers et1 S1= 1
3- tant que l'on reste dans les états et1 et et2 S1 restera à 1 par effet mémoire
4- S2 ne passera à 1 que lorsque l’on passe de l'état et1 vers et2 et que e4 =1 et S2 gardera cette valeur tout le temps.

Compléter le tableau d'évolution ci-dessous


Entrées Sortie
S0(AMZI) S1(AMZE) S2 (AMZE)
Etat e4 e3 e2 e1 e0 Etat suivant mu mz VF mu VF
actuel
T V T V T V V T mu V

T = Type action (E sur état T sur transition) V= valeur temporaire ou finale

VHDL SYNTHETISABLE A. Nketsa 36 14/11/2022


4-5 Démarche construction d'une machine à états pour la commande
1- lire le cahier des charges
2- Identifier les fonctions ou composants qui apparaissent de façon naturelle dans le cahier des charges
3- Faire une première analyse de fonctions ou composants identifiés pour savoir s'ils sont directement commandables ou pas.
4- Définir la vue externe de chaque fonction ou composant identifié.
5- Analyser la fonction demandée du système à construire.
Trois situations peuvent en découler :
Les commandes à générer pour les composants à commander du système
a) ne nécessitent ni mémoire ni séquence, dans ce cas le problème est combinatoire
donc table de vérité à variables introduites
b) nécessitent soit de la mémoire soit une séquence soit les deux, donc le problème est séquentiel
Identifier les séquences
Réunir les séquences pour obtenir une mae
c) mélange combinatoire – séquentiel => sera traité dans un autre chapitre

VHDL SYNTHETISABLE A. Nketsa 37 14/11/2022


Exercices

1- Séquence de comptage
Décrire et réaliser une machine à états qui commande un compteur-décompteur programmable de 4 bits pour réaliser la séquence cyclique
suivante : (0 - 9)  (13 - 2)  ( 3 - 7)
Donner la vue externe du système.
Donner la vue interne du système pour identifier les commandes à générer.

VHDL SYNTHETISABLE A. Nketsa 38 14/11/2022


Systèmes complexes
- Introduction
- Définition
- Structure et Modélisation du bloc de commande
- Mise en œuvre
- Cas particulier : Mise en cascade synchrone de compteurs

1 Introduction
Nous avons traité 2 systèmes de base en électronique numérique :
- le système combinatoire :
pour lequel la même combinaison des entrées produit le même résultat en sortie au temps de propagation près.
Nous avons représenté ce type de système par le modèle, la table de vérité à variables introduites.
On peut dire que ce type de système ne dépend pas du temps et ne possède pas de mémoire.
- le système séquentiel :
pour lequel la même combinaison des entrées ne produit pas obligatoirement le même résultat en sortie.
Pour ce type de système, il y a une notion de temps et du passé qui est pri en compte.
Cette prise en compte se traduit pas la notion de mémoire.
Nous avons représenté ce type de système par le modèle, la machine à états finis.
Par ailleurs, nous avons limité la mise en œuvre de ce type de système à sa version synchrone. Pour des raisons pédagogiques, nous
avons présenté ce type de système en 2 étapes :
 les systèmes séquentiels synchrones simples dont la modélisation et la mise en œuvre sont directes,
 la machine à états avec une mise œuvre synchrone
Remarque : il existe d'autres représentations des systèmes séquentiels que nous n'aborderons pas dans ce cours.
Pour étudier les systèmes séquentiels, nous avons considéré 2 blocs :
 le bloc des bascules qui constitue la mémorisation
 le bloc combinatoire qui calcule l'évolution du système
Conclusion: Nous avons travaillé sur la base des modèles.

VHDL SYNTHETISABLE A. Nketsa 39 14/11/2022


2 Définition
Un système complexe en électronique numérique est un système qui met en œuvre plusieurs modèles de base plus ou moins
communicants.
En général, dans le contexte de l'électronique numérique, un système complexe est utilisé pour le contrôle-commande des dispositifs.

3 Structure et Modélisation
Tout système en électronique Système complexe
numérique peut être décomposé en 2
parties : arazb
Partie commande Partie opérative
- une partie opérative ck entrees #1
Contrôle #1
Composant #1
- une partie commande que nous sorties #1
Commande #1

appellerons dans ce cours, bloc de


capteurs
commande (Bcmd). entree
actionneurs
Procédé
sorties

Contrôle #n
entrees #n
Commande #n Composant #n
sorties #n

3-1 Partie opérative


La partie opérative est un ensemble de composants à commander.
Une partie opérative peut elle-même être un système complexe transformé en composant.
Nous allons considérer que tous les composants de cette partie opérative sont disponibles. Dans tous les cas, ils peuvent être construits et
transformés en composants.
Par exemple les registres, les compteurs et les procédés sont considérés comme des composants de la partie opérative.

VHDL SYNTHETISABLE A. Nketsa 40 14/11/2022


3-2 Partie commande
La partie commande permet de faire fonctionner les composants de la partie opérative pour atteindre les objectifs du système.
Nous allons insister sur cette partie commande car la partie opérative est disponible.
En suivant le même principe basé sur les modèles, nous allons utiliser les modèles que nous avons traités pour représenter le bloc de
commande.
Le bloc de commande peut être :
- uniquement combinatoire donc le modèle de représentation est la table de vérité à variables introduites,
- uniquement séquentiel, donc le modèle de représentation est la machine à états finis
- mixte, c'est-à-dire qu'il peut nécessiter plusieurs fois les deux modèles de base : combinatoire et séquentiel.
Dans ce cas, on doit pouvoir organiser le bloc de commande en modes de fonctionnement permettant de passer d'un mode à l'autre
tout en couvrant le fonctionnement du système. Cette année, nous allons nous placer dans le cas où ces modes de fonctionnement
sont indépendants avec des phases de changement de mode que nous ne traitons pas directement ici.
Pour représenter ce bloc de commande mixte, nous allons utiliser une table de vérité à variables introduites donc la variable
principale est le mode de fonctionnement.

Remarque très importante :


Lorsque le système complexe nécessite des composants séquentiels synchrones, le système complexe sera synchrone. C'est-à-dire que :
- une seule entrée de démarrage du système : arazb
Chaque entrée asynchrone d'un composant séquentiel du système devra utiliser cette entrée.
- une seule entrée d'horloge : ck
Chaque bascule synchrone aura son entrée d'horloge connectée à ck

Conséquence importante :
Toutes les tables permettront de générer les signaux pour la commande des entrées synchrones des systèmes de la partie opérative.

VHDL SYNTHETISABLE A. Nketsa 41 14/11/2022


4 Mise en œuvre
La mise en œuvre va consister à traduire le (les) modèle(s) en équations ou langage.

Exemple de table de vérité pour système complexe


Mode de Composant #1 Composant #2 Procédé
fonctionnem
ent
M1 M0 sraz sload en E sload shiftl E Action1 lampe

VHDL SYNTHETISABLE A. Nketsa 42 14/11/2022


4-1 Exemple d'application : Comptage complexe
On veut réaliser un dispositif de comptage sur 4bits ayant 4 modes de fonctionnement
mode 0 : comptage modulo 14
mode 1 : Décomptage de 12 à 6
mode 2 : comptage et arrêt du comptage si q=9
mode 3 : figer le compteur à 5

4-2 Analyse et bilan de la partie opérative


L'analyse du cahier des charges montre que la partie opérative est constituée d'un arazb
compteur_décompteur binaire modulo 16. ck

sraz
Q[3..0]
sload
en
ud
E[3..0]
Cptg_4bits

4-3 Structure
Le système est composé : Cpt_cplexe
- d'une partie opérative (cptg_4bits) arazb
- d'un bloc de commande (Bcmd) ck
arazb
ck
Bcmd
csraz
csraz sraz
Q[3..0]
csload
csload sload
M[1..0] cen
cen en
cud
cud ud
Iq[3..0]
cE[3..0]
Iq[3..0] cE[3..0] E[3..0]
Cptg_4bits

VHDL SYNTHETISABLE A. Nketsa 43 14/11/2022


4-4 Analyse du bloc de commande
Quelque soit le mode, on constate que la commande du compteur_décompteur revient à fixer le fonctionnement de ce compteur-
décompteur, de contrôler son fonctionnement et de surveiller un changement de mode.
Donc la commande est combinatoire car on n'a pas besoin de mémoire.

Nous allons construire la table de vérité en 2 étapes :


- bloc de commande accepte les phases transitoires lors des changements de mode
- bloc de commande réduit les phases transitoires

a) Table de vérité à variables introduites avec des phases parasites


mode Commandes compteur
M1 M0 csraz csload cen cud Ce[3..0] remarque
0 0 Iq=13 0 1 0 0 Compteur modulo 14
0 1 0 Iq=6 1 1 12 Décomptage de 12 à 6
1 0 0 0 Iq  0 0 Comptage et arrêt à 9
9
1 1 0 1 x x 5 Figeage à 5

Cette commande présente des cycles ou des phases parasites.


Par exemple, pour le passage du mode 0 au mode 1
si le compteur-decompteur est à 2 lorsque le passage est demandé, alors le compteur sera à 2 au début du mode 1. Ce qui l'oblige à
générer 2, 1, 0, 15, 14, 13 puis 12 pour commencer le mode 1.
La séquence 2, 1, 0, 15, 14, 13 est une séquence parasite.
On peut réduire cette phase en construisant une table de vérité plus complexe.

VHDL SYNTHETISABLE A. Nketsa 44 14/11/2022


b) Table de vérité à variables introduites avec des phases parasites réduites
mode Commandes compteur
M1 M0 csraz csload cen cud Ce[3..0] remarque
0 0 Iq=13 0 1 0 0 Compteur modulo 14
Iq  13
0 1 0 Iq=6 1 1 12 Décomptage de 12 à 6
Iq  6 Ou Iq >12
1 0 0 0 Iq  9 0 0 Comptage et arrêt à 9
1 1 0 1 x x 5 Figeage à 5

VHDL SYNTHETISABLE A. Nketsa 45 14/11/2022


5 Application système complexe : Mise en cascade synchrone de compteurs

La mise en cascade synchrone de compteurs synchrones est un système complexe composé :


- pour la partie opérative des compteurs
- pour la partie commande d'une table de vérité à variables introduites.

Exemple1
On veut réaliser un système de comptage en BCD modulo 60.
Ce système dispose par ailleurs d'une entrée de mis à 0 asynchrone, arazb (active à 0), d'une entrée de mise à zéro synchrone,
sraz_bcd_60 (active à 1) et d'une entrée d'autorisation de comptage, en_bcd_60 (active à 1)
Donner la vue externe et interne de ce système en faisant apparaître le bloc de commande et la partie opérative.

VHDL SYNTHETISABLE A. Nketsa 46 14/11/2022


Analyse et bilan de la partie opérative
Comptage BCD
Un comptage BCD est un comptage comme en décimal avec dizaine et unité
Qd[3..0] Qu[3..0]
0
1
0
9 Détection de 9 pour faire avancer les Avancement des dizaines et mise à zéro des secondes
dizaines de 1
0
1
1
9 Détection de 9 pour faire avancer les
dizaines de 1
0

9 Détection de 9 pour faire avancer les Avancement des dizaines et mise à zéro des secondes
dizaines de 1
0

5
9 Détection de 59 pour passer à 0 Mise à zéro des dizaines et mise à zéro des secondes
0
0

VHDL SYNTHETISABLE A. Nketsa 47 14/11/2022


Dans cet exemple, nous utiliserons le compteur_décompteur modulo 16
arazb
disponible
ck

Nous n'avons pas besoin de sraz


Q[3..0]
sload, ud et E[..] 0 sload
en
Donc les commandes ses limiterons à 0 ud
Sraz et en 0000 E[3..0]
Cptg_4bits

D'où la vue externe et interne cpt_bcd_60

arazb arazb
Bcmd_bcd_60 arazb
ck
ck ck
Cptg_4bits
csrazd
sraz
iqd[3..0] qd[3..0]
cend
en Q[3..0]
0 sload
Sraz_bcd_60 0 ud
0000 E[3..0]
En_bcd_60
arazb
arazb
ck
ck Cptg_4bits
csrazu
sraz
cenu iqu[3..0] qu[3..0]
en Q[3..0]
iqd[3..0]
0 sload
iqu[3..0] 0 ud
0000 E[3..0]

D’où la table de vérité

Sraz_bcd_60 En_bcd_60 csrazd cend csrazu cenu


1 x 1 x 1 x
0 1 iqd=5 iqu=9 iqu=9 1
Et
iqu=9
0 0 0 0 0 0
VHDL SYNTHETISABLE A. Nketsa 48 14/11/2022
Mini Projet : Réalisation d'un compteur BCD modulo 60 et modulo 24
Réalisation du comptage horaire HH:MN
Nous allons utiliser le principe des systèmes complexes traités lors du rappel de ENN

Pour cela, on part du schéma suivant :


cpt_bcd_60

U0_cpt_diz
arazb arazb
Bcmd_bcd_60 arazb
ck Cptgn
ck ck
csrazd
sraz
iqd[3..0] qd[3..0]
cend Q[n-1..0]
en
0 sload finc
Sraz_bcd_60 0 ud open
0000 E[n-1..0] find open
En_bcd_60
4 gen(n:=3)

U0_cpt_unite
arazb
arazb
iqd[3..0] ck
ck Cptgn
iqu[3..0] csrazu
sraz
cenu iqu[3..0] qu[3..0]
en Q[n-1..0]
0 sload
finc
0 ud open
0000 E[n-1..0] find open
4 gen(n:=3)
Detecte_59

VHDL SYNTHETISABLE A. Nketsa 49 14/11/2022


Et on utilise la table du bloc de commande :
Detecte_59
Sraz_bcd_60 En_bcd_60 csrazd cend csrazu cenu Iqd=5 et iqu=9
1 x 1 x 1 x
0 1 iqd=5 iqu=9 iqu=9 1
Et
iqu=9
0 0 0 0 0 0

a) Décrire en VHDL et simuler ce compteur BCD modulo 60


b) Tester sur site

c) Modifier ce compteur pour réaliser un compteur BCD modulo 24 et simuler le.


d) Tester sur site

c) On veut maintenant utiliser les deux compteurs BCD pour réaliser le comptage HH:MN
c-1) Donner le schéma de ce nouveau compteur
c-2) Décrire en VHDL et simuler ce compteur.
c-3) Tester sur site

VHDL SYNTHETISABLE A. Nketsa 50 14/11/2022


Schéma du compteur HH:MN
horloge_heure_mn

U0_cpt_bcd_24
arazb Bcmd_bcd_horloge arazb
arazb
ck
ck ck Cpt_bcd_24
csrazh
sraz
cenh Qd_h[3..0]
en qd[3..0]

Sraz_horloge qu[3..0] Qu_h[3..0]

En_horloge Detecte_23
Detecte_23

U0_cpt_bcd_60
arazb
arazb
ck
ck Cpt_bcd_60
csrazmn
sraz Qd_mn[3..0]
cenmn qd[3..0]
en
qu[3..0] Qu_mn[3..0]

Detecte_59
Detecte_59

idetecte_59

Table de commande

Sraz_horloge En_horloge srazh enh srazmn enmn


1 *
0 1
0 0

VHDL SYNTHETISABLE A. Nketsa 51 14/11/2022


Fonction PWM
1- Description du principe
La fonction PWM est une fonction qui permet de générer un signal de rapport cyclique variable. C’est-à-dire que le rapport, la durée de
l’état haut du signal sur la période, est variable. R = TON/période

Chronogramme PWM duree_haut


PWM
periode

2- Application d'un PWM


On utilise ce type de signal pour commander la vitesse d'un moteur à courant continu.
Par exemple si TON/periode =
0% (TON = 0) alors le moteur est à l'arrêt
50% TON = période/2 alors le moteur tourne à la moitié de la vitesse maximale
100% TON = période alors le moteur tourne à la vitesse maximale

3- Principe de réalisation et bilan des fonctions


Le principe de réalisation de la fonction PWM consiste à utiliser :
- un compteur libre qui compte le temps
- deux valeurs d’entrées qui représentent l’une la durée de l’état haut et l’autre celle de la période.
- deux comparateurs pour déterminer d'une part la fin de la période et d'autre part la fin de la durée de l'état haut
- un prédiviseur qui autorise le compteur libre. Le prédiviseur permet d’adapter la période et le nombre de bits de codage de la période
et de la durée de l’état haut.

VHDL SYNTHETISABLE A. Nketsa 52 14/11/2022


4- Schéma de principe

comparateur periode
Periode-1
+ -
srazc
-
horloge
prediviseur
Fin_prediv
sraz
+ Freq_pwm
en
pred
Compteur libre
+
Freq_cpt
Freq_syst
TON TON

Freq_cpt = freq_syst/pred pred est le modulo du prédiviseur mais on charge pred-1 dans le prédiviseur
Freq_pwm = freq_cpt/(periode) periode est le modulo du compteur libre.
Donc on détectera periode-1 pour mettre le compteur libre à 0 avec une précaution de maintenir la bonne
durée de l'état période-1.

VHDL SYNTHETISABLE A. Nketsa 53 14/11/2022


5- Cahier des charges
On veut réaliser un PWM dont la fréquence peut varier de 10Hz à 20Khz.
La durée de l’état haut (TON) doit pouvoir prendre les valeurs de 0 à 2000.
Le modulo du compteur libre correspondant à la période du PWM pourra varier de 0 à 2000
a) Calculs préliminaires
La fréquence du FPGA est de 10Mhz
Calculer le nombre minimum de bits de TON (pour pouvoir représenter les valeurs de 0 à 2000)
Calculer le nombre minimum de bits de période (pour pouvoir représenter la valeur 2000)
En déduire en le justifiant le nombre minimum de bits du compteur_libre
Calculer la fréquence, freq_prediv, nécessaire pour obtenir une fréquence de pwm, freq_pwm=10Hz pour un modulo du compteur
libre = 100.
Cette fréquence, freq_prediv, étant fournie par le prédiviseur, calculer le facteur de division (modulo du prediviseur), pred, pour
obtenir cette fréquence à partir de 10Mhz.
En déduire le nombre maximum de bits de pred

b) Valeurs à charger dans les registres et le prédiviseur :


Nous allons utiliser un prédiviseur de 15bits (donc n=15) en cascade avec un compteur libre de 11bits qui est un compteur binaire de
11bits. On leur adjoint les registres (r_TON et r_periode) ayant le même nombre de bits que le compteur libre pour mémoriser
respectivement TON et periode.

VHDL SYNTHETISABLE A. Nketsa 54 14/11/2022


6- Bilan des composants et schéma (vue externe et vue interne)
a-1) Vue externe
Pour simplifier la gestion, on propose de considérer les entrées- sorties suivantes :
ck horloge du système
arazb (actif à 0) mise à zéro asynchrone générale et chargement asynchrone du système pour le démarrage
e_mperiode[10..0] entrées registre période (11 bits)
e_TON[10..0] entrées registre durée état haut (11 bits)
en_pwm (actif à 1) autorisation générale de fonctionnement du PWM
e_prediv[13..0] (14 bits) entrées de chargement du prediviseur
sortie_pwm sortie du pwm
Les deux registres d’entrée sont de 11bits, on appellera :
- l'un r_TON et l'autre r_mperiode
- leurs sorties respectives Q_ton et Q_mperiode.

VHDL SYNTHETISABLE A. Nketsa 55 14/11/2022


a-2) Vue interne
On veut compléter la vue interne ci-dessous comportant le prediviseur (prediviseurgn avec n=13), le compteur libre (compteurgn avec
n=11), les deux registres (reg_tampongn avec n=11), la bascule de génération du pwm (bascule), sortie_pwm et le bloc de commande à
décrire.
Remarques :
1 – Pour garantir la même base de temps, on doit réaliser un chargement synchrone automatique du prédiviseur à chaque fin_prediv.
2- le compteur libre est en cascade synchrone avec le prédiviseur
3- les comparaisons expliquées dans la réalisation seront décrites dans le bloc de commande.
4- Pour éviter les glitches (impulsions parasites) sur la sortie, sortie_pwm, elle sera réalisée avec la bascule, bascule_pwm.
5- les registres r_TON et r_mperiode seront rechargés à fin de la période en cours synchronisés avec fin_prediv.

Les composants disponibles du système commandé


a) Vue externe des composants du système commandé:

Prédiviseurgn cptgn Reggn Bascule PWM


arazb arazb arazb arazb
ck ck ck ck
sraz sraz Q en Q
sraz
sload sload en D
Q Q
en en E basculeD_en
ud ud gen(n:=4)
E E reggn
gen(n:=4) gen(n:=4)
cptgn cptgn
à utiliser 2 fois
r_utilisation sera :
r_TON ou r_periode

VHDL SYNTHETISABLE A. Nketsa 56 14/11/2022


Travail à faire
Vous devez décrire le système complet.
PWM
Operative_PWM

U0_prediv
arazb arazb
ck ck
0 sraz Q_prediv(15..0)
sloa d
Q
en
1 ud finc open
E_prediv(15..0) E find
16 gen(n:=4)
cptgn

arazb R_TON U0_cpt_libre


arazb arazb
arazb arazb
ck ck ck
ck ck
Q
sraz sraz
Q_libre(10..0)
E_TON(7..0) en 0 sloa d
Q
E en
gen(n:=4) 0 ud finc open
reggn 0 E find open
11 gen(n:=4)
R_mPeriode cptgn
arazb
arazb
ck
ck
Q
sraz
U0_bascule
E_mperiode(7..0) en
arazb arazb
E Sortie_PWM
ck ck
en_mperiode

sloa d_prediv
gen(n:=4) Q
q_mperiode

En_d_pwm
en_prediv
fin_prediv
reggn en

sraz_cpt
en_TON

iQ_libre
en_cpt
q_TON

D_pwm
D
basculeD_en

U0_bcmde_pwm
en_cpt
q_mperiode

sraz_cpt

en_d_pwm
sload_prediv
en_prediv

fin_prediv
q_TON
en_TON
en_mperiode

D_pwm
Q_libre

En_pwm
Bcmde_pwm

VHDL SYNTHETISABLE A. Nketsa 57 14/11/2022


7- Bloc de commande (bcmde_pwm)
a) Modélisation - Table de fonctionnement

periode

PWM TON
CK

Q_prediv 2 2 1 0 2 1 0 2 1 0 2 1 0 2 1 0 2 1 0

fin_prediv

Q_cpt_libre 0 0 0 0 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 0 0

Le chronogramme ci-dessus conduit à un bloc de commande décrit par l'algorithme suivant :


si en_pwm =1 alors
commande registre durée :
autorisation en_TON = ((q_libre ≥ q_mperiode) et fin_prediv)
E[] = E_TON
commande registre periode :
autorisation en_mperiode = ((q_libre ≥ q_mperiode) et fin_prediv)
E[] E[] = E_mperiode[]
Attention : periode = E_mperiode[] +1 (Compteur modulo periode[])
commande prediviseur :
autorisation (en_prediv) prediviseur = 1
rechargement (sload_prediv) prediviseur = fin_prediv
E_prediv (E_prediv) prediviseur = E_prediv[]
Attention
Facteur_prediv[] = E_prediv[] +1 (décompteur modulo E_prediv[] +1)
commande compteur_libre :
autorisation en_cpt (compteur libre)= fin_prediv
mise à zéro synchrone du compteur libre
si (q_libre >= q_mperiode) et fin_prediv alors
mettre compteur_libre à 0 (sraz_cpt=1)
fsi

VHDL SYNTHETISABLE A. Nketsa 58 14/11/2022


commande bascule_pwm :
si (q_libre < Q_TON ) alors mettre bascule_pwm à 1
sinon mettre bascule_pwm à 0
fsi

sinon
Initialiser les composants de la partie opérative
Prediviseur charger le prédiviseur
compteur_libre mettre le compteur libre à 0
bascule_pwm mettre bascule_pwm à 0
charger les registres r_ton par E_ton et r_periode par E_mperiode
fsi
Compléter la table de fonctionnement à partir de cette description algorithmique du bloc de commande,
On utilise :
- comme entrée principale : en_pwm
- comme entrées secondaires (variables introduites) : fin_prediv, e_TON, e_periode et q_libre
Remarque :
Pour la commande sraz_cpt , il faut tenir compte du fait que la durée du dernier état doit être la même que celle les autres états.

VHDL SYNTHETISABLE A. Nketsa 59 14/11/2022


Pour des raisons de clarté, on va définir trois tables avec les mêmes entrées principales.
Ces tables ont été étudiées et complétées.
Table 1
Entrées Sorties à commander
principales
Prediviseur Compteur_libre Remarques
En_pwm En_prediv Sload_prediv En_cpt Sraz_cpt Description de la fonction
0 Arrêt prediviseur
raz compteur_libre
Rechargement prediviseur
Et
1 Fin période
(raz sync cpt libre)
Table 2
Entrées
principales
Bascule synchronisation PWM Remarques
En_pwm En_D_pwm D_pwm
0 Mise à 0 de la bascule

1 Mise à 1 pendant la durée de ton

Table3 : registres de mémorisation de TON et periode


Registre TON Registre periode
En_pwm En_ton En_mperiode Remarques
0
1

VHDL SYNTHETISABLE A. Nketsa 60 14/11/2022


b) Programmation du système complet
1) Décrire en VHDL le système PWM, appelé pwm, par connexion des 2 composants développés ci-dessus
La description va comporter :
- la partie déclaration des signaux et des composants à utiliser
- la partie composant operative_pwm
- la partie composant bcmd_pwm
- la partie affectation des sorties

Pour des raisons pédagogiques; nous avons sorti les signaux à observer et analyser pendant la simulation :
- vq_prediv(13..0) pour visualiser l'évolution du prediviseur
- vsload_prediv
- vfin_prediv
- vsraz_cpt pour la synchronisation du pwm
- vq_libre(10..0),

2) Appliquer la démarche de simulation de 3-1) et 3-2) sur le même chronogramme


3-1) Choisir E_prediv[] = 0 et e_periode[] = 9
er
1 cas en_pwm = 1 TON = 0
ème
2 cas en_pwm = 1 TON = 5
ème
3 cas en_pwm = 1 TON = 9
ème
4 cas en_pwm = 1 TON = 10
ème
5 cas en_pwm = 0 TON = 5
3-2) Choisir E_prediv[] = 2 et e_periode[] = 9
Traiter les mêmes cas
4) Faire valider la simulation

VHDL SYNTHETISABLE A. Nketsa 61 14/11/2022


Fonction PWM (suite)
3- Test sur site : Nous ferons trois tests sur site
3-1 Test du PWM l : commande moteur
Relations avec la maquette:
ck = clk (10Mhz) e_TON[10..0]
arazb = Pouss(1) si inter(5) = 0
alors e_TON[10..0] = "0000" & entree[6..0]
e_periode[10..0] = 99 sinon e_TON[10..0] = "0000" & int[6..0]
en_pwm = Inter(7) fsi
sortie_pwm = sortie6 e_prediv[13..0]
si Inter(6) = 0
alors calculer e_prediv[] pour avoir une fréquence du PWM de 20Hz
sinon calculer e_prediv[] pour avoir une fréquence du PWM de 1khz
fsi
a) Compléter le schéma ci- dessous de la platine
platine…
VMOT
U0_pwm
arazb arazb
ck ck
Moteur

I1 n_mux2v1
I0
S E_prediv(13..0) Sortie_pwm
A
gen(n=1)
vQ_prediv open
E_mperiode(10..0)
vfin_prediv open
I1 n_mux2v1 vsraz_cpt open
I0
S E_TON(10..0) vsraz_cpt open
A
gen(n=1) vQ_libre open

en_pwm
PWM

VHDL SYNTHETISABLE A. Nketsa 62 14/11/2022


b) Appliquer le test sur la maquette (platine_test_PWM_moteur_er.vhd)
On va utiliser ce composant pwm dans ce fichier pour effectuer sa validation.
On veut utiliser le PWM pour commander la vitesse d'un moteur à courant continu.
Nous disposons de deux moteurs ayant les caractéristiques différentes. On prendra les fréquences suivantes de PWM :
- 20Hz soit une période de 50ms. (Inter(5) = 0)
Calculer pred et en déduire e_prediv (c’est-à-dire pour 10Mhz on a pred = facteur de division = )
Cela correspond à e_prediv =.
- 1Khz soit une période de 1000µs. (Inter(5 )= 1)
Calculer pred et en déduire e_prediv (c’est-à-dire pour 10Mhz on a un facteur de division = )
Cela correspond à e_prediv = .
c) Connecter un ventilateur dont on veut commander la vitesse et faire valider à un enseignant pour les deux cas de fréquence ci-dessus
d) Tester et faire valider
e) Connecter un moteur à courant continu fourni, faire varier la vitesse et faire valider à un enseignant pour les deux cas de fréquence ci-
dessus
f) Tester et faire valider

VHDL SYNTHETISABLE A. Nketsa 63 14/11/2022

Vous aimerez peut-être aussi