Microprocesseurs Et Microcontrolleurs
Microprocesseurs Et Microcontrolleurs
Microprocesseurs Et Microcontrolleurs
COURS, TD & TP
ELECTRONIQUE
NUMERIQUE
0. Préambule
ELECTRONIQUE NUMERIQUE
Différentes solutions électroniques :
. câblée : - avantage : rapidité - inconvénient : solution figée
. microprocesseur/microcontrôleur : - avantage : souplesse - inconvénient : lenteur/coût
. ordinateur embarqué : - avantage : souplesse - inconvénient : lenteur/coût
. FPGA (VHDL) : - avantage : souplesse - inconvénient : coût
Plan du cours
1. Logique combinatoire 1. Fonctions logiques combinatoires basiques. Technologie (1hC + 1h30TD + 1h30TPx2-Tuto CM)
- Algèbre de Boole
- Représentation des fonctions logiques
- Minimisation des fonctions logiques
- Matérialisation des fonctions logiques - Technologie
2. Logique combinatoire 2. Applications (1hC + 1h30TD + 1h30TP)
- Les Applications directes (Codeur / Décodeur / Transcodeur / Multiplexeur / Démultiplexeur / Circuits arithmétiques)
- Les Réseaux Logiques Programmables (ROM / PROM / PAL-GAL / PLA-PLD / FGPA / RAM / ASIC)
3. Logique séquentielle 1. Fonctions logiques séquentielles basiques (1hC + 1h30TD + 1h30TP)
- Les bascules synchrones (RST /D /T / JK)
4. Logique séquentielle 2. Applications (1hC + 1h30TD + 1h30TP)
- Registre
- Compteur
- Séquenceur
5. Le langage VHDL (1hC + 1h30TD + 1h30TP)
Le langage
- Eléments du langage / Unités de conception / Sous-programmes / Types de données / Déclarations & Spécifications / Instructions séquentielles
/ Instructions concurrentes / Généricité / Attributs / Paquetage
Modélisation / Synthèse
- Modélisation (Registre & Additionneur / Cicuits linéaires / Automate d’étas finis / ALU / RAM / ROM)
- Synthèse (Circuits combinatoires / Circuits synchrones)
Annexe
6. Circuits Programmables.
7. Microprocesseur
- Matériel (Achitecture / Séquencement des instructions / ALU / Registres / Pile)
- Logiciel (Assembleur / Jeu d’instructions / Modes d’adressage / Adressage des périphériques / Interruptions)
- Interfaces
- Microcontrôleur (Achitecture / Système de développement / Familles de microcontrôleurs)
Bibliographie
[1] R. Airiau & al. « VHDL langage, modélisation, synthèse » PPUR
[2] J. Auvray « Electronique des signaux échantillonnés et numériques » Dunod
[3] G. Baudouin/F. Virolleau « Les processeurs de traitement de signal: famille 320C5X » Dunod
[4] B. Beghyn « Le microcontrôleur 68HC11 » Hermès
[5] Dietsche/Ohsmann « Manuel des microcontrôleurs 8032/805/80535 » Publitronic
[6] M. Gindre / D. Roux « Electronique numérique » McGraw-Hill
[7] R.D. Hersch « Informatique industrielle: microprocesseurs/temps réel » PPUR
[8] H. Lilen « Microprocesseurs : du CISC au RISC » Dunod
[9] E. Martin/J.L. Philippe « Ingénierie des systèmes à microprocesseurs » Masson
[10] M. Meaudre J. Weber « VHDL du langage au circuit, du circuit au langage » Masson
[11] B. Mitton « Interfaces et bus microprocesseurs 68000/68070 » Mentor sciences
[12] B. Mitton « Microprocesseur 68000 » Mentor sciences
[13] B. Odant « Microcontrôleurs 8051/8052» Dunod Tech
[14] C. Tavernier « Microcontrôleurs » Radio
[15] R.L. Tokheim « Les microprocesseurs » Série Schaum
PPUR : Presses Polytechniques et Universitaires Romandes
__________
0. 0
Electronique Numérique 1. Logique combinatoire 1
Système logique
A l’instant discret n, une sortie s j , notée s nj , d’un système logique combinatoire ne dépend que de ses entrées
e1n ,..., e pn au même instant : (la seule connaissance des entrées suffit à déterminer les sorties)
s nj = f (e1n ,..., e pn ) (1 ≤ j ≤ m )
A l’instant discret n, une sortie s nj d’un système logique séquentiel dépend de ses entrées e1n ,..., e pn mais aussi de
n −1
l’état antérieur des sorties ( s1 ,..., s mn−1 ) qui peuvent être considérées comme des entrées secondaires, alors que les
entrées e1n ,..., e pn sont appelées primaires. (Notion de mémoire, car les systèmes séquentiels sont bouclés, ou encore
récursifs) : (la seule connaissance des entrées (primaires) ne suffit pas à déterminer l’état des sorties)
s = f (e ,..., e pn , s1n −1 ,..., s mn−1 )
n
j
n
1 (1 ≤ j ≤ m )
p m1
Entrées logiques
n Sorties logiques
e i
Système Logique
m2 s nj
Séquentiel
1≤ i ≤ p 1≤ j ≤ m
s nj −1 m = m1 + m 2
Sorties logiques antérieures
Logique combinatoire
1. Algèbre de Boole
1.1. Opérateurs Fondamentaux (ET, OU, NON)
En algèbre de Boole, une variable, ou une fonction, ne peut prendre que deux valeurs binaires que l'on note symboliquement
0 et 1.
A l’aide de variables binaires (donc à 2 états) on peut néanmoins décrire des variables ayant un plus grand nombre
d’états, en constituant ces dernières comme des mots binaires. Un mot binaire est une association de variables binaires.
Ainsi un mot constitué de m bits ou variables binaires peut décrire 2 m combinaisons logiques.
1. 1
Electronique Numérique 1. Logique combinatoire 1
On définit les opérateurs fondamentaux : (dans tout ce qui suit, x, a, b, c ... représentent des variables binaires (bits))
qui vaut 0 si x = 1
a) Le complément (≡ opérateur NON (NOT)) x de x
qui vaut 1 si x = 0
Un opérateur peut être associée à une représentation géométrique issue de la théorie des ensembles que l'on appelle
diagramme de Venn (ou d'Euler) :
a =1
a =1
a =1
a =1 b =1
a+b =1
a =1 b =1
a ⋅b = 1
1. 2
Electronique Numérique 1. Logique combinatoire 1
a+0= a
a) Elément neutre :
a ⋅1 = a
a +1= 1
b) Elément absorbant :
a ⋅0 = 0
(a ) = a
c) Complément : a+a =1
a ⋅a = 0
a+a = a
d) Idempotence :
a ⋅a = a
Les opérations d'addition et de multiplication logiques ont les propriétés des opérations de même nom en arithmétique
classique : commutativité, associativité, distributivité :
( a + b ) + c = a + (b + c ) = a + b + c
e) Associativité :
( a ⋅ b ) ⋅ c = a ⋅ (b ⋅ c ) = a ⋅ b ⋅ c
a +b = b+ a
f) Commutativité :
a ⋅b = b ⋅ a
(3) : ( )
a + (a ⋅ b) = a + a ⋅ (a + b ) (double distributivité) → a + (a ⋅ b) = 1 ⋅ (a + b ) = a + b .
(4) : ( )
x ⋅ a + x ⋅ a = x ⋅ a + a = x ⋅ 1 = x : Cette relation est importante car elle permet l'élimination d'une variable.
1. 3
Electronique Numérique 1. Logique combinatoire 1
a + b = a ⋅ b
généralisable à n variables
a ⋅ b = a + b
Le complément d'une somme est égal au produit des compléments des termes.
Le complément d'un produit est égal à la somme des compléments des termes.
Ces théorèmes peuvent être montrés à l’aide des diagrammes de Venn ou encore des tables de vérité (cf. plus loin).
a) Le OU exclusif (XOR)
La fonction a XOR b est notée a ⊕ b .
si a = 1 et b = 0
a ⊕ b vaut 1 si a ou b vaut 1, mais pas les deux à la fois: a ⊕ b = 1 si et a ⊕ b = 0 sinon .
ou si a = 0 et b = 1
On a bien évidemment la relation : a⊕b = a⊕b.
a ⊕ b peut évidemment s'exprimer à partir des opérations élémentaires : a ⊕ b = a ⋅b + a ⋅b .
Application : cryptographie
On a les propriétés : x ⊕ x =1
x⊕x =0
x⊕0 = x
x ⊕1 = x
→ x ⊕ a⊕ a = x ⊕0 = x
Soit à crypter la donnée x . La clé de cryptage et de décryptage est a . L’algorithme de cryptage/décryptage est le
OU exclusif entre la donnée et la clé de cryptage/décryptage (Cette méthode bien connue présente la particularité
d’utiliser la même clé ainsi que le même algorithme pour le cryptage et le décryptage).
à crypter clé cryptage décryptage
x a x⊕a (x ⊕ a ) ⊕ a = x
0 0 0 0
0 1 1 0
1 0 1 1
1 1 0 1
1. 4
Electronique Numérique 1. Logique combinatoire 1
a) Diagramme de Venn
Ex. :
a . b =1
a=1 b=1
b) Chronogramme
C'est la représentation de la fonction logique en fonction du temps pour diverses valeurs des variables d'entrée.
Ex. :
a
1
0 t
b
1
0 t
a.b
1
0 t
c) Table de vérité
C'est le tableau des valeurs de la fonction pour toutes les valeurs possibles des variables d'entrée.
Ex. :
Fonction NOT
a a
0 1
1 0
1. 5
Electronique Numérique 1. Logique combinatoire 1
Fonction OR
a b a+b
0 0 0
0 1 1
1 0 1
1 1 1
Fonction AND
a b a.b
0 0 0
0 1 0
1 0 0
1 1 1
Fonction NOR
a b a NOR b
0 0 1
0 1 0
1 0 0
1 1 0
Fonction NAND
a b a NAND b
0 0 1
0 1 1
1 0 1
1 1 0
Fonction OU exclusif
a b a⊕b
0 0 0
0 1 1
1 0 1
1 1 0
Fonction Coïncidence
a b a . b
0 0 1
0 1 0
1 0 0
1 1 1
d) Diagramme de Karnaugh
L'ordre des variables en abscisse et ordonnée est tel que lorsque l'on passe d'une case à la case adjacente une seule
variable est modifiée.
2 cases sont adjacentes si elles sont voisines verticalement, horizontalement ou en coin, mais toujours de telle sorte
qu’une seule variable d’entrée est modifiée lorsque l’on passe d’une case à une case adjacente.
1. 6
Electronique Numérique 1. Logique combinatoire 1
ici a = 1 b=1
1
0 0 1
1 1 0
si a = 1 et b = 0
s = a ⊕ b = 1 si Ce sont les 2 cases suivant la 2ème diagonale.
ou si a = 0 et b = 1
a a c b
bc 0 1 bc ab 0 1 ac 0 1
00 00 00
01 01 01
1 1 1 1 1 1
1 0
≡ ou 1 0 ou 1 0 ou …
23 = 8 cases, il faut utiliser un rectangle ayant par exemple 4 lignes et 2 colonnes, mais on peut prendre aussi 2
lignes et 4 colonnes. On remarquera que de la deuxième à la troisième ligne on passe de (0 1) à (1 1) et non de (0
1) à (1 0) de façon à ne modifier qu’ une variable à la fois (code Gray).
a b c ab ca s
0 0 0 0 0 0
0 0 1 0 1 1
0 1 0 0 0 0
0 1 1 0 1 1
1 0 0 1 0 1
1 0 1 1 0 1
1 1 0 0 0 0
1 1 1 0 0 0
1. 7
Electronique Numérique 1. Logique combinatoire 1
s
a
bc 0 1
00 0 1
01 1 1
1 1 1 0
1 0 0 0
c = 0 d= 0 00
d= 1
01
d= 1 11
c =1
10
d= 0
≡
01 0 0 0 0
1 1 0 1 0 1
1 0 0 1 0 0
1. 8
Electronique Numérique 1. Logique combinatoire 1
ab ab
ab 00 01 11 10 00 01 11 10
cd cd
cd 00 01 11 10 00 00
00 01 01
01 11 11
11 10 10
10
e=0 e = 0 e = 1
e=1 Cases adjacentes
La commodité d'emploi est alors très réduite car il est plus délicat de repérer deux cases adjacentes.
La situation est encore pire avec 6 variables où il faut travailler avec un cube ou 4 tableaux carrés.
Au delà de 6 variables aucune représentation n'est possible et il faudra faire appel à d'autres procédés
(logiciel de minimisation).
Les diagrammes de Karnaugh permettent comme nous allons le voir de simplifier très facilement des fonctions
booléennes complexes. Au delà de 5 variables des méthodes algébriques peuvent toujours les remplacer mais
sont beaucoup moins souples et d'un intérêt contestable.
e) Forme canonique
Toute fonction logique peut être mise sous forme canonique :
- comme une somme de mintermes ou encore,
- comme un produit de maxtermes.
On appelle minterme ou fonction unité de n variables un produit de ces n variables ou de leur complément.
Par exemple A B C D est un minterme des 4 variables A, B, C, D mais A C D n'en est pas un, car il manque la
variable B.
Une fonction boolénne de p variables est décrite comme une somme canonique si elle est mise sous la forme d'une
somme de mintermes de ces p variables.
On définit également un produit canonique qui est le produit de sommes contenant chacune toutes les variables.
(A + B + C + D )(A + B + C + D )(A + B + C + D ) est un produit canonique des 4 variables A, B, C, D.
On remarque que chaque parenthèse est un maxterme (complément d'un minterme). Ex : A + B + C + D = A BC D
Les diagrammes de Karnaugh permettent très facilement de mettre une fonction logique sous forme d'une somme
canonique car chaque minterme correspond à un 1 dans une seule case du diagramme.
Pourquoi simplifier une fonction logique ? Pour donner lieu à une réalisation matérielle la plus simple possible
mettant en jeu un nombre minimal de circuits logiques et de signaux logiques.
→ Utilisation des propriétés des opérations logiques élémentaires et des théorèmes de De Morgan.
La mise en équation d'un problème de logique peut conduire à une fonction boolénne assez complexe pouvant, par des
opérations algébriques simples, se mettre sous une forme beaucoup plus condensée.
1. 9
Electronique Numérique 1. Logique combinatoire 1
il reste: S = AC + {
B+ AC + A B + A
{ 3 { { {8
1 6 7
mais: 1 + 6 → A C + A C = A(C + C ) = A , terme identique à 8 donc inutile ( A + A = A)
il reste: S={
A+{
B+{
AB
8 3 7
mais encore: 8 + 7 = A(1 + B) = A
De façon générale de très nombreuses fonctions logiques sont susceptibles d'être simplifiées mais la forme la plus
compacte n'est pas toujours trouvée immédiatement car la voie de simplification algébrique la plus rapide n'est pas
évidente. Dans le cas de 5 variables au plus, les diagrammes de Karnaugh permettent d'effectuer cette simplification
« automatiquement ».
Cases adjacentes
1. 10
Electronique Numérique 1. Logique combinatoire 1
a) Boucles d'ordre 2
S
AB
CD 00 01 11 10
0 1 0 0
00 1 2 3 4
0 0 1 0
01 5 6 7 8
0 0 1 0
1 1 9 10 11 12
0 1 0 0
1 0 13 14 15 16
La boucle 7 - 11 donne un terme ABD : en effet la variable C qui change en passant d'une case à l'autre s'élimine :
S= A BD+ ABD ou : (
S = B( A D + A D ) = B A ⊕ D )
Les boucles d'ordre 2 font disparaître 1 variable dans les mintermes de la fonction. Cette variable est celle qui varie
dans ces boucles → les variables restantes sont celles qui sont constantes dans ces boucles.
Si on veut écrire et simplifier S, tous les 1 du tableau doivent être groupés en boucles (avec des boucles comptant le plus
grand nombre de termes possibles, les boucles pouvant éventuellement se recouper, du fait de la propriété : x + x = x )
ou si ce n'est pas possible, comptés individuellement.
b) Boucles imbriquées
Deux boucles sont possibles 7 - 11 ou 10 - 11, elles ont la case 11 en commun mais on peut appliquer la règle
précédente comme si ces boucles étaient disjointes. En effet S ne change pas si on dédouble un de ses termes.
S = A BC D+ A BC D+ A BC D+ A BC D
1222222223 1222222223
boucle 7 - 11 boucle 10 - 11
AB
00 01 11 10
CD ABD
00 0 0 0 0
01 0 0 1 0
1 1 0 1 1 0
1 0 0 0 0 0
BCD S = A B D + B C D = BD ( A + C )
1. 11
Electronique Numérique 1. Logique combinatoire 1
c) Boucles d'ordre 4
Supposons que deux boucles d'ordre 2 soient adjacentes.
01 1 1
1 1 1 1
1 0
00 1
1
AB
01
1 1 1
1 0 1
Elle peut être écartelée entre les deux bords ou même entre les quatre coins :
AB
CD 00 01 11 10
00 1 1
01
BD
1 1
1 0 1 1
Elle peut être en partie commune avec une boucle du deuxième ordre comme ci-dessous :
S
AB
CD 00 01 11 10
00 1 1
01 1 1 1 ACD
BC
1 1
1 0
1. 12
Electronique Numérique 1. Logique combinatoire 1
d) Boucles d'ordre 8
Si deux boucles d'ordre 4 sont adjacentes, on peut former une boucle d'ordre 8 pour laquelle trois variables
disparaissent.
00 1 1
01 1 1
1 1 1 1
1 0 1 1
Elles sont adjacentes et forment une boucle d'ordre 8 où seule la variable B est conservée.
Les boucles d'ordre 8 font disparaître 3 variables dans les mintermes.
e) Boucles d'ordre 2n
Les boucles d'ordre 2 n regroupent 2 n variables et font disparaître n variables dans les mintermes de la fonction.
De façon générale, on a intérêt à effectuer les plus grands regroupements possibles (≡ boucles d'ordre le plus élevé) pour
simplifier au maximum la fonction.
Il existe des cas où toutes les combinaisons possibles des n variables ne sont pas utilisées, c'est la cas par exemple des 4
variables constituant une tétrade en code DCB (Décimal Codé Binaire ou encore Binaire pur), les six pseudo tétrades
(10 à 15) sont exclues :
0 0000
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
8 1000
9 1001
6 codes restants non utilisés
Dans ces conditions pour simplifier une fonction booléenne de quatre variables dont le champ de variation est limité,
une valeur quelconque peut être donnée à la fonction dans les cases interdites de façon à constituer des boucles d'ordre
le plus élevé possible sur le diagramme de Karnaugh. Le signe X (ou φ ) étant utilisé pour indiquer qu'un 1 aussi bien
qu'un 0 convient. On parle souvent de fonctions φ booléennes.
Soit par exemple à commander un voyant qui doit être allumé lorsque les chiffres 4 ou 5 apparaissent et seulement dans
ces cas. Les chiffres sont codés en DCB sur quatre fils A, B, C et D. La fonction booléenne L à créer ne doit valoir 1 que
lorsque les configurations 4 (0100) ou 5 (0101) apparaissent.
1. 13
Electronique Numérique 1. Logique combinatoire 1
Mais les cases marquées d'une croix (X ou φ ) correspondent à des situations interdites qui ne se présenterons jamais sur
les quatre fils (pseudo tétrades) et peuvent être choisies comme on veut (X ≡ Don't care (sans effet)).
Les X utilisés dans les regroupements sont mis à 1, les X non utilisés sont mis à 0.
Ici on peut placer des 1 dans les deux cases correspondant aux états 1100 (12) et 1101 (13) de façon à former une
boucle d’ordre 4 :
CD
AB 00 01 11 10
00
01 1 1
1 1 X X X X
BC
1 0 X X
La lampe L s'allume dans les états 4 et 5 demandés et aussi pour 12 et 13 ce qui n'a pas d'importance puisque ces deux
derniers états ne se présentent jamais.
. Ne jamais regrouper uniquement des X ensemble : ça ne simplifie pas la fonction mais la complique en ajoutant
un terme inutile à la fonction.
. Chaque X a une valeur indépendamment des autres X.
. Ne jamais affecter des valeurs différentes à un même X, lors de différents regroupements le faisant intervenir.
C = 0 pour Vc = 0
C = 1 pour Vc = +5 Volts
Le contraire, bien que moins courant, est également possible. la logique est qualifiée alors de négative :
C = 1 pour Vc = 0
C = 0 pour Vc = +5 Volts
Dans ce qui suit nous travaillerons toujours en logique positive.
1. 14
Electronique Numérique 1. Logique combinatoire 1
AND A A
A.B ou AB & A.B ou AB
B B
A A
OR
B
A+ B
B ≥1 A+ B
BUFFER A A A 1 A
ou DRIVER (Un Buffer réhausse au niveau haut une tension de niveau haut diminuée)
A A A 1 A
NOT ou ou
A A A 1 A
A A
NAND AB & AB
B B
A A
NOR
B
A+ B
B ≥1 A+ B
A A+ B A
XOR =1 A+ B
B B
A A+ B A
XNOR =1 A+ B
B B
AND 3 entrées A A
B ABC B & ABC
C C
A A
B
OR 4 entrées C
A+B+C+D B
C ≥1 A+B+C+D
D D
Opérateurs ET Opérateurs ET / OU
Circuit 74XX00 4 portes AND 2 entrées Circuit 74XX51
1A & 1A &
1Y = 1A . 1B
1B 1B
2A 2A
≥1 1Y = (1A.1B) + (2A.2B)
2Y = 2A . 2B &
2B 2B
3A 3A &
3Y = 3A . 3B
3B 3B ≥1 2Y = (3A.3B) + (4A.4B)
4A 4A &
4Y = 4A . 4B
4B 4B
1. 15
Electronique Numérique 1. Logique combinatoire 1
Considérons le cas simple d'un inverseur en logique 5 volts, c'est un circuit dont la sortie est à 5 volts si l'entrée est au
zéro et réciproquement, ce qui ne définit sur la caractéristique de transfert que les deux points A et B de la figure
suivante. En réalité par suite de l'influence des autres circuits qui lui sont connectés, les niveaux d'entrée et de sortie d'un
tel inverseur n'ont jamais ces valeurs idéales et il y a lieu de considérer la courbe de transfert complète suivante :
Sortie Vs
A
VHM
VHm
V L0
V
LM
0 B
V VLM V L0 V H0 V VHM Ve Entrée
Lm Hm
En régime normal, la tension d'entrée au niveau zéro se trouve entre VLm et VLM ′ , la tension de sortie étant alors au
niveau haut (1) entre VHm et VHM .
Si une impulsion parasite vient se superposer à la tension d'entrée, la tension de sortie restera compatible avec le niveau
1 si le niveau V L 0 n'est pas dépassé.
M i = V L 0 − V LM est la marge de bruit admissible à l'entrée au niveau bas. De même, si l'entrée est au niveau 1, une
impulsion parasite ne doit pas faire tomber Ve en dessous de V H 0 .
M 0 = VHm − VH 0 est la marge de bruit admissible au niveau haut.
Ces deux marges définissent ce que l'on appelle l'immunité au bruit du circuit.
Si le niveau d'entrée d'un circuit change brutalement, son niveau de sortie ne varie qu'avec un certain retard appelé temps
de propagation t p .
La figure suivante illustre le cas d'un inverseur. Les temps de propagation sont couramment de 30 ns et peuvent, pour les
circuits les plus rapides, être inférieurs à 1 ns.
La fréquence maximale d'utilisation au-delà de laquelle les signaux ne sont plus restitués par les circuits (limite haute de
la Bande Passante) est lié au temps de propagation.
V
e
1
0
t
V
s
1
0
t
tp
1. 16
Electronique Numérique 1. Logique combinatoire 1
CMOS
Entrance
On appelle entrance d'un circuit (ou fan in) la valeur du courant de commande d’une entrée de ce circuit exprimée en
une unité qui est le courant de comande typique de la famille (appelé charge).
Ex. : un circuit ayant une entrance de 2 consomme (ou fournit) un courant d'entrée double de celui d'un circuit
ordinaire de la même famille. Le courant unité correspond à ce qu'on appelle une « charge ».
Sortance
Il est clair qu’un circuit logique ne peut garantir sa tension de sortie que si le nombre de charges qui lui sont connectées
est limité (un niveau logique 1 de sortie chute à 0 si le nombre de charges est trop élevé) :
: circuit logique
Un circuit logique peut d'autre part, sans que le niveau logique de sortie ne sorte des limites permises, fournir un courant
maximal I S max . Le rapport entre ce courant maximal et celui correspondant à une charge est appelé sortance du
circuit (ou fan out, ou facteur pyramidal de sortie) : c'est le nombre maximal de charges que peut commander une sortie
(à entrée unitaire) en garantissant les niveaux logiques.
Ex. : à un circuit ayant une sortance de 10, on peut connecter 10 charges tout en garantissant les niveaux de sortie de
cette porte.
Le sens des courants est également très important. Une famille logique dont les circuits doivent être pilotés par un
courant entrant est dite à injection de courant. Dans le cas contraire, on parle de logique à extraction de courant :
1. 17
Electronique Numérique 1. Logique combinatoire 1
De façon à éviter l'action des signaux parasites (fil ≡ antenne !) les entrées non utilisées d'un circuit à entrées multiples
doivent être polarisées, soit en les reliant aux autres, soit en les connectant à la source d'alimentation ou à la masse
suivant le cas. Ceci est particulièrement important dans le cas des circuits ayant des courant d'entrée très faible comme
les circuits MOS. (Une entrée enl’air a un état indéterminé qui prend en général la valeur 1 par effet d’antenne).
on peut songer à utiliser 3 circuits ET à 2 entrées en faisant le produit des 2 produits partiels AB et CD :.
A AB
B
ABCD
C
D CD
Dans certains cas on peut associer plus directement les sorties des 2 circuits ET sans dommage pour les circuits. Si ceci
est possible, les circuits sont qualifiés d'expansibles :
A
B M A
B ABCD
C
C D
D ET câblé
On a bien un ET à 4 entrées :
. si AB = 0 et CD = 0 → M = 0 (pas de court-circuit)
. si AB = 1 et CD = 1 → M = 1 (pas de court-circuit)
. si AB = 0 et CD = 1 → M = 0 (court-circuit entre 0 Volt et 5 Volts (en TTL) → le résultat est 0 Volt, soit 0 logique)
. si AB = 1 et CD = 0 → M = 0 (court-circuit entre 0 Volt et 5 Volts (en TTL) → le résultat est 0 Volt, soit 0 logique)
Toutes les fonctions booléennes peuvent être construites à l'aide des trois opérateurs fondamentaux ET, OU et
complément. Ce groupe de trois opérateurs forme ce que l'on appelle un système logique complet. La matérialisation des
fonctions logiques nécessite donc de pouvoir réaliser des systèmes physiques remplissant ces trois fonctions.
Un système logique complet permettant la construction de toute fonction peut cependant être réalisé en utilisant un
nombre plus faible de structures de base. Par exemple, le groupe des deux fonctions ET et complément constitue un
système logique complet. En effet, la fonction OU peut être reconstituée à partir de ces deux fonctions seulement comme
le montrent les théorèmes de De Morgan :
(
A+ B= A+ B = A⋅B )
soit :
A
A
A+ B
B
B
1. 18
Electronique Numérique 1. Logique combinatoire 1
Soient, deux diodes et une résistance connectées comme le montre la figure ci-après. Admettons d'abord que les diodes
sont parfaites, de résistance nulle dans le sens passant : ( Rd = 0 pour V > 0) .
Si l'une ou l'autre des entrées A ou B est reliée à la masse (V = 0) , la sortie V S = 0 .
La sortie VS n'est au potentiel haut (S = 1 en logique positive) que si V A et V B sont au potentiel haut. On a réalisé le
produit logique S = A . B :
E = + 5V PORTE ET (Diodes) VA VB VS
D 2 bloquée mais
R 0 +E 0 D 1 passante
D1
A S à la masse
S D 1 bloquée
+E 0 0 D 2 passante
D2
B
VA VS S à la masse
VB D 1 D 2 passantes
0 0 0
S à la masse
D 1 D 2 bloquées
+E +E +E
VS = + E
(pas de courant dans R)
De même avec le circuit de la figure ci-dessous, la sortie ne vaut + E que si A ou B valent 1. (Somme logique A + B) :
D1
A PORTE OU (Diodes)
D2
B
S
R R/2
La mise en série de portes de type différent pose un certain nombre de difficultés liées au fait que les portes ET sont à
extraction de courant alors que les portes OU sont à injection de courant. Il faut leur adjoindre un élément actif du type
transistor qui peut par contre à lui seul constituer un système complet comme dans la famille RTL.
1. 19
Electronique Numérique 1. Logique combinatoire 1
R2
T
A
R1
A
VS
VA
R
T1
R1
A
T2
S
R2
B
Si VA = VB = 0 les deux transistors sont bloqués. Si l'une des tensions d'entrée vaut +E, le transistor correspondant se
sature : VS = 0 . D'où la table de vérité, correspondant à la fonction NOR : S = A + B :
A B S
0 0 1
0 1 0
1 0 0
1 1 0
Pour réaliser la porte ET, on peut utiliser deux inverseurs et un NOR conformément à l'expression AB = A + B .
Pour la porte NAND, on peut faire appel au montage direct de la figure suivante, mais qui est peu utilisé car les entrées
sont mal découplées entre elles :
E PORTE NAND (RTL)
T1
S = AB
A
T2
B
La structure de base en RTL est la porte NOR qui constitue à elle seule, comme on l'a vu plus haut, un système logique
complet. On remarque enfin que la RTL est une logique à injection de courant.
1. 20
Electronique Numérique 1. Logique combinatoire 1
Elle peut être considérée comme l'association d'une logique à diodes et d'un transistor inverseur. L'ensemble constitue
alors un circuit NAND qui à lui seul forme un système logique complet. Le schéma de principe est présenté sur la figure
suivante :
E PORTE NAND (DTL)
(principe)
R1 R2
A S = AB
B
Si VA = VB = + E , les deux diodes sont bloquées et T est saturé par le courant base traversant R1 ⋅ (V S = 0) . Si VA = 0
la diode d'entrée parfaite bloque le transistor (VS = E ) . En réalité si le point A est à la masse, l'anode de la diode
correspondante est un potentiel voisin de 0.6 Volt qui est aussi le seuil de conduction du transistor.
Le montage ne peut fonctionner que si le VBE limite de conduction du transistor est plus élevé que la tension de
conduction de la diode. Cela pourrait se faire avec des diodes au germanium associé à un transistor silicium (solution
incompatible avec l'intégration du circuit). Une solution plus efficace consiste à utiliser des diodes remontant le seuil de
conduction du transistor. Le circuit réel est représenté sur la figure suivante. Les deux diodes D4 et D5 remontent au
voisinage de 1.8 Volts la tension en P nécessaire à la conduction de T. Alors : si VA = 0 , V P = 0.6 Volt → T est
bloqué, VS = + E :
E
PORTE NAND 3 entrées (DTL)
R1 R2
D1
A
T
D2 D4 D5 S = ABC
P
B
D3
C
La logique DTL est une logique à extraction de courant qui n'est donc pas compatible avec la RTL.
Comme pour la logique à diodes les portes sont expansibles (on diminue la résistance de charge du transistor).
1. 21
Electronique Numérique 1. Logique combinatoire 1
Elle ne diffère de la DTL que par le remplacement du réseau de diodes d'entrée par un transistor spécial multi-émetteurs.
Cest une logique qui ne se conçoit qu'en circuit intégrés, elle est de loin la plus courante actuellement (série 54/74).
Comme en DTL, le circuit de base est une porte NAND.
La figure suivante représente le montage de base du circuit d'entrée, les diodes sont remplacées par les jonctions EB des
transistors. Les deux transistors d'entrée ont leurs bases et collecteurs reliés.
A=1 B=0 -> court-circuit 0-1 -> 0 sur la base de T3 -> T3 bloqué -> S=1
T2
A=1 B=1 -> 1 sur la base de T3 -> T3 saturé -> S=0
B
Lors de leur fabrication cettre liaison peut aller jusqu'à la fusion totale conduisant à un transistor multi-émetteur qui
réalise la fonction ET. D'où le circuit d'entrée de la figure suivante :
S = AB
A
Pour augmenter les performances, le circuit de sortie n'est pas un simple transistor. En effet un tel montage est très mal
adapté à l'attaque de charges capacitives. Considérons en effet la figure suivante :
+5V
+5V
R
0
T Vs Décharge de C dans T
Ve +5V
C
0
Recharge de C par R
Lorsque le niveau de sortie passe de + E à 0, le courant de décharge de C traverse le transistor qui en régime de
saturation se comporte presque comme un commutateur parfait. Lorsque le niveau de sortie passe de 0 à + E ce qui
correspond au bloquage du transistor, la charge de C doit se faire grâce à un courant traversant R, donc avec une
constante de temps RC appréciable. Pour diminuer le temps de montée il faut diminuer R ce qui augmente
proportionnellement la consommation du circuit.
Pour augmenter la vitesse on fait appel à un deuxième transistor monté à la place de R qui en se saturant branche
directement C à + E. Le montage présente quelques analogies avec le push-pull :
1. 22
Electronique Numérique 1. Logique combinatoire 1
4 kΩ 1.6 kΩ 130 Ω
T
3
T1 T2
A
D
1 T2
B S +E
T4 T4 S
+E
1 kΩ
Cas A = B = 1
Si V A = V B = +5 V , les diodes émetteur-base de T1 sont bloquées, par contre la diode base-collecteur est conductrice.
Un courant circule et T2 et T4 sont saturés. T2 étant saturé, sa tension collecteur est égale à sa tension émetteur soit
environ 0.6 Volt. Or T3 ne peut conduire (à cause de D1 ) que si sa base est portée à environ 1.2 V; il est donc bloqué.
Alors VS = 0 , S = 0 .
Annulons l'une des tensions A ou B (ou les deux). La résistance de 4 kΩ assure la saturation de T1 ce qui amène à zéro le
potentiel base de T2 donc bloque T2 et aussi T4 . T3 se trouve alors saturé grâce à la résistance de 1.6 kΩ reliant sa base
à + E, la sortie est alors au niveau haut. Ce circuit réalise donc bien la fonction NAND : S = AB .
Le montage constitué par les deux transistors de sortie T3 , T4 est appelé « totem pole », (pour chacun des 2 états
logiques on a : T3 bloqué et T4 saturé, ou l'inverse). Il permet des transitions rapides du niveau de sortie même sur
charge capacitive. Le temps de transit est couramment de 10 ns.
Comme la logique DTL, la logique TTL est une logique à extraction de courant.
TTL Schottky
Dans la famille précédente les transistors travaillent en commutation c'est à dire qu'ils sont parfois saturés. Or un
transistor saturé stocke des charges dans sa base qui doivent ensuite être évacuées. Ceci limite fortement la vitesse de
commutation.
Pour augmenter la vitesse, il faut éviter la saturation, ceci peut se faire en plaçant une diode en parallèle sur l'espace
base-collecteur, de façon à maintenir le collecteur à un potentiel très légèrement inférieur à celui de la base :
(T ne peut pas se saturer car D conduirait, ce qui amènerait la base à +0.15 volt bloquant T)
En réalité le gain de vitesse n'est pas grand car la diode elle même stocke des charges. La solution est trouvée en
remplaçant D par une diode Schottky. Une telle diode est constituée par un contatct métal semi-conducteur. Sa tension
de conduction est de l'ordre de 0.4 Volt et elle est très rapide car le phénomène de stockage est très réduit.
1. 23
Electronique Numérique 1. Logique combinatoire 1
Dans un circuit TTL le transistor multi-émetteur d'entrée peut être également de type Schottky (c'est à dire avec une
diode Schottky en parallèle) ou remplacé par des diodes Schottky comme en DTL :
S = AB
A A
B
B
Diode Shottky
Le gain en vitesse est important, les temps de transit étant de quelques nanosecondes seulement.
"1"
Commande
Circuit
des S
d'entrée interrupteurs
S
"0"
4 kΩ 1.6 kΩ 130 Ω
T
3
T1 T2
A
D
1
B S
T4
1 kΩ
≥1
Symbole : (c’est le symbole par défaut) Exemple: Porte OU totem pole
1. 24
Electronique Numérique 1. Logique combinatoire 1
La sortie S peut avoir 2 états (0 ou 1) selon que le transistor de sortie est respectivement saturé ou bloqué.
1k
≥1
Symbole : Exemple: Porte OU open collector
+5V +U
+5V +U
0 0
+E
Lampe
A S1
S1 ≥1
A
B ≥1 B
Interprétation électrique
S = (A+B) (C+D)
(A+B) (C+D)
1. 25
Electronique Numérique 1. Logique combinatoire 1
Q Q2 Q Q
1 3 4
A
Signal
R
3 A
S V
Entrée de validation Q Q
6 5
V Validation
R4
Ce type de circuit est très utilisé dans les systèmes logiques complexes dans lesquels les informations circulent sur des
lignes communes auxquelles sont reliées de nombreux circuits. Ce sont des BUS.
On voit sur l'exemple de la figure suivante que pour faire circuler l'information de A à B il suffit de valider seulement les
portes 1 et 6, toutes les autres portes devant être « inhibées » (déconnectées par état haute impédance) sous peine de court-
circuit destructeur: (les portes 1 à 6 pouvant être des circuits drivers d’entités informatiques par ex., mémoire, périphérique d’ordinateur ...).
(driver ≡ pilote ≡ circuit de commande, de contrôle, d’interface)
1 2 3
A
0 1 1
Entrée de validation
BUS
4 5 6 B
1 1 0
≥1
Symbole : Exemple: Porte OU tri-state
1. 26
Electronique Numérique 1. Logique combinatoire 1
Remarque :
Pour éviter que plus de 2 entités soient connectées simultanément au bus (ce qui entraînerait des courts-circuits), un
circuit programmable spécialisé (contrôleur de bus) gère ces signaux de validation.
S
Injecteur de courant
Entrée S
V GS = + 6 V
10
0.5 R = 10 kΩ
R
V GS = + 5 V R = 10 kΩ
S 20 k
E V GS = + 4 V 20 kΩ
40 k 40 kΩ
V GS = + 3 V
V GS = + 2 V
VE
V
0 DS
10 5
Or en circuit intégré, une résistance occupe d'autant plus de surface sur la "puce" que sa valeur est importante. On a
donc cherché à remplacer la résistance de charge par un second transistor MOS. Considérons un MOS canal N dont la
grille est reliée au drain, il constitue un dipôle dont la caractéristique est tracée sur la figure suivante. C'est à un décalage
de tension près, celle d'une résistance qui peut être utilisée come charge dans le montage inverseur.
I
V GS = 6 Volts
I 5
V 4
3
2 V
DS
1. 27
Electronique Numérique 1. Logique combinatoire 1
La figure suivante représente le montage fondamental de l'inverseur MOS dans lequel toute résistance a été bannie.
Nous ne détaillons pas ici les nombreuses variantes technologiques mises au point depuis quelques années et qui sont en
constante évolution, (grille en aluminium et isolement par de la silice, grille en silicium poly ou monocristallin,
isolement par du nitrure de silicium ayant une constante diélectrique élevée etc...).
+E +E
+E
A S
A S
A A
C B
Une particularité des MOS liée à leur impédance d'entrée très élevée est la présence d'une capacité grille-substrat qui
peut être utilisée comme élément de mémoire et limite les performances en vitesse.
Canal P
A
A
VE V
S
Canal N
Lorsque V E # +E, niveau haut, le MOS-N ayant sa grille positive est conducteur. Par contre le MOS-P est bloqué.
Donc VS est petit (VS ∼ 0) mais le courant consommé est nul, M2 étant bloqué.
Lorsque V E # 0 niveau bas, le MOS-N est bloqué (il s'agit toujours de MOS à enrichissement ayant un I DSS nul).
Par contre, M2 de type P est conducteur et VS ∼ E. Là encore M1 étant bloqué, le courant consommé par la cellule est nul.
Les deux transistors ne sont pas simultanément conducteurs, le circuit ne consomme donc rien à l'état stable. Une
consommation apparaît seulement en régime transitoire car il faut charger et décharger les capacités de structure. La
consommation typique à vitesse moyenne peut être cent fois inférieure à celle de la cellule identique à transistors à
jonctions mais la vitesse limite est actuellement plus faible, typiquement 10 MHz contre plus de 500 MHz pour des
ECL.
1. 28
Electronique Numérique 1. Logique combinatoire 1
Un des problèmes à maîtriser a été la protection des entrées contre les surtensions d'origine statique, la couche d'oxyde
des grilles est en effet très fragile. La solution a été trouvée en intégrant des diodes au niveau des entrées. Actuellement
ce système fonctionne bien et enlève tout souci à l'utilisateur concernant des manipulations destructrices.
+V
DD
+V
DD
A
B
M1 M2
M
4
M3
Si l'une des entrées est au zéro le MOS correspondant M1 ou M2 de type P est conducteur amenant S au +V DD .
Si au contraire A et B sont à +V DD , M1 et M2 sont bloqués mais M3 , M4 conducteurs, fixent S au zéro.
Un MOS n'ayant pas de tension d'offset les niveaux de sortie (sans charge) sont rigoureusement +V DD et zéro, les
impédances de sortie étant les résistances des canaux, ces résistances sont de l'ordre du kΩ.
Le courant d'entrée est toujours très faible, typiquement 10 pA, le courant susceptible d'être délivré en sortie est au
maximum de l'ordre du milliampère. Au moins en fonctionnement lent, la sortance est donc très grande. Les
constructeurs l'annoncent supérieure à 50.
Comme pour la famille TTL, il y a 3 variantes pour le circuit de sortie : totem pole, open drain, tri-state.
1. 29
Electronique Numérique 1. Logique combinatoire 1
M1 P
E
S
M2 N
I
Vc
Commande
Si VC = 1 , M 2 canal N est conducteur ainsi que M1 qui, grâce à l'inverseur I voit sa grille portée au 0 ; les deux MOS
se comportent alors comme leur résistance de conduction ∼ 200 Ω et Vout = Vin .
Si au contraire VC = 0 , M 1 et M2 sont bloqués, leur résistance de fuite étant supérieure à 1011 Ω .
En plaçant un système de ce type en sortie d'un circuit logique, on obtient le même résultat qu'avec le montage tri-state
de la TTL.
Le 4016 peut être utilisé avec des signaux d'entrée analogiques, son comportement est celui d'un interrupteur mécanique
à commande électrique :
+ 7.5
C
E E S
4016
S
10 kΩ
- 7.5
Les circuits CMOS sont de plus en plus utilisés grâce à leur souplesse d'emploi :
- niveaux de sortie très bien définis.
- grande immunité au bruit
(mais en contre partie les impédances d'entrée favorisent la réception de signaux parasites rayonnés).
- possibilité de fonctionnement dans une large plage de tensions d'alimentation.
- très faible consommation.
- Une dernière propriété des CMOS, liée à leur impédance d'entrée et comportement en sortie et la possibilité de les
utiliser dans les configurations où ils fonctionnent de façon pseudo-linéaire : amplificateur, oscillateurs, etc ...
Avec les séries 4000 et 40000, on trouve aussi la série 74C dont les circuts sont compatibles broche à broche avec ceux
portant le numéro correspondant en logique TTL.
Pour des raisons d’incompatibilité entre les familles logiques, tous les circuits logiques connectés d’un montage doivent
être de la même famille; dans le cas contraire, il faut en outre prévoir des circuits d’interfaçage.
Ce sont des circuits permettant l'association de circuits logiques appartenant à des familles logiques différentes. Les cas
les plus souvent rencontrés sont :
- l'attaque d'une logique lente, le plus souvent TTL, par une logique ultra rapide (ECL). L'inverse étant sans intérêt.
- une association de circuits TTL et CMOS.
1. 30
Electronique Numérique 1. Logique combinatoire 1
+5 V +5 V +5 V
TTL CMOS
Or sous 5 Volts, il faut pour le CMOS au plus 1.5 Volts au niveau 0 et au moins 3.5 Volts au niveau 1.
En conséquence, la TTL pilote sans problème le CMOS au niveau 0. C’est par contre un peu juste au niveau 1.
On utilise alors une résistance R dite de pull up (R de l’odre de 10 kΩ) qui remonte le niveau haut de la TTL.
Au niveau 1 il n’y a pas de problème car l’entrée TTL se contente d’un courant faible.
Il n’en est pas de même au niveau 0 : pour une tension de 0.8 Volt max, il faut extraire d’une entrée TTL un courant de
1.6 mA. Or une porte CMOS peut tout juste accepter 0.8 mA pour cette valeur de tension. La liaison directe est donc
impossible.
0.8 mA 1.6 mA
CMOS TTL
On peut alors utiliser un circuit d’interface spécialisé ou même un transistor intermédiaire (impliquant alors une
inversion).
+ 5 Volts
4.7 k
0.2 mA 22 k
TTL
CMOS
*1 *2 *3 *1
Entrées Sorties
*1 *2 *3 *1
1. 31
Electronique Numérique 1. Logique combinatoire 1
Symbole Description
& Fonction ET
≥1 Fonction OU
=1 Fonction OU Exclusif
= Fonction Coïncidence
2k Le nombre d’entrées activées doit être pair (pour activer la sortie)
2k+1 Le nombre d’entrées activées doit être impair (pour activer la sortie)
1 L’entrée unique doit être active (pour activer la sortie)
Tampon (amplificateur). Le sens du triangle indique le sens de propagation du signal
Elément présentant un hystérésis (trigger de Schmitt)
X/Y Codeur, convertisseur (DEC/BCD, BIN/7 segments)
MUX Multiplexeur
MUX ou DX Démultiplexeur
Σ Additionneur
P-Q Soustracteur (Comparateur numérique)
CPG Générateur de retenue anticipée
π Multiplieur
COMP Comparateur (amplitude analogique)
ALU Unité arithmétique et logique
Monostable programmable
1 Monostable
G Elément astable (la forme d’onde est optionnelle)
!G Oscillateur à démarrage synchrone
G! Oscillateur astable à arrêt commandé
SRG m Registre à décalage (m = nombre de bits)
CTR m Compteur m bits (cycle de 2m états)
CTR DIV m Compteur de cycle = m
ROM Mémoire morte (Read Only Memory)
RAM Mémoire vive (Random Access Memory)
FIFO Mémoire vive à rangement séquentiel file d’attente (First In First Out)
ou
Complément logique en entrée (la flêche indique aussi le sens du signal)
ou
Complément logique en sortie (la flêche indique aussi le sens du signal)
1. 32
Electronique Numérique 1. Logique combinatoire 1
0
Entrées groupées, pondérées de 0 à m
m
} Les combinaisons sont repérées de 0 à 2m -1
]
a a Dépendance d’une entrée envers une autre entrée. Ici, les entrées a et c sont
≡
1
b X1 b dépendantes de l’entrée b (même numéro) par la fonction X :
c 1 c G : ET
X = G, V, N, Z, C, S, R, EN, M, A V : OU
N : OU Exclusif
Z : relation d’interconnexion
a a C : relation de contrôle (horloge)
≡
1 &
b G1 b S : SET (Mise à 1)
c 1 c & R : RESET (Mise à 0)
EN : ENABLE (autorisation)
M : Sélection d’un mode de fonctionnement
A : Sélection d’une adresse
2.5.5. Symbole interne au contour du circuit pour les sorties (3)
et
Sortie de technologie trois états
1. 33
Electronique Numérique 1. Logique combinatoire 1
- Si plusieurs termes affectants portent le même numéro, les termes sont implicitement liés par un OU :
a
a ≥1
≡
G1
b
b G1
c 1 c &
- Un symbole précisant la fonction d’un terme affecté est placé à droite du numéro du terme affectant :
C1
1D
Terme affecté
- Si une entrée (ou une sortie) est affectée par plusieurs termes affectants, les numéros d’identification de chacun de ces
termes sont écrits séparés par des virgules et dans le même ordre que celui des relations logiques affectantes :
a a
≡
G1 & D
b b
1,2 D
c C2 c
- Si l’écriture d’un numéro d’identification risque d’introduire une confusion, il peut être remplacé par un autre
caractère, par ex. une lettre grecque :
a α a
≡
1
b Gα b G1
c α c 1
- Il est plus simple, lorsque des entrées de dépendance peuvent être groupées, d’affecter à chacune d’elles un poids, puis
d’identifier une combinaison donnée par le nombre binaire correspondant :
a borne inférieure
0
b
k
1
m
} G
0
2 m +1 − 1
borne supérieure
Le nombre binaire (k...ba)2 où (a) a le poids 20, (b) a le poids 21 etc ... est alors compris entre 0 et 2m+1.
On précise alors les bornes d’utilisation effective.
- Lorsqu’une entrée a plusieurs fonctions, il est possible de préciser ces fonctions sur une même figure, en séparant les
termes respectifs par des barres obliques (/) :
a
≡
G2 a
&
c 2 / C1 b C1
__________
1. 34
Electronique Numérique TD 1. Logique combinatoire 1
TD 1. LOGIQUE COMBINATOIRE 1
P
L Système S
P
P
a) Construire le système logique pour permettre de sortir ( S = 1 ) quand il ne pleut pas, ou quand il pleut et que
l'on est muni d'un parapluie. Construire également S directement.
b) Simplifier la fonction logique S :
b1) de façon algébrique
b2) de façon graphique
c) Donner le schéma électrique symbolique de la fonction logique S.
TD 1. 1
Electronique Numérique TD 1. Logique combinatoire 1
TD 1. 2
Electronique Numérique TD 1. Logique combinatoire 1
a
A { a
a
0
a
1
2
3
=1 =1 =1 =1
&
TD 1. 3
Electronique Numérique Tutorial 1. Tutorial Circuit Maker Numérique
2. Transcodeur
Tutorial 1. 1
Electronique Numérique Tutorial 1. Tutorial Circuit Maker Numérique
3. Data Sequenceur
4. Compteur
5. Macro
Programmer une macro pour réaliser un composant effectuant la fonction d’une porte AND à 3 entrées constituée de 2
composants portes AND à 2 entrées. Réutiliser ce composant pour tester un circuit AND à 4 entrées constitué du composant
AND 3 entrées (macro) précédemment créé et d’une porte AND à 2 entrées.
__________
Tutorial 1. 2
Electronique Numérique TP 1. Logique combinatoire 1
TP 1. LOGIQUE COMBINATOIRE 1
1. Matériel nécessaire
- Alimentation stabilisée ( 2x[ 0-30 V] _ + 1x[ 5 V] _ )
&&& &&&
- Multimètre
- Moniteur MS05 (plaquette de câblage)
- Câbles : 6 fils Banane, petits fils.
- Composants : - 4 Résistances 1 kΩ (1/4 Watt)
- 4 LEDs rectangulaires (3 Vertes, 1 Rouge)
- 3 mini-interrupteurs
Circuits logiques de la famille CMOS 4000 :
- 1 4071 : 4 OR à 2 entrées
- 1 4081 : 4 AND à 2 entrées
- Logiciel de simulation Circuit Maker
2. Notation du TP
Faire examiner par le professeur en fin de séance, les différentes parties du TP.
3. Etude Théorique
On reprend l’exercice du TD :
3.1. Synthèse de la Fonction logique MAX
Simplification de s :
( )
- algébrique : s = c ab + ab + ab(c + c ) = c(a ⊕ b ) + ab
- graphique (Karnaugh) : s = ab + bc + ac
c ab 00 01 11 10
0 0 0 1 0
1 0 1 1 1
TP 1. 1
Electronique Numérique TP 1. Logique combinatoire 1
4. Etude Expérimentale
4.0. Logiciel
- Portes logiques : pour des raisons de compatibilité, prendre uniquement des circuits de la même famille, par exemple
CMOS (série 40xx) conseillé, ou à la rigueur la famille TTL, série 74xx) :
Library : Digital → Digital by function
- Source binaire 0-5V : Analog → Power → Logic switch
- LED : Digital animated → Display → Logic display
- Simulation : Simuler en Digital
- Placer des « Logic display » en entrée et en sortie pour vérifier le fonctionnement des montages.
En utilisant exclusivement des portes logiques NOR, simuler les fonctions suivantes (vérifier avec le logiciel de
simulation) :
a) NON (NOT) (1 entrée)
b) OU (OR) (2 entrées)
c) ET (AND) (2 entrées)
d) NET (NAND) (2 entrées)
e) OUX ou XOU (XOR) (2 entrées)
A K
A K
Anode Cathode
__________
TP 1. 2
Electronique Numérique 2. Logique combinatoire 2
1.1.1. Définition
Un codeur est un dispositif qui traduit les valeurs d'une entrée dans un code choisi.
Par exemple, un clavier de console ou de machine à écrire comporte m touches. Chaque touche, représentative d'un
caractère, est affectée d'un numéro. L'opération de codage consiste à donner à chaque numéro (donc à chaque caractère)
un équivalent binaire, c'est à dire un mot composé d'éléments binaires.
B1
"1" e
0
s
B2 0
e1 Codeur
s
1
Bi N =i
Bm s n -1
e
m -1
2 n −1 < m ≤ 2 n
m entrées n sorties représentant le n° de
1 seule entrée à la fois est activée l'entrée activée dans le code choisi
( au niveau 1 )
(Dans la symbolique de ce schéma et contrairement à la majorité des technologies, une entrée « en l’air » est au niveau logique 0).
s n -1
Bm e
m -1
Si 2 entrées ou plus sont activées simultanément l'entrée sélectionnée pour le codage est celle ayant le
numéro d'entrée le plus élevé. Sinon le codeur prioritaire se comporte comme un codeur classique.
2. 1
Electronique Numérique 2. Logique combinatoire 2
s 0 = e8 + e9
s1 = e4 + e5 + e6 + e7
et le codage des sorties :
s 2 = e 2 + e3 + e6 + e7
s3 = e1 + e3 + e5 + e7 + e9
s s s s s s s s
0 1 2 3 0 1 2 3
2. 2
Electronique Numérique 2. Logique combinatoire 2
1.2. Décodeur
1.2.1. Définition
Un décodeur est un circuit qui délivre une (ou des) information(s) lorsque la combinaison des variables binaires d’entrée
est représentative du (ou des) mot(s)-code choisi(s).
e
0
s
0
e1 Décodeur
s
1
e e e
2 1 0
s n -1
e Décodeur
m -1
n ≤ 2m
m entrées n sorties
s s s
1 seule sortie à la fois est activée 7 6 0
L’expression d’une sortie si d’un décodeur est un minterme sur les entrées ei : si = mi
Exemple : Décodeur 3 entrées / 8 sorties défini par (code DCB des entrées : DCB → Décimal) :
s0 = e2 e1 e0
s1 = e2 e1 e0
M
s7 = e2 e1 e0
s s s s
0
s
1
... s
0 1 7 7
2. 3
Electronique Numérique 2. Logique combinatoire 2
Représentons une mémoire comme un tableau d'éléments binaires. Ce tableau est divisé en lignes et en colonnes. Pour
lire un mot mémoire, il faut lui envoyer le numéro de la ligne souhaitée : c'est son adresse. Une mémoire ayant 1 024
lignes, par exemple, nécessite 10 bits d'adresse. Un décodeur interne à la mémoire permet la sélection d'une ligne et
d'une seule à un instant donné.
Autorisation accès
ligne 0
ligne 1
adresse décodeur
ligne i
binaire 0 1 1 0 1 0 0 1
i 10
ligne 1023
Si un microprocesseur délivre une adresse sur 16 fils, il possède une capacité d'adressage (espace adressable) de 216 soit
65 536 mots. Les 1 024 mots de la mémoire précédente occupent donc une faible partie de cet espace.
Il est alors commode de partager celui-ci en 64 pages de 1 024 mots, chaque page pouvant correspondre à un boîtier
mémoire. La sélection du numéro de page, donc du boîtier correspondant (Chip Select), est effectué par le décodage de
6 bits parmi les 16 (en général les poids forts). Les bits restants permettent la sélection interne d'un mot mémoire.
a ..... a 10
9 0
adresse mémoire
a .... a a .... a sortie
15 0 15 10 6
décodeur CS
s
i Chip Select
La sortie si du décodeur est connectée à l'entrée Chip Select (CS). Si le nombre décimal équivalent à ( a15 L a10 ) 2 est
différent de i, la mémoire ne délivre aucune information en sortie. Dans le cas contraire, la sortie de la mémoire est le
contenu de la ligne dont le numéro est fixé par les adresses (a9 L a0 ) avec 0 ≤ i ≤ 63 .
Avec i = 3, pour accéder à la mémoire, le microprocesseur doit envoyer une adresse a15 L a 10 telle que :
(a15 L a10 ) 2 = 310 ce qui correspond à des adresses :
Comme toute fonction logique s peut s'exprimer comme une somme de mintermes : s = ∑ mi , il suffit, pour
i
engendrer s , de faire un OU avec les sorties si = mi d’un décodeur s = ∑ s i (une sortie de décodeur est un
i
minterme).
2. 4
Electronique Numérique 2. Logique combinatoire 2
Exemple :
N e2 e1 e0 s = f ( e2 , e1 , e0 )
0 0 0 0 0
1 0 0 1 0
2 0 1 0 0
3 0 1 1 1
4 1 0 0 0
5 1 0 1 1
6 1 1 0 1
7 1 1 1 1
e s
2 Décodeur 0
e s
1 Binaire 1
e s
0 2
s
3
s s
4
s
5
s
6
s
7
1.3. Transcodeur
Un transcodeur est un dispositif permettant de passer du nombre N écrit dans un code C1 au même nombre N écrit dand
le code C2 .
2. 5
Electronique Numérique 2. Logique combinatoire 2
01 0 0 0 0 01 1 1 1 1 01 1 1 0 0
11 1 1 1 1 11 0 0 0 0 11 0 0 1 1
10 1 1 1 1 10 1 1 1 1 10 1 1 0 0
X=A Y = AB + AB = A ⊕ B Z = A⊕ B⊕C
D'où le schéma :
A X
= 1 Y
B
= 1 Z
C
f b
g
e c
d
2. 6
Electronique Numérique 2. Logique combinatoire 2
1.4.1. Définition
Un multiplexeur est un circuit réalisant un aiguillage (recopie) de l'une des entrées de données (par la commande des
entrées d'adresse) vers une sortie unique. Il y a sélection d'une donnée parmi 2 n ( n entrées d’adresses).
n
2 entrées de données
D 7 .... D1 D0
MUX 2 → 1
A2 n
n entrées d'adresse A1
A0
S
1 sortie S
D
1
A
1
A A
0 0
0 0 D
A S 0
0
0 1 D
1
0 D 1 0 D
0 2
1 D 1 1 D
1 3
Equation de S : Equation de S :
S = D0 si A1 A0 = 00
S = D0 si A0 = 0 S = D1 si A1 A0 = 01
S = D1 si A0 = 1 S = D2 si A1 A0 = 10
S = D3 si A1 A0 = 11
soit : S = D0 A0 + D1 A0 soit : S = D0 A1 A0 + D1 A1 A0 + D2 A1 A0 + D3 A1 A0
De façon générale, la sortie d’un multiplexeur à n entrées d’adresses s’exprime en fonction des entrées de données Di
et des mintermes mi sur les entrées d’adresses :
2n
S = ∑ Di mi
i =1
2. 7
Electronique Numérique 2. Logique combinatoire 2
1.4.2. Réalisation
Exemple : Multiplexeur 4 → 1 :
Réalisation Représentation symbolique
D D D D
0 1 2 3 ET
A
0
A
1
A
0
A
1
D0
D1
D2
D3
OU S
S
1.4.3. Applications
1.4.3.1. Sélection d'un bit parmi plusieurs bits & sélection d'un mot binaire parmi plusieurs mots binaires
Exemple: Sélection d'un mot de 3 bits parmi les 4 mots de 3 bits :
→ il faut autant de multiplexeurs qu'il y a de bits dans le mot (ici 3 multiplexeurs) :
Principe Réalisation
MUX
MUX
S
1
S
Destination
MUX
S
S = A ou B ou C ou D 0
en fonction de la sélection sur les fils d'adresses
s 2 = a2 s 2 = b2 Sélection d'adresses
e1 e0 = 00 → s1 = a1 → S=A e1 e0 = 01 → s1 = b1 → S =B e e
1 0
s0 = a 0 s 0 = b0
s 2 = c2 s2 = d2
e1 e0 = 10 → s1 = c1 → S=C e1 e0 = 11 → s1 = d1 → S=D
s0 = c0 s0 = d0
1.4.3.2. Transmission de plusieurs conversations sur une seule ligne téléphonique (numérique)
sm ( t )
1 sm sm* sm* sm
1 1 1 Bloqueur 1
MUX DEMUX +
Filtre
Passe-bas
t
s*
CAN CNA
sm ( t )
2 sm sm* sm* sm
2 2
s* 2 Bloqueur 2
+
Filtre
Passe-bas
t t
0 Te
Echantillonneurs Multiplexeur temporel Démultiplexeur temporel
Entrées d'adresses
2. 8
Electronique Numérique 2. Logique combinatoire 2
La sortie d’un multiplexeur s’exprimant comme une somme de mintermes (forme canonique), et comme toute fonction
logique peut se mettre sous forme canonique, elle peut donc s’exprimer comme la sortie d’un multiplexeur.
Exemple : fonction f de 2 variables a et b exprimée sous forme canonique (somme de mintermes) :
f ( a , b) = a b ⋅ f (0,0) + a b ⋅ f ( 0,1) + a b ⋅ f (1,0) + a b ⋅ f (11
,)
avec : f (i , j ) = valeur particulière fonction logique f lorsque a = i et b = j
→ utilisation d'un multiplexeur à 4 entrées de données donc 2 entrées d'adresses :
Exemple 1 : opérateur ET : ab = ab ⋅ 0 + ab ⋅ 0 + ab ⋅ 0 + ab ⋅1 = ab ⋅ D0 + ab ⋅ D1 + ab ⋅ D2 + ab ⋅ D3
a b s = ab
f (0, 0) D MUX 0 D MUX
0 0
4 1 0 0 D =0 0 4 1
f (0, 1) D D
1 0 1
f ( a, b ) s= a.b
f (1, 0) D 0 1 D =0 0 D
2 1 2
f (1, 1) D 1 0 D =0 1 D
3 2 3
1 1 D =1
3
a b a b
a b a b
→ Le multiplexeur est un opérateur programmable.
Pour matérialiser par un multiplexeur une fonction de n variables, il faut un multiplexeur à 2 n entrées de données donc
n entrées d'adresses : MUX 2 n → 1.
1.4.3.4. Conversion parallèle-série (registre à décalage)
Soit un mot binaire D = d3 d2 d1 d0 disponible en mode parallèle, c'est à dire sur quatre fils, chaque fil étant affecté à
un élément binaire (bit) du mot.
Pour transmettre les éléments binaires en série, c'est à dire les uns à la suite des autres sur un seul fil, il faut d'abord (en
commençant par exemple par le LSB (Less Significant Bit), bit de plus faible poids) transmettre d0 , puis d1 , puis d2 et
enfin d3 . Ceci revient à sélectionner (ou aiguiller) l'un des éléments binaires de D sur le fil unique de sortie série. Le
multiplexeur est capable d'effectuer cette tâche si les combinaisons correspondantes sont placées successivement sur les
commandes de sélection.
Comme le montre le le chronogrammme ci-dessous :
Dans le premier temps il faut que A1 = A0 = 0 pour que S = D0 = d0 .
Ensuite A0 passe à 1 ce qui impose S = D1 = d1 .
Puis A1 = 1 et A0 = 0 d'où S = D2 = d2 .
Et enfin A1 = A0 = 1 alors S = D3 = d3 .
A
d D 0
0 0 1
d D 0 t
1 1 Série
Parallèle S A
d D 1
2 2 1
d D t
3 3 0
A S
1
d d d d
A 0 1 2 3
0 t
Le mécanisme de changement simultané d’état pour A0 et A1 doit être fait à l’aide d’une synchronisation (horloge).
2. 9
Electronique Numérique 2. Logique combinatoire 2
1.5. Démultiplexeur
1.5.1. Définition
Un démultiplexeur réalise l’opération duale du multiplexeur : il aiguille 1 donnée sur 1 parmi 2 n sorties
( n entrées d’adresses).
1 entrée de donnée
d
A2
n entrées d'adresse A1 DEMUX
A0 1 → 2n
S 7 .... S 1 S 0
n
2 sorties
Equation de Si : (exemple : S 3 ) S 3 = A 2 ⋅ A1 ⋅ A0 ⋅ d
De façon générale, la sortie Si d’un démultiplexeur à n entrées d’adresses s’exprime en fonction de l’entrée de donnée
d et d’un minterme mi sur les entrées d’adresses :
Si = mi d
1.5.2. Réalisation
Exemple : Démultiplexeur 1→ 8 :
A
0
A A
1 0
A A
2 1
A
d 2
... d
...
S S S S S S
0 1 7 0 1 7
2. 10
Electronique Numérique 2. Logique combinatoire 2
1.5.3. Applications
d
3 d
3
d
2 MUX DEMUX Mémoire d
2
d
1 d
4 1 1 4 1
d
0 d
0
Soit 4 chiffres à afficher, on peut afficher les chiffres l'un après l'autre très vite pour donner l'impression de simultanéité
à l'oeil.
1.6.1. Additionneur
C'est un circuit réalisant l'addition de deux nombres binaires. La table d'addition de deux nombres à un élément binaire
est la suivante :
b
a 0 1
0 0 1
1 1 10
0 0 1 0 0 0
1 1 0 = a ⊕b 1 0 1 r = ab
a
=1
b
&
r
La structure de l'additionneur de deux mots est alors répétitive. Une cellule élémentaire peut donc être utilisée pour
chaque poids. Elle est appelée additionneur complet. L'addition globale est réalisée par la mise en cascade des cellules
au sens des retenues.
2. 11
Electronique Numérique 2. Logique combinatoire 2
plus arithmétique
Somme ( r , ) = ai + b + r
i +1 i i i
a b r r
i i i i +1 i
0 0 0 0 0
0 0 1 0 1
0 1 0 0 1 ADD
a
0 1 1 1 0 i
i
1 0 0 0 1 b
i
1 0 1 1 0 r
r i +1
1 1 0 1 0 i
1 1 1 1 1
r
i i +1
a b a b
i i i i
r r
i 00 01 11 10 i 00 01 11 10
0 0 1 0 1 0 0 0 1 0
1 1 0 1 0 1 0 1 1 1
∑ i = a i ⊕ bi ⊕ ri ri +1 = ai bi + ri (a i ⊕ bi )
(diagonales de 1 significatives de fonctions OUX)
r
i
a
i
=1
=1
b i
i
&
&
≥1 r
i +1
L'addition de deux mots de n bits nécessite n additionneurs complets, la retenue appliquée sur les plus faibles poids est
nulle et chaque retenue calculée est appliquée au chiffre de poids immédiatement supérieur.
an bn an bn a1 b1 a b0
-1 -1 -2 -2 0 ri r1 r 0 = 0
rn -1
rn -2
r1 r0 = 0 a n-1 ... ai .. a 1 a.0
n n -1 n -2 1 0
Cette solution est intéressante d'un point de vue du matériel parce que répétitive. Par contre, comme le résultat d'une
addition ne peut pas être obtenu instantanément, le temps maximum mis pour obtenir le résultat est directement
proportionnel au nombre d'additionneurs. En effet, après le premier temps de calcul la retenue r1 est appliquée au
second additionneur. Ce n'est qu'après le second temps de calcul que la retenue r2 est délivrée et ainsi de suite, jusqu'au
dernier additionneur. Pour cette raison, l'additionneur ainsi réalisée porte le nom d'« additionneur à propagation de la
retenue » ou « additionneur à retenue série ».
2. 12
Electronique Numérique 2. Logique combinatoire 2
Pour éliminer cet inconvénient, la seconde technique consiste à calculer toutes les retenues en parallèle, directement à
partir des données sans même calculer les sommes partielles. Le circuit ainsi réalisé est alors appelé « additionneur à
retenue anticipée ».
0 0 0 1 0
1 0 1 1 1
Afin d'éviter des temps de calcul cumulatifs, il ne faut pas utiliser la relation en tant que relation de récurrence, c'est à
dire qu'il ne faut pas utiliser un résultat de calcul pour le calcul suivant. Il faut systématiquement recalculer chaque
terme, ce qui donne, en posant Si = a i + bi et pi = a i bi : r1 = p0 + r0 S0
p
r
0
≥1 1
S
0
&
r
0
τ τ
1 2
De même : r2 = p1 + r1 S1 = p1 + ( p0 + r0 S 0 ) S1 = p1 + p0 S1 + r0 S 0 S1
p
1 r
≥1 2
p
0
&
S
1
S0
&
r
0
τ τ
1 2
Et ainsi de suite : r3 = p 2 + r2 S 2 = p 2 + ( p1 + p 0 S1 + r0 S 0 S1 )S 2 = p 2 + p1 S 2 + p 0 S1 S 2 + r0 S 0 S1 S 2
et : r4 = p3 + r3 S 3 = p3 + p2 S 3 + p1 S 2 S 3 + p0 S1 S 2 S 3 + r0 S 0 S1 S 2 S 3
On constate que les temps de calcul des retenues sont tous égaux. Ils correspondent au temps de transit de l'information
dans une porte ET (τ 1 ) et une porte OU (τ 2 ) en cascade (le nombre d'entrée d'une porte n'affectant pas son temps de
transit).
La structure d'un additionneur 4 bits utilisant la technique de calcul anticipé des retenues est la suivante :
a b a b a b a b r
3 3 2 2 1 1 0 0 0
Calcul des P et S
i i
Comparaison des retenues propagée et anticipée
P S P S P S P S
3 3 2 2 1 1 0 0
Format des mots Temps de calcul en ns (logique TTL série N)
(en bits)
Calcul des retenues
Propagation Retenue
r r r r r
4 3 2 1 0 de la retenue anticipée
a b a b a b a b
3 3 2 2 1 1 0 0 4 24 24 avec additionneur 4 bits intégré
8 36 36
Calcul des sommes
12
16
48
60
36
36
} avec utilisation d'un générateur de retenue
2. 13
Electronique Numérique 2. Logique combinatoire 2
1.6.2. Soustraction
Pour la soustraction, on se ramène à une addition. Le nombre négatif est codé en code complément à 2 :
B → B +1
1001 → 0110 + 1 = 0111 (+ arithmétique et non logique).
A − B = A + (− B ) = A + C 2 B = A + ( B + 1)
1.6.3. Codage
Les codes utilisés pour représenter un mot binaire sont très nombreux : code DCB (Décimal Codé Binaire ou Binaire
pur), code Grey, code NRZ (Non Retour à Zéro) en Télécommunications …
Pour coder des nombres entiers signés, le code Cà2 (Complément à 2) est le plus utilisé car plus efficace que le code
SVA (Signe et Valeur Absolue). En code Cà2, 0 n’a qu’une seule représentation, et il offre de ce fait une éventualité de
codage supplémentaire. Le code SVA réserve le bit de plus fort poids (MSB) pour coder le signe (0 si +, 1 si -), le reste
du mot codant en DCB la valeur absolue de N.
Le code Cà2 s’obtient en complémentant bit à bit le mot binaire (Cà1, Complément à 1) et en ajoutant 1au résultat issu
du Cà1. Le code Cà2 garde également la propriété de réserver le bit MSB pour coder le signe (0 si +, 1 si -).
Exemple : Codes SVA et Cà2 sur 3 bits
N Code SVA Code Cà2
+3 011 011
+2 010 010
+1 001 001
+0 000 000
-0 100 -
-1 101 111
-2 110 110
-3 111 101
-4 - 100
1.6.4. Comparateur
Un comparateur est un dispositif capable de détecter l'égalité de deux nombres et éventuellement d'indiquer le nombre le
plus grand ou le plus petit.
Principe : Pour effectuer la comparaison de deux nombres A et B, deux techniques sont couramment utilisées :
- la soustraction des deux nombres. Si le résultat de l'opération A - B est positif, cela signifie que A est supérieur à
B. Si le résultat est nul, les deux nombres sont égaux.
- une comparaison bit à bit. C'est cette méthode qui est utilisée dans la plupart des circuits intégrés commercialisés.
La comparaison s'effectue poids à poids en commençant par le chiffre le plus significatif.
Les nombres A et B ayant le même format, le nombre A est forcément supérieur à B si son élément binaire le plus
significatif (MBS) est supérieur au MSB de B. Si ces deux bits sont égaux, la supériorité (ou l'infériorité) ne peut être
déterminée que par l'examen des bits de poids immédiatement inférieur et ainsi de suite. L'examen des poids successifs
s'arrête dès que l'un des éléments binaires est supérieur ou inférieur à l'autre. Les deux nombres A et B sont égaux si,
après avoir examiné tous les éléments binaires, il n'a pas été détecté de supériorité ou d'infériorité.
Comparateur donnant l'égalité des deux nombres
C'est le comparateur le plus simple. Deux nombres sont égaux si tous les chiffres sont égaux deux à deux. Pour détecter
l'égalité de deux éléments binaires, un opérateur OU exclusif complémenté est indispensable. Un opérateur ET indique
la simultanéité de toutes les inégalités partielles.
Soient deux nombres A et B de quatre éléments binaires chacun, A = a3a2a1a0 et B = b3b2b1b0 :
A = B si ( a 3 = b3 ) ET (a 2 = b2 ) ET (a1 = b1 ) ET ( a 0 = b0 )
2. 14
Electronique Numérique 2. Logique combinatoire 2
a
3 =1
b
3
a
2 =1
b
2
& A=B
a
1 =1
b
1
a
0 =1
b
0
Comparateur complet
Par analogie avec l'additionneur, la conception d'un comparateur complet pour des nombres de quatre éléments binaires
peut se faire de deux façons différentes :
- Première solution : En cascade, c'est à dire avec propagation des égalités partielles. Les poids de A et de B sont
comparés en commençant par le plus élevé. La comparaison sur les poids faibles ne peut être faite que si tous les bits de
poids plus élevés sont égaux deux à deux.
La cellule élémentaire de comparaison comporte trois entrées, les éléments binaires a et b de même poids de chaque
nombre et une entrée E pour autoriser la comparaison, ce qui donne la table de vérité ci-après :
a = b a > b a < b
i i i i i i
E a b
i i E S I
i i i
0 0 0 0 0 0
0 0 1 0 0 0 Pas de comparaison
0 1 0 0 0 0
0 1 1 0 0 0
1 0 0 1 0 0 S =1 si a > b
i i i
1 0 1 0 0 1
E =1 si a = b
1 1 0 0 1 0 i i i
1 1 1 1 0 0 I =1 si a < b
i i i
( )
Si = E a i b i
I = E (a b )
i i i
E = E (a ⊕ b ) = E a b + E a b
i i i i i i i (
= E Si + I i )
D'où le schéma d'une cellule de comparaison, notée Ci :
a
i &
S
i
b
i
≥1
&
E
i
&
I
i
C
i
2. 15
Electronique Numérique 2. Logique combinatoire 2
L'entrée d'autorisation E est en fait la détection d'égalité des éléments binaires de poids supérieurs; le schéma de
l'ensemble est alors le suivant :
A= a a a B= b b b
3 2 1 3 2 1
S
a 3
3 ≥1 A > B
E
3
C
b 3 I
3 3
S
a E 2
2
E
2
C ≥1 A < B
b 2 I
2 2
S
a E 1
1
E A = B
1
C
b 1 I
1 1
Remarque : Comme pour l'additionneur à propagation de la retenue, le résultat de la comparaison apparaît après un
temps directement lié au nombres de cellules à traverser à cause de la mise en cascade (calcul série). Pour palier cet
inconvénient, c'est une structure parallèle qu'il faut adopter.
- Deuxième solution : Comparaison parallèle. Tous les éléments binaires de même poids sont systématiquement et
simultanément comparés. Le blocage s'effectue alors sur les résultats de chaque comparaison.
≥1
A < B
Blocage
& a < b
des poids > i i i
&
a
&
i
≥1 Blocage des poids < i
b
i a = b
i i
&
≥1
A > B
&
Blocage
des poids > i a > b
i i
Le blocage des sorties bi > a i (ou bi < a i ) se fait par une porte ET recevant toutes les sorties détectant les égalités
b j = a j des poids supérieurs au rang i (∀ j > i ) . Le nombre d'entrées de cette porte augmente donc au fur et à mesure
que l'on s'éloigne du MSB.
L'information A = B est fournie par une porte ET vérifiant la simultanéité des égalités partielles.
2. 16
Electronique Numérique 2. Logique combinatoire 2
Le schéma du circuit 7485 ci-après montre l'ensemble d'un comparateur 4 bits cascadable.
A
3
B
3
A > B
A
2
Symbole
B
2
0 comp
3
}A
A<B A <B
A=B <
A =B
A = B =
A>B >
A >B
0
A 3
}B
1
B
1
A < B
A
0
B
0
Les entrées a < b , a = b et a > b , dites entrées de mise en cascade, sont représentatives des résultats des
comparaisons sur les éléments binaires d'indice inférieur. Ainsi, pour effectuer la comparaison de deux nombres de huit
éléments binaires, on adopte le montage ci-après :
MSB
N
0 comp 0 comp
1
3
}A 3
}A
A <B A <B N < N
1 2
0 < <
1 = A =B = A =B N = N
0 > > 1 2
A >B A >B N > N
1 2
0 0
3
}B 3
}B
N
2
MSB
2. 17
Electronique Numérique 2. Logique combinatoire 2
On appelle parité d'un mot binaire N le nombre de 1 contenus dans ce mot; le mot a une parité paire si ce nombre de 1
est pair. Afin de rendre les transmissions numériques plus robustes au bruit, on adjoint un bit à tous les mots transmis.
Ce bit, dit de parité, est choisi de façon à ce que le mot complet formé du mot et du bit de parité ait une parité paire
(dans le cas de la parité paire). Le principe utilisé pour engendrer ce bit de parité repose sur la propriété du OU exclusif
: a ⊕ b ⊕ c ⊕ L ⊕ m vaut 1 si un nombre impair de variables est au niveau 1 :
Bit de parité
généré
Ce circuit est utilisé dans quasiment tous les processeurs de calcul. C'est un opérateur capable d'effectuer, comme son
nom l'indique, un ensemble de traitements arithmétiques (addition, soustraction, multiplication (par 2 par décalage d’1
cran vers la gauche des bits du mot), division (par 2 par décalage d’1 cran vers la droite des bits du mot) etc ...) ou
logiques (ET, OU ...) sur des mots binaires de longueur donnée.
Le choix de l'opération est déterminé par des bits de commande. C'est donc un opérateur programmable.
Il n'est pas intéressant de présenter en détail l'architecture interne de l'ALU, qui résulte d'une grande partie des circuits
déjà présentés. Par contre, il est important de comprendre l'action de l'unité arithmétique et logique sur les mots binaires
(chemin des données ...).
S Sélection Opération
S0 0 ALU
5
S1
(0 ... 15) CP P
C
0 0
S2 M
(0 ... 15) CG G
31
A P S3
6 (P = Q) A=B
4 G
M 4
(0 ... 15) CO C
n +4
F Résultat
Opérandes C CI
n
4
C
4
A 0 P
B B 0 (1) F
Q 0
4 A 1 P
(2) F
B 1 Q 1
A 2 P
(4) F
B 2 Q 2
A 3 P
(8) F
B 3 Q 3
2. 18
Electronique Numérique 2. Logique combinatoire 2
Ce circuit intégré utilise des mots de quatre éléments binaires. Cinq fils de sélection permettent un choix parmi 32
fonctions groupées en 16 opérations arithmétiques et 16 opérations logiques. Indépendamment de la fonction réalisée, ce
circuit dispose d'une sortie détectant l'égalité des données en entrée.
Lors des opérations arithmétiques sur des nombres de plus de quatre bits, il existe la possibilité de mise en cascade des
boîtiers avec la technique de la propagation de la retenue ( C0 retenue entrante, C4 retenue sortante).
Poids FORTS Poids FAIBLES
A B A B
C
C 0
0
C
4
Résultat
On peut également utiliser la technique de la retenue anticipée en utilisant un circuit supplémentaire spécialisé dans le
calcul des retenues (utilisation de P et G) :
ALU ALU ALU ALU
C C C C
0 0 0 0
P G P G P G P G
P G C P G C P G C P G C
0 0 4 1 1 8 2 2 12 3 3 16
C
0 Générateur de retenue anticipée
R A X
B X
A
C
B S = AB
C fusible intact
fusible détruit S = AB X fusible intact
Matrice OU Matrice OU
Réalisation Représentation symbolique
OU
A
B S = A+C
A X
C
B
R C X
fusible intact
fusible détruit S = A+C X fusible intact
2. 19
Electronique Numérique 2. Logique combinatoire 2
C= 0 C= 1
2.2. Mémoire Morte (ROM) (Read only Memory) (elle contient un décodeur)
Entrées d'adresses
a a
m -1 0
d d
n -1 0
Sorties de données
Pour chaque adresse apparaît une donnée particulière définie par son adresse.
a X
3
X X
a X
2
X X
a X
1
X X
a X X
0
X
...
OU X d
3
X X d
2
X X X d
1
X d
0 X fusible intact
Les ROMs sont écrites en usine selon l'application voulue et sont figées (pas d’effacement ni réécriture des données).
Dans une ROM la matrice ET est fixée et la matrice OU est programmable.
2. 20
Electronique Numérique 2. Logique combinatoire 2
a X fusible intact
2
a
1
a
0
...
OU X X X d
3
programmable X X X d
2
X X X d
1
X X X d
0
C 1 20 VCC
D 2 19 A
F 3 18 B
G 4 17 E
M 5 16 H
N 6 15 O
P 7 14 R
Q 8 13 L
I 9 12 K
GND 10 11 J
2. 21
Electronique Numérique 2. Logique combinatoire 2
0 1 2 3 4 5 6 7 8 9 12 13 16 17 20 21 24 25 26 27 28 29 30 31
1
C
2 19
D A
8 X
9 X 18
B
10 X
11 X
3
F
16 X X 17
E
17 X
G 4
24 X 16
H
25 X
5
M
32 15
X X O
33 X
6
N
40 X X 14 R
41 X X
7
P
48 X
49 13 L
X
50 X
51 X
8 12 K
Q
11
9 J
I
0 1 2 3 4 5 6 7 8 9 12 13 16 17 20 21 24 25 26 27 28 29 30 31
X X
2. 22
Electronique Numérique 2. Logique combinatoire 2
A
B
C
D
A
B
C
D
A
B
C
D
A
B
C
D
Y
A
B
C
D
A
B
C
D
A
B
C
D
A
B
C
D
Y = A B C D + A B C D + A BC D + A BC D + ABC D + ABC D + AB C D + AB C D
S1
S
0
D0
S1
S
0
D1
Z
S1
S
0
D2
S1
S
0
D3
Z = S 1 S 0 D0 + S 1 S 0 D1 + S1 S 0 D2 + S1 S 0 D3
2. 23
Electronique Numérique 2. Logique combinatoire 2
A
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
0 X X X X
1 XX X X
2 X X X X
3 XX X X Y
4 X X X X
5 X X X X
6 XX X X
7 X X X X
8
9 X X X
10 X X X
11 X X X Z
12 X X X
13 X
14 X
15 X
16 X
17 X
18 X
19 X NC
20 X
21 X
22 X
23 X
D
0
24 X
25 X
26 X
27 X NC
28 X
29 X
30 X
31 X
D
1
32 X
33 X
34 X
35 X NC
36 X
37 X
38 X
39 X
D
2
40 X
41 X
42 X
43 X NC
44 X
45 X
46 X
47 X
D
3
48 X
49 X
50 X
51 X NC
52 X
53 X
54 X
55 X
S
1
56 X
57 X
58 X
59 X NC
60 X
61 X
62 X
63 X
S D
0
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1617 18 19 20 2122 23 24 25 26 27 28 29 30 31
Légende Fusible intact Tous fusibles intacts Fusible détruit Non Connecté
X X NC
2. 24
Electronique Numérique 2. Logique combinatoire 2
2.5. PLA (Programmable Logic Array) ou PLD (Programmable Logic Device) ou CPLD (Complex PLD)
ou EPLD (Erasable PLD)
Dans un réseau PLA, les matrices ET et OU sont toutes les deux programmables.
Composés d'une matrice ET programmable, les réseaux FPGA n'ont pas de matrice OU. Chaque produit est relié
directement à une sortie. La densité peut atteindre le million de portes logiques par circuit FPGA.
Exemple : Décodage des adresses fournies par un microprocesseur (microprocesseur MOTOROLA 6809)
Bus de données
Initialisation RESET
Décodage 6809
erreur
Horloge EXTAL
IRQ
Bus d'adresses R/W
E
E
Décodage
F0
CS ROM
(E000 FFFF)
8 KOctets
F1 R/W
CS RAM
(0000 03FF)
1 KOctet
R/W
CS ACIA
F2
(1008 1009)
A0 2 Octets IRQ
A0
E
R/W
F3
CS PIA 2
A1 A 1 (1004 1007)
A0 A 0 4 Octets IRQ
R/W
F4
CS PIA 1
A1 A1 (1000 1003)
A0 A0 4 Octets IRQ
2. 25
Electronique Numérique 2. Logique combinatoire 2
Table du FPGA
Par opposition aux ROMs, les mémoires vives (appeléées RAM) peuvent être lues et écrites. Contrairement aux
PROMs, leur écriture n'est pas définitive dans le sens où le contenu des RAMs est perdu à l'extinction de l'alimentation
électrique.
Le boîtier des RAMs possède, en plus de celui des ROMs, une entrée R W (Read/Write) :
R W = 1 → lecture
R W = 0 → écriture
On distingue : - les RAMs statiques, constituées de Bascules élémentaires (Bascules D (cf. logique séquentielle)),
- les RAMs dynamiques, constituées de condensateurs (intégrables à plus grande échelle) mais qu’il
est nécessaire de rafraîchir périodiquement pour en garder le contenu.
- les mémoires flash rapides et ne nécessitant pas d’alimentation pour sauvegarder leur contenu.
2.8. ASIC (Application Specific Integrated Circuit) (Composant spécifique, dédié)
Un composant ASIC est développé spécifiquement pour une application analogique, numérique ou mixte, et destiné à
une exploitation en nombre assez important. Quelques millions de portes peuvent être intégrées dans un ASIC. Des
formats de bibliothèques d’ASICs sont développés (ALFAdvanced Library Format, OVI Open Verilog International).
Leur rendement économique vaut à la condition d’une production à grande échelle.
Des langages (compilateurs) de conception (≡ spécification), de simulation et de programmation de ces composants ont
été développés (langage VHDL, Verilog, C ...).
2.10. Application
Le synoptique d’une application monétique d’une carte à puce (avec ou sans contact) est présentée à titre d’exemple.
2. 26
Electronique Numérique 2. Logique combinatoire 2
Borne de paiement
(sans contact)
Borne de chargement des droits
Terminal de paiement
Interface Entrée/Sortie
Unité Centrale
RAM
Mémoire de travail
Données Adresses
(ROM)
Système d'Exploitation
mécanisme de sécurité
(EEPROM - RAM)
Informations relatives au
porteur et à l'application
Carte à puce
__________
2. 27
Electronique Numérique TD 2. Logique combinatoire 2
TD 2. LOGIQUE COMBINATOIRE 2
Transcodage
f b
g
e c
d
0 1 2 3 4 5 6 7 8 9
ABCD = 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001
Multiplexage
Transmission
a) Emission : Déterminer un système capable de calculer cet élément de contrôle dans le cas m = 3 et k = 1 avec un
contrôle de parité impaire.
b) Réception : Déterminer un système capable de détecter une erreur (1 seul bit modifié au maximum) de
transmission dans ce même cas de figure : (on suppose que les bits de contrôle ne sont pas modifiés)
détecteur
m2 m1 m0 k1 m ′2 m1′ m ′0 k 1 T
d'erreur
perturbation
Emission Réception
m0 E m e tt eu r
m1 k1
m2
TD 2. 1
Electronique Numérique TD 2. Logique combinatoire 2
On rappelle que le résultat d’un test de parité est égal à 0 si le nombre de 1 dans la zone considérée est pair (parité
paire). La disposition est choisie de telle façon que le nombre binaire (T3T2T1)2 formé par les résultats des tests T1,
T2 et T3 donne la position du bit erronné.
TD 2. 2
Electronique Numérique TD 2. Logique combinatoire 2
Décodage
2. Décodeur BCD (déjà fait en cours)
Donner le schéma de réalisation du décodeur d'un mot écrit en BCD sur 3 bits : e2 e1 e0 .
→ décodeur à 3 entrées : e2 e1 e0 et 8 sorties : s0 à s7 ( e0 : LSB (Less Significant Bit))
Adresse 16 bits
10
A CS 8
0 Boîtier
10 mémoire
n° 0
Légende :
A
15 n
Décodeur 10 ...
ou n fils
d'adresses 8
CS Boîtier (Bus)
mémoire n
n° 63
Transcodage
4. Codeur de parité décimale (Transcodeur)
Donner le schéma de réalisation du codeur dont la sortie est à 0 si l’entrée N (chiffre entre 0 et 9 codé en BCD) est
paire et 1 sinon.
TD 2. 3
Electronique Numérique TD 2. Logique combinatoire 2
f b
g
e c
d
0 1 2 3 4 5 6 7 8 9 A B C D E F
a) Ecrire la table de transcodage.
b) Donner la fonction logique associée au segment a.
c) Donner la structure de réalisation du transcodeur.
M de 3 bits XYZ représentant N en code Cà2 (Complément à 2). (A et X : MSBs (Most Significant Bits))
Multiplexage
8. Multiplexeur de mot (déjà fait en cours)
Donner le schéma de réalisation du circuit de sélection d'un mot de 3 bits parmi 4 mots de 3 bits.
10 1 1 0 0 s=y
Démultiplexage
11. Démultiplexeur pour conversion série / parallèle (déjà fait en cours)
Même question que précédemment pour convertir la séquence D0 D1 D2 D3 de série en parallèle.
Quelle fonction est en plus nécessaire
TD 2. 4
Electronique Numérique TD 2. Logique combinatoire 2
Circuits arithmétiques
12. Addition - Comparaison - Parité (déjà fait en cours)
Addition
1. Soient 2 bits a et b. Donner le circuit élémentaire réalisant la somme arithmétique entre a et b (appelé demi-
additionneur) : (1/2 ADD).
2. Soit en plus de a i et bi , le bit ri figurant la retenue de la somme élémentaire précédente entre ai −1 et bi −1
lorsque l'on désire faire la somme de 2 mots A = a n −1 a n − 2 L a 0 et B = bn −1 bn − 2 L b0
a) Donner le circuit additionneur complet (ADD) entre ai bi et ri .
b) Donner l'additionneur à propagation de retenue entre les mots A et B.
c) Donner l'additionneur à retenue anticipée (plus rapide) entre les mots A et B.
Comparaison
3. Soient 2 nombres A = a 3 a 2 a1 a 0 et B = b3 b2 b1 b0 .
Donner le circuit dont la sortie vaut 1 si les nombres A et B sont égaux.
Parité
4. On appelle parité d'un mot binaire N le nombre de 1 contenus dans ce mot : le mot a une parité paire si ce
nombre de 1 est pair. Afin de rendre les transmissions numériques plus robustes au bruit, on adjoint à N (et
à chaque mot transmis) un bit dit de parité, dont la valeur est telle que le mot global formé de N et de ce bit
de parité, ait une parité paire.
Donner le circuit générant ce bit de parité.
__________
TD 2. 5
Electronique Numérique TP 2. Logique combinatoire 2
TP 2. LOGIQUE COMBINATOIRE 2
1. Matériel nécessaire
- Oscilloscope
- Générateur de signaux Basses Fréquences (GBF)
- Alimentation stabilisée ( 2x[ 0-30 V] _ + 1x[ 5 V] _ )
&&& &&&
- Multimètre
- Moniteur MS05 (plaquette de câblage)
- Câbles : - 1 T, 1 BNC-BNC, 1 BNC-Banane, 1sonde oscilloscope, 6 fils Banane, petits fils.
- Composants : - 7 Résistances 1 kΩ (1/4 Watt)
- 1 afficheur 7 segments à cathodes communes :
Réf.: HDSP-5503 (10 mA) ou HDSP-7513 (2 mA).
- (1 minuterie NE 555 (circuit compatible TTL et CMOS))
- 5 LEDs rectangulaires (4 Vertes + 1 Rouge)
- 5 mini-interrupteurs
Circuits logiques de la famille CMOS 4000 :
- 1 4030 : 4 XOR à 2 entrées
- 1 4071 : 4 OR à 2 entrées
- 1 4081 : 4 AND à 2 entrées
- 1 4511 : Transcodeur BCD / 7 segments
- 1 4520 : Compteur binaire
- 1 MUX 4→1
- 1 DEMUX 1→4
2. Notation du TP
Faire examiner par le professeur en fin de séance, les différentes parties du TP.
3. Etude Théorique
On pourra intercaler une résistance (≈ 1 kΩ) de limitation de courant entre la sortie à visualiser et la LED, ou connecter
directement la LED à la sortie du circuit logique, la résistance interne de la porte logique faisant office de limiteur de
courant sans perdre le niveau logique (pour une LED connectée en sortie).
TP 2. 1
Electronique Numérique TP 2. Logique combinatoire 2
- Donner la table de vérité du demi-additionneur (i.e. pas de prise en compte de l’éventuelle retenue rn-1
issue d’un étage additionneur précédent dans le cadre d’une addition de 2 mots binaires).
- Tracer le tableau de Karnaugh des deux fontions rn et sn.
- Donner les fonctions logiques correspondantes rn et sn en utilisant de préférence des portes OUX.
- Donner le schéma symbolique de réalisation.
b) Additionneur complet
Soient an et bn 2 bits à additionner en tenant compte ici de la retenue précédente rn-1 issue d’un étage
additionneur précédent (dans le cadre d’une addition de 2 mots binaires).
an sn
bn ADD rn
r n-1
TP 2. 2
Electronique Numérique TP 2. Logique combinatoire 2
f b
g
e c
- Donner la table de vérité d'un transcodeur permettant de passer du code BCD (Décimal Codé Binaire) au
code permettant l'affichage sur 7 segments a à g d’un mot ABCD de 4 bits (A : MSB).
- Tracer les tableaux de Karnaugh de chaque segment en simplifiant les fonctions au maximum, et en
faisant apparaître si-possible des OU exclusifs.
- En déduire les fonctions correspondantes.
- Donner le schéma symbolique de réalisation du transcodeur.
Multiplexeur - Démultiplexeur
3.4. Multiplexeur
a) Rappeler la définition d’un multiplexeur à 4 entrées de données D3 D2 D1 D0 , 2 entrées d’adresses A1 A0
(D3 et A1 sont les MSB) et de sortie s.
b) Donner sa table de vérité.
c) Donner l’équation de la sortie.
d) Etablir le schéma logique permettant de le réaliser en utilisant exclusivement des portes logiques ET 4
entrées, OU 4 entrées et NON plutôt que d’utiliser un multiplexeur tout fait.
e) Facultatif : Proposer un schéma, à base d’une minuterie NE 555 monté en oscillateur carré et d’une bascule D, permettant de
réaliser dans le montage de la figure 3, la sélection automatique des adresses dans la séquence :
A1 A0 = 00 → 01 → 10 → 11 → ...
notée : 1 → 2 → 3 → 4 → ...
avec une fréquence de changement d’adresse (passage de à 1 2 , deà 2 3 , ..) d’environ 1 Hz.
(On pourra s’aider en traçant préalablement le chronogramme des variables A0 et A1 supposées initialement à l’état bas).
3.5. Démultiplexeur
a) Rappeler la définition d’un multiplexeur à 4 sorties de données D3 D2 D1 D0 , 2 entrées d’adresses A1 A0
(D3 et A1 sont les MSB) et d’entrée e.
b) Donner sa table de vérité.
c) Donner l’équation des sorties.
d) Etablir le schéma logique permettant de le réaliser en utilisant exclusivement des portes logiques ET 4
entrées et NON plutôt que d’utiliser un démultiplexeur tout fait.
TP 2. 3
Electronique Numérique TP 2. Logique combinatoire 2
4. Etude Expérimentale
4.0. Test des composants (en câblage uniquement)
En connectant le mini-interrupteur alternativement à la masse et à la tension + 5 Volts, on obtient ainsi des transitions franches permettant de simuler
une horloge lente de test des composants synchrones (compteur ...).
Tester chaque module d’un circuit séparément des autres modules.
Simuler le montage suivant [en simulation numérique, remplacer l’ensemble (résistance-LED) par un simple logic display)] :
Faire une macro pour le composant demiadd.
1/2 ADD
a s
1 1
=1
b1 1 kΩ
r
1
&
1 kΩ
b) Additionneur complet
Soient a1 et b1 2 bits à additionner en tenant compte ici de la retenue précédente r0.
a1 s1
b1 ADD r1
r0
Réaliser le montage suivant (simulation) : [en simulation numérique, remplacer l’ensemble (résistance-LED) par un
simple logic display)] en réutilisant avantageusement la macro demiadd précédente plutôt que de réaliser le
schéma global :
ADD
a s
1 1
=1
b1 =1
1 kΩ
r
0
r
1
& ≥1
1 kΩ
&
Schéma global
ADD
a 1/2 ADD s
1 1/2 ADD 1
b
1
r
0
≥1 r
1
Schéma avec macro
TP 2. 4
Electronique Numérique TP 2. Logique combinatoire 2
Le schéma synoptique suivant utilise avantageusement les étages précédents demi-additionneur et additionneur :
ADD_MOT
a0 s0
b0 1/2 ADD r0
S
r0 s
1
a1 ADD r
1
b1
Réaliser le montage suivant (simulation) : [en simulation numérique, remplacer l’ensemble (résistance-LED) par un simple logic display)]
ADD_MOT
1/2 ADD
a s 1 kΩ
0 0
=1
b0
r
0
&
ADD
s 1 kΩ
1
=1
a
1
=1
b1 &
r 1 kΩ
1
≥1
&
Note : Le Test du Transcodeur BCD/7 segments (4511) peut être fait avec l’objet Hexkey du simulateur (Switches
-> Digital -> Hexkey) qui transforme un chiffre (de 0 à 9) en son code BCD sur 4 bits :
Application
TP 2. 5
Electronique Numérique TP 2. Logique combinatoire 2
A = a1 a0 (a1 : MSB)
a1
B = b1b0 (b1 : MSB)
a1 ⊕ b1
b1
A>B 1 kΩ
A<B 1 kΩ
a0
A =B 1 kΩ
a 0 ⊕ b0
b0
Note : Plutôt que d’utiliser des portes à 3 entrées, on pourra utiliser des portes à 2 ou 4 entrées :
1
Multiplexeur - Démultiplexeur
4.4. Multiplexeur
Schéma de principe :
D
Générateur GBF Compteur D32
H: H binaire MUX 4 > 1 s
D1
Fréquence 4 Hz incrémental D
0
R R R R R
D0 = H divisée par 2 A1 A 0
D1 = H divisée par 4
L
D2 = H divisée par 8 L3 L2 L1 L0 Figure 3
D3 = H divisée par 16 R = 1 kΩ
Simuler le multiplexeur à 4 entrées réalisé selon le schéma vu en cours avec des portes élémentaires et l’insérer dans
le montage suivant :
TP 2. 6
Electronique Numérique TP 2. Logique combinatoire 2
Schéma de simulation :
4 D3
D2
Data 3
D1 MUX 4 > 1 s
sequencer 21 D0 avec portes
A1 A0
logic switches Figure 3'
L
L3 L2 L1 L0
logic d isp lay lo gic di splay l ogic d isplay
Os cill oscope =Instrumen ts / Dig ital / Scope
logic dis play logic d isp lay
A
0
A
1
Un compteur binaire incrémental est un circuit séquentiel dont le mot de sortie D3 D2 D1 D0 (D3 = MSB)
est incrémenté (ou décrémenté s’il s’agit d’un décompteur ou compteur décrémental) à chaque fois que
l’entrée d’horloge H est active (activation sur front ou sur niveau).
Le compteur utilisé, à synchronisation sur front montant de H, incrémente le mot D3 D2 D1 D0 à chaque
front montant de H. Le comptage s’effectue de façon circulaire : ainsi au mot 1111 succède le mot 0000 puis
0001, 0010, 0011 ...
L’état initial du compteur peut être, si on le désire, mais ça n’est pas nécessaire dans l’utilisation que l’on
fait ici, réglé au mot voulu, 0000 par exemple.
a) En essayant les différentes combinaisons d’adresses, vérifier le bon fonctionnement du multiplexeur en
comparant la sortie s à l’entrée de donnée sélectionnée.
b) (facultatif) Compléter le montage par le circuit de sélection automatique des adresses avec comme valeurs de composants de la
minuterie montée en astable : RA = 1 kΩ, RB = 1 MΩ et C = 1 µF.
c) (facultatif) Remplacer le multiplexeur 4 > 1 discret (avec les portes ci-dessus) par un multiplexeur 4 > 1 intégré du simulateur (circuit
4539).
4.5. Démultiplexeur
Schéma de principe :
D0
Générateur GBF D1
H:
H e DEMUX 1 > 4 D2
Fréquence 2 Hz D3
R
A1 A0 R R R R
L
R = 1 kΩ L0 L1 L2 L3
Figure 4
Simuler le démultiplexeur à 4 sorties réalisé selon le schéma vu en cours avec des portes élémentaires et
l’insérer dans le montage suivant :
TP 2. 7
Electronique Numérique TP 2. Logique combinatoire 2
Schéma de simulation :
D0
H e DEMUX 1 > 4 D 1
Pulser D2
avec portes
D3
A1 A0
logic switches
L Figure 4'
L0 L1 L2 L3
logic display
logic display logic display
Oscilloscope =Instruments / Digital / Scope logic display logic display
Horloge = Digital / Instruments / Pulser
D D D D
0 1 2 3
TP 2. 8
Electronique Numérique TP 2. Logique combinatoire 2
ANNEXE
- LED
A K
A K
Anode Cathode
- Brochage de l'afficheur 7 segments (cathodes communes K): Réf.: HDSP-5503 (10 mA) ou HDSP-7513 (2 mA)
g f GND a b
Sortie Commande segment
Sortie Commande segment g
...
10 9 8 7 6 Sortie Commande segment b
a Sortie Commande segment a
a b ... g
f g b
K
e c
d p
1 2 3 4 5
- Minuterie NE 555 montée en astable ( ≡ oscillateur) CI NE 555 ou équivalent (SN 72555 ou SFC 2555)
Vcc
RA Vcc = + 5 Volts
R
B
8 4 7 C1 = 10 nF
(Sortie) vs 3
NE 555
5 1 6 R doit être différent de 0
2 A
+ +
C
C1 -
-
T= (
t H + t B = 0.693 R A + 2 R B C : période de v s ( t ) ) f = 1/T ≈
1.44
( R A + 2 R B )C
: fréq. de v s ( t )
tH R + RB
Rapport cyclique de v s (t ) : R0 = × 100 % = A 50 % < R0 < 100 %
T R A + 2 RB
R0 = 50 % pour R B >> R A R0 = 100 % pour R B = 0
__________
TP 2. 9
Electronique Numérique 3. Logique séquentielle 1
Système logique
A l’instant discret n, une sortie s j , notée s nj , d’un système logique combinatoire ne dépend que de ses entrées
e1n ,..., e pn au même instant : (la seule connaissance des entrées suffit à déterminer les sorties)
s nj = f (e1n ,..., e pn ) (1 ≤ j ≤ m )
A l’instant discret n, une sortie s nj d’un système logique séquentiel dépend de ses entrées e1n ,..., e pn mais aussi de
n −1
l’état antérieur des sorties ( s1 ,..., s mn−1 ) qui peuvent être considérées comme des entrées secondaires, alors que les
entrées e1n ,..., e pn sont appelées primaires. (Notion de mémoire, car les systèmes séquentiels sont bouclés, ou encore
récursifs) : (la seule connaissance des entrées (primaires) ne suffit pas à déterminer l’état des sorties)
s = f (e ,..., e pn , s1n −1 ,..., s mn−1 )
n
j
n
1 (1 ≤ j ≤ m )
p m1
Entrées logiques
n Sorties logiques
e i
Système Logique
m2 s nj
Séquentiel
1≤ i ≤ p 1≤ j ≤ m
s nj −1 m = m1 + m 2
Sorties logiques antérieures
Exemple
e
1
e
1
≥1 s
1 s
t
1
t
Définition
Bascule : circuit séquentiel dont les sorties possèdent 2 états stables, ces sorties étant complémentaires Q et Q .
(Bascule ≡ Bistable ≡ Flip- flop)
3. 1
Electronique Numérique 3. Logique séquentielle 1
S ≥ 1 Q
≥ 1 Q'
≥ 1 Q'
S
R 1 2 3 4 5 6
Supposons l’état initial suivant des sorties : Initialement : sortie Q au repos (Q = 0) et sortie Q’ = 1. On a :
- La combinaison d’entrées (S = 1, R = 1) de la phase est à proscrire car elle ne conduit pas à Q’ = Q (les bascules
ont leurs sorties complémentées Q et Q ).
- Les configurations pour lesquelles les 2 entrées changent d’état simultanément (comme à la phase ) sont à proscrire
car elles conduisent à un aléa de fonctionnement.
3. 2
Electronique Numérique 3. Logique séquentielle 1
S R Qn Fonction Complémentarité
0 0 Qn-1 Mémorisation Q’ = Q
0 1 0 RESET (Mise à 0 de Q) Q’ = Q
1 0 1 SET (Mise à 1 de Q) Q’ = Q
1 1 Combinaison interdite car Q’ ≠ Q Q’ ≠ Q
& Q'
R
La combinaison interdite engendre Q = Q’ = 1, contrairement à la réalisation à portes NOR pour laquelle elle
engendre Q = Q’ = 0.
Symbole de la bascule RS
R Q
S
(Q’ n'est pas systématiquement représenté)
La bascule RS est l'élément de base de la logique séquentielle. C'est la seule bascule asynchrone.
Fonctionnement asynchrone :
En asynchrone, la sortie de la bascule change d'état uniquement en fonction des grandeurs d'entrée.
Le système livré à lui-même, est ainsi plus rapide que les sytèmes synchrones, mais il présente des temps de propagation
(≡ délais) difficiles à maîtriser → on préfère l'utilisation de systèmes synchrones.
Fonctionnement synchrone :
La prise en compte des entrées est conditionnée par une autorisation donnée par un signal d'horloge. Ainsi, les entrées
du système sont prises en compte (provoquant alors l’état de sortie correspondant) uniquement s’il y a autorisation par
l’horloge (l’horloge est alors dite active). Sinon (pas d’autorisation de la part de l’horloge), les entrées sont ignorées et
leur changement d’état ne peut entraîner le basculement de la sortie : celle-ci demeure à son état antérieur (mémoire).
3. 3
Electronique Numérique 3. Logique séquentielle 1
L’autorisation (≡ synchronisation) de l’horloge peut se faire de 3 façons : (exemple sur une bascule D)
- Synchronisation sur niveau : il suffit d'appliquer le niveau logique convenable, dit niveau actif, sur l’entrée
(≡ latch) d’horloge, pour que la sortie de la bascule puisse réagir aux entrées de données :
(H : signal d’horloge (noté aussi CK); D : entrée de donnée)
D Q D Q
H Q H Q
Synchro. sur niveau haut Synchro. sur niveau bas
( ≡ positive latch) ( ≡ negative latch)
- Synchronisation sur front : la sortie de la bascule réagira aux entrées de données à l’instant où se produit un
ou flanc ou transition front (≡ une transition d’état) de l’horloge.
(≡ edge triggered) Ce front actif peut être montant (≡ positif) ou descendant (≡ négatif) :
D Q D Q
H Q H Q
Synchro. sur front montant Synchro. sur front descendant
( ≡ positive edge triggered) ( ≡ negative edge triggered)
- Synchronisation par impulsion : une impulsion de synchronisation de l’horloge est composée de 2 fronts
(≡ pulse triggered) (l’un positif et l’autre négatif) : le 1er front sert à la synchronisation des
entrées, le 2nd front sert à la synchronisation des sorties.
Ce type de synchronisation est utilisé pour les systèmes maître-esclave - sas).
D Q D Q
H Q H Q
Maître-esclave sur niveau (haut) Maître-esclave sur front (montant)
( ≡ positive pulse triggered) ( ≡ positive pulse edge triggered)
Un système constitué de plusieurs bascules synchrones est dit synchrone si toutes les bascules sont pilotées par une
horloge et si cette horloge est identique pour toutes les bascules.
3. LES BASCULES SYNCHRONES
3.1. ≡ bascule RS synchronisée)
La bascule RST (≡
Du fait de la synchronisation, elle constitue une amélioration de la bascule RS asynchrone.
Bien que plus lents que les systèmes asynchrones (il faut attendre la validation d’horloge pour prendre en compte les
données), les systèmes synchrones ont l’avantage d’introduire un certain déterminisme (prévision, régularité, maîtrise
des séquences) dans les traitements, et sont ainsi beaucoup plus utilisés que les systèmes asynchrones.
Exemple: Bascule RST synchronisée sur niveau haut de l’horloge T (bascule RST latch > 0):
Symbole
R Q
T
S
.T=0: la sortie ne change pas quelles que soient les entrées R et S.
C'est le fonctionnement en mémoire. La bascule n'est pas synchronisée.
. T = 1 : la bascule est alors synchronisée. Sa sortie respecte la table de fonctionnement de la
bascule RS (asynchrone) avec les mêmes restrictions.
Table de fonctionnement de la bascule RST synchronisée sur niveau haut de l’horloge T :
(X signifie indifféremment 0 ou 1 (valeur quelconque binaire))
Horloge T T S R Qn Fonction
Horloge T inactive 0 X X Qn-1 Mémorisation
Horloge T active 1 0 0 Qn-1 Mémorisation
Horloge T active 1 0 1 0 RESET (Remise à 0 de Q)
Horloge T active 1 1 0 1 SET (Mise à 1 de Q)
Horloge T active 1 1 1 Interdit
3. 4
Electronique Numérique 3. Logique séquentielle 1
S
t
R
t
1 2 3 4 5
T
t
Q
synchronisé latch > 0
t
Mémoire Mémoire Mémoire
Mise à 1 Mise à 0
Q
non synchronisé
t
Stop car combinaison interdite
Constitution (bascule RST latch > 0) (pour une RST latch < 0, il suffit de complémenter l’horloge)
Etant donné que pour la combinaison R = S = 0 avec T = 1, on a un fonctionnement indentique à la combinaison
T = 0 quels que soient R et S, il faut fabriquer deux variables r et s entrées d'une bascule RS asynchrone telles que les
tables de vérité suivantes soient vérifiées :
T S s T R r
0 0 0 0 0 0
0
1
1
0
0
0
0
1
1
0
0
0
} Fonction mémoire
1 1 1 Mise à 1 1 1 1 Mise à 0
Ceci est facilement réalisé à l'aide d'une porte ET qui permet de bloquer les commandes R et S tant que T = 0.
Le schéma de la bascule RST synchronisée sur niveau haut de T peut donc être le suivant :
S s
& & Q
r &
&
R
Le circuit ET suivi de l'inverseur peut avantageusement être remplacé par un opérateur NAND.
3.2. La bascule D
Elle constitue un élément mémoire. Elle supprime la configuration interdite de la bascule RST . Elle possède 1 entrée de
donnée D (Data) et est réalisée à partir d'une bascule RST avec les entrées R et S liées par la relation : D = S = R .
Fonctionnement
Cette bascule dispose d'une seule entrée appelée D. Le signal de synchronisation peut être actif soit sur un niveau - la
bascule est alors appelée D latch - soit sur un front (bascule edge triggered). C est l’horloge de synchronisation.
Exemple
D Q D Q
C C
3. 5
Electronique Numérique 3. Logique séquentielle 1
Avec une seule entrée on ne peut trouver que deux modes de fonctionnement :
- le signal de synchronisation est actif, la sortie Q recopie l'entrée D.
- le signal de synchronisation n'est pas actif, la sortie Q ne change pas.
C'est le fonctionnement en mémoire. Lors du passage en position mémoire, la dernière valeur recopiée est mémorisée.
Exemple avec une bascule D edge triggered synchronisée sur front positif
D
1
0 t
C
1
0 t
Q
1
0 t
Mémoire Mémoire Mémoire
Recopie Recopie
Le léger retard de Q par rapport à la prise en compte de D témoigne du temps de propagation à travers la bascule
Constitution d'une bascule D latch > 0 (pour une D latch < 0, il suffit de complémenter l’horloge)
Une bascule D est issue d'une bascule RST avec les entrées R et S liées par la relation : D = S = R
Pendant la phase où l'horloge de synchronisation est inactive, on a : Qn = Qn −1 : fonction mémoire
L'équation de fonctionnement dans la phase d'activité de l’horloge est : Qn = S + R ⋅ Q = Dn −1 : fonction recopie
Le schéma de réalisation peut être le suivant :
D=S
& & Q
T
Horloge
& &
R
3. 6
Electronique Numérique 3. Logique séquentielle 1
Constitution d'une bascule D >0 edge triggered (pour une D <0 edge triggered, il suffit de complémenter l’horloge)
La discrimination du front, c'est à dire du changement de niveau, ne s'effectue pas avec un circuit dérivateur mais par le
jeu de trois mémoires internes à la bascule La réalisation simplifiée d'une bascule D >0 edge triggered est donné par :
&
&
& Q
Horloge
&
&
&
D
L'analyse du fonctionnement de cette bascule peut être faite comme s'il s'agissait d'un système séquentiel asynchrone
ayant deux variables d'entrées D et C.
3.3. La bascule T
Fonctionnement
Une bascule fonctionnant suivant le type T dispose d'une seule commande : l’entrée d’horloge (T).
La sortie Q de la bascule change d'état à chaque impulsion de la commande.
2T
H
Le léger retard de Q par rapport à la prise en compte de T témoigne du temps de propagation à travers la bascule
Remarque : Si le signal de commande est périodique de période TH (fréquence f), le signal de sortie est également
f
périodique mais de période 2TH (fréquence ).
2
Ce mode de fonctionnement réalise une division par 2 de la fréquence.
3. 7
Electronique Numérique 3. Logique séquentielle 1
Constitution
L'équation de fonctionnement est donnée par : Qn = Qn −1
En effet, après chaque commande la sortie change d'état, ce qui signifie qu'elle prend la valeur du complément.
Il n'est pas commercialisé de bascules T. Il faut les fabriquer à l'aide des autres bascules.
Exemple : Transformation d'une bascule D (> 0 edge triggered) en bascule T (> 0 edge triggered).
L'équation de la bascule D étant : Qn = D , il suffit de relier l'entrée D à la sortie Q pour obtenir :
Qn = Q (≡ Q n −1 )
D Q
T Q
Horloge T T Qn Fonction
Horloge T inactive 0 Qn −1 Mémorisation
Horloge T active 1 Q n − 1 Complémentation
Précaution d'usage
Il ne faut pas réaliser un rebouclage qui provoque une instabilité de la sortie du montage. Par ex. , avec une bascule D
latch > 0, la durée du niveau actif (1) de l’horloge doit être de courte durée: lorsque l'horloge passe au niveau actif (1),
la sortie change après le temps nécessaire à la propagation de l'information. Comme la sortie Q est réunie à l'entrée D,
le changement de la sortie provoque un autre changement de celle-ci après le même décalage temporel.
3.4. La bascule JK
Fonctionnement
C'est une bascule disposant de deux entrées, respectivement appelées J et K. Comme pour la bascule RS, l'entrée J sert à
la mise à 1 et l'entrée K à la remise à 0.
La différence entre la bascule JK et la bascule RS réside dans le fait qu'il n'y a plus d'état interdit pour les entrées, au
profit de la combinaison J = K = 1 utilisée pour obtenir un fonctionnement type T.
Exemple: Bascule JK synchronisée sur front montant de l’horloge H (bascule JK > 0 edge triggered) :
Symbole
J Q
H
K
La table de fonctionnement est la suivante (table de vérité) :
3. 8
Electronique Numérique 3. Logique séquentielle 1
Transition Qn-1 → Qn J K
0 → 0 0 X
0 → 1 1 X
1 → 1 X 0
1 → 0 X 1
On remarque sur cette table de fonctionnement que la bascule JK peut se substituer à n'importe quelle autre bascule :
- Bascule JK comme bascule RST :
Il est facile de fabriquer une bascule RST en faisant la correspondance J = S, K = R et en s'interdisant J = K = 1:
S J Q
H C
R K
1 J J
Q Q
H C H C
1 K K Q
3. 9
Electronique Numérique 3. Logique séquentielle 1
& R Q
K
T
J
S
& Q
t
V = + 5 Volts − V = + 5 Volts
U =V e RC
C C
Clear Q init = 0 Preset Q init = 1
U U U
R V "1" furtif R
Preset Clear
t
C initialement déchargé RC C initialement déchargé
t
V = + 5 Volts − V = + 5 Volts
U = V (1 − e RC
)
R R
Clear Q init = 0 Preset Q init = 1
U U U
C V C
V V
"0" furtif
Preset t Clear
C initialement déchargé RC C initialement déchargé
3. 10
Electronique Numérique 3. Logique séquentielle 1
U Preset U Preset
U U
C V R V
t t
C initialement déchargé RC C initialement déchargé RC
J
&
& & Q
≥1
K &
I I
M E
Maître Esclave
Les interrupteurs I M et I E sont commandés par le niveau du signal d'horloge par rapport à un seuil déterminé.
3. 11
Electronique Numérique 3. Logique séquentielle 1
Le signal d'horloge étant une impulsion, les niveaux correspondant aux seuils définissent 4 points (5 zones distinctes) :
H B C
Seuil du maître
A D
Seuil de l'esclave
t
zone 1 2 3 4 5
Dans la zone temporelle 1 les interrupteurs du maître et de l'esclave sont respectivement ouverts et fermés. Le maître
fonctionne alors en mémoire, l'esclave recopie la sortie du maître.
H= 0 I I
M E
I H e
M 1 M E
I H Q = e
E E 0
Q = e
M 0
(état antérieur)
Pour accéder dans la zone 2 , le seuil de l'esclave est franchi et l'interrupteur correspondant change d'état.
L'esclave est alors séparé du maître et fonctionne en mémoire.
H entre états Bas et Haut I I
M E
I 0 e
M
1 M E
I 0 Q = e
E 0
E Q = e
M 0
Dans la zone 3 l'esclave mémorise toujours la même information et le signal de sortie n'a pas encore changé. Par
contre, le maître prend en compte l'information d'entrée.
I I
H= 1 M E
e
I H 1 M E
M
Q = e
I H E 0
E Q = e
M 1
Dans la zone 4 le maître est de nouveau isolé de l'entrée. Il a mémorisé la nouvelle valeur de la sortie (e1 ) . L'esclave
reste encore isolé du maître. par conséquent la valeur de la première sortie n'est pas encore modifiée.
H entre états Haut et Bas I I
M E
I 0 e
M 2 M E
I 0 Q = e
E E 0
Q = e
M 1
C'est seulement dans la zone 5 que le maître communique la nouvelle valeur à l'esclave qui la transmet en sortie.
I I
H= 0 M E
e
I H 2 M E
M
Q = e
I H E 1
E Q = e
M 1
On peut remarquer qu'il n'existe pas de configuration où les deux interrupteurs sont simultanément fermés, ce qui permet
d'effectuer un rebouclage sortie → entrée sans craindre une instabilité (système de sas réalisé).
D'autre part le décalage temporel entre les commandes des interrupteurs I M et I E est inévitable puisqu'il est
impossible d'obtenir des signaux d'horloge capables de passer instantanément du niveau 0 au niveau 1 (ou inversement).
dv
En d'autres termes, on peut dire que la qualité des fronts du signal d'horloge v (t ) n'influence pas le principe décrit.
dt
Néanmoins, il faut que l'impulsion de l'horloge ait une durée suffisante compte tenu de la vitesse d'évolution de la
bascule.
3. 12
Electronique Numérique 3. Logique séquentielle 1
Enfin, on remarque que si le signal d'horloge est supérieur au seuil de l'esclave, alors l'interrupteur I E est ouvert. Et si
le signal d'horloge est supérieur au seuil du maître, I M est fermé. Les deux interrupteurs peuvent donc être commandés
par des signaux complémentaires.
( H et H ; les phases 2 et 4 où les interrupteurs sont ouverts simultanément sont dûes à la transition H de 1 → 0
et H de 0 → 1).
Le schéma d'une bascule RST maître-esclave est donné par la figure suivante :
S
&
&
&
& Q
1
&
&
R &
&
I I
M E
e Q
M E
J &
&
&
& Q
T 1 Q
&
&
K &
&
Suivant le mode de synchronisation du maître lors de la phase 3 , il existe deux types de bascules maître-esclave.
En effet, l'acquisition de la nouvelle valeur peut être faite sur le front montant du signal de synchronisation ou sur son
niveau.
Pour distinguer ces deux types de bascules, on appelle bascule maître-esclave à verrouillage la structure dont le maître
est synchronisé sur le front montant de l'horloge.
Enfin, il faut remarquer que la stabilité apportée à une bascule par une structure maître-esclave se fait au prix d’un coût
en temps de propagation de la bascule.
3. 13
Electronique Numérique 3. Logique séquentielle 1
Tableau récapitulatif
Chaque type de bascule est donnée avec table de fonctionnement et parfois un ex. de CI (circuit intégré) (Texas Instr.).
Bascule RS
S R Q
S Q n
0 0 Q Mémoire
n -1
R Q 0
1
1
0
0
1
} Recopie de S
La bascule RS est sujette à des aléas de
fonctionnement (sorties imprévisibles)
lorsque les 2 entrées S et R changent
1 1 Interdit car Q = Q
n n d'état simultanément.
C : Horloge
1 1 1
} Recopie 4D
C 4
4D
4Q
4Q
C : Horloge
Q 0
1
0
1
} Recopie
2D
2 CLR
2Q
Les entrées asynchrones Preset et Clear, actives à l'état bas, de mise à 1 et à 0 servent à l’initialisation ou l’effacement
Bascule T
Q
T
Q
Table de vérité
Horloge T T Qn Fonction
Horloge T inactive 0 Qn −1 Mémorisation
Horloge T active ↑ Q n − 1 Complémentation
K Q
0
1
1
0
0
1
} Recopie de J
2 CLK
2K
2Q
C : Horloge
1 1 Q Complément 2 CLR
n -1
Les entrées asynchrones Preset et Clear, actives à l'état bas, de mise à 1 et à 0 servent à l’initialisation ou l’effacement
3. 14
Electronique Numérique 3. Logique séquentielle 1
Bascule JK maître-esclave
Exemple 74XX72
PRE S
J1 &
J2 1J
C J K Q J3 Q
n
X X X Q CLK C1
J
C
Q
0 0 Q
n -1
n -1
} Mémoire K1
K2
&
1K
Q
K Q
0
1
1
0
0
1
} Recopie de J K3
C : Horloge CLR R
1 1 Q
n -1 Complément J = J1.J 2.J 3 . 2.K 3
K = K 1K
J et K sont calculés à l'aide d'une porte ET à 3 entrées.
Le symbole indique que la sortie n'évolue qu'après le retour à l'état initial de l’horloge C.
Bascule RS maître-esclave
C S R Q
n
X X X Q
S
C
Q
0 0 Q
n -1
n -1
} Mémoire
R Q
0
1
1
0
0
1
} Recopie de S
C : Horloge
1 1 Interdit
__________
3. 15
Electronique Numérique TD 3. Logique séquentielle 1
TD 3. LOGIQUE SEQUENTIELLE 1
1. Logique combinatoire et séquentielle
Les systèmes a, b, c, dont le fonctionnement est décrit par les chronogrammes suivants sont-ils combinatoires ou
séquentiels ? (S : sortie; H, E, A, B : entrées)
a. H 1 2 3 4 5
1
0 t H
E ? S
E
t
S
t
b. H 1 2 3 4 5
1
0 t H
A A ? S
B
t
B
t
S
t
c. H 1 2 3 4 5
1
0 t H
A A ? S
B
t
B
t
S
t
2. Bascules (Analyse)
Compléter les chronogrammes pour chacun des schémas suivants :
a. H 1 2 3 d. H 1 2 3
D 1 J Q 1
Q 0 t H C
0 t
H C Q Q K Q Q
t t
b. H 1 2 3 e. H 1 2 3
D 1 1
Q J Q
0 t H C
0 t
H C Q Q 1 K Q Q
t t
c. H 1 2 3 f. H 1 2 3
1 J Q 1 1 J Q 1
H C 0 t H C 0 t
1 K Q K Q
Q Q
t t
Rappel
Bascule D > 0 edge triggered
Exemple 74XX74
1 PRE S
1Q
1 CLK C 1
1D 1D
1Q
1 CLR R
C D Q
D Q n
2 PRE
2Q
X X Q Mémoire 2 CLK
n -1
C
C : Horloge
Q 0
1
0
1
} Recopie
2D
2 CLR
2Q
TD 3. 1
Electronique Numérique TD 3. Logique séquentielle 1
K Q
0
1
1
0
0
1
} Recopie de J
2 CLK
2K
2Q
C : Horloge
1 1 Q Complément 2 CLR
n -1
& ≥1
JA A JB B
=1 K
A
A K
B
B
Compléter le chronogramme suivant (A et B sont initialement à l’état 0) et donner la séquence (automate) des
états AB du compteur:
H 1 2 3 4 5
X t
TD 3. 2
Electronique Numérique TD 3. Logique séquentielle 1
JA A JB B
& Z
K A K B
A B
A t
B t
Z t
t
2. Solution à logique câblée (2)
Une synthèse plus intuitive utilisant un registre à décalage est également possible. On donne la table de fonctionnement
du circuit 74164 (registre à décalage 8 bits) :
CL
QH
74164
QG
QF Table de fonctionnement 74164 Entrées Sorties
QE CL (CLEAR) CK (CLOCK) A Q An Q Bn Q Cn Q Dn Q En Q Fn Q Gn Q Hn
B
QD 0 X X X 0 0 0 0 0 0 0 0
QC
QB 1 X sauf X X Q An-1 Q Bn-1 Q Cn-1 Q Dn-1 Q En-1 Q Fn-1 Q Gn-1 Q Hn-1
QA 1 (front montant) 1 1 1 Q An-1 Q Bn-1 Q Cn-1 Q Dn-1 Q En-1 Q Fn-1 Q Gn-1
1 0 X 0 Q An-1 Q Bn-1 Q Cn-1 Q Dn-1 Q En-1 Q Fn-1 Q Gn-1
A B
CK 1 X 0 0 Q An-1 Q Bn-1 Q Cn-1 Q Dn-1 Q En-1 Q Fn-1 Q Gn-1
TD 3. 3
Electronique Numérique TD 3. Logique séquentielle 1
2.1. Compléter le schéma électrique (en complétant le câblage et en remplaçant chaque ? par un bit 0 ou 1, ou
par un opérateur logique) pour permettre la détection de la séquence a b c d .
?
CL ? Z
?
QH
QG
74164
QF ? ? ? ?
QE
QD
QC a b c d
QB
QA
A B
CK
H
L
2.2. Donner deux avantages fonctionnels de cette solution par rapport à la précédente.
Avantage 1 Avantage 2
• •
H M ? z
S
M : mot à détecter (4 bits)
PROM RAM S : code de la séquence à détecter abcd
z : résultat de la détection (bit indicateur)
3.2. Quel avantage fonctionnel peut-on attribuer à cette solution par rapport à la précédente ?
Dire aussi quel peut être l’inconvénient principal de cette solution par rapport aux précédentes.
Avantage
•
TD 3. 4
Electronique Numérique TD 3. Logique séquentielle 1
t0 t1 t2 t3
rebond
__________
TD 3. 5
Electronique Numérique TP 3. Logique séquentielle 1
TP 3. LOGIQUE SEQUENTIELLE 1
1. Matériel nécessaire
- Oscilloscope
- Générateur de signaux Basses Fréquences (GBF)
- Alimentation stabilisée ( 2x[ 0-30 V] _ + 1x[ 5 V] _ )
&&& &&&
- Multimètre
- Moniteur MS05 (plaquette de câblage)
- Câbles : - 1 T, 1 BNC-BNC, 1 BNC-Banane, 1sonde oscilloscope, 6 fils Banane, petits fils.
Composants
- 1 Résistance 1MΩ
- 1 Condensateur 100 nF
- 1 mini-interrupteur (horloge manuelle)
2. Notation du TP
Faire examiner par le professeur en fin de séance, les différentes parties du TP.
A l’aide d’un circuit RC, on active l’entrée asynchrone un court instant au démarrage par un niveau haut, puis on ramène le signal asynchrone
d’initialisation à 0. Appliqué à l’entrée Clear, ceci initialise Q à 0, mais appliqué à l’entrée Preset, ceci initialise Q à 1. A chaque fois l’entrée
asynchrone non utilisée est placé à l’état inactif, soit l’état 0. (Le maintien prolongé d’une entrée asynchrone à son niveau actif fixe Q constant : à 0
si Clear est actif, à 1 si Preset l’est).
t
V = + 5 Volts − V = + 5 Volts
U =V e RC
C C
Clear Q init = 0 Preset Q init = 1
U U U
R V R
Preset Clear
t
C initialement déchargé RC C initialement déchargé
A l’aide d’un circuit RC, on active l’entrée asynchrone un court instant au démarrage par un niveau bas, puis on ramène le signal asynchrone
d’initialisation à 1. Appliqué à l’entrée Clear , ceci initialise Q à 0, mais appliqué à l’entrée Preset , ceci initialise Q à 1. A chaque fois l’entrée
asynchrone non utilisée est placé à l’état inactif, soit l’état 1. (Le maintien prolongé d’une entrée asynchrone à son niveau actif fixe Q constant : à 0
si Clear est actif, à 1 si Preset l’est).
TP 3. 1
Electronique Numérique TP 3. Logique séquentielle 1
t
V = + 5 Volts − V = + 5 Volts
U = V (1 − e RC
)
R R
Clear Q init = 0 Preset Q init = 1
U U U
C V C
V V
Preset t Clear
C initialement déchargé RC C initialement déchargé
Etude expérimentale
Simulation (& Câblage) :
Pour des raisons de compatibilité, n’utiliser que des circuits de la même famille (famille CMOS 4000 à ne pas
mélanger avec la famille TTL 74xxx).
3. Bascules JK (1)
Le schéma du circuit considéré est le suivant :
Q0 Q1
J J
Q0 Q1
K K
Etude théorique
- Par une étude théorique, prévoir à partir de l’état initial Q1Q0 = 00, la séquence (automate) des états Q1Q0 du
compteur 4 états (Tracer le chronogramme faisant figurer les signaux H (Horloge), Q1 et Q0 ).
t
Q1 Q0 = 1 1
Q1 Q1 Q0 = 1 0
Q1 Q0 = 0 0
t Q1 Q0 = 0 1
Q1 Q0 = 1 1
Q0
t etc
Etude expérimentale
- Vérifier expérimentalement par câblage et simulation ce résultat en visualisant avec des LEDs et avec le
chronogramme les états Q1 et Q0 du compteur et en utilisant le Générateur Basse Fréquence (GBF) pour
horloge en câblage (Pulser de Circuit Maker pour la simulation).
Notes : 1. En simulation , l’initialisation de la sortie Q = 1 d’une bascule JK s’obtient en jouant sur les entrées
asynchrones d’initialisation R et S de façon à envoyer un « 1 » furtif sur l’entrée S, R étant à 0 :
logic switch commandé manuellement
1
0 S
S
Q
J
"1" furtif t
C
K
R
TP 3. 2
Electronique Numérique TP 3. Logique séquentielle 1
4. Bascules JK (2)
Etude théorique
En traçant le chronogramme faisant figurer les signaux H (Horloge), Q1 et Q0 , prévoir la séquence (automate) des
états Q1Q0 du compteur 3 états: ( Etat initial supposé : Q0 = Q1 = 0 )
Q Q
J 0 J 1
C C
Q
1
1 K 1 K
Q0 t
0 1 0 0 1
Q1 t
0 0 1 0 0
t
On a un compteur par 3 : Q1Q0 = 00 → 01 → 10 → 00 → ...
Etude expérimentale
Notes : 1. En simulation , l’initialisation de la sortie Q = 1 d’une bascule JK s’obtient en jouant sur les entrées
asynchrones d’initialisation R et S de façon à envoyer un « 1 » furtif sur l’entrée S, R étant à 0 :
logic switch commandé manuellement
1
0 S
S
Q
J
"1" furtif t
C
K
R
1.1. Présentation
Un registre est d'abord un ensemble de cases ou cellules mémoire capables de stocker une information (≡ un mot
binaire). La position des cases mémoire entre elles est responsable de l'ordre des chiffres, c'est à dire de la structure de
l'information. Dans le système binaire, une case mémoire est définie à l'aide d'une bascule. Un registre est donc un
ensemble ordonné de bascules.
De plus, l'interconnexion entre les bascules permet certaines manipulations de l'information stockée.
1.2. Fonctionnement
Un registre sert à mémoriser un mot ou un nombre binaire. Le schéma d'un tel système comporte autant de bascule type
D que d'éléments binaires à mémoriser. Toutes les bascules sont commandées par le même signal d'horloge.
D Q D Q D Q D Q
0 0 1 1 2 2 3 3
D D D D
Q Q Q Q
C C C C
Horloge
Moyennant une interconnexion entre les cellules, le registre précédent devient capable d'opérer une translation des
chiffres (≡ bits) du nombre (≡ mot) initialement stocké. Le déplacement s'effectue soit vers la droite soit vers la gauche.
Le registre est alors appelé registre à décalage.
De nombreuses applications résultent de cette possibilité de décalage, par exemple :
Plus généralement un registre peut se représenter par le schéma suivant : Fonctions Décalage en plus
Entrées parallèles
E E E
0 1 n -1
Sortie série
Commandes
S S S
0 1 n -1
4. 1
Electronique Numérique 4. Logique séquentielle 2
Les registres disposant de toutes ces entrées, sorties et commandes sont appelés registres universels à n cellules. Tous
les registres actuellement commercialisés n'ont pas toutes les possibilités de commande du registre universel
essentiellement à cause de la limitation du nombre de broches disponibles par boîtier. Les sorties S0 L Sn −1 sont les
sorties des bascules constituant les cellules du registre.
- Garder une information en mémoire. Chaque bascule conserve sa valeur malgrè les impulsions d'horloge.
Exemple :
S S S S S
0 1 2 3 4
Etat initial 1 0 1 1 0
- Décaler une information de la gauche vers la droite. Le contenu de la bascule de rang i est transmis à celle de rang
i +1 à chaque impulsion d'horloge.
Exemple :
S S S S S
ESG 0 1 2 3 4
Etat initial 1 0 1 1 0
La sortie S0 de la première bascule prend alors la valeur de l'entrée du registre appelé entrée série gauche (ESG).
- Décaler une information de la droite vers la gauche. Le fonctionnement est semblable à celui décrit ci-dessus en
inversant le sens d'évolution des éléments binaires de chaque sortie. La bascule de rang i prend la valeur de la sortie
i +1 à chaque impulsion d'horloge.
Exemple :
S S S S S
0 1 2 3 4 ESD
Etat initial 1 0 1 1 0
Cette fois c'est la valeur de l'entrée série droite (ESD) qui est inscrite dans la dernière bascule S4 .
Pour assurer correctement la fonction de décalage, un registre doit comporter des cellules constituées de bascules de
type maître-esclave ou à déclenchement par front (sans quoi le décalage n'est pas contrôlé).
Le décalage n'est pas la seule fonction que doit pouvoir accomplir un registre.
4. 2
Electronique Numérique 4. Logique séquentielle 2
C
C C C C
Horloge
Si l'on suppose que la position de chaque bascule est fixe, c'est la câblage qui doit réaliser le décalage vers la gauche.
Par conséquent, l'entrée D de la bascule de rang i est reliée à la sortie de rang i + 1 :
ESD
D Q D Q D Q D Q D Q
0 0 i- 1 i- 1 i i i+1 i+1 n n
C C C C C
Horloge
Suivant la nature de la bascule utilisée dans chaque cellule, la fonction mémoire peut se réaliser de différentes façons.
La table suivante donne la combinaison des entrées des bascules qui réalise la fonction mémoire :
Type Entrées
RS R=S= 0
JK J=K= 0
ou
J=K=Q
D D=Q
Une autre solution consiste à interdire l'action de l'horloge en intercalant une porte ET en série. Cette dernière solution
est à proscrire car elle crée un décalage entre les différents signaux d'horloge d'un même système à cause du temps de
propagation à travers la porte ET (phénomène de Skew). Le fonctionnement du registre n’est alors plus synchrone avec
les autres circuits du système.
D Q D Q D Q D Q
C C C C
Horloge
&
A
Mémoire si A = 0
Décalage si A = 1
4. 3
Electronique Numérique 4. Logique séquentielle 2
Il faut utiliser les entrées asynchrones (entrées prioritaires PreSet PRE de mise à 1 et Clear CLR de mise à 0) de chaque
bascule pour forcer l'information qui doit être écrite.
Le forçage ne doit se faire qu'au moment de l'écriture, ce qui signifie qu'il est nécessaire d'ajouter des circuits à chaque
bascule de façon à synchroniser les entrées de forçage par un ordre particulier généralement appelé ordre d'écriture ou
de chargement (LOAD).
La commande d'écriture est dans ce cas généralement asynchrone. Le principe de la synchronisation consiste à
transformer une bascule asynchrone en une bascule D latch. Le schéma correspondant est donné par les figures ci-après :
Ordre Ordre
d'écriture d'écriture
1
CLR
& & CLR
Cas d’une bascule sensible sur les niveaux 1 des entrées asynchrones. Cas d’une bascule sensible sur les niveaux 0 des entrées asynchrones.
On remarque que l'utilisation d'un opérateur NAND permet à la fois la synchronisation avec l'ordre d'écriture et la
complémentation de l'information d'entrée d.
La sortie d'une bascule D recopie son entrée au moment de la phase active de l'horloge. Pour provoquer l'écriture d'une
donnée en synchronisme avec l'horloge il faut placer cette donnée sur l'entrée D de la bascule.
d
D Q D Q
C C
Horloge
Commande d'écriture ( )
ou de décalage ( )
1.3.6. L'initialisation
Cette initialisation consiste à imposer pour toutes les bascules du registre la même valeur, en général 0, à l'aide d'une
commande asynchrone.
Le schéma d'un registre disposant d'une remise à zéro RAZ générale est donné par la figure ci-après :
RAZ 1
C C C
Horloge
4. 4
Electronique Numérique 4. Logique séquentielle 2
S
2
A
R S
CK
QA
R S
CK
QB
R S
CK
QC
R S
CK
QD
R S
CK
QE
R S
CK
QF
R S
CK
QG
4. 5
Electronique Numérique 4. Logique séquentielle 2
2.1. Présentation
Les compteurs sont des éléments essentiels de logique séquentielle ; ils permettent en effet d'établir une relation d'ordre
de succession d'évènements.
Leur emploi ne se limite pas, loin de là, aux systèmes arithmétiques. Ils sont utiles partout où il est souhaitable de définir
facilement une suite d'états.
L'élément de base des compteurs est, comme pour les registres, une bascule. L'état du compteur est défini par le nombre
binaire formé avec l'ensemble des sorties des bascules.
La synthèse d'un compteur consiste à définir les niveaux logiques des commandes des bascules pour assurer le passage
successif d'un état à l'autre suivant l'ordre du cycle prévu (échelle de comptage).
Ils sont classés en deux catégories suivant leur mode de fonctionnement.
- Les compteurs asynchrones ou compteurs série. La caractéristique principale des compteurs asynchrones est la
propagation en cascade de l'ordre de changement d'état des bascules. L'horloge synchronise la 1ère bascule, dont la
sortie va synchroniser la bascule suivante.
- Les compteurs synchrones ou compteurs parallèles. Le signal d'horloge synchronise toutes les bascules simultanément.
15 1 1 1 1 0 1 2 3 4 5 6 7 8 9 10
N t
4. 6
Electronique Numérique 4. Logique séquentielle 2
On remarque facilement que la première bascule B1 (A) change d'état à chaque impulsion d'horloge, que la sortie B2
(B) change d'état à chaque fois que la sortie A présente une transition descendante (1 → 0) et ainsi de suite. En d'autres
termes, la période de la sortie A est égale au double de la période d'horloge, la période de B est égale à 2 fois celle de la
sortie A, etc ...
Ceci est facilement réalisé en utilisant des bascules câblées en type T, par exemple des bascules JK avec J = K = 1.
1 J Q 1 J Q 1 J Q 1 J Q
1 2 3 4
Horloge
1 K B 1 K B 1 K B 1 K B
1 2 3 4
Afin d'illustrer le désynchronisme qui apparaît entre les sorties, examinons la transition entre 7 et 8. Ce cas est
particulièrement perturbé puisque toutes les sorties changent.
Horloge t
A
t
B
t
C
t
D
t
7 7 6 4 0 8
Etats transitoires
La structure en cascade implique l'accumulation des retards entre la transition descendante de l'horloge et la stabilisation
des sorties des bascules.
Comme les sorties changent les unes après les autres, il apparaît des états transitoires indésirables.
Sur le chronogramme ci-dessus, ces différents états sont repérés par leur équivalent décimal.
Pour un compteur asynchrone, si n bascules changent d'état après une impulsion d'horloge, il existe (n -1) états
transitoires.
4. 7
Electronique Numérique 4. Logique séquentielle 2
On appelle compteur modulo N, un compteur décrivant la succession des nombres binaires compris entre 0 et N -1, c'est
à dire la suite des chiffres d'une base N traduite en binaire.
Par exemple, pour N = 10, la succession des états du compteur est donnée par le cycle suivant (N = 10 états), alors que
le cycle complet non interrompu compte jusqu’à 16 états :
0
1 9
2 8
3 7
4 6
5
Rebouclage asynchrone
Le compteur modulo N est dans ce cas considéré comme un compteur binaire m bits comptant de 0 à 2 m − 1 dont le
cycle est interrompu à N = 2 − 1 . En effet, entre 0 et 9 par exemple, la succession des états est identique pour les
m
1 K B 1 K B 1 K B 1 K B
1 2 3 4
&
Remarques :
- Le décodage de 10 se limite à vérifier que B et D sont à 1, les combinaisons 11 à 15 ne devant pas apparaître en
fonctionnement normal.
- Il ne faut pas limiter la remise à zéro aux seules bascules qui sont à 1. En effet, si seules les bascules B et D sont
remises à 0, le changement d'état de B provoque le changement d'état de C.
- Enfin cette solution ne donne satisfaction que si toutes les bascules ont des temps de réaction semblables.
4. 8
Electronique Numérique 4. Logique séquentielle 2
La succession des états dans l’exemple précédent (N = 10) est donné par la table suivante dans laquelle le passage d'une
ligne à la suivante est conditionné par une impulsion d'horloge.
N D C B A
0 0 0 0 0
1 0 0 0 1
2 0 0 1 0
3 0 0 1 1
4 0 1 0 0
5 0 1 0 1
6 0 1 1 0
7 0 1 1 1
8 1 0 0 0
9 1 0 0 1
0 0 0 0 0
La bascule A change d'état à chaque impulsion d'horloge. Elle est donc câblée en type T.
La bascule B change d'état sur chaque transition 1 → 0 de la sortie A sauf pour la transition 9 → 0.
Dans ce cas particulier il faut agir sur les entrées de la bascule pour qu'elle ne change pas d'état malgrè la transistion
active sur son horloge.
Pour tous les états de 0 à 7 inclus il faut impérativement que les entrées soient telles que le fonctionnement
correspondant soit du type T.
Pour la combinaison 9 il faut conditionner la bascule pour qu'elle reste en mémoire.
Pour la combinaison 8 il existe un degré de liberté.
Pour une bascule JK par exemple, la solution consiste à imposer les entrées :
J = K = 1 pour les états 0 à 7, et J = K = 0 pour l'état 9 et éventuellement 8
0 1 2 3 4 5 6 7 8 9 0 1
t
Le schéma du compteur modulo 10 réalisé par la méthode du conditionnement des entrées est le suivant :
A B C D
1 J J 1 J 1 J
H
C C C ≥1 C
1 1
K K K 1 K
D
&
4. 9
Electronique Numérique 4. Logique séquentielle 2
Exemple : Réaliser la séquence suivante avec des bascules JK : N = 0, 8, 12, 14, 7, 11, 13, 6, 3, 9, 4, 10, 5, 2, 1, 0, ...
Compteur 15 états (→ 4 bits A,B,C,D → 4 bascules de sorties respectives A,B,C,D)
Ces nombres décimaux s'écrivent en binaire avec 4 bits. En conséquence, cette séquence impose l’utilisation de quatre
bascules, d’où la table suivante (utilisant la table des transitions d’une bascule JK et où ABCD sont codées en code BCD) :
Sorties Entrées
N A B C D J K J K J K J K
A A B B C C D D
0 0 0 0 0 1 X 0 X 0 X 0 X
8 1 0 0 0 X 0 1 X 0 X 0 X
12 1 1 0 0 X 0 X 0 1 X 0 X
14 1 1 1 0 X 1 X 0 X 0 1 X
7 0 1 1 1 1 X X 1 X 0 X 0 Rappel
Q Q Q Q
... J A ... J B ... J C ... J D
A B C D
Horloge
Après simplification des états équivalents et des fonctions logiques, les entrées J et K des bascules ont pour équation
(8 tables de Karnaugh d’entrées A , B , C , D et de sortie J A , K A , J B , K B , ..., J D , K D ) :
Exemple : Calcul de JA /KA : Calcul de JA :
(double table de Karnaugh) (simple table de Karnaugh)
J
A
/ KA J
A
AB AB
CD 00 01 11 10 CD 00 01 11 10
00 1X 10 X0 X0 00 1 1 X X
01 0X 0X X1 X1 01 0 0 X X
11 1X 1X XX X0 11 1 1 X X
10 0X 0X X1 X1 10 0 0 X X
J A = C D + CD = C ⊕ D
JA = C ⊕ D KA = C ⊕ D
JB = A KB = A
JC = B KC = B
JD = C KD = C
4. 10
Electronique Numérique 4. Logique séquentielle 2
Circuit (final)
JA Q JB Q JC Q JD Q
A B C D
1 C C C C
KA KB KC KD
Horloge
=1
Si, à la mise sous tension, le compteur se positionne dans la combinaison interdite (15 ≡ 1111) compte tenu du schéma,
il y restera malgrè les impulsions d'horloge.
Il faut donc prévoir une action manuelle ou automatique pour retourner dans le cycle (utilisation des entrées asynchrones
d’initialisation S et R d’une bascule JK).
RAZ Début de cycle
CLR &
R R R R Décodage de
JA Q JB Q JC Q JD Q
A B C D (15)
10
1 C C C C
pour rendre le
KA KB KC KD compteur
S S S S
autocorrecteur
Horloge
=1
Un circuit de décodage de la combinaison interdite permet de remettre le compteur dans son cycle (compteur
autocorrecteur) si par malheur cette combinaison apparaissait. Dans le schéma ci-dessus la remise en cycle est faite par
une remise à zéro de toutes les bascules puisque la combinaison 0 10 appartient au cycle. ()
Initialisation d’un compteur
L’état initial d’un compteur est défini à l’aide des entrées asynchrones d’initialisation (Preset et Clear).
A B C D A B C D A B C D
Horloge CP RCE CP RCE CP RCE
En En En
La conséquence de la mise en cascade asynchrone est que les sorties du second boîtier sont décalées dans le temps par
rapport aux sorties du premier.
4. 11
Electronique Numérique 4. Logique séquentielle 2
- La mise en cascade synchrone. Comme l'horloge est commune à tous les boîtiers, il faut conditionner l'évolution du
second boîtier par la commande (En ou CE) d'autorisation de comptage.
Up / Down
Horloge
A B C D A B C D A B C D
CP RCE CP RCE CP RCE
En En En
'0'
3.1. Présentation
Les séquenceurs sont des systèmes séquentiels dont l'état évolue en fonction d'évènements (qui peuvent être divers :
horloge, contact, interruption ... et non plus seulement l’horloge comme pour les compteurs) appelés actions. La
séquence des états et des transitions marquant les changements d'états (les actions) s'appelle un automate ou séquenceur
ou encore machine d’états. (Ex.: distributeur de boissons)
Un séquenceur n'est qu'exceptionnellement seul. En général il commande un système. Dans la plupart des cas, ce dernier
l'informe de son état, par exemple la fin d'exécution d'un tâche, la présence d'un débordement ou d'un résultat nul, etc .
Le séquenceur doit pouvoir, si nécessaire, prendre des décisions suivant l'état du système.
Séquenceur
Système
sous contrôle
A
Départ
p q
B b
T
c
C T
4. 12
Electronique Numérique 4. Logique séquentielle 2
Aiguillages :
p 0 : non devie
=
q 1 : devie
Contacts : (T)
a
0 : repos
b =
1 : passage du train(retombee a 0 apres passage)
c
Etat initial :
Train au départ sorties p et q à 0
Si on change d’itinéraire, il faut refaire toute la synthèse (→ nouveau circuit à base de bascules JK) ≠ solution
programmable où seul le programme change.
Les contacts a, b, c sont exclusifs (le train ne peut être à la fois en a, en b et en c).
A, B, C
Sorties
Etat pq
Transition d'état abc 1 00
00X
100
X00 2 1X
010
001
0X0 3 01
Note : Il y a changement d’état chaque fois que les sorties changent. Les états sont liés aux sorties. Les transitions sont
liées aux entrées : une modification des entrées provoque (éventuellement) une transition d’état (modification des sorties).
A, B, B, C
2 1X
X00
010
010 3 1X
001 000
000 4 1X
010
0X0 5 01
(X : 0 ou 1 : sans importance)
4. 13
Electronique Numérique 4. Logique séquentielle 2
Etat
résultant
transition Sorties
c
b
a p q
état
1 1 2 1 0 0
2 2 2 3 1 X
3 4 3 1 X
4 4 5 1 X
5 5 5 1 0 1
3.2.4. Attribution des variables de sortie des bascules (Qi ) : table des adresses
On a d'autant plus besoin de variables Qi (sorties de bascules) qu'il y a d'états à adresser dans la proportion :
n états à adresser
m
n=2
m variables Q
i
On doit donc avoir suffisamment de variables Qi pour adresser tous les états : n ≤ 2m .
4. 14
Electronique Numérique 4. Logique séquentielle 2
Exemple Synthèse avec des bascules J K synchrones (possibilité aussi avec des bascules asynchrones)
0 0 0 X
0 1 1 X
1 1 X 0
1 0 X 1
J K
2 2
c
Q
2 b
Q a
1
Q
0
0 X 0 X 0 X
0 X 0 X 0 X
0 X 0 X
0 X 1 X
X 0 X 0 X 1
J 2 = Q2 Q1 Q0 abc
→
K 2 = Q2 Q1 Q0 a bc
sans simplifier au maximum car ici la table est à 6 variables (>4) → méthode de Karnaugh inutilisable.
J Q J Q J Q
0 0 1 1 2 2
K K K
0 1 2
Entrées Sorties
p
a ...
...
b ...
...
c ... q
00 1X 1X 1X
XX XX XX 01
D’après la table 3.2.4. :
p = Q0 + Q1 Q2
→
q = Q1
4. 15
Electronique Numérique 4. Logique séquentielle 2
11 Compteur
01 T
programmable
11 n +1
01 m
Plus de table de Karnaugh à calculer, ni entrées J K, mais il faut programmer les bonnes instructions sur les entrées :
Enable
RAZ
Load
Data
instruction
4. 16
Electronique Numérique 4. Logique séquentielle 2
Ex : mise à 1 de s2
→ décodage de :
1 0 1
décodeur décodeur
mise à 0
mise à 1
S
s
1
R
. s
2
s s s s
1 2 3 4 . s
3
. s
4
opérande : sortie
condition
adresse de rupture
0 1
décodeur
0 1 1 0 1 0 1 1 0
MUX
entrées
d'adresse
décodeur
décod décodeur
n
adresse de rupture
Data
saut
Load Compteur
conditionnel programmable
4. 17
Electronique Numérique 4. Logique séquentielle 2
codage :
Programme :
4. 18
Electronique Numérique 4. Logique séquentielle 2
Matérialisation :
Q Q Q Q
3 2 1 0 4
a b c
mémoire
décodeur
code
instruction opérande
opér.
MUX
Mise à 0
Mise à 1 n
inhibition
saut
Enable Data Q
0
Q
1
Q
S Load 2
Q
3
p
Compteur
R
programmable
LES MICROPROCESSEURS
Structure
Bus d'adresses
H Unité de
Horloge Contrôle
Compteur
ordinal
Décodeur
R W Ad
ALU Mémoire
Registre
d'instruction
Accumu-
lateur
Bus de données
4. 19
Electronique Numérique 4. Logique séquentielle 2
Circuits associés
(µ p micro - processeur)
µ p
Bus
Bus
de
d'a-
don-
dres- Mémoire
-nées
-ses ROM
Mémoire
RAM
Interfaces
d'entrées /
sorties
Entrées Sorties
Le programme à exécuter (code machine) peut être développé en langage assembleur (codes mnémoniques symbolisant
les codes binaires) ou en langage évolué soumis à un compilateur.
Les microproceseurs les plus répandus sont notamment à base d’une architecture 32 bits :
. Pentium de la famille INTEL,
. série 68000 de la famille MOTOROLA.
Des processeurs spécialisés ont des performances (puissance, rapidité ...) optimales pour des applications dédiées :
.Traitement du signal : processeur TMS de TEXAS INSTRUMENTS
.Graphisme ...
LES MICROCONTROLEURS
L’utilisation de composants programmables (FPGA), programmables via un compilateur VHDL, présente l’avantage par
rapport aux circuits câblés (bascules, portes logiques) de la souplesse tout en n’ayant pas l’inconvénient de lenteur
d’exécution des autres solutions programmables puisque le composant programmable n’exécute pas un programme mais
est constitué de matrices ET et OU programmées à volonté en bascules et portes logiques (synthèse effectuée par le
compilateur VHDL).
4. 20
Electronique Numérique 4. Logique séquentielle 2
6. Conclusion
Logique câblée ≡ utilisation de portes combinatoires et séquentielles.
- Avantage : rapidité du sytème.
- Inconvénient : structure figée → manque de souplesse pour une modification ou adaptation du système.
Logique programmée ≡ utilisation de séquenceur (compteur), d'un microprocesseur, d’un microcontrôleur ou d’un
composant programmable (FPGA ...).
- Avantage : plus souple à modifier et concevoir.
- Inconvénient : plus lent que la logique câblée à cause du temps de décodage des instructions requis.
__________
4. 21
Electronique Numérique TD 4. Logique séquentielle 2
TD 4. LOGIQUE SEQUENTIELLE 2
1. Registres (Analyse)
Analyser le fonctionnement du montage suivant et compléter le chronogramme : (Q0 et Q1 sont à l’état initial 0)
H 1 2 3 4 5 6
1
0 t
E
Q0 Q1 & S
E D D t
Q0
C C
H t
Q1
t
S
t
Rappel
Bascule D > 0 edge triggered
Exemple 74XX74
1 PRE S
1Q
1 CLK C 1
1D 1D
1Q
1 CLR R
C D Q
D Q n
2 PRE
2Q
X X Q Mémoire 2 CLK
n -1
C
C : Horloge
Q 0
1
0
1
} Recopie
2D
2 CLR
2Q
Q2
Q0 Q1 & J
J 1 J
C
C C K
1 K 1 K
H
(les états furtifs ne sont pas à prendre en compte - leur durée est très petite devant la période d’Horloge car due au temps
de propagation, au temps de réponse des circuits qui lui, n’est jamais à négliger)
- S’agit-il d’un compteur modulo 8 ? (un compteur 3 bits compte au maximum 23 = 8 états possibles)
- Le compteur est-il autocorrecteur ?
Rappel
Bascule JK > 0 edge triggered
Exemple 74XX109
1 PRE S
1Q
1J 1J
1 CLK C 1
1Q
C J K Q 1K 1K
n
1 CLR R
X X X Q
J
C
Q
0 0 Q
n -1
n -1
} Mémoire 2 PRE
2J
2Q
K Q
0
1
1
0
0
1
} Recopie de J
2 CLK
2K
2Q
C : Horloge
1 1 Q Complément 2 CLR
n -1
TD 4. 1
Electronique Numérique TD 4. Logique séquentielle 2
C Q C
0 Q
1
K K K K
0 1
5. Tables de Karnaugh pour déterminer les entrées J i K i des bascules en se servant de la table des transitions d’une
bascule JK :
Transition Qn-1 → Qn J K
0 → 0 0 X
0 → 1 1 X
1 → 1 X 0
1 → 0 X 1
TD 4. 2
Electronique Numérique TD 4. Logique séquentielle 2
Départ p q
C B
Tb
Tc (Train en marche avant ou à l’arrêt; pas de marche arrière)
A, B, B, C
L’itinéraire désiré est le suivant :
avec l’état initial : Train en position de Départ et les sorties p et q sont à 0.
Etablir le graphe de fluence (≡ graphe des états et ransitions) du système et effectuer la synthèse de ce système
logique : - en utilisant des bascules JK (logique câblée)
- à partir d’un compteur programmable (logique programmée).
Serrure
y y
1 2
En séquence, une entrée xi ne peut être activée (≡ mise à 1) qu’une seule fois.
A un instant donné, 1 seule entrée xi est à 1 à la fois.
Séquence à reconnaître : x1 = 1 puis x2 = 1 puis x3 = 1, avec passages intermédiaires par 0, soit :
x1 x2 x3 = 100 → 010 → 001.
y1 ≡ 1 à la fin de la séquence; y2 ≡ 1 pour toute autre séquence.
(≡ 1 signifie mise à 1 et stabilisation à cet état, et non passage momentané à la valeur 1).
Etat initial : x1 x2 x3 = 000 et y1 y2 = 00
Etablir le graphe de fluence (≡ graphe des états et transitions) du système et effectuer la synthèse de ce système
logique : - en utilisant des bascules JK (logique câblée)
- à partir d’un compteur programmable (logique programmée).
TD 4. 3
Electronique Numérique TD 4. Logique séquentielle 2
JA A JB B JC C JD D
1 K A 1 K B 1 K C 1 K D
A B C D
DA A DB B DC C DD D
A B C D
& DA A DB B DC C DD D
A B C D
TD 4. 4
Electronique Numérique TP 4. Logique séquentielle 2
TP 4. LOGIQUE SEQUENTIELLE 2
1. Matériel nécessaire
- Oscilloscope
- Générateur de signaux Basses Fréquences (GBF)
- Alimentation stabilisée ( 2x[ 0-30 V] _ + 1x[ 5 V] _ )
&&& &&&
- Multimètre
- Moniteur MS05 (plaquette de câblage)
- Câbles : - 1 T, 1 BNC-BNC, 1 BNC-Banane, 1sonde oscilloscope, 6 fils Banane, petits fils.
- Composants : - 1 Résistances 1 kΩ (1/4 Watt)
- 1 Résistance 1MΩ
- 1 Condensateur 100 nF
- 1 LED
- 1 mini-interrupteur (horloge manuelle)
Circuits logiques de la famille CMOS 4000
- 1 4049 : 6 NOT
- 2 4027 : 2 Bascules JK positive edge triggered
2. Notation du TP
Faire examiner par le professeur en fin de séance, les différentes parties du TP.
TP 4. 1
Electronique Numérique TP 4. Logique séquentielle 2
3. Compteurs
Etude théorique
Donner la succession des états du compteur suivant (automate des états), avec la notation Q2Q1Q0 , celui-ci étant
supposé à l'état initial: Q2Q1Q0 = 000 :
Q Q Q
J 0 J 1 J 2
1
C C C
Q
1
1 K 1 K 1 K
H (0)
Q t
0 0 1 0 0 0 0
1
Q t
1 0 0 1 0 1 0
0
Q t
2 0 0 0 1 1 1 0
t Compteur modulo 6
Etat initial : Q2Q1Q0 = 000
Après la 1ère impulsion de H : Q2Q1Q0 = 001
Après la 2nde impulsion de H : Q2Q1Q0 = 010
Après la 3ème impulsion de H : Q2Q1Q0 = 100
Après la 4ème impulsion de H : Q2Q1Q0 = 101
Après la 5ème impulsion de H : Q2Q1Q0 = 110
Après la 6ème impulsion de H : Q2Q1Q0 = 000 ... et le cycle recommence
Etude expérimentale
Q0 Q1 1 Q2 Q0 Q1 Q2
4049 J 0 4027 J1 4027 4049 J 2 4027 J0 J1 1 J2
1 C C 1 C C C C
K0 K1 K2 1 K0 1 K1 1 K2
1 1 Q1 1 Q1
Pulser Pulser
H H
q1 H q1
q2 q2
(1) ≡ (2)
Le schéma initial (1) peut être remplacé par le schéma (2) identique, mettant en jeu des bascules JK > 0 edge triggered (4027).
Si le choix du schéma (1) est fait, l’utilisation de bascules JK > 0 edge triggered (4027) implique d’intercaler avant chaque entrée d’horloge des bascules un
circuit inverseur 4049 (même famille CMOS que les bascules JK).
TP 4. 2
Electronique Numérique TP 4. Logique séquentielle 2
Synthétiser un compteur 2 bits synchrone avec des bascules JK positive edge triggered, qui compte selon le cycle
suivant : Q1Q0 = 00 → 01 → 11 → 10 → 00 → …
1 0X X1 J 0 = Q1
K 0 = Q1
. Table de Karnaugh établissant les entrées J1K1 de la bascule de sortie Q1 :
J1 K1
Q0
Q1 0 1
0 0X 1X
1 X1 X0 J 1 = Q0
K 1 = Q 0
. Schéma de câblage :
H
Q J1 Q
J0 J 0 J 1
Q t
C Q C 0 0 1 1 0 0
0 Q
1
K K K K Q t
0 1 1 0 0 1 0
1
H t
Etude expérimentale
TP 4. 3
Electronique Numérique 5. VHDL
5. VHDL
Introduction
VHDL est l’abréviation de « Very high speed integrated circuits Hardware Description Langage ». L’ambition des
concepteurs du langage est de fournir un outil de description homogène des circuits, qui permette de créer des modèles
de simulation et de « compiler » le silicium (c’est-à-dire synthétiser une fonction électronique dans un circuit
programmable) à partir d’un programme unique.
Initialement réservé au monde des circuits numériques, VHDL est en passe d’être d’une part étendu aux circuits
analogiques, et d’autre part rattaché à un langage de plus haut niveau : SystemC.
• Son aspect « non propriétaire » : le développement des circuits logiques a conduit chaque fabriquant de
composants programmables (FPGAs : Field Programmable Gate Array ...) à développer son propre langage de
description. VHDL est en passe de devenir le langage commun à de nombreux systèmes de CAO, indépendants ou liés à
des producteurs de circuits, des (relativement) simples outils d’aide à la programmation des PALs aux ASICs, en passant
par les FPGAs.
Historique
Au cours des 15 dernières années, les méthodes de conception des fonctions numériques ont subi une évolution
importante. Dans les années 70, la majorité des applications de la logique câblée étaient construites autour de circuits
intégrés standard, souvent pris dans la famille TTL. Au début des années 80 apparurent, parallèlement, les premiers
circuits programmables par l’utilisateur (PALs : Programmable Array Logic) du côté des circuits simples, et les circuits
intégrés spécifiques (ASICs : Application Specific Integrated Circuit) pour les fonctions complexes fabriquées en grande
série. La complexité de ces derniers a nécessité la création d’outils logiciels de haut niveau qui sont à la description
structurelle (schémas au niveau des portes élémentaires) ce que les langages évolués sont au langage machine dans le
domaine de la programmation. Les premières générations de circuits programmables étaient conçues au moyen de
simples programmes de traduction d’équations logiques en table de fusibles. A l’heure actuelle, l’écart de complexité
entre circuits programmables et ASICs s’est restreint : on trouve une gamme continue de circuits qui vont des héritiers
des premiers PALs, équivalents de quelques centaines de portes, à des FPGAs (Field Programmable Gate Array) ou des
LCAs (Logic Cell Array) de quelques dizaines de milliers de portes équivalentes. Les outils d’aide à la conception se
sont unifiés : un même langage, VHDL par exemple, peut être employé quels que soient les circuits utilisés, des PALs
aux ASICs.
La démarche de conception d’un circuit est alors simple : on spécifie en langage VHDL les fonctionnalités du circuit à
réaliser en termes d’entrée/sortie. Le compilateur VHDL engendre un fichier JEDEC (.JED) autorisant une simulation
(visualisation des signaux d’entrée/sortie) en fonction du composant programmable choisi pour matérialiser le circuit
désiré. Enfin, Il ne reste plus qu’à programmer ledit composant à l’aide d’une carte spécialisée fournie par le
constructeur de composants programmables (FPGAs ...). Les principaux constructeurs : XILINX, ACTEL, CYPRESS,
MENTOR GRAPHICS, CADENCE, VIEW LOGIC, ALTERA ... fournissent leur propre compilateur VHDL en grande
partie portable (Warp de CYPRESS, Max+Plus d’ALTERA ...).
5. 1
Electronique Numérique 5. VHDL
Méthodes de synthèse
Le remplacement, dans la plupart des applications, des fonctions standard complexes par des circuits programmables,
s’accompagne d’un changement dans les méthodes de conception :
• on constate un « retour aux sources » : le concepteur d’une application élabore sa solution en descendant au
niveau des bascules élémentaires, au même titre que l’architecte d’un circuit intégré.
• l’utilisation systématique d’outils de conception assistée par ordinateur (CAO), sans lesquels la tâche serait
irréalisable, rend caducs les fastidieux calculs de minimisation d’équations logiques. Le concepteur peut se consacrer
entièrement aux choix d’architecture qui sont eux, essentiels.
• la complexité des fonctions réalisables dans un seul circuit pose le problème du test. Les outils traditionnels de
test de cartes imprimées, du simple oscilloscope à la « planche à clous » en passant par l’analyseur d’états logiques ne
sont plus d’un grand secours, dès lors que la grande majorité des équipotentielles sont inaccessibles de l’extérieur. Là
encore, la CAO joue un rôle essentiel. Encore faut-il que les solutions choisies soient analysables de façon sûre. Cela
interdit formellement certaines astuces, parfois rencontrées dans des schémas traditionnels de logique câblée, comme
des commandes asynchrones utilisées autrement que pour une initialisation lors de la mise sous tension, par exemple.
• les langages de haut niveau comme VHDL privilégient une approche globale des solutions. Dès lors que
l’architecture générale d’une application est arrêtée, que les algorithmes qui décrivent le fonctionnement de chaque
partie sont élaborés, le reste du travail de synthèse est extrêmement simple et rapide.
1. Principes généraux
1.0. Description descendante : le « top down design »
Une application un tant soit peu complexe est découpée en sous-ensembles qui échangent des informations suivant un
protocole bien défini. Chaque sous-ensemble est, à son tour, subdivisé, et ainsi de suite jusqu’aux opérateurs
élémentaires.
Un système est construit comme une hiérarchie d’objets, les détails de réalisation se précisant au fur et à mesure que l’on
descend dans cette hiérarchie. A un niveau donné de la hiérarchie, les détails de fonctionnement interne des niveaux
inférieurs sont invisibles. C’est le principe même de la programmation structurée.
Plusieurs réalisations d’une même fonction pourront être envisagées, sans qu’il soit nécessaire de remettre en cause la
conception des niveaux supérieurs; plusieurs personnes pourront collaborer à un même projet, sans que chacun ait à
connaître tous les détails de l’ensemble.
La conception descendante consiste à définir le système en partant du sommet de la hiérarchie, en allant du général au
particulier. VHDL permet, par exemple, de tester la validité de la conception d’ensemble, avant que les détails des sous
fonctions ne soient complètement définis. A titre d’exemple, l’architecture générale d’un processeur peut être évaluée
sans que le mode de réalisation de ses registres internes ne soit connu, le fonctionnement des registres en question sera
alors décrit au niveau comportemental.
5. 2
Electronique Numérique 5. VHDL
VHDL a été, initialement, connu comme un langage de simulation, il est fortement marqué par cet héritage très
informatique, ce qui est parfois un peu déroutant pour l’électronicien, proche du matériel, qui n’est pas toujours un
spécialiste des langages de programmation. Citons quelques exemples :
• Contrairement à C ou PASCAL, VHDL est un langage qui comprend le « parallélisme », c’est à dire que des
blocs d’instructions peuvent être exécutés simultanément, par opposition à séquentiellement comme dans un langage
procédural traditionnel. Autant ce parallélisme est fondamental pour comprendre le fonctionnement d’un simulateur
logique, et peut être déroutant pour un programmeur habitué au déroulement séquentiel des instructions qu’il écrit,
autant il est évident que le fonctionnement d’un circuit ne dépend pas de 1’ordre dans lequel ont été établies les
connexions. L’utilisateur de VHDL gagnera beaucoup en ne se laissant pas enfermer dans l’aspect langage de
programmation, en se souvenant qu’il est en train de créer un vrai circuit. Les parties séquentielles du langage, car il y
en a, doivent, dans ce contexte, être comprises soit comme une facilité offerte dans l’écriture de certaines fonctions, soit
comme le moyen de décrire des opérateurs fondamentalement séquentiels : les opérateurs synchrones.
• La modélisation correcte d’un système suppose de prendre en compte, au niveau du simulateur, les
imperfections du monde réel. VHDL offre donc la possibilité de spécifier des retards, de préciser ce qui se passe lors
d’un conflit de bus, etc. Pour simuler toutes ces vicissitudes, le langage offre toute une gamme d’outils : signaux qui
prennent une valeur inconnue, messages d’erreurs quand un « circuit » détecte une violation de set up time, changements
d’états retardés pour simuler les temps de propagation. Toutes les constructions associées de ce type ne sont évidemment
pas synthétisables! La difficulté principale est que, suivant les compilateurs, la frontière entre ce qui est synthétisable et
ce qui ne l’est pas n’est pas toujours la même, même pour des compilateurs qui respectent la norme IEEE-1076. Avant
d’utiliser un outil de synthèse, le concepteur de circuit a tout à gagner à lire très attentivement la présentation du sous-
ensemble de VHDL accepté par cet outil.
• Trois classes de données existent en VHDL : les constantes, les variables (affectation par le symbole := ) et les
signaux (affectation par le symbole <= ). La nature des signaux ne présente aucune ambiguïté, ce sont des objets qui
véhiculent une information logique tant du point de vue simulation que dans la réalité. Les signaux qui ont échappé aux
simplifications logiques, apportées par l’optimiseur toujours présent, sont des vraies équipotentielles du schéma final.
Les variables sont destinées, comme dans tout langage, à stocker temporairement des valeurs, dans l’optique
d’une utilisation future, sans chercher à représenter la réalité. Certains compilateurs considèrent que les variables n’ont
aucune existence réelle, au niveau du circuit, qu’elles ne sont que des outils de description fonctionnelle. D’autres
transforment, éventuellement (cela dépend de l’optimiseur), les variables en cellules mémoires ...
Il est clair que VHDL, les outils de synthèse et d’optimisation ne peuvent pas transformer un mauvais concepteur en un
bon. Ce sont de simples outils supplémentaires qui peuvent aider un ingénieur à réaliser plus rapidement et plus
efficacement un matériel quand ils sont utilisés correctement.
Il est toujours nécessaire de comprendre les détails physiques de la façon dont est implémentée une réalisation.
L’ingénieur doit « regarder par dessus 1’épaule » de l’outil pour s’assurer que le résultat est conforme à ses exigences et
à sa philosophie, et que le résultat est obtenu en un temps raisonnable.
5. 3
Electronique Numérique 5. VHDL
1.2. Exemples
Des tautologies
Les exemples de code source VHDL ci-dessous ne nous apprennent rien sur les propriétés des opérateurs concernés, ils
nous montrent l’aspect d’un programme VHDL et nous rappellent que les opérations NON, ET et OU sont définies sur
les objets de type bit (appartenant à la classe signal) comme sur ceux de type boolean, avec une convention
logique positive (1 ≡ TRUE, 0 ≡ FALSE).
De même :
-- operateur et
entity et is
port (e1, e2 : in bit ;
s : out bit) ;
end et ;
architecture dataflowlowlevel of et is
begin
s <= e1 and e2 ;
end dataflowlowlevel;
Ou encore :
-- operateur ou
entity ou is
port (e1, e2 : in bit ;
s : out bit) ;
end ou ;
architecture dataflowlowlevel of ou is
begin
s <= e1 or e2 ;
end dataflowlowlevel;
On notera la structure générale d’un programme et le symbole « d’affectation » particulier aux objets de nature signal (s,
e, el, e2). La déclaration entity correspond au prototype d’une fonction en langage C, elle décrit l’interaction entre
l’opérateur et le monde environnant. La partie architecture du programme correspond à la description interne de
l’opérateur, elle décrit donc son fonctionnement. L’architecture peut être de type structurel, flot de données ou
comportemental. Plusieurs architectures peuvent décrire une même entité. Les mots clés du langage sont notés en non
italique ou en MAJUSCULES, c’est une habitude de certains, pas une obligation.
5. 4
Electronique Numérique 5. VHDL
Dans les programmes qui suivent on voit apparaître la notion de « haut niveau » du langage. Des expressions purement
booléennes sont utilisées pour décrire le fonctionnement d’un circuit. Ici elles traduisent strictement les tables de vérité,
mais permettent évidemment des constructions beaucoup plus élaborées.
-- inverseur
entity inverseur is
port (e : in bit ;
s : out bit) ;
end inverseur ;
architecture dataflowhighlevel of inverseur is
begin
s <= ‘1’ when (e = ‘0’) else ‘0’ ;
end dataflowhighlevel;
De même :
-- operateur et
entity et is
port (e1, e2 : in bit ;
s : out bit) ;
end et ;
architecture dataflowhighlevel of et is
begin
s <= ‘0’ when (e1 = ‘0’ or e2 = ‘0’) else ‘1’ ;
end dataflowhighlevel;
ou encore :
-- operateur ou
entity ou is
port (e1, e2 : in bit ;
s : out bit) ;
end ou ;
architecture dataflowhighlevel of ou is
begin
s <= ‘0’ when (e1 = ‘0’ and e2 = ‘0’) else ‘1’ ;
end dataflowhighlevel;
5. 5
Electronique Numérique 5. VHDL
Terminons cette première découverte de VHDL par 2 descriptions d’architecture purement comportementales des
opérateurs ET et OU :
entity et is -- operateur et
port (e1, e2 : in bit ;
s : out bit) ;
end et ;
architecture behaviour of et is
begin
process (el, e2)
begin
if (e1 = ‘0’ or e2 = ‘0’) then
s <= ‘0’ ;
else
s <= ‘1’ ;
end if ;
end process ;
end behaviour;
ou encore :
entity ou is -- operateur ou
port (e : in bit_vector (0 to 1);
s : out bit );
end ou ;
architecture behaviour of ou is
begin
process ( e )
begin
case e is
when ("00") =>
s <= ‘0’ ;
when others =>
s <= ‘1’ ;
end case ;
end process ;
end behaviour;
Le rôle de l’instruction process est de décrire explicitement un processus défini par un algorithme séquentiel (≡ non
parallèle, contrairement aux descriptions structurelle et flot de données).
5. 6
Electronique Numérique 5. VHDL
Dans une construction hiérarchique, les niveaux supérieurs n'ont pas à connaître les détails des niveaux inférieurs. Une
fonction logique sera vue, dans cette optique, comme un assemblage de « boîtes noires » dont, syntaxiquement parlant,
seules les modes d'accès sont nécessaires à l'utilisateur.
La construction qui décrit l'extérieur d'une fonction est l'entité (entity). La déclaration correspondante lui donne un
nom et précise la liste des signaux d'entrée et de sortie (équivalent en langage C du prototypage) :
mon_circuit
entree1 sortie1
entree2 sortie2
entree3
entree4 sortie3
4 6
Dans l’exemple qui précède, les noms des objets, qui dépendent du choix de l’utilisateur, sont écrits en italique, les
autres mots sont des mots-clés du langage (ces derniers peuvent indifféremment être écrits en minuscules ou en
MAJUSCULES).
Les choix possibles pour le sens de transfert sont : in, out, inout et buffer (une sortie qui peut être « lue » par
l’intérieur du circuit).
Les choix possibles pour les types de données échangées sont les mêmes que pour les signaux.
L'architecture est la matérialisation de la fonction définie dans l’entité. Elle décrit le fonctionnement interne d'un circuit
auquel est attaché une entité. Ce fonctionnement peut être décrit de différentes façons :
Description structurelle
Le circuit est vu comme un assemblage de composants de niveau inférieur, c'est une description « schématique ».
Souvent ce mode de description est utilisé au niveau le plus élevé de la hiérarchie, chaque composant étant lui-même
défini par un programme VHDL (entité et architecture).
Description comportementale
Le comportement matériel du circuit est décrit par un algorithme, indépendamment de la façon dont il est réalisé au
niveau structurel.
Le fonctionnement du circuit est décrit par un flot de données qui vont des entrées vers les sorties, en subissant, étape
par étape, des transformations élémentaires successives. Ce mode de description permet de reproduire l'architecture
logique, en couches successives, des opérateurs combinatoires.
Flot de données et représentation comportementale sont très voisines, dans les deux cas le concepteur peut faire appel à
des instructions de haut niveau. La première méthode utilise un grand nombre de signaux internes qui conduisent au
résultat par des transformations de proche en proche. La seconde utilise des blocs de programme (les processus
explicites), qui manipulent de nombreux signaux avec des algorithmes séquentiels.
5. 7
Electronique Numérique 5. VHDL
La syntaxe générale d'une architecture comporte une partie de déclaration et un corps de programme :
« Un processus est une instruction concurrente (deux instructions concurrentes sont simultanées) qui définit un
comportement qui doit avoir lieu quand ce processus devient actif. Le comportement est spécifié par une suite
d'instructions séquentielles exécutées dans le processus. »
1. Les différentes parties d'une réalisation interagissent simultanément, peu importe l'ordre dans lequel un câbleur soude
ses composants, le résultat sera le même. Le langage doit donc comporter une contrainte de « parallélisme » entre ses
instructions. Cela implique des différences notables avec un langage procédural comme le langage C.
En langage VHDL :
a <= b ;
c <= a + d ;
et
c <= a + d ;
a <= b ;
représentent la même chose, ce qui est notablement différent de ce qui se passerait en langage C pour :
a=b;
c = a + d;
et
c=a+d;
a=b;
Les affectations de signaux, à l'extérieur d'un processus explicite, sont traitées comme des processus tellement
élémentaires qu'il est inutile de les déclarer comme tels. Ces affectations sont traitées en parallèle, de la même façon que
plusieurs processus indépendants.
2. L'algorithmique fait grand usage d'instructions séquentielles pour décrire le monde. VHDL offre cette facilité à
l'intérieur d'un processus explicitement déclaré. Dans le corps d’un processus il sera possible d’utiliser des variables,
des boucles, des conditions, dont le sens est le même que dans les langages séquentiels. Même les affectations entre
signaux sont des instructions séquentielles quand elles apparaissent à l’intérieur d’un processus. Seul sera visible de
l'extérieur le résultat final obtenu à la fin du processus.
5. 8
Electronique Numérique 5. VHDL
3. Les opérateurs séquentiels, surtout synchrones, mais pas exclusivement eux, comportent « naturellement » la notion
de mémoire, qui est le fondement de l'algorithmique traditionnelle. Les processus sont la représentation privilégiée de
ces opérateurs (ce n'est pas la seule, les descriptions structurelle et flot de données, plus proches du câblage du circuit, permettent de décrire tous
les opérateurs séquentiels avec des opérateurs combinatoires élémentaires. Pour les circuits qui comportent des bascules comme éléments primitifs,
connus de l'outil de synthèse, les deux seules façons d'utiliser ces bascules sont les processus et leur instanciation comme composants dans une
description structurelle).
Mais attention, la réciproque n'est pas vraie, il est parfaitement possible de décrire un opérateur purement combinatoire
par un processus, le programmeur utilise alors de cet objet la seule facilité d'écriture de l'algorithme.
Outre les simples affectations de signaux, qui sont en elles mêmes des processus implicites à part entière, la description
d'un processus obéit à la syntaxe suivante (en particulier, la structure séquentielle « if … then » est à inclure
obligatoirement dant un processus) :
Processus : syntaxe générale avec liste de sensibilité (liste de paramètres d’activation du processus)
[étiquette : ] process [ (liste de sensibilité) ]
partie déclarative optionnelle : variables notamment
begin
corps du processus
instructions séquentielles
end process [ étiquette ] ;
Les éléments mis entre crochets sont optionnels, ils peuvent être omis sans qu'il y ait d'erreur de syntaxe. La liste de
sensibilité est la liste des signaux qui déclenchent, par le changement de valeur de l'un quelconque d'entre eux, l'activité
du processus (paramètres ou arguments du processus). Cette liste peut être remplacée par une instruction « wait » dans
le corps du processus : la syntaxe du processus devient alors la suivante :
Processus : syntaxe générale sans liste de sensibilité mais avec l’instruction « wait »
[étiquette : ] process
partie déclarative optionnelle : variables notamment
begin
wait [on liste_de_signaux ] [ until condition] ;
instructions séquentielles
end process [ étiquette ] ;
L’instruction wait
Cette instruction indique au processus que son déroulement doit être suspendu dans l'attente d'un événement sur un
signal (un signal change de valeur), et tant qu'une condition n'est pas réalisée.
On peut spécifier un temps d’attente maximum (wait … for temps), mais cette clause n’est pas synthétisable.
La liste des signaux dont l'instruction attend le changement de valeur joue exactement le même rôle que la liste de
sensibilité du processus, mais l'instruction wait ne peut pas être utilisée en même temps qu'une liste de sensibilité. La
tendance, pour les évolutions futures du langage, semble être à la suppression des listes de sensibilités, pour n'utiliser
que les instructions d'attente.
5. 9
Electronique Numérique 5. VHDL
Exemple :
architecture fsm of jk_raz is
signal etat : bit ;
begin -- la déclaration de q a eu lieu précédemment dans l’entité
q <= etat ; -- l’état va être défini ci-dessous (parallélisme)
-- l’instruction « q <= etat » et le processus sont 2 instructions concurrentes
-- (parallèles) alors que l’intérieur d’un processus est séquentiel
process (clock, raz) -- deux signaux d'activation externe
begin
if (raz = '1') then -- raz asynchrone
etat <= '0';
elseif (clock = 'l' and clock 'event) then -- front montant d’horloge
case etat is
when '0' =>
if (j = '1' ) then
etat <= '1';
end if ;
when '1' =>
if (k = '1' ) then
etat <= '0';
end if ;
end case ;
end if ;
end process ;
end fsm ;
Dans l’exemple précédent, la priorité de la mise à zéro asynchrone sur le fonctionnement synchrone normal de la bascule JK, apparaît par l’ordre des
instructions de la structure if ... elseif. Le processus est utilisé là à la fois pour modéliser un opérateur essentiellement séquentiel, la bascule, et pour
faciliter la description de l’effet de ses commandes par un algorithme séquentiel. Pour modéliser un comportement purement synchrone on peut
indifféremment utiliser la liste de sensibilité ou une instruction wait :
5. 10
Electronique Numérique 5. VHDL
Un processus permet de décrire un opérateur purement combinatoire ou un opérateur séquentiel asynchrone, en utilisant
une démarche algorithmique.
Dans ces deux cas la liste de sensibilité, ou l'instruction wait équivalente, est obligatoire; le caractère combinatoire ou
séquentiel de l'opérateur réalisé va dépendre du code interne au processus. On considère un signal qui fait l'objet d'une
affectation dans le corps d'un processus :
- si au bout de l'exécution du processus, pour toutes les combinaisons possibles des valeurs de la liste de sensibilité, la
valeur de ce signal, objet d'une affectation, est connue, l'opérateur correspondant est combinatoire.
- si certaines des combinaisons précédentes de la liste de sensibilité conduisent à une indétermination concernant la
valeur du signal examiné, objet d'une affectation, ce signal est associé à une cellule mémoire (opérateur séquentiel).
5. 11
Electronique Numérique 5. VHDL
entity comb_seq is
port (
el, e2 : in bit ;
s_et, s_latch, s_edge : out bit
);
end comb_seq ;
-- porte logique et
et : process (e1, e2) -- ou encore process (e1)
begin
if ( e1 = 'l' ) then
s_et <= e2 ;
else
s_et <= '0' ; -- équivalent à s_et <= e1 and e2 ;
end if ;
end process ; -- opérateur combinatoire
Dans l'exemple qui précède, le premier processus est combinatoire, le signal s_et a une valeur connue à la fin du
processus, quelles que soient les valeurs des entrées e1 et e2. Dans le deuxième processus, l'instruction « if » ne nous
renseigne pas sur la valeur du signal s_latch quand e1 = '0'. Cette méconnaissance est interprétée, par le compilateur
VHDL, comme un maintien de la valeur précédente, d'où la génération d'une cellule mémoire dont la commande de
mémorisation, e1, est active sur un niveau. Le troisième processus conduit également, et pour le même type de raison, à
la synthèse d'une cellule mémoire pour le signal s_edge. Mais la commande de mémorisation est, cette fois, active sur
un front, explicitement mentionné dans la condition de l'instruction « if » : e1 'event. La façon dont est traitée la
commande de mémorisation e1 dépend donc de l'écriture du test : niveau ou front
5. 12
Electronique Numérique 5. VHDL
2. Eléments du langage
2.1. Les données appartiennent à une classe et ont un type
VHDL, héritier d'ADA, est un langage fortement typé. Toutes les données ont un type qui doit être déclaré avant
l'utilisation (sauf, et c'est bien pratique, les variables entières des boucles « for ») et aucune conversion de type
automatique (une souplesse et un piège immense du langage C, par exemple) n'est effectuée. Pour passer du type entier
au type bit_vector, par exemple, il faut faire appel à une fonction de conversion.
Une donnée appartient à une classe qui définit, avec son type, son comportement. Des données de deux classes
différentes, mais de même type, peuvent échanger des informations directement : on peut affecter la valeur d'une
variable à un signal, par exemple (nous verrons ci-dessous que variables et signaux sont deux classes différentes).
La portée des noms est, en général, locale. Un nom déclaré à l'intérieur d'une architecture, par exemple, n'est connu que
dans celle-ci. Des objets globaux sont possibles, on peut notamment définir des constantes, comme zero ou one,
extérieures aux unités de programmes que constituent les couples entité-architecture. A l’intérieur d’une
architecture, les objets déclarés dans un bloc (délimité par les mots-clés begin et end) sont visibles des blocs plus
internes uniquement.
Les objets déclarés dans une entité sont connus de toutes les architectures qui s’y rapportent.
Signaux
Les signaux représentent les données physiques échangées entre des blocs logiques d'un circuit. Chacun d'entre eux sera
matérialisé dans le schéma final par une équipotentielle et, éventuellement, une cellule mémoire qui conserve la valeur
de l'équipotentielle entre deux commandes de changement. Les « ports » d'entrée et de sortie, attachés à une entité, par
exemple, sont une variété de signaux qui permettent l'échange d'informations entre différentes fonctions. Leur utilisation
est similaire à celle des arguments d'une procédure en langage PASCAL, le sens de transfert de l'information doit être
précisé.
Syntaxe de déclaration (se place dans la partie déclarative d'une architecture - ou d’un paquetage, voir plus loin) :
Affectation d'une valeur (se place dans le corps d'une architecture ou d'un processus) :
La valeur affectée peut être le résultat d'une expression, simple ou conditionnelle (when), ou la valeur renvoyée par
l'appel d'une fonction.
A l'extérieur d'un processus toutes les affectations de signaux sont concurrentes, c'est donc une erreur (sémantique, pas
syntaxique) d'affecter plus d'une fois une valeur à un signal. L'affectation d'une valeur à un signal traduit, en fait, la
connexion de la sortie d'un opérateur à l'équipotentielle correspondante. Il s'agit là d'une opération permanente, une
soudure sur une carte, par exemple, qu'il est hors de question de modifier ailleurs dans le programme. Si un signal est
l'objet d'affectations multiples, ce qui revient à mettre en parallèle plusieurs sorties d'opérateurs (trois-états ou
collecteurs ouverts, par exemple), il faut adjoindre à ce signal, pour les besoins de la simulation, une fonction de
résolution qui permet de résoudre le conflit (dans les applications de synthèse les portes à sorties non standard sont
généralement introduites dans une description structurelle).
5. 13
Electronique Numérique 5. VHDL
Variables
Les variables sont des objets qui servent à stocker un résultat intermédiaire pour faciliter la construction d’un algorithme
séquentiel. Elles ne peuvent être utilisées que dans les processus, les procédures ou les fonctions et dans les boucles
« generate » qui servent à créer des schémas répétitifs.
Syntaxe de déclaration (se place dans la partie déclarative d'un processus, d'une procédure ou d'une fonction) :
L'expression facultative qui apparaît dans la déclaration précédente permet de donner à une variable une valeur initiale
choisie par l'utilisateur. A défaut de cette expression le compilateur, qui initialise toujours les variables (le programmeur ne
doit, notamment, pas s’attendre à retrouver les variables d’un processus dans l’état où il les avait laissées lors d’une activation précédente de ce
processus), utilise une valeur par défaut qui dépend du type déclaré.
nom := valeur_compatible_avec_le_type ;
La valeur affectée peut être le résultat d'une expression ou la valeur renvoyée par l'appel d'une fonction.
Les variables de VHDL jouent le rôle des variables automatiques des langages procéduraux, comme C ou PASCAL,
elles ont une portée limitée au module de programme dans lequel elles ont été déclarées, et sont détruites à la sortie de
ce module.
La différence entre variables et signaux est que les premières n'ont pas d'équivalent physique dans le schéma,
contrairement aux seconds. Certains outils de synthèse ne respectent malheureusement pas cette distinction. On notera
qu'il est possible d'affecter la valeur d'une variable à un signal, et inversement, pourvu que les types soient compatibles.
Constantes
Les constantes sont des objets dont la valeur est fixée une fois pour toute.
On notera que les vecteurs de bits (bit_vector) sont traités comme des chaînes, on peut préciser une base différente de
la base 2 pour ces constantes : X"3A007", O"237015" pour hexadécimal et octal.
De même, les valeurs entières peuvent être écrites dans une autre base que 1a base 10 :
16#ABCDEFO123#, 2#001011101# ou 2#0_0101_1101#, pour plus de lisibilité.
En général les nombres flottants ne sont pas acceptés par les outils de synthèse.
VHDL connaît un nombre limité de types de base, qui reflètent le fonctionnement des systèmes numériques (pour
l'instant, VHDL est en passe de devenir un langage de description des circuits analogiques), et offre à l'utilisateur de
construire à partir de ces types génériques :
- des sous-types (sous-ensembles du type de base), obtenus en précisant un domaine de variation limité de l'objet
considéré,
- des types composés, obtenus par la réunion de plusieurs types de base identiques (tableaux) ou de types différents
(enregistrements).
5. 14
Electronique Numérique 5. VHDL
En plus des types prédéfinis et de leurs dérivés, l'utilisateur a la possibilité de créer ses propres types sous forme de
types énumérés.
Les entiers
VHDL manipule des valeurs entières qui correspondent à des mots de 32 bits, soit comprises entre -2147483648 et
+2147483647.
Attention, sur les PCs qui sont des machines dont les entiers continuent à hésiter entre 16 et 32 bits, l'utilisateur peut
rencontrer de désagréables surprises. Les nombres négatifs ne sont pas toujours acceptés dans la description des signaux
physiques.
Déclaration :
ou
ou encore :
On peut spécifier une plage de valeurs inférieure à celle obtenue par défaut, par exemple :
Attention ! La restriction d'étendue de variation est utilisée pour générer le nombre de chiffres binaires nécessaires à la
représentation de l'objet, l'arithmétique sous-jacente n'est (pour l'instant) pas traitée par les compilateurs. Cela veut dire
que :
signal chiffre : integer range 0 to 9 ; permet de créer un objet codé sur quatre bits, mais :
5. 15
Electronique Numérique 5. VHDL
La déclaration, au niveau le plus élevé d'une hiérarchie, de ports d'entrée ou de sortie comme nombres entiers pose un
problème de contrôle par l'utilisateur, de l'assignation des broches physiques du circuit final aux chiffres binaires
générés. Cette assignation sera faite automatiquement par l'outil de développement. Si ce non contrôle est gênant, il est
possible de transformer un nombre entier en tableau de bits, via les fonctions de conversion de la librairie associée à un
compilateur.
L’utilisateur peut créer ses propres types par simple énumération de constantes symboliques qui fixent toutes les valeurs
possibles du type. Par exemple :
type drinkState is
(zero, five, ten, fifteen, twenty, twentyfive, owedime);
signal drinkStatus : drinkState;
Les bits
Il s'agit là, évidemment, du type de base le plus utilisé en électronique numérique. Un objet de type bit peut prendre
deux valeurs : '0' et '1'. Il s'agit, en fait, d'un type énuméré prédéfini.
Déclaration :
Ce qui précède s'applique aux descriptions synthétisables, pour les besoins de la simulation de nombreux compilateurs
proposent un type bit plus étoffé, pouvant prendre, par exemple, les valeurs '0', '1', 'X' (X pour inconnu) et 'Z' (pour
haute impédance). Ces types sont traduits, en synthèse, par des types bit ordinaires.
De même la gestion des portes trois-états, qui se fait par une description structurelle, nécessite une extension du type bit.
Par exemple :
entity basc_tri_state is
port ( clk, oe : in bit;
sort : inout x0lz ); -- type x0lz défini dans la librairie
end basc_tri_state ;
Toutes ces extensions ne sont, à priori, pas portables telles quelles. Mais les outils de développement VHDL sont
fournis avec les sources (en VHDL) de toutes les extensions au langage de base, ce qui permet de porter d'un système à
l'autre les librairies nécessaires.
Les booléens
Autre type énuméré, le type booléen peut prendre deux valeurs: "true" et "false". Il intervient essentiellement comme
résultat d'expressions de comparaisons, dans des if, par exemple, ou dans les valeurs renvoyées par des fonctions.
Les tableaux
A partir de chaque type de base on peut créer des tableaux, collection d’objets du même type. L’un des plus utilisés est
le type bit_vector, défini dans la librairie standard par :
5. 16
Electronique Numérique 5. VHDL
Dans l'exemple qui précède, le nombre d'éléments n'est pas précisé dans le type, ce sera fait à l'utilisation. Par exemple :
définit un tableau de cinq éléments binaires nommé état. On aurait également pu définir directement un sous-type :
Le nombre de dimensions d'un tableau n'est pas limité, les indices peuvent être définis dans le sens croissant (2 to 6) ou
décroissant (6 downto 2) avec des bornes quelconques (mais cohérentes avec le sens choisi).
On notera qu'il faut passer par une définition de type, ce qui n'est pas le cas en C ou en PASCAL. Une fois défini, un
objet composé peut être manipulé collectivement par son nom :
Le compilateur contrôle que les dimensions des deux objets sont les mêmes. On remarquera, à partir de l'exemple
précédent, que les classes des deux objets peuvent être différentes.
On peut, bien sûr, ne manipuler qu'une partie des éléments d'un tableau :
Il est possible de fusionner deux tableaux (concaténation) pour affecter les valeurs correspondantes à un tableau plus
grand :
Les enregistrements
Les enregistrements (record) définissent des collections d'objets de types, ou de sous types, différents. Ils correspondent
aux structures du C ou aux enregistrements de PASCAL.
5. 17
Electronique Numérique 5. VHDL
time_of_day.hour := 3 ;
time_of_day.minute := 45 ;
chrono := time_of_day.seconde ;
Déterminer, de façon dynamique, la taille d'un tableau, le domaine de définition d'un objet scalaire, l'élément suivant
d'un type énuméré, détecter la transition montante d'un signal, piloter l'optimiseur d'un outil de synthèse, attribuer des
numéros de broches à des signaux d'entrées-sorties ... etc. Les attributs permettent tout cela.
Un attribut est une propriété, qui porte un nom, associée à une entité, une architecture, un type ou un signal. Cette
propriété, une fois définie, peut être utilisée dans des expressions.
L'utilisation d'un attribut se fait au moyen d'un nom composé : le préfixe est le nom de l'objet auquel est rattaché
l'attribut, le suffixe est le nom de l'attribut. Préfixe et suffixe sont séparés par une apostrophe « ' ».
Nom_objet 'nom_de_l’attribut
Par exemple :
hor 'event and hor = '1' renvoie la valeur booléenne true si le signal hor, de type bit, vaut 1 après un changement
de valeur, ce qui revient à tester la présence d'une transition montante de ce signal.
Certains attributs sont prédéfinis par le langage, d'autres sont attachés à un outil de développement; l'utilisateur, enfin,
peut définir, et utiliser ses propres attributs.
Les attributs prédéfinis permettent de déterminer les contraintes qui pèsent sur des objets ou des types : domaine de
variation d'un type scalaire, bornes des indices d'un tableau, éléments voisins d'un objet de type énuméré, etc…
Ils permettent également de préciser les caractéristiques dynamiques de signaux, comme la présence d'un front, évoquée
précédemment.
5. 18
Electronique Numérique 5. VHDL
Le tableau ci-dessous précise le nom de quelques uns des attributs prédéfinis les plus utilisés, les catégories d’objets
qu’ils permettent de qualifier et la valeur renvoyée par l’attribut.
Chaque système de développement fournit des attributs qui aident à piloter l'outil de synthèse, ou le simulateur, associé
au compilateur VHDL.
Ces attributs, qui ne sont évidemment pas standard, portent souvent sur le pilotage de l'optimiseur, permettent de passer
au routeur des informations concernant le brochage souhaité, ... etc.
Par exemple :
Syntaxe :
déclaration
attribute att_nom : type ;
spécification
attribute nom_att of nom_objet : nom_classe is expression ;
utilisation
nom_objet 'att_nom
5. 19
Electronique Numérique 5. VHDL
Les opérateurs connus du langage sont répartis en 6 classes, en fonction de leurs priorités. Dans chaque classe les
priorités sont identiques; les parenthèses permettent de modifier l'ordre d'évaluation des expressions, modifiant ainsi les
priorités, et sont obligatoires lors de l'utilisation d'opérateurs non associatifs comme l’opérateur « nand ». Le tableau
ci-dessous fournit la liste des opérateurs classés par priorités croissantes, de haut en bas :
- Les opérateurs multiplicatifs et l'opérateur d'exponentiation (**) sont soumis à des restrictions, notamment en synthèse
où seules les opérations qui se résument à des décalages sont généralement acceptées.
- Certaines librairies standard (int_math et bv_math) surdéfinissent (au sens des langages objets) les opérateurs
d'addition et de soustraction pour les étendre au type bit_vector.
- On notera que tous les opérateurs logiques ont la même priorité, il est donc plus que conseillé de parenthéser toutes les
expressions qui contiennent des opérateurs différents de cette classe.
- La priorité intermédiaire des opérateurs unaires de signe interdit l'écriture d'expressions comme « a * -b », qu'il faut
écrire « a * (-b) ».
Les instructions concurrentes interviennent à l'intérieur d'une architecture, dans la description du fonctionnement d'un
circuit. En raison du parallélisme du langage, ces instructions peuvent être écrites dans un ordre quelconque. Les
principales instructions concurrentes sont :
Affectation simple
L’affectation simple traduit une simple interconnexion entre deux équipotentielles. L’opérateur d’affectation de signaux
(<=) a été vu précédemment :
5. 20
Electronique Numérique 5. VHDL
Affectation conditionnelle
L'affectation conditionnelle permet de déterminer la valeur de la cible en fonction des résultats de tests logiques :
Affectation sélective
En fonction des valeurs possibles d’une expression, il est possible de choisir la valeur à affecter à un signal :
with expression select
cible <= source_l when valeur_11 | valeur_12 ... ,
source_2 when valeur_21 | valeur_22 ... ,
…
source_n when others ;
Instanciation de composant
Le mécanisme qui consiste à utiliser un sous-ensemble (une paire entité-architecture), décrit en VHDL, comme
composant dans un ensemble plus vaste est connu sous le nom d'instanciation. Trois opérations sont nécessaires :
.1. Le couple entité-architecture du sous-ensemble doit être créé et annexé à une librairie de l'utilisateur, par défaut
la librairie « work ».
.2. Le sous-ensemble précédent doit être déclaré comme composant dans l'ensemble qui l'utilise, cette déclaration
reprend les éléments principaux de l'entité du sous-ensemble.
.3. Chaque exemplaire du composant que l'on souhaite inclure dans le schéma en cours d'élaboration doit être connecté
aux équipotentielles de ce schéma, c'est le mécanisme de l'instanciation.
Cette déclaration est à mettre dans la partie déclarative de l'architecture du circuit utilisateur, ou dans un paquetage qui
sera rendu visible par une clause « use ».
5. 21
Electronique Numérique 5. VHDL
La liste d'association établit la correspondance entre les équipotentielles du schéma et les ports d'entrée et de sortie du
composant. Cette association peut se faire par position, les noms des signaux à connecter doivent apparaître dans l'ordre
des ports auxquels ils doivent correspondre, ou explicitement au moyen de l'opérateur d'association « => » :
(.1.)
Generate
Les instructions « generate » permettent de créer de façon compacte des structures régulières, comme les registres ou
les multiplexeurs. Elles sont particulièrement efficaces dans des descriptions structurelles.
Une instruction generate permet de dupliquer un bloc d'instructions concurrentes un certain nombre de fois, ou de
créer un tel bloc si une condition est vérifiée.
Syntaxe :
-- structure répétitive :
etiquette : for variable in debut to fin generate
instructions concurrentes
end generate [etiquette] ;
ou :
-- structure conditionnelle :
etiquette : if condition generate
instructions concurrentes
end generate [etiquette] ;
Donnons à titre d'exemple le code d'un compteur modulo 16, construit au moyen de bascules T, disposant d'une remise à
zéro (raz) et d'une autorisation de comptage (en) actives à 'l' :
entity cnt16 is
port ( ck, raz, en : in bit ;
s : out bit_vector (0 to 3) ) ;
end cnt16 ;
5. 22
Electronique Numérique 5. VHDL
Block
Une architecture peut être subdivisée en blocs, de façon à constituer une hiérarchie interne dans la description d'un
composant complexe.
Syntaxe :
Dans des applications de synthèse, l'intérêt principal des blocs est de permettre de contrôler la portée et la visibilité des
noms des objets utilisés (signaux notamment) : un nom déclaré dans un bloc est local à celui-ci.
Les instructions séquentielles sont internes aux processus, aux procédures et aux fonctions (pour les deux dernières
constructions voir paragraphes suivants). Elles permettent d'appliquer à la description d'une partie d'un circuit une
démarche algorithmique, même s'il s'agit d'une fonction purement combinatoire. Les principales instructions
séquentielles sont :
- L'affectation séquentielle d'un signal, qui utilise l'opérateur « <= », a une syntaxe qui est identique à celle de
l'affectation concurrente simple. Seule la place, dans ou hors d'un module de programme séquentiel, distingue les deux
types d'affectation; cette différence, qui peut sembler mineure, cache des comportements différents : alors que les
affectations concurrentes peuvent être écrites dans un ordre quelconque, pour leurs correspondantes séquentielles,
rarement utilisées hors d’une structure de contrôle, l’ordre d’écriture n’est pas indifférent.
- L'affectation d'une variable, qui utilise l'opérateur « : = », est toujours une instruction séquentielle.
- Les tests « if » et « case ».
- Les instructions de contrôle des boucles « loop », « for » et « while ».
5. 23
Electronique Numérique 5. VHDL
Les instructions de tests permettent de sélectionner une ou des instructions à exécuter, en fonction des valeurs prises par
une ou des expressions. On notera que, dans un processus, si toutes les branches possibles des tests ne sont pas
explicitées, une cellule mémoire est générée pour chaque affectation de signal.
L'instruction if permet de sélectionner une ou des instructions à exécuter, en fonction des valeurs prises par une ou des
conditions.
Syntaxe :
if expression_logique then
instructions séquentielles
[ elsif expression_logique then ]
instructions séquentielles
[ else ]
instructions séquentielles
end if ;
Son interprétation est la même que dans les langages de programmation classiques comme C ou PASCAL.
L'instruction case permet de sélectionner une ou des instructions à exécuter, en fonction des valeurs prises par une
expression.
Syntaxe :
case expression is
when choix | choix | ... | choix => instruction sequentielle ;
when choix | choix | ... | choix => instruction sequentielle ;
…
when others => instruction sequentielle ;
end case ;
« | choix », pour « ou … », et « when others » sont syntaxiquement facultatifs. Les choix représentent différentes
valeurs possibles de l’expression testée; on notera que toutes les valeurs possibles doivent être traitées, soit
explicitement, soit par l'alternative « others ». Chacune de ces valeurs ne peut apparaître que dans une seule alternative.
Cette instruction est à rapprocher du « switch » de C, ou de « case of » de PASCAL.
Les boucles
Syntaxe générale
5. 24
Electronique Numérique 5. VHDL
- Les boucles simples, sans schéma d'itération, dont on ne peut sortir que par une instruction « exit ».
- Les boucles « for », dont le schéma d'itération précise le nombre d'exécutions.
- Les boucles « while », dont le schéma d'itération précise la condition de maintien dans la boucle.
ou :
next [ etiquette ] [ when condition ] ; -- permet de passer à l’itération suivante d’une boucle.
exit [ etiquette ] [ when condition ] ; -- provoque une sortie de boucle.
3. Programmation modulaire
Small is beautiful : un gros programme ne peut être écrit, compris, testable et testé que s'il est subdivisé en petits
modules que l'on met au point indépendamment les uns des autres et rassemblés ensuite. VHDL offre, bien évidemment,
cette possibilité.
Chaque module peut être utilisé dans plusieurs applications différentes, moyennant un ajustage de certains paramètres,
sans avoir à en réécrire le code. Les outils de base de cette construction modulaire sont les sous-programmes, procédures
ou fonctions, les paquetages et librairies, et les paramètres génériques.
Les sous programmes sont le moyen par lequel le programmeur peut se constituer une bibliothèque d'algorithmes
séquentiels qu'il pourra inclure dans une description. Les deux catégories de sous programmes, procédures et fonctions,
diffèrent par les mécanismes d'échanges d'informations entre le programme appelant et le sous-programme.
Les fonctions
Une fonction retourne au programme appelant une valeur unique, elle a donc un type. Elle peut recevoir des arguments,
exclusivement des signaux ou des constantes, dont les valeurs lui sont transmises lors de l'appel. Une fonction ne peut en
aucun cas modifier les valeurs de ses arguments d'appel.
5. 25
Electronique Numérique 5. VHDL
Déclaration :
Corps de la fonction :
Le corps d'une fonction ne peut pas contenir d'instruction wait, les variables locales, déclarées dans la fonction, cessent
d'exister dès que la fonction se termine.
Utilisation :
Lors de son utilisation, le nom d'une fonction peut apparaître partout, dans une expression, où une valeur du type
correspondant peut être utilisée.
Exemple
Les librairies d'un compilateur VHDL contiennent un grand nombre de fonctions, dont le programme source est fourni.
L'exemple qui suit, issu de la librairie bv_math du compilateur WARP, incrémente de 1 un vecteur de bits. On peut
l'utiliser, par exemple, pour créer un compteur binaire.
Déclaration :
Corps de la fonction :
5. 26
Electronique Numérique 5. VHDL
Les procédures
Une procédure, comme une fonction, peut recevoir du programme appelant des arguments : constantes, variables ou
signaux. Mais ces arguments peuvent être déclarés de modes « in », « inout » ou « out » (sauf les constantes qui sont
toujours de mode « in »), ce qui autorise une procédure à renvoyer un nombre quelconque de valeurs au programme
appelant.
Déclaration :
procedure nom [ ( liste de paramètres formels ) ] ;
Corps de la procédure :
procedure nom [ ( liste de paramètres formels ) ] is
[ déclarations ]
begin
instructions séquentielles
end [ nom ] ;
Dans la liste des paramètres formels, la nature des arguments doit être précisée :
procedure exemple ( signal a, b : in bit;
signal s : out bit) ;
Le corps d'une procédure peut contenir une instruction wait, les variables locales, déclarées dans la procédure, cessent
d'exister dès que la procédure se termine.
Utilisation :
nom ( liste de paramètres réels ) ;
Une procédure peut être appelée par une instruction concurrente ou par une instruction séquentielle, mais si l'un de ses
arguments est une variable, elle ne peut être appelée que par une instruction séquentielle. La correspondance entre
paramètres réels (dans l'appel) et paramètres formels (dans la description de la procédure) peut se faire par position, ou
par associations de noms :
exemple ( entree1, entree2, sortie ) ;
ou :
exemple ( s => sortie, a => entreel, b => entree2 ) ;
5. 27
Electronique Numérique 5. VHDL
Un paquetage (package) permet de rassembler des déclarations et des sous-programmes, utilisés fréquemment dans une
application, dans un module qui peut être compilé à part, et rendu visible par l'application au moyen de la clause use.
Un paquetage est constitué de deux parties : la déclaration, et le corps (body).
- La déclaration contient les informations publiques dont une application a besoin pour utiliser correctement les objets
décrits par le paquetage : essentiellement des déclarations, des définitions de types, des définitions de constantes ... etc.
(on peut rapprocher la partie visible d'un package des fichiers « *.h » du langage C; ces fichiers contiennent, entre autres, les prototypes des objets,
variables ou fonctions, utilisés dans un programme. La clause « use » de VHDL est un peu l'équivalent, dans cette comparaison, de la directive
#include <xxx.h> du langage C)
- Le corps, qui n'existe pas obligatoirement, contient le code des fonctions ou procédures définies par le paquetage, s'il
en existe.
use work.int_math.all ; -- rend le paquetage int_math, de la librairie work, visible dans sa totalité.
Le mot clé work indique l'ensemble des librairies accessibles, par défaut, au programmeur. Ce mot cache, notamment,
des chemins d'accès à des répertoires de travail. Ces chemins sont gérés par le système de développement, et l'utilisateur
n'a pas besoin d'en connaître les détails. Le nom composé qui suit la clause use doit être compris comme une suite de
filtres : « utiliser tous les éléments du module int_math de la librairie work ».
Un compilateur VHDL est toujours assorti d'une librairie, décrite par des paquetages, qui offre à l'utilisateur des outils
variés :
- Définitions de types, et fonctions de conversions entre types : VHDL est un langage objet, fortement typé. Aucune
conversion de type implicite n'est autorisée dans les expressions, mais une librairie peut offrir des fonctions de
conversion explicites, et redéfinir les opérateurs élémentaires pour qu’ils acceptent des opérandes de types variés. Un
bus par exemple, peut être vu, dans le langage, comme un vecteur (tableau à une dimension) de bits, et il est possible
d’étendre les opérateurs arithmétiques et logiques élémentaires pour qu’ils agissent sur un bus, vu comme la
représentation binaire d’un nombre entier.
- Les blocs structurels des circuits programmables, notamment les cellules d'entrées-sorties, peuvent être déclarés
comme des composants que l'on peut inclure dans une description. Une porte trois-états, par exemple, sera vue, dans une
architecture, comme un composant dont l'un des ports véhicule des signaux de type particulier : aux deux états logiques
vient se rajouter un état haute impédance. L'emploi d'un tel opérateur dans un schéma nécessite, outre la description du
composant, une fonction de conversion entre signaux logiques et signaux « trois-états ».
- Un simulateur doit pouvoir résoudre, ou indiquer, les conflits éventuels. Les signaux utilisés en simulation ne sont pas,
pour cette raison, de type binaire : on leur attache un type énuméré plus riche qui rajoute aux simples valeurs '0' et 'l' la
valeur 'inconnue', des nuances de force entre les sorties standard et les sorties collecteur ouvert, etc.
- La bibliothèque standard offre également des procédures d'usage général comme les moyens d'accès aux fichiers, les
possibilités de dialogue avec l'utilisateur, messages d'erreurs, par exemple.
L'exemple qui suit illustre l'utilisation, et l'intérêt des paquetages prédéfinis. Le programme décrit le fonctionnement
d'un circuit qui effectue une division par 50 du signal d'horloge, en fournissant en sortie un signal de rapport cyclique
égal à un demi. Pour obtenir ce résultat, on a utilisé la possibilité, offerte par le paquetage « int_math » du compilateur
WARP , de mélanger, dans des opérations arithmétiques et logiques, des éléments de types différents : les vecteurs de
bits et les entiers (VHDL est un langage objet qui permet de surcharger les opérateurs. A chaque opérateur il est possible d'associer une fonction
équivalente, ce qui permet de traiter des opérandes et un résultat de types différents de ceux qui sont définis par défaut).
5. 28
Electronique Numérique 5. VHDL
-- div50.vhd
entity div50 is
port ( hor : in bit ;
s : out bit ) ; -- sortie
end div50 ;
use work.int_math.all ; -- rend le paquetage visible
architecture arith_bv of div50 is
signal etat : bit_vector (0 to 5) ;
begin
s <= etat(5) ;
process
begin
wait until hor = 'l' ;
if etat = 24 then -- opérateur "=" surchargé.
etat <= i2bv(39,6) ; -- fonction de conversion d’un entier en bit_vector de 6 bits.
else
etat <= etat + 1 ; -- opérateur "+" surchargé.
end if ;
end process ;
end arith_bv ;
Pour assurer la portabilité des programmes, d'un compilateur à un autre, les paquetages prédéfinis sont fournis sous
forme de fichiers sources VHDL. Cette règle permet à un utilisateur de passer d'un système de développement à un autre
sans difficulté, il suffit de recompiler les paquetages qui ne seraient pas communs aux deux systèmes.
Un autre exemple de paquetage prédéfini concerne la description des opérateurs élémentaires connus d'un système. Pour
synthétiser une application, avec pour cible un circuit de type 22V10 par exemple, le système de développement utilise
un paquetage qui décrit les composants disponibles dans ce circuit. Ce paquetage est accessible à l'utilisateur ;
mentionnons, en particulier, que l'utilisation d'une description structurelle, en terme de composants instanciés, est
indispensable pour utiliser les portes trois-états de sortie du circuit.
Les paquetages créés par l'utilisateur
L'utilisateur peut créer ses propres paquetages. Cette possibilité permet d'assurer la cohérence des déclarations dans une
application complexe, évite d'avoir à répéter un grand nombre de fois ces mêmes déclarations et donne la possibilité de
créer une librairie de fonctions et procédures adaptée aux besoins des utilisateurs.
La syntaxe de la déclaration d'un paquetage est la suivante :
package identificateur is
déclarations de types, de fonctions, de composants, d'attributs,
clause use, ... etc.
end [ identificateur ] ;
S'il existe, le corps du paquetage doit porter le même nom que celui qui figure dans la déclaration :
package body identificateur is
corps des sous-programmes déclarés.
end [ identificateur ] ;
Dans l’exemple qui suit on réalise un compteur au moyen de 2 bascules, dans une description structurelle. La déclaration
du composant bascule est mise dans un paquetage :
package T_edge_pkg is
component T_edge -- une bascule T avec mise à 0.
port ( T, hor, raz : in bit ;
s : out bit ) ;
end component ;
end T_edge_pkg ;
5. 29
Electronique Numérique 5. VHDL
entity cnt4 is
port (ck, razero, en : in bit ;
s : out bit_vector (0 to 1)
);
end cnt4 ;
use work.T_edge_pkg.all ; -- rend le contenu du package précédent visible.
architecture struct of cnt4 is
signal etat : bit_vector (0 to 1) ;
signal inter:bit;
begin
s <= etat ;
inter <= etat(0) and en ;
g0 : T_edge port map ( en, ck, razero, etat(0) ) ;
g1 : T_edge port map ( inter, ck, razero, etat(l) ) ;
end struct ;
Les librairies
Une librairie est une collection de modules VHDL qui ont déjà été compilés. Ces modules peuvent être des paquetages,
des entités ou des architectures.
Une librairie par défaut, work, est systématiquement associée à l'environnement de travail de l'utilisateur. Ce dernier
peut ouvrir ses propres librairies par la clause library :
library nom_de_la_librairie ;
La façon dont on associe un nom de librairie à un, ou des chemins, dans le système de fichiers de l’ordinateur, dépend
de l’outil de développement utilisé.
Lorsque l'on crée le couple entité-architecture d'un opérateur, que l'on souhaite utiliser comme composant dans une
construction plus large, il est parfois pratique de pouvoir laisser certains paramètres modifiables par le programme qui
utilise le composant. De tels paramètres, dont la valeur réelle peut n'être fixée que lors de l'instanciation du composant,
sont appelés paramètres génériques.
Un paramètre générique se déclare au début de l'entité, et peut avoir une valeur par défaut :
La même déclaration doit apparaître dans la déclaration de composant, mais au moment de l'instanciation la taille peut
être modifiée par une instruction « generic map », de construction identique à l'instruction « port map »,
précédemment rencontrée :
Dans l'exemple ci-dessous, on réalise un compteur, sur 4 bits par défaut, qui est ensuite instancié comme un compteur 8
bits. Bien évidemment, le code du compteur ne doit faire aucune référence explicite à la valeur par défaut.
5. 30
Electronique Numérique 5. VHDL
entity compteur is
generic ( taille : integer := 4 ) ;
port ( hor : in bit;
sortie : out bit_vector ( 0 to taille - 1) ) ;
end compteur ;
use work.int_math.a11 ;
architecture simple of compteur is
signal etat : bit_vector (0 to taille - 1) ;
begin
sortie <= etat ;
process
begin
wait until hor = 'l' ;
etat <= etat + 1 ;
end process ;
end simple;
entity compt8 is
port ( ck : in bit;
val : out bit_vector ( 0 to 7) ) ;
end compt8 ;
Les paramètres génériques prennent toute leur efficacité quand leur emploi est associé à la création de librairies de
composants, décrits par des paquetages. Il est alors possible de créer des fonctions complexes au moyen de programmes
construits de façon hiérarchisée, chaque niveau de la hiérarchie pouvant être mis au point et testé indépendamment de
l'ensemble.
4. Modélisation et synthèse
Langage de modélisation des circuits intégrés complexes, VHDL est devenu un outil de synthèse. Sans parler des
logiciels de conception d'ASICs sur stations de travail, la plupart des fabricants de circuits programmables offrent des
solutions VHDL, plus ou moins complètes, qui ne nécessitent qu'un équipement de type PC.
Tout module synthétisable est simulable, et les résultats de simulations sont identiques à ceux que l'on observera dans le
vrai circuit. Telle est la règle, généralement bien respectée. Mes des compilateurs VHDL peuvent cependant être pris en
défaut, par des constructions « à la limite », et transformer par exemple des bascules edge (en simulation) en bascules
latch (dans le circuit), et réciproquement.
Un programme bien construit est cependant toujours compilé correctement.
5. 31
Electronique Numérique 5. VHDL
- Constructions non synthétisables par nature : les manipulations de pointeurs, les manipulations de types non
contraints (tableaux de dimensions non spécifiées - cela n'empêche cependant pas d'utiliser des fonctions dont les arguments sont non
contraints, il suffit qu'à l'élaboration finale de l'unité de conception, donc à l'appel de la fonction, les dimensions soient connues -, nombres sans
limitation de leur domaine de définition), la modélisation des retards, les tests de violations de timing, les envois de
messages sur la console, les lectures de directives au clavier, les références au temps du simulateur (le type time est
refusé en tant que tel par de nombreux outils de synthèse), les accès dynamiques aux fichiers.
- Constructions non synthétisables, mais acceptées par plusieurs logiciels de synthèse comme outils généraux de
conception : certains accès aux fichiers. La lecture de fichiers de données permet, par exemple, d'initialiser des tables ou
des mémoires. Vues du code synthétisable, les données issues d'un fichier n'ont de sens que si ce sont des constantes.
- Constructions non synthétisables qui font appel à un sens caché. L'affaire est plus délicate : à la définition de certains
objets est attaché une signification qui pilote le synthétiseur, à condition qu'on ait réussi à lui faire comprendre ce que
l'on souhaite obtenir. Prenons un exemple : pour réaliser une porte à sortie trois-états il peut venir à l'esprit de créer un
type et une fonction de conversion associée :
package troisetpkg is
type z_0_l is ( '0', 'l', 'Z' ) ;
function to_z_0_1 ( e, oe : bit ) return z_0_l ;
end package troisetpkg ;
package body troisetpkg is
function to_z_0_l ( e, oe : bit ) return z_0_l is
begin
if oe = '0' then
if e = '0' then
return '0' ;
else
return '1' ;
end if ;
else
return 'Z' ;
end if ;
end to_z_0_l ;
end package body troisetpkg ;
use work.troisetpkg.all ;
entity tri_buffer is
port ( e, oe : in bit ;
s : out z_0_1 ) ;
end tri_buffer ;
5. 32
Electronique Numérique 5. VHDL
Ce programme est parfaitement synthétisable, mais ne produit pas vraiment le résultat escompté. Le type énuméré est
codé sur deux éléments binaires qui prennent 3 des 4 valeurs possibles ("00", "01", "10" et "11") en fonction des
entrées, sans l'ombre d'état haute impédance ...
La définition d'un sous-type, héritier du type logique multivalué std_ulogic, change tout, dans le bon sens :
library ieee ;
use ieee.std_logic_1164.all ;
package troisetpkgieee is
subtype z_0_l is std_ulogic range '0' to 'Z' ;
function to_z_0_l ( e, oe : bit ) return z_0_l ;
end package troisetpkgieee ;
use work.troisetpkgieee.all ;
entity tri_bufi is
port ( e, oe : in bit ;
s : out z_0_1 ) ;
end tri_bufi ;
Le circuit synthétisé réalise bien un tampon trois-états, dont la sortie pilote une équipotentielle simple. L'état haute
impédance est commandé par l'entrée oe. En synthèse certains types ont un sens caché mais précis, le rôle de la norme
IEEE 1164 est de pousser tous les concepteurs de logiciels à tenir le même langage. Les deux programmes précédents
ont évidemment strictement le même comportement en simulation, le contraire n'aurait aucun charme.
Un compilateur de synthèse peut réagir diversement face à une instruction non synthétisable : la traiter comme une
erreur, l'ignorer si le programme a malgré tout un sens, voire ne pas détecter le piège, ce qui est assurément dangereux.
Les restrictions apportées par un logiciel à la norme du langage sont bien évidemment documentées.
Penser « circuit »
Il y a quantité de programmes VHDL dont les algorithmes seraient justes, s'ils étaient traduits en C et exécutés de point
d'arrêt en point d'arrêt, pas à pas. Diviser un projet en (petits) blocs autonomes, nommer les signaux qui permettent à ces
blocs de dialoguer, imaginer l'architecture physique du circuit en cours d'élaboration représente une bonne partie du
travail initial de conception VHDL.
5. 33
Electronique Numérique 5. VHDL
5. Conclusion
VHDL est un langage qui peut déconcerter. au premier abord, le concepteur de systèmes numériques, plus habitué aux
raisonnements traditionnels sur des schémas que familier des langages de description abstraite. Il est vrai que le langage
est complexe, et peut présenter certains pièges, la description des horloges en est un exemple.
Ayant fait l'effort de « rentrer dedans », l'utilisateur découvre que ce type d'approche est d'une très grande souplesse, et
d'une efficacité redoutable. Des problèmes de synthèse qui pouvaient prendre des heures de calcul, dans une démarche
traditionnelle, sont traités en quelques lignes de programme.
N'oubliez jamais que vous êtes en train de créer un circuit, et que le meilleur des compilateurs ne peut que traduire la
complexité sous-jacente de vos équations, il n'augmentera pas la capacité de calcul des circuits que vous utilisez. Le
simple programme de description d'un additionneur 4 bits, comme le 74_283 :
5. 34
Electronique Numérique 5. VHDL
entity addit is
port ( a, b : in integer range 0 to 15 ;
cin : in integer range 0 to 1 ;
som : out integer range 0 to 31 ) ;
end addit ;
architecture behavior of addit is
begin
som <= a + b + cin ;
end behavior ;
génère plus d'une centaine de termes, quand ses équations sont ramenées brutalement à une somme de produits logiques.
Charge reste à l'utilisateur de piloter l'optimiseur de façon un peu moins sommaire que de demander la réduction de la
somme à une expression canonique en deux couches logiques.
__________
5. 35
Electronique numérique Tutorial 5. VHDL
Tutorial 5. VHDL
Licensing + Compilation + Simulation
1. Licensing
1. Installer le compilateur VHDL : executer le fichier "student102.exe" du repertoire "Altera Max+Plus 10.2 Compiler"
fourni avec l'archive.
2. Dans le menu : Options -> License Setup, faire "Browse" pour aller chercher le fichier "licence.dat" fourni avec
l'archive puis faire OK (cocher "ne plus afficher ce message").
3. Fichier source exemple "inverseur.vhd" (fourni avec l'archive) pour le test du compilateur ALTERA Max++ :
2. Compilation - Fichier source d'exemple : inverseur.vhd pour le test du compilateur ALTERA Max++
-- le fichier source .vhd doit porter le même nom que l’entité
entity inverseur is
port (e : in bit;
s : out bit);
end inverseur;
architecture test of inverseur is
begin
s <= not e;
end test;
__________
Tutorial5. VHDL 1
Electronique Numérique TD 5. VHDL
TD 5. VHDL
__________
TD 5. 1
Electronique Numérique TP 5. VHDL
TP 5. VHDL
__________
TP 5. 1
Electronique Numérique
ELECTRONIQUE
NUMERIQUE
ANNEXE
Annexe
Electronique Numérique TD 6R. Révision Logique Combinatoire & Séquentielle
101 110 0 0
100 111 1 1
x= y= z=
2. Inhibition
On rappelle la définition de la fonction logique Inhibition :
A Inhibition Y
Si le signal de contrôle I vaut 0 alors le signal de sortie Y est égal au signal d’entrée A, sinon le signal de sortie Y vaut
0, quelle que soit la valeur du signal d’entrée A.
- Etablir l’expression la plus simple de la sortie Y en fonction de l’entrée A et du signal de contrôle I
3. Démultiplexeur 1→8
Les bits b2 b1b0 représentent le code BCD sur 3 bits ( b2 : MSB : bit de plus fort poids).
En choisissant le bit d à la valeur 1 et en considérant le démultiplexeur 1→8 ci-dessous comme système d’entrée
b2 b1b0 et de sortie s 0 s1 s 2 s3 s 4 s5 s 6 s 7 , décrire la fonction ainsi réalisée :
b2 b1 b0
d
b2 ???
DEMUX
b1 1 8
b0
s0 s1 s2 s3 s 4 s5 s6 s7
s0 s1 s2 s3 s 4 s5 s6 s 7 ≡
4. Multiplexeur 2 → 1
On rappelle la définition d’un Multiplexeur 2 → 1 :
B 1
MUX
Y
2 1
A 0
Si le signal de contrôle S vaut 0 alors le multiplexeur transmet le signal d’entrée A vers la sortie Y, sinon le
multiplexeur transmet le signal d’entrée B vers la sortie Y.
a- Exprimer la sortie Y sous la forme d’une somme de produits logiques
b- Exprimer la sortie Y sous la forme d’un produit de sommes logiques
TD 6R. 1
Electronique Numérique TD 6R. Révision Logique Combinatoire & Séquentielle
5. Multiplexeurs 4→1
On souhaite réaliser le transcodeur CBA→FED suivant, avec 3 multiplexeurs 4→1 ( a 0 , e0 :LSB:bits de plus faible poids)
e0
e1 MUX
s
e2 4 1
C F e3
B TRANSCODEUR E
A D a1 a0
On donne la table du transcodeur . Compléter les 3 tables suivantes décrivant les 3 multiplexeurs 4→1 :
C B A F E D Multiplexeur 1 Multiplexeur 2 Multiplexeur 3
0 0 0 0 1 1 s =F s =E s =D
0 0 1 0 0 0
a0 =B a0 =B a0 =B
0 1 0 0 0 0
a1 =A a1 =A a1 =A
0 1 1 1 0 0
1 0 0 0 1 1
e0 = e0 = e0 =
1 0 1 0 0 1
e1 = e1 = e1 =
1 1 0 0 0 0
e2 = e2 = e2 =
1 1 1 1 0 0
e3 = e3 = e3 =
6. Synthèse de Compteur synchrone 2 bits à bascules JK
a- Synthétiser le compteur synchrone 2 bits avec 2 bascules JK positive edge triggered qui compte dans la séquence :
Q1 Q0
00
11
en complétant les tables suivantes ainsi que le schéma ci-dessous :
J0 K 0 J1 K 1
Q0 Q0
Q1 0 1 Q1 0 1
0 0
1 1
J0 Q0 J1 Q1
K Q0 K Q1
0 1
J 0 = J1 =
H
K 0 = K1 =
Rappel : Table de synthèse pour une bascule JK
Transition Qn-1 → Qn J K
0 → 0 0 X
0 → 1 1 X
1 → 1 X 0
1 → 0 X 1
b- Vérifier que la séquence voulue est bien obtenue en faisant l’analyse du circuit synthétisé.
Rappel : Table d’analyse pour une bascule JK
C J K Q
n
X X X Q
J
C
Q
0 0 Q
n -1
n -1
} Mémoire
K Q
0
1
1
0
0
1
} Recopie de J
C : Horloge
1 1 Q Complément
n -1
__________
TD 6R. 2
ADO
ARCHITECTURE
DES
ORDINATEURS
0. Préambule
Objectif : Comprendre l’architecture matérielle des ordinateurs, les différents composants, le cheminement des
données, l’adaptation aux différentes applications.
Note : La partie « Système d’exploitation (E/S, driver, processus, signaux, threads, sémaphores, mémoire) est abordé en cours de
Système d’exploitation (Ing1 Semestre 1).
Bibliographie
0. 0
test2
Plan du cours
1. Codage - Représentation des nombres en machine
Nombres entiers, flottants.
2. Architecture de Von Neuman
ARCHITECTURE DES ORDINATEURS Architecture, Bus, Processeurs.
3. Assembleur
Introduction
Architecture processeur, Registres, Jeu d’instructions.
4. Processeurs actuels
Pipelining, Prédiction de branchement, Caches, Processeurs superscalaires.
[email protected] Bibliographie
122 + (-7) :
N Code SVA (en BCD) Code C2
+3 011 011
1 1111 000 (retenues)
+2 010 010
0111 1010 (122)
+1 001 001
+ 1111 1001 (-7)
+0 000 000
---------------
-0 100 -
1 0111 0011 (115) => 0111 0011 représente bien 115(10)
-1 101 111
-2 110 110
-3 111 101
-4 - 100
1
Addition en IEEE 754
Nombres à virgule flottante Ramener les deux nombres au même exposant
Norme IEEE754 Restaurer le bit de poids fort
Effectuer l’addition ou la soustraction des valeurs absolues comme pour les entiers
Signe Exposant (entier) Mantisse Renormaliser le résultat (arrondi, bit de poids fort, exposant)
Décomposition
Exemple
Simple précision (32 bits) 1 8 23
Double précision (64 bits) 1 11 52 1/10 + 1/10
Nombre normalisé :
1/10 + 1/10 =
nombre = (-1)signe * 1,mantisse * 2(exposant – biais) 1,100 1100 1100 1100 1100 1100 * 2123-127
Biais : 127 (simple précision) et 1023 (double précision) + 1,100 1100 1100 1100 1100 1100 * 2123-127
----------------------------------------------------------
Exemple (32 bits) 11,001 1001 1001 1001 1001 1000 * 2123-127 → à normaliser
1,100 1100 1100 1100 1100 1100 * 2124-127 dernier bit (0) perdu
Multiplication en IEEE754
Calculer le signe puis la somme des exposants
Restaurer le bit de poids fort
Effectuer la multiplication des valeurs absolues comme pour les entiers
Eventuellement, arrondir, ajuster l’exposant et renormaliser.
Exemple -18 x 10
__________
2
ADO TD1. Codage
1. Addition binaire
2. Soustraction binaire
0. Quel est l’intervalle des entiers naturels représentables en code BCD sur 16 bits ?
1. Quel est l’intervalle des entiers relatifs représentables en complément à 2 sur 16 bits ?
2. a) Donner la conversion Hexa et Binaire de 201010. b) Donner la conversion en Décimal de 7DAH.
3. Exprimez en base 10 les nombres dont le codage en complément à 2 sur 16 bits est le suivant :
a) 0110 1100 0001 1011
b) 1011 0110 1011 0011
4. Calculer en complément à 2 sur 8 bits les additions suivantes (données en décimal) :
a) 122 + (-7) ; b) (-111) + (-17) ; c) 111 + 17.
Vous ferez bien apparaître toutes les retenues intermédiaires. Précisez si le résultat est correct ou s’il y a dépassement
de capacité. Vérifiez les propriétés suivantes de l’addition en Complément à 2 :
− il n’y a pas dépassement de capacité si les signes des opérandes sont différents. Il y a dépassement si les signes
des opérandes sont égaux avec un changement de signe dans le résultat ;
− il y a dépassement de capacité lors d’une addition de deux entiers relatifs si et seulement si les deux dernières
retenues (de poids les plus élevés) sont différentes.
TD1. 1
ADO TD1. Codage
Rappel : Code Signe & Valeur Absolue (SVA) et Code Complément à 2 (C2) - Table des puissances de 2
N Code SVA (en BCD) Code C2 Table 2n Table 2n Table 2n
+3 011 011 20 1 29 512 2-1 0.5
+2 010 010 21 2 210 1024 2-2 0.25
+1 001 001 22 4 211 2048 2-3 0.125
+0 000 000 23 8 212 4096 2-4 0.0625
-0 100 - 24 16 213 8192 2-5 0.03125
-1 101 111 25 32 214 16384 2-6 0.015625
-2 110 110 26 64 215 32768 2-7 0.0078125
-3 111 101 27 128 216 65536 2-8 0.00390625
-4 - 100 28 256
__________
TD1. 2
ADO TP1. Codage
TP 1. ADO - Codage
Exercice 1 H ADDER
a) Réaliser sous CircuitMaker une macro (composant réutilisable) un composant
demi-additionneur 1 bit : HalfAdder.
b) Faire un test de la macro avec un fichier .ckt utilisant la macro HalfAdder. a s
c) Simuler votre test (scénarios de test avec des logic displays). b rout
Exercice 2
a) Réaliser sous CircuitMaker un additionneur complet 1 bit : FullAdder F ADDER
qui réutilise votre demi-additionneur. rin
b) Faire un test. a s
c) Simuler votre test (scénarios de test avec des logic displays).
b rout
Exercice 3 ADDER4
a) Réaliser sous CircuitMaker un additionneur 4 bits : Adder4 qui réutilise
4 additionneurs complets. Ce composant a une retenue entrante et une rin
retenue sortante. 4 4
b) Faire un test. a s
4
c) Simuler votre test (scénarios de test avec des hex displays). b rout
Devices → Digital animated → Displays → Hex display
Exercice 4 (Facultatif)
AdderInt4
a) Réaliser sous CircuitMaker un additionneur sur des nombres sur 4 bits
naturels ou relatifs : AdderInt4 qui réutilise l’additionneur 4 bits précé-
rin
dent. On garde la retenue entrante et on rajoute un signal n/z qui
permet de sélectionner le type des opérandes (1 pour les naturels,
4 a s 4
Compte-rendu
Faire un compte-rendu du TP1 incluant les schémas de vos composants, les sources CircuitMaker et les scénarios de simulation
commentés.
Facultatif : Optimisation du calcul de retenue (retenue par anticipation versus propagation de retenue)
Le temps de traversée de l’additionneur 4 bits est dû en grande partie à la propagation de la retenue entre les différents additionneurs complets (exemple 0001 +
1111). Nous allons étudier une solution qui permet d’optimiser ce calcul. On définit les fonctions suivantes pour i = 0 à 3 (0 poids faible, 3 poids fort).
- génération de retenue : gi = ai.bi - propagation de retenue : pi = ai xor bi
- calcul de la retenue : ci = gi + pi.ci-1 - calcul de la somme : si = pi xor ci-1
a) expliquer ces formules (on pourra remarquer que (gi,pi) constituent la sortie d’un ½ additionneur) ;
b) donner les formules de s0, c0, s1, c1, s2, c2, s3, c3 en fonction de g0, p0, g1, p1, g2, p2, g3, p3 et ce (la retenue entrante) ;
c) développer ces formules pour obtenir un temps de propagation minimal ;
d) en déduire le schéma du nouvel additionneur 4 bits à partir de 4 ½ additionneurs
e) réaliser le circuit sous CircuitMaker
f) vérifier le gain dans le temps de traversée de l’additionneur 4 bits ; on pourra utiliser des portes OR et AND à un nombre quelconque d’entrées.
__________
TP1. 1
ARCHITECTURE DE VON NEUMANN
Coupleur : driver, processeur spécialisé
test1
test1
test2
1
test2
test1
Améliorations de l’architecture de
Von Neumann
▪ Machine vectorielle
(Parallélisation des données traitées par 1 processeur unique)
APPLICATION 1
test1
ANNEXE
2
APPLICATION 2 LANGAGE MACHINE
test2 {
? int a=8, b=4, c;
c=a+b;
Compilateur
} LD A,(F800h)
ADD A,(F810h)
st (F820h),A
Hiérarchie
de traduction
Assembleur
08
08 F800 04
04 F810 Chargeur --
-- F820 en Mémoire 3AF800
3AF800 FB00
C6F810 FB01
C6F810
32F820 FB02 32F820
Registre adresse
LCO CC LCO CC
F800
F800 08
08
O O
Accumulateur Accumulateur F810
F810 04
04
Bus d’adresses Bus d’adresses F820
F820 00
00
PSR PSR Instructions
Instructions
CRA CRA FB00
FB00 3A
3AF8
F800
00
FB01
FB01 C6
C6F8
F810
10
FB02
FB02 32
32F8
F820
20
U.A.L. U.A.L.
H CAD LEC ECR H CAD LEC ECR
Registre Registre
CEB Registre CEB Registre
mot mot
Instruction Instruction
EDA CEA CRI LMM EMM EDA CEA CRI LMM EMM
PSR PSR
Instructions Instructions
CRA CRA
FB00 3A F8 00 FB00 3A F8 00
+1 FB01 C6 F8 10 +1 FB01 C6 F8 10
FB02 32 F8 20 FB02 32 F8 20
U.A.L. U.A.L.
H CAD LEC ECR H CAD LEC ECR
Registre Registre
CEB Registre 3A F8 00 mot
CEB Registre 3A F8 00 mot
3A F8 00 Instruction 3A F8 00 Instruction
EDA CEA CRI LMM EMM EDA CEA CRI LMM EMM
3
Exécution de l’instruction 1 Extraction de l’instruction 2
Unité Centrale Compteur Unité Centrale Compteur
Ordinal FB01 1 Mémoire centrale Ordinal FB01
1 Mémoire centrale
FB01
Bus d’adresses Bus d’adresses
FB00
PSR PSR
Instructions Instructions
CRA CRA
FB00 3A F8 00 FB00 3A F8 00
+1 FB01 C6 F8 10 +1 FB01 C6 F8 10
FB02 32 F8 20 FB02 32 F8 20
U.A.L. U.A.L.
H CAD LEC ECR H CAD LEC ECR
Registre Registre
CEB Registre 08
mot
CEB Registre C6 F8 10 mot
3A F8 00
Instruction C6 F8 10 Instruction
EDA CEA CRI LMM EMM EDA CEA CRI LMM EMM
F820
PSR PSR
Instructions Instructions
CRA CRA
FB00 3A F8 00 FB00 3A F8 00
+1 FB01 C6 F8 10 +1 FB01 C6 F8 10
FB02 32 F8 20 FB02 32 F8 20
U.A.L. U.A.L.
08 04 H CAD LEC ECR H CAD LEC ECR
Registre Registre
CEB Registre 04 mot
CEB Registre 12 mot
C6 F810 32 F820
Instruction Instruction
EDA CEA CRI LMM EMM EDA CEA CRI LMM EMM
FB02
U.A.L. U.A.L.
H CAD LEC ECR H CAD LEC ECR
Registre Registre
CEB Registre 32 F8 20 mot
CEB Registre 32 F8 20 mot
32 F8 20 Instruction 32 F8 20 Instruction
EDA CEA CRI LMM EMM EDA CEA CRI LMM EMM
4
Exécution de l’instruction 3 Programme terminé
Unité Centrale Compteur Unité Centrale Compteur
Ordinal FB03 1 Mémoire centrale Ordinal FB03 1 Mémoire centrale
F820
F800
PSR PSR
Instructions Instructions
CRA CRA
FB00 3A F8 00 FB00 3A F8 00
+1 FB01 C6 F8 10 FB01 C6 F8 10
FB02 32 F8 20 Contrôleur FB02 32 F8 20
U.A.L. U.A.L.
H CAD LEC ECR H CAD LEC ECR
Registre Registre
CEB Registre 12 mot
CEB Registre mot
32 F820 Instruction Instruction
EDA CEA CRI LMM EMM EDA CEA CRI LMM EMM
La micro-programmation
Séquenceur (des signaux de contrôle) microprogrammé versus séquenceur câblé
Micro-commande
Chargement RA Chargement drapeaux
__________
5
ADO TD2. Architecture de VonNeumann
TD2. 1
ADO TD2. Architecture de VonNeumann
2. L’instruction ASSEMBLEUR INTEL 8086 :
AND AX, 06 (AX est un registre accumulateur 16 bits)
a pour code Machine :
25 06 00H (convention INTEL Little Endian)
Elle est implantée à l’adresse 01 00H.
a) Indiquer le contenu des registres IR et IP juste avant exécution de l’instruction.
b) Indiquer le contenu du registre IP juste après exécution de l’instruction.
Corrigé :
a) Juste avant :
IR : 25 06 00 IR contient le code Machine de la prochaine instruction à exécuter
IP : 01 00 01 00H = adresse d’implantation du programme = contenu de IP, noté (IP) = adresse de la prochaine instruction à exécuter
b) Juste après :
IP : 01 03 01 00H + 3 octets = 01 03H (le code instruction occupe 3 octets)
IP
Code ASM
1 MOV AX, 0100h B8 00 01 (3) Ecrit 01 00H dans le registre AX ; (AX) = 01 00 (convention INTEL Little Endian) (AH)=01; (AL)=00
2 MOV BX, 0304h BB 04 03 (3) Ecrit 03 04H dans le registre BX ; (BX) = 03 04 (convention INTEL Little Endian) (BH)=03; (BL)=04
3 Boucle: ADD AL, 1 04 01 (2) Ajoute 1 à l’octet de poids faible de AX noté AL : (AL) = (AL) + 1
4 CMP AL, 2 3C 02 (2) Compare (AL) à 2 ; place le bit de Flag Z à 1 en cas d’égalité de la comparaison
5 JNE Boucle 75 FA (2) Saut à l’étiquette Boucle si le bit Z = 0 (≡ s’il n’y a pas égalité) (Jump Not Equal)
6 PUSH AX 50 (1) Empile le contenu de AX dans la pile (STACK) : (AX) → STACK
7 PUSH BX 53 (1) Empile le contenu de AX dans la pile (STACK) : (BX) → STACK
Attention : ne pas introduire de caractère « espace » dans l’étiquette « Boucle: »
a) Compléter ce tableau lors de l’exécution complète et pas à pas du programme, en indiquant le contenu des registres spécifiés :
Note : les 2 1ers octets de la pile (sommet FFFF et FFFE) sont réservés. La mémorisation commence après.
__________
TD2. 2
ADO TP2. Architecture de VonNeumann
__________
TP2. 1
ASSEMBLEUR 80x86
Rappel : Structure d’un ordinateur test2
test1
test2
POP
1
Instructions arithmétiques Les instructions logiques
test2
test1
Les instructions de Saut conditionnel Les instructions de boucle Elles décrémentent le contenu de CX
LOOPNE / LOOPNZ
Interruptions DOS
Paramètre d'entrée : AH = 1
Appel d'interruption : INT 21H
Paramètre de sortie : AL ; (AL) = code ASCII du caractère
Interruptions BIOS
2
ADO TD 3 - TP 3. Assembleur 80x86
Bus d’adresses (20bits) : Utilisé par le cpu (unité centrale – Central Processor Unit) pour adresser une case mémoire ou un port I/O, le cpu calcule
d’abord l’adresse physique (20bits) puis la positionne sur le bus d’adresse
Les registres
Zones mémoires processeur pour stocker des informations afin d’y accéder plus rapidement que par des accès à la mémoire centrale (RAM).
AX, BX, CX et DX sont à usage général et servent à stocker temporairement une information de 16 bits.
Chacun de ces registres est divisible en 2 registres de 8 bits. Exemple pour AX : AH = octet de poids fort de AX. AL = octet de poids faible de AX.
AX (accumulateur) : instructions d’I/O et certaines opérations arithmétiques.
BX (registre de base) : peut être aussi utilisé comme registre d’adressage lors de l’adressage direct à la mémoire.
CX (compteur) : peut être aussi utilisé comme compteur de boucles
DX : peut être aussi utilisé pour contenir les adresses des ports pour les instructions I/O.
TD 3 - TP 3. 1
ADO TD 3 - TP 3. Assembleur 80x86
Les registres d’index et pointeurs
SI et DI peuvent être utilisés comme registres généraux de données mais le plus souvent sont utilisés avec les instructions spécialisées de
manipulation des chaînes de caractères et aussi comme registres d’adressage (indexé).
SP et BP accèdent aux données de la pile (SS : SP = sommet de la pile et BP accède à des données dans la pile).
CS (Code Segment) et IP pointeur d’instruction : CS : IP = adresse de l’instruction suivante à exécuter. (CS contient la partie haute de l’adresse)
Plus d’informations
http://www.google.fr/url?sa=t&source=web&cd=1&ved=0CB8QFjAA&url=https%3A%2F%2Ffanyv88.com%3A443%2Fhttp%2Fentraide-
epfc.sirenacorp.be%2Fscript.redirDownload.php%3FID_download%3D103%26url%3Ddownload%2F2007_01_12_Rsumerdassembleur.doc&rct=j&
q=architecture%208086&ei=4VQOTdySMJGo8QPBvM2DBw&usg=AFQjCNFof1l86I105-h5-N_DvadhXay-xg&cad=rja
TD 3 - TP 3. 2
ADO TD 3 - TP 3. Assembleur 80x86
Complément de cours 2 : Jeu d’instructions 80x86
I ) introduction
On peut diviser les instructions du 8086/88 en 6 groupes comme suit :
Remarques
• Il est strictement interdit de transférer le contenu d'une case mémoire vers une autre case mémoire
• On n'a pas le droit aussi de transférer un registre segment vers un autre registre segment sans passer par un autre registre.
II-1-2 ) PUSH
Elle permet d'empiler les registres du CPU sur le haut de la pile
Syntaxe : PUSH SOURCE
Exemple :
TD 3 - TP 3. 3
ADO TD 3 - TP 3. Assembleur 80x86
II-1-3 ) POP
Elle permet de dépiler les registres du CPU sur le haut de la pile
Syntaxe : POP destination
Exemple
III-1 ) Addition
III-1-1 ) ADD: (Addition)
Syntaxe : ADD Destination, source
Elle permet d'additionner le contenu de la source (octet ou un mot) avec celui de la destination le résultat est mis dans la destination
Destination <---------- Destination + source
Exemples
ADD AX, BX ; AX = AX + BX (addition sur 16 bits) ADD AL,BH
; AL = AL + BH (addition sur 8 bits )
ADD AL, [SI] ; AL = AL + le contenu de la case mémoire pointée par SI
ADD [DI], AL ; le contenu de la case mémoire pointé par DI est additionnée avec AL, le résultat est mis
; dans la case mémoire pointée par DI
TD 3 - TP 3. 4
ADO TD 3 - TP 3. Assembleur 80x86
III-2 ) Soustraction
III-2-1 ) SUB : (Soustraction)
Syntaxe : SUB Destination, source
Elle permet de soustraire la destination de la source (octet ou un mot) le résultat est mis dans la destination
Destination <--------- Destination -- source
Exemples
SUB AX,BX ; AX = AX - BX (Soustraction sur 16 bits )
SUB AL,BH ; AL = AL - BH ( Soustraction sur 8 bits )
SUB AL,[SI] ; AL = AL - le contenu de la case mémoire pointé par SI
SUB [DI],AL ; le contenu de la case mémoire pointée par DI est soustraite de AL , le résultat est mis
; dans la case mémoire pointée par DI
III-3 ) La multiplication :
III-3-1 ) MUL : (Multiplication pour les nombres non signés)
MUL effectue une multiplication non signée de l ‘opérande source avec l'accumulateur :
Syntaxe : MUL Source
• Si la source est un octet alors elle sera multipliée par l'accumulateur AL le résultat sur 16 bits sera stocké dans le registre AX.
• Si la source est un mot alors elle sera multipliée avec l'accumulateur AX le résultat de 32 bits sera stocké dans la paire des registres AX et DX
En conclusion :
III-4 ) La division
III-4-1 ) DIV : (Division des nombres non signés)
Syntaxe : DIV Source
Elle effectue une division entière non signée de l'accumulateur par l'opérande source :
Exemples
• Si l'opérande est un octet : alors on récupère le quotient dans le registre AL et le reste dans le registre AH.
• Si l'opérande est un mot : alors on récupère le quotient dans le registre AX et le reste dans le registre DX
a)
MOV AH,00h
MOV AL,33H
MOV DL,25H
DIV DL
b)
MOV AX,500H
MOV CX,200H
DIV CX
TD 3 - TP 3. 5
ADO TD 3 - TP 3. Assembleur 80x86
IV ) Les instructions logiques ( de bits )
Ils sont divisés en trois sous-groupes comme le montre le tableau suivant :
La procédure est nommée calcul. Après l'instruction B, le processeur passe à l'instruction C de la procédure, puis continue jusqu'à rencontrer RET et revient à
l'instruction D.
Une procédure est une suite d'instructions effectuant une action précise, qui sont regroupées par commodité et pour éviter d'avoir à les écrire à plusieurs reprises
dans le programme.
Les procédures sont repérées par l'adresse de leur première instruction, à laquelle on associe une étiquette en assembleur.
L'exécution d'une procédure est déclenchée par un programme appelant. Une procédure peut elle-même appeler une autre procédure, et ainsi de suite.
Instructions CALL et RET
L'appel d'une procédure est effectué par l'instruction CALL.
CALL adresse_debut_procedure
L'adresse est sur 16 bits, la procédure est donc dans le même segment d'instructions. CALL est une nouvelle instruction de branchement inconditionnel. La
fin d'une procédure est marquée par l'instruction RET :
V-1-2 ) RET :
RET ne prend pas d'argument ; le processeur passe à l'instruction placée immédiatement après le CALL.
RET est aussi une instruction de branchement : le registre IP est modifié pour revenir à la valeur qu'il avait avant l'appel par CALL. Comment le processeur
retrouve-t-il cette valeur ? Le problème est compliqué par le fait que l'on peut avoir un nombre quelconque d'appels imbriqués, comme sur la figure suivante :
TD 3 - TP 3. 6
ADO TD 3 - TP 3. Assembleur 80x86
L'adresse de retour, utilisée par RET, est en fait sauvegardée sur la pile par l'instruction CALL. Lorsque le processeur exécute l'instruction RET, il dépile l'adresse
sur la pile (comme POP), et la range dans IP.
L'instruction CALL effectue donc les opérations :
• Empiler la valeur de IP. A ce moment, IP pointe sur l'instruction qui suit le CALL.
• Placer dans IP l'adresse de la première instruction de la procédure (donnée en argument).
Et l'instruction RET :
L'exécution de l'instruction MOV BX, AX sera faite après l'exécution de la boucle 5 fois.
V-3-2) LOOPE / LOOPZ : (boucle si égale ou si égale à zéro) : Le registre CX est décrémenter de 1 automatiquement
Si CX est différent de zéro et ZF=1 alors IP = IP + déplacement
V-3-3 ) LOOPNE / LOOPNZ : (boucle si égale ou si égale à zéro) : Le registre CX est décrémenter de 1 automatiquement
Si CX est différent de zéro et ZF=0 alors IP = IP + déplacement
Exemple :
TD 3 - TP 3. 7
ADO TD 3 - TP 3. Assembleur 80x86
VII ) Les instructions de commande du processeur
Ces instructions agissent sur le processeur et ses indicateurs (Flags) ils sont en nombre de 12 comme le montre le tableau suivant
VII-1 ) Indicateurs :
VII-1-1/ STD :
Met CF à 1 ; les registres d'indexation SI et/ou DI sont alors automatiquement décrémenter par les instructions de chaîne de caractère.
VII-1-2 ) STI :
Met IF à 1, permettant ainsi au CPU de reconnaître des demandes d'interruption masquables apparaissant sur la ligne d'entrée INTR.
VII-2 ) Synchronisation :
VII-2-1 ) HALT :
Maintient le processeur dans un état d'attente d'un RESET ou d'une interruption externe non masquable ou masquable (avec IF=1).
VII-2-2 ) WAIT :
Met le CPU en état d'attente tant que sa ligne de TEST n'est pas active. En effet toutes les cinq périodes d'horloge le CPU vérifie est ce que cette entrée est active
ou non, si elle est active le processus exécute l'instruction suivante à WAIT.
VII-2-3 ) ESC :
L'instruction Escape fournit un mécanisme par lequel des coprocesseurs peuvent recevoir leurs instructions à partir de la suite d'instructions du 8086.
VII-2-4 ) LOCK :
Elle utilise dans les systèmes Multiprocesseur en effet elle permet le verrouillage du bus vis-à-vis des autres processeurs.
VII-3 Sans opération :
VII-3-1 ) NOP (No operation) :
Le CPU ne fait rien on peut s'en servir pour créer des temporisations.
Plus d’informations :
http://www.technologuepro.com/microprocesseur/chap4_microprocesseur.htm
TD 3 - TP 3. 8
ADO TD 3 - TP 3. Assembleur 80x86
Complément de cours 3 : Interruptions système
Interruptions DOS
.Lecture d'un caractère (unique) au clavier avec écho (avec écho signifie que le caractère tapé au clavier apparaît sur l'écran après la frappe)
Pas de nécessité de validation avec la touche "Entrée" : le caractère est acquis dès sa frappe au clavier.
Lecture d'un caractère frappé au clavier; après appel de l'interruption, le code ASCII du caractère est stocké dans le registre AL.
Interruptions BIOS
.Affichage d'un caractère à l'écran
Paramètres d'entrée : AH = 0EH ; numéro de la fonction de l’interruption
AL = Code ASCII du caractère a afficher à l'écran
Appel d'interruption : INT 10H
Paramètres de sortie : aucun
TD 3 - TP 3. 9
ADO TD 3 - TP 3. Assembleur 80x86
Exercice 1 : Programmation ASSEMBLEUR (ASM)
a) Installer le simulateur 8086 : Assembler with Microprocessor Simulator 8086 (fichier emu8086v408r.exe)
téléchargeable à l’adresse :
http://pcwin.com/Software_Development/Debugging/Assembler_with_Microprocessor_Simulator_8086/index.htm (rubrique download)
b) A l’aide de l’émulateur 8086 (menu emulate) et des compléments de cours, réaliser et vérifier le fonctionnement des
programmes suivants : (il est conseillé d’utiliser les registres généraux AX, BX, CX, DX ainsi que la pile)
1.1a- Par itération : S = somme de i (de i = 1 à N) : lecture de N au clavier et affichage du résultat à l'écran (utilisations des
interruptions système)
Conseil : se placer en clavier Anglais pour l’acquisition de N au clavier
1.1b- Par formule de calcul : S = N(N+1)/2 : lecture de N au clavier et affichage du résultat à l'écran (utilisations des interruptions
système)
Conseil : se placer en clavier Anglais pour l’acquisition de N au clavier
Test : N = 3; S = 6 = 0006h
1.0a facultatif - Par itération : S = somme de i (de i = 1 à N) : chargement de N en dur et visualisation du résultat via l'émulateur
1.0b facultatif - Par formule de Gauss : S = N(N+1)/2 : chargement de N en dur et visualisation du résultat via l'émulateur
1.2a facultatif Par itération : S = somme de i (de i = 1 à N) : lecture de N au clavier et affichage du résultat à l'écran (utilisations des interruptions système)
Conseil : se placer en clavier Anglais pour l’acquisition de N au clavier
Test : N = 9; S = 45 = 002Dh
2.0a facultatif - Par itération : S2 = somme de (i*i) (de i = 1 à N) : chargement de N en dur et visualisation du résultat via l'émulateur
2.0b facultatif- Par formule : S2 = N(N+1)(2N+1)/6 : chargement de N en dur et visualisation du résultat via l'émulateur
Test1 : N = 3; S2 = 14 = 000Eh
Test 2: N = 8; S2 = 204 = 00CCh
__________
TD 3 - TP 3. 10
ADO 4. Les Processeurs actuels. Pipelining. Prédiction de branchement. Caches. Processeurs superscalaires
1. Pipelining
4. 1
ADO 4. Les Processeurs actuels. Pipelining. Prédiction de branchement. Caches. Processeurs superscalaires
4. 2
ADO 4. Les Processeurs actuels. Pipelining. Prédiction de branchement. Caches. Processeurs superscalaires
4. 3
ADO 4. Les Processeurs actuels. Pipelining. Prédiction de branchement. Caches. Processeurs superscalaires
4. 4
ADO 4. Les Processeurs actuels. Pipelining. Prédiction de branchement. Caches. Processeurs superscalaires
2. Prédiction de branchement
4. 5
ADO 4. Les Processeurs actuels. Pipelining. Prédiction de branchement. Caches. Processeurs superscalaires
4. 6
ADO 4. Les Processeurs actuels. Pipelining. Prédiction de branchement. Caches. Processeurs superscalaires
4. 7
ADO 4. Les Processeurs actuels. Pipelining. Prédiction de branchement. Caches. Processeurs superscalaires
4. 8
ADO 4. Les Processeurs actuels. Pipelining. Prédiction de branchement. Caches. Processeurs superscalaires
3. Caches
4. 9
ADO 4. Les Processeurs actuels. Pipelining. Prédiction de branchement. Caches. Processeurs superscalaires
4. 10
ADO 4. Les Processeurs actuels. Pipelining. Prédiction de branchement. Caches. Processeurs superscalaires
4. 11
ADO 4. Les Processeurs actuels. Pipelining. Prédiction de branchement. Caches. Processeurs superscalaires
4. 12
ADO 4. Les Processeurs actuels. Pipelining. Prédiction de branchement. Caches. Processeurs superscalaires
4. 13
ADO 4. Les Processeurs actuels. Pipelining. Prédiction de branchement. Caches. Processeurs superscalaires
4. Processeurs superscalaires
4. 14
ADO 4. Les Processeurs actuels. Pipelining. Prédiction de branchement. Caches. Processeurs superscalaires
4. 15
ADO 4. Les Processeurs actuels. Pipelining. Prédiction de branchement. Caches. Processeurs superscalaires
4. 16
ADO 4. Les Processeurs actuels. Pipelining. Prédiction de branchement. Caches. Processeurs superscalaires
5. Conclusion
__________
4. 17
ADO TD 4. Les Processeurs actuels. Pipelining
1. Pipelining (1)
On considère le pipeline d’instructions (P1) représenté ci-dessous :
étage pipeline P1
1 lit cache d’instructions
2 decode instruction
3 lit registres
instruction ≠ LOAD/STORE → 4 execute / calcul adresse ˥ 2 cycles ← )
5 acces cache de donnees ) 2 cycles ← ) LOAD/STORE
6 acces cache de donnees ) 2 cycles ← )
7 ecrit registre
On suppose que toutes les instructions, sauf les LOAD/STORE, sont exécutées à l’étage 4. Pour les instructions
LOAD/STORE, le calcul d’adresse du/des opérandes du LOAD/STORE se fait à l’étage 4 et l’accès au cache de
données est pipeliné sur 2 cycles (étages 5 et 6). Pour les instructions qui ne sont pas des LOAD/STORE, les
étages 5 et 6 se comportent comme des étages vides.
On suppose qu’il y a un mécanisme de bypass permettant de transmettre le résultat d’une instruction aux
instructions suivantes sans attendre l’écriture registre. Si un opérande source d’une instruction n’est pas
disponible au moment où celle-ci va rentrer dans l’étage 4, les étages 1 à 3 sont bloqués jusqu’à ce que
l’opérande indisponible soit accessible via le mécanisme de bypass, ce qui conduit à l’insertion de bulles (temps
d’attente, de blocage) dans le pipeline.
On supposera un prédicteur de branchement parfait. On supposera également que toutes les lectures
d’instructions font des hits dans le cache d’instructions et que tous les LOAD/STORE font des hits dans le cache
de données (cela signifie qu’il n’y a que des cache-hits et pas de cache-miss, c’est-à-dire que les accès cache sont toujours tels que le
cache respectivement d’instructions / données contient les cibles, instructions / données).
1.
Lorsqu’un LOAD est immédiatement suivi d’une instruction utilisant le résultat du LOAD, combien de bulles
sont insérées dans le pipeline ?
2.
On considère le programme ci-dessous écrit dans un assembleur donné (asm), qui calcule la somme des N
éléments d’un tableau. Le registre R4 est initialisé avec N, le registre R1 est initialisé avec l’adresse A du 1er
élément du tableau et le registre R3 contenant en fin d’exécution le résultat de la somme est initialisé à 0. Les
éléments du tableau sont stockés sur 4 octets.
En supposant N grand, quel est le débit d’exécution de cette boucle en instructions par cycle ?
3.
Changez l’ordre des instructions dans la boucle afin d’obtenir un débit de 1 instruction/cycle.
TD 4. 1
ADO TD 4. Les Processeurs actuels. Pipelining
4.
On considère le programme ci-dessous qui calcule la somme des éléments du tableau mais en parcourant le
tableau dans l’autre sens. R4 est initialisé à 4N, R1 est initialisé à A+4N et R3 toujours initialisé à 0.
a) Toujours en supposant N grand, quel est le débit d’exécution du programme en instructions par cycle ?
b) Ce programme est-il plus performant que le programme de la question 2 ? Est-il plus performant que le programme
modifié à la question 3 ?
5.
On modifie le pipeline d’instructions comme représenté ci-dessous (P2), c’est-à-dire en déplaçant l’étage
d’exécution de l’étage 4 à l’étage 6. Le calcul d’adresse continue à se faire à l’étage 4.
étage pipeline P2
1 lit cache d’instructions
2 decode instruction
3 lit registres
4 calcul adresse
5 Acces cache de donnees
6 execute / acces cache de donnees
7 ecrit registre
La performance du programme de la question 4 sur le nouveau pipeline (P2) est-elle supérieure ou inférieure à
celle sur l’ancien pipeline (P1) ?
2. Pipelining (2)
On considère à nouveau l’architecture pipeline P1 précédente :
Pipeline P1
Soit le pipeline d’instructions (P1) représenté ci-dessous, ayant un débit théorique maximum égal à 1 instruction/cycle :
Un cycle est le temps nécessaire au traitement d’un étage du pipeline.
étage pipeline P1
1 lit cache d’instructions
2 decode instruction
3 lit registres
instruction ≠ LOAD/STORE → 4 Execute / calcul adresse ˥ 2 cycles ← )
5 Acces cache de donnees ) 2 cycles ← ) LOAD/STORE
6 Acces cache de donnees ) 2 cycles ← )
7 ecrit registre
On suppose que toutes les instructions, sauf les instructions LOAD et STORE, sont exécutées à l’étage 4. Pour les instructions
LOAD/STORE, le calcul d’adresse du/des opérandes du LOAD/STORE se fait à l’étage 4 et l’accès au cache de données est pipeliné
sur 2 cycles (étages 5 et 6). Pour les instructions qui ne sont pas des LOAD/STORE, les étages 5 et 6 se comportent comme des
étages vides.
On suppose qu’il y a un mécanisme de bypass permettant de transmettre le résultat d’une instruction aux instructions suivantes sans
attendre l’écriture registre. Si un opérande source d’une instruction n’est pas disponible au moment où celle-ci va rentrer dans l’étage
4, les étages 1 à 3 sont bloqués jusqu’à ce que l’opérande indisponible soit accessible via le mécanisme de bypass, ce qui conduit à
l’insertion de bulles dans le pipeline.
2 bulles sont insérées dans le pipeline P1 si l’instruction immédiatement après un LOAD/STORE utilise comme opérande le résultat
du LOAD/STORE.
TD 4. 2
ADO TD 4. Les Processeurs actuels. Pipelining
On supposera un prédicteur de branchement parfait. On supposera également que toutes les lectures d’instructions font des hits dans
le cache d’instructions et que tous les LOAD/STORE font des hits dans le cache de données (cela signifie qu’il n’y a que des cache-
hits et pas de cache-miss, c’est-à-dire que les accès cache sont toujours tels que le cache respectivement d’instructions / données
contient les cibles, instructions / données).
On considère le programme ci-dessous écrit dans un assembleur donné, qui calcule la somme des N éléments d’un tableau contenant
des entiers. Le registre R4 est initialisé avec N, le registre R1 est initialisé avec l’adresse A du 1er élément du tableau et le registre
R3 contenant en fin d’exécution le résultat de la somme est initialisé à 0. Les éléments du tableau sont stockés sur 2 octets. Enfin, le
calcul de la somme est interrompu si celle-ci égale une valeur seuil donnée. Le registre R6 est initialisé avec ce seuil :
1: boucle: R2 = LOAD R1+0 // lit element du tableau
2: R4 = R4 SUB 1 // R4 = R4 - 1
3: R3 = R3 ADD R2 // ajoute a la somme
4: R7 = R3 SUB R6 // R7 = R3 - R6
5: BZ R7, fin // BZ (Branch Zero) : saut à l’étiquette fin si R7 = 0
6: R1 = R1 ADD 2 // R1 = R1 + 2
7: BNZ R4, boucle // BNZ (Branch Not Zero) : boucle si R4 ≠ 0
8: fin: … // fin de traitement
1. En supposant N grand et en partant d’une configuration où le calcul de la somme n’est pas interrompu, quel est le débit
d’exécution de la boucle de programme en instructions par cycle ?
__________
TD 4. 3
ADO TP 4. Les Processeurs actuels. Pipelining
1. Pipelining (1)
On considère le pipeline ci-dessous dédié aux instructions en virgule flottante (pour données FP Floating Point) :
étage pipeline P
1 lit cache d’instructions
2 decode instruction
3 lit registres FP
4 execute FP / acces cache de donnees
5 execute FP / acces cache de donnees
6 execute FP / acces cache de donnees
7 ecrit registre FP
On suppose un prédicteur de branchements parfait et les instructions déjà dans les caches.
Une instruction FP dépendant de l’instruction immédiatement précédente doit attendre 2 cycles avant de rentrer
dans le 1er étage d’exécution
→ 2 bulles sont insérées si une instruction utilise en opérande le résultat de l’instruction immédiatement
avant.
3 2
On veut calculer l’expression : ay + by + cy + d. On propose 2 méthodes pour implémenter ce calcul :
On remarquera que la méthode 2 demande 1 multiplication de plus que la méthode 1 (de Horner).
On supposera que y,a,b,c,d se trouvent déjà dans les registres flottants respectifs F0, F1, F2, F3, F4 et que les
autres registres sont libres. On veut obtenir le résultat dans le registre F5.
Pseudo-codes assembleur
Rappel : Initialisation :
F0 = y
F1 = a
F2 = b
F3 = c
F4 = d
TP 4. 1
ADO TP 4. Les Processeurs actuels. Pipelining
1: F5 = F1 FMUL F0 // F5 = ay
2: F5 = F5 FADD F2 // F5 = ay + b
3: F5 = F5 FMUL F0 // F5 = (ay + b)y
4: F5 = F5 FADD F3 // F5 = (ay + b)y + c
5: F5 = F5 FMUL F0 // F5 = [(ay + b)y + c]y
6: F5 = F5 FADD F4 // F5 = [(ay + b)y + c]y + d
1: F5 = F0 FMUL F1 // F5 = ya
2: F6 = F0 FMUL F3 // F6 = yc
3: F7 = F0 FMUL F0 // F7 = y2
4: F5 = F5 FADD F2 // F5 = ya + b
5: F6 = F6 FADD F4 // F6 = yc + d
6: F5 = F5 FMUL F7 // F5 = (ya + b)y2
7: F5 = F5 FADD F6 // F5 = (ya + b)y2 + yc + d
2. Pipelining (2)
1. Pourquoi le pipelining améliore t-il la performance ?
Supposons qu'un processeur non pipeliné possedant un temps de cycle (temps de traitement d’1 instruction) de 25
ns soit divisé en 5 étages de pipeline de latences respectives de 5, 7, 3, 6 et 4 ns. La latence de latch du pipeline
(registre de sortie de chaque étage du pipeline) est de 1 ns. Le pipeline est supposé sans délais de branchement
(prédiction de branchement parfaite, sans aléas).
3.1. Quelle est le temps de cycle (temps de traitement d’1 étage du pipeline) du processeur pipeliné ?
3.2. Quelle est la latence totale du pipeline (temps de traitement de tous les étages du pipeline) ?
__________
TP 4. 2
ADO 5. Mémoire - Microprogrammation
Capacité
Une mémoire stockant des données sur m bits et comportant n bits d'adresse a un espace de
stockage de 2n mots de m bits, soit une capacité de 2n x m bits (chaque donnée occupe une
adresse). On parle alors d'une mémoire 2n x m.
Exemple :
Une mémoire stockant des données sur 4 bits et comportant 8 bits d'adresse a un espace de
stockage de 28 mots de 4 bits, soit une capacité de 28 x 4 bits = 256x4 bits = 1024 bits = 1 kbit. On
parle alors d'une mémoire 256x4.
Débit
Le débit, ou encore Bande passante d’une mémoire s’exprime en bits/s ou Octets/s.
Boîtier mémoire
CS ou encore CE : Chip Select (sélection de boîtier), Chip Enable (validation de boîtier).
Unités
1 K = 1024
1 M = 1024 K
1 Octet = 8 bits
5. 1
Chapitre
3 Les mémoires
3
Une mémoire est un circuit à semi-conducteur permettant d’enregistrer, de
conserver et de restituer des informations (instructions et variables). C’est cette capacité de
mémorisation qui explique la polyvalence des systèmes numériques et leur adaptabilité à de
nombreuses situations. Les informations peuvent être écrites ou lues. Il y a écriture lorsqu'on
enregistre des informations en mémoire, lecture lorsqu'on récupère des informations précédemment
enregistrées.
Avec une adresse de n bits il est possible de référencer au plus 2n cases mémoire. Chaque
case est remplie par un mot de données (sa longueur m est toujours une puissance de 2). Le nombre
de fils d’adresses d’un boîtier mémoire définit donc le nombre de cases mémoire que comprend le
boîtier. Le nombre de fils de données définit la taille des données que l’on peut sauvegarder dans
chaque case mémoire.
En plus du bus d’adresses et du bus de données, un boîtier mémoire comprend une entrée de
commande qui permet de définir le type d’action que l’on effectue avec la mémoire (lecture/écriture) et
une entrée de sélection qui permet de mettre les entrées/sorties du boîtier en haute impédance.
On peut donc schématiser un circuit mémoire par la figure suivante où l’on peut distinguer :
Adresses
(n bits)
Mémoire Données (m bits)
R/W
CS
9
Une opération de lecture ou d’écriture de la mémoire suit toujours le même cycle :
1. sélection de l’adresse
2. choix de l’opération à effectuer ( R/W )
3. sélection de la mémoire ( CS = 0 )
4. lecture ou écriture la donnée
Remarque :
Les entrées et sorties de données sont très souvent regroupées sur des bornes bidirectionnelles.
Le format des données : c’est le nombre de bits que l’on peut mémoriser par case mémoire.
On dit aussi que c’est la largeur du mot mémorisable.
Le temps d’accès : c’est le temps qui s'écoule entre l'instant où a été lancée une opération
de lecture/écriture en mémoire et l'instant où la première information est disponible sur le bus
de données.
Le temps de cycle : il représente l'intervalle minimum qui doit séparer deux demandes
successives de lecture ou d'écriture.
BUS @ @x
R/ W
Données
accessibles
CS
BUS D Dx
Taccès
Tcycle
Remarque :
Les mémoires utilisées pour réaliser la mémoire principale d’un système à microprocesseur
sont des mémoires à semi-conducteur. On a vu que dans ce type de mémoire, on accède directement
à n'importe quelle information dont on connaît l'adresse et que le temps mis pour obtenir cette
information ne dépend pas de l'adresse. On dira que l'accès à une telle mémoire est aléatoire ou
direct.
A l'inverse, pour accéder à une information sur bande magnétique, il faut dérouler la bande en
repérant tous les enregistrements jusqu'à ce que l'on trouve celui que l'on désire. On dit alors que
l'accès à l'information est séquentiel. Le temps d'accès est variable selon la position de l'information
recherchée. L'accès peut encore être semi-séquentiel : combinaison des accès direct et séquentiel.
Pour un disque magnétique par exemple l'accès à la piste est direct, puis l'accès au secteur est
séquentiel.
10
3.3 Différents types de mémoire
@7
@6
@5
@4
@3
@2
@1
@0
D7 D5 D3 D1
D6 D4 D2 D0
@7
@6
@5
@4
@3
@2
@1
@0
D7 D5 D3 D1
D6 D4 D2 D0
Avantages :
Cette technique permet une plus grande densité d'intégration, car un point mémoire nécessite
environ quatre fois moins de transistors que dans une mémoire statique. Sa consommation s’en
retrouve donc aussi très réduite.
Inconvénients :
La présence de courants de fuite dans le condensateur contribue à sa décharge. Ainsi,
l’information est perdue si on ne la régénère pas périodiquement (charge du condensateur). Les RAM
dynamiques doivent donc être rafraîchies régulièrement pour entretenir la mémorisation : il s'agit de
lire l'information et de la recharger. Ce rafraîchissement indispensable a plusieurs conséquences :
- il complique la gestion des mémoires dynamiques car il faut tenir compte
des actions de rafraîchissement qui sont prioritaires.
- la durée de ces actions augmente le temps d'accès aux informations.
11
D’autre part, la lecture de l’information est destructive. En effet, elle se fait par décharge de la
capacité du point mémoire lorsque celle-ci est chargée. Donc toute lecture doit être suivie d’une
réécriture.
3.3.1.3 Conclusions
En général les mémoires dynamiques, qui offrent une plus grande densité d'information et un
coût par bit plus faible, sont utilisées pour la mémoire centrale, alors que les mémoires statiques, plus
rapides, sont utilisées lorsque le facteur vitesse est critique, notamment pour des mémoires de petite
taille comme les caches et les registres.
Remarques :
Voici un historique de quelques DRAM qui ont ou sont utilisées dans les PC :
12
3.3.2.1 LA ROM
Elle est programmée par le fabricant et son contenu ne peut plus être ni modifié., ni effacé par
l'utilisateur.
Structure : +V
Programmation :
Avantages : 1 0 0 0
f Densité élevée
données
f Non volatile
f Mémoire rapide
Inconvénients :
f Écriture impossible
f Modification impossible (toute erreur est fatale).
f Délai de fabrication (3 à 6 semaines)
f Obligation de grandes quantités en raison du coût élevé qu'entraîne la production du masque et le
processus de fabrication.
3.3.2.2 La PROM
C’est une ROM qui peut être programmée une seule fois par l'utilisateur (Programmable ROM). La
programmation est réalisée à partir d’un programmateur spécifique.
Structure :
Les liaisons à diodes de la ROM sont remplacées par des fusibles pouvant être détruits ou des
jonctions pouvant être court-circuitées.
Programmation :
Les PROM à fusible sont livrées avec toutes les lignes connectées aux colonnes (0 en chaque
point mémoire). Le processus de programmation consiste donc à programmer les emplacements des
‘’1’’ en générant des impulsions de courants par l’intermédiaire du programmateur ; les fusibles situés
aux points mémoires sélectionnés se retrouvant donc détruits.
Le principe est identique dans les PROM à jonctions sauf que les lignes et les colonnes sont
déconnectées (1 en chaque point mémoire). Le processus de programmation consiste donc à
programmer les emplacements des ‘’0’’ en générant des impulsions de courants par l’intermédiaire du
programmateur ; les jonctions situées aux points mémoires sélectionnés se retrouvant court-circuitées
par effet d’avalanche.
6
13
Avantages :
f idem ROM
f Claquage en quelques minutes
f Coût relativement faible
Inconvénients :
Structure S G D
Avantages :
Inconvénients :
3.3.2.4 L’EEPROM
L’EEPROM (Electically EPROM) est une mémoire programmable et effaçable électriquement.
Elle répond ainsi à l’inconvénient principal de l’EPROM et peut être programmée in situ.
7
14
Structure
Dans une EEPROM, le point mémoire est réalisé à partir d’un transistor SAMOS reprenant le
même principe que le FAMOS sauf que l’épaisseur entre les deux grilles est beaucoup plus faible.
Programmation
Une forte tension électrique appliquée entre grille et source conduit à la programmation de la
mémoire. Une forte tension inverse provoquera la libération des électrons et donc l’effacement de la
mémoire.
Avantages :
Inconvénients :
Structure
Avantages
Flash NOR :
15
Flash NAND :
Inconvénients
Flash NOR :
Flash NAND :
f Ecriture/lecture par octet impossible.
f Interface E/S indirecte
La Flash EPROM a connu un essor très important ces dernières années avec le boom de la
téléphonie portable et des appareils multimédia (PDA, appareil photo numérique, lecteur MP3, etc...).
f capacité
f vitesse
f consommation
f coût
+
1 ns < 400 o
Registre
5 ns 8 ko à 4 Mo suivant
Mémoire cache les niveaux
capacité
vitesse
Mémoire d’appui 2 à 8 Mo
16
Les registres sont les éléments de mémoire les plus rapides. Ils sont situés au niveau du
processeur et servent au stockage des opérandes et des résultats intermédiaires.
La mémoire cache est une mémoire rapide de faible capacité destinée à accélérer l’accès à
la mémoire centrale en stockant les données les plus utilisées.
La mémoire principale est l’organe principal de rangement des informations. Elle contient
les programmes (instructions et données) et est plus lente que les deux mémoires
précédentes.
La mémoire d’appui sert de mémoire intermédiaire entre la mémoire centrale et les
mémoires de masse. Elle joue le même rôle que la mémoire cache.
La mémoire de masse est une mémoire périphérique de grande capacité utilisée pour le
stockage permanent ou la sauvegarde des informations. Elle utilise pour cela des supports
magnétiques (disque dur, ZIP) ou optiques (CDROM, DVDROM).
10
17
ADO TD5. Mémoire - Microprogrammation
I. Mémoire
1. Calculer le temps de propagation
La distance géographique entre la mémoire et le processeur influence-t-elle le temps d’accès à la mémoire ?
Le décodage d’adresse est réalisé par des portes logiques ainsi que deux circuits décodeurs 741HC38 (voir table
de vérité ci-dessous). Les sorties du décodage d’adresse sont les signaux CS1 ou CE qui valident sur niveau bas
les différents circuits mémoires.
. JP : Jumper (cavalier).
. 74HC00 : porte logique NAND ; . 74HC373 : bascule D latch ; . 74LS245 : 8 buffers (amplificateurs)
. MC68HC24 : PRU (Port Replacement Unit) pour le fonctionnement de l’Unité Centrale 68HC11 en mode étendu
. MAX232 est un transciever (adaptateur de niveaux de tension)
. MAX692 : circuit de Reset avec Watchdog (chien de garde de surveillance) intégré.
1. Déterminer les différents blocs fonctionnels sur le schéma :
• L’unité centrale 68HC11 (Bus 16 bits d’adresses : A0 – A15)
• Les mémoires (ROM 27C128 et RAM - circuits 6264)
• Les décodeurs d’adresses (portes logiques et 2 circuits 74HC138)
2. Déterminer la capacité mémoire des circuits U16, U17 et U18.
3. Pour chaque bloc :
ROM
RAM
donner les équations logiques des signaux d’activation.
4. Pour les mêmes blocs, donnez les adresses de début et de fin d’accès en binaire (valeurs des lignes d’adresse
A15 à A0) et en hexadécimal (valeurs de $0000 à $FFFF).
5. Dessinez la carte mémoire (ou plan mémoire ou mapping) du système (adresses des différents blocs dans
l’espace adressable $0000 à $FFFF).
TD5. 1
ADO TD5. Mémoire - Microprogrammation
TD5. 2
ADO TD5. Mémoire - Microprogrammation
II. Machine de Von Neumann : chemin des données (Chemin des données)
On considère une organisation de CPU à 2 bus (bus 1 et bus 2 à la fois bus de données/adresses) représentée par la figure suivante :
bus 1
A
R1 … Rn IR MDR MAR PC SP Y
ALU F
B
bus 2
Registres et ALU :
- R1 à Rn : registres généraux
- IR : registre d’instruction
- MDR : registre de donnée d’échange avec la mémoire
- MAR : registre d’adresse d’échange avec la mémoire
- PC : compteur ordinal
- SP : pointeur de pile
- Y : registre pour mémoriser l’entrée A de l’ALU
- ALU : Unité Arithmétique et Logique
Pour l’ALU, l’entrée A est directement lue sur la sortie du registre Y (aucune opération à effectuer par rapport au registre Y) ; l’entrée B est
lue directement sur le bus 2 ; la sortie F est inscrite directement sur le bus 1 quand une opération est déclenchée.
Pour simplifier, on considère une machine de Von Neumann manipulant des données sur 8 bits et des adresses sur 8 bits.
On s’intéresse à l’exécution de l’instruction suivante : BNZ R4, dep qui teste la valeur du registre R4 et fait un déplacement relatif
si R4 est différent de 0 ; dans le cas contraire, c’est l’instruction suivante qui sera exécutée normalement. Le déplacement dep permet
de se déplacer dans le programme pour faire des boucles par exemple. L’instruction tient sur 2 mots en mémoire. Le 1er mot :
0xDD (correspondant au code opération BNZ R4) et un 2nd mot pour le déplacement relatif dep. Ce dernier est à ajouter au compteur
ordinal pour se déplacer relativement à l’instruction. Par exemple l’instruction BNZ R4, -2 boucle sur elle-même.
Remarque : les déplacements sont obtenus en traduisant les labels (i.e. étiquettes) utilisés dans un programme assembleur et en
fonction de la taille de chaque instruction.
On étudie la situation suivante : une instruction BNZ R4, -5 codée sur les 2 mots 0xDD et 0xFB situés en mémoire aux adresses
respectives 0x03 et 0x04. Le registre R4 vaut 0x02 et on se situe juste avant le traitement de cette instruction (PC = 0x03).
(le préfixe 0x indique une valeur exprimée en Hexadécimal)
TD5. 3
ADO TD5. Mémoire - Microprogrammation
MEMOIRE
@ (adresses) Données
On s’intéresse à l’évolution des données dans cette machine lors du cycle de Chargement-Décodage-
0x00 Exécution (Fetch-Decode-Execute) de cette instruction.
0x01 La mémoire est représentée ci-contre et le tableau ci-dessous montre l’évolution du contenu des
0x02 registres en fonction du micro-programme suivi.
0x03 0xDD On donne le début du micro-programme correspondant au chargement du 1er mot de l’instruction.
0x04 0xFB Les phases de décodage et de test sur R4 ne seront pas représentées.
… …
Les étapes d’exécution de l’instruction, en partant de la ligne 1 du tableau sont les suivantes :
Lignes 2 à 10 :
1) aller chercher le contenu du compteur ordinal (PC)
2) incrémenter le contenu du compteur ordinal (PC)
3) aller chercher en mémoire le 1er mot de l’instruction à exécuter et la placer dans le registre d’instruction IR
Lignes 11 à 16 :
4) incrémenter le contenu du compteur ordinal (PC)
5) aller chercher en mémoire le 2nd octet de l’instruction à exécuter (déplacement dep)
Lignes 17 à 20 :
6) exécuter le calcul du déplacement dep % au contenu (PC) pour fournir l’adresse de branchement
7) affecter le contenu (PC) avec cette valeur
Compléter le tableau suivant (lignes 17 à 20) en ne remplissant dans les cases que les changements de
valeurs. Représenter successivement et dans cet ordre les opérations élémentaires suivantes :
6) l’exécution du calcul de l’adresse de branchement
7) la modification du compteur ordinal pour effectuer le saut
R4 IR MDR MAR PC Y bus 1 Bus 2 micro-instruction Commentaire
0x02 indéfini indéfini indéfini
0x03 indéfini indéfini Indéfini Indéfini Etat initial 1
0x03
PC out (PC) → bus 2 2
0x03 REPB F = (PC) = 0x03 3
0x03 MAR in MAR = 0x03 4
0x04 INCRB F = 0x04 5
0x04 PC in PC = 0x04 6
0xDD Lecture 0xDD → MDR 7
0xDD MDR out (MDR) → bus2 8
0xDD REPB F = (MDR) = 0xDD 9
0xDD IR in IR = 0xDD 10
0x04 PC out (PC) → bus 2 11
0x04 REPB F = (PC) = 0x04 12
0x04 MAR in MAR = 0x04 13
0x05 INCRB F = (PC) + 1 = 0x05 14
0x05 PC in PC = 0x05 15
0xFB Lecture 0xFB → MDR 16
17
18
19
20
▪ Quelle est l’adresse de l’instruction qui suivra l’instruction BNZ R4, -5 dans l’exécution du programme :
▪ Dans le cas où R4 a la valeur 0x00, les étapes 6) et 7) doivent-elles être effectuées ? Pourquoi ?
__________
TD5. 4
ADO TD6. Révision
ADO - TD 6. Révision
On considère le transcodeur du code binaire naturel BCD sur 4 bits DCBA vers le code Excess3 sur 4 bits dcba.
On donne le codage Excess3 :
Le code Excess3 (Excédent 3) est un code issu du code BCD auquel on ajoute systématiquement 3 à chaque chiffre.
Le code Excess3 prend en charge uniquement le codage des chiffres (0 à 9) (l’entrée du transcodeur est toujours comprise entre 0 et 9).
1. Compléter les tableaux de Karnaugh décrivant les variables d,c,b,a du code Excess3.
d BA c BA b BA a BA
DC 00 01 11 10 DC 00 01 11 10 DC 00 01 11 10 DC 00 01 11 10
00 00 00 00
01 01 01 01
11 11 11 11
10 10 10 10
3. La conversion inverse se fait en ajoutant quelle valeur positive v exprimée en décimal (i.e. en base 10) au code Excess3 ?
v=
TD6. 1
ADO TD6. Révision
a3 a2
Compléter la table suivante décrivant les données d 0 à d 3 les plus simples du multiplexeur 4 → 1 :
d0 d1 d2 d3
a3
Compléter la table suivante décrivant les données d 0 à d1 les plus simples du multiplexeur 2 → 1 :
d0 d1
TD6. 2
ADO TD6. Révision
Synthétiser le compteur synchrone 2 bits avec des bascules JK positive edge triggered qui compte dans la séquence :
Q1Q0 Q1Q0
00 01
11 10
en complétant les tables suivantes et le schéma ci-dessous, sous la seule contrainte d’obtenir les équations les plus simples :
J 0 K0 J1
Q1 Q0 0 1 Q 1 Q0 0 1 Q 1 Q0 0 1
0 0 0
1 1 1
K1
Q 1 Q0 0 1
0
1
J 0 = J1 =
K 0 = K1 =
J0 Q0 J1 Q1
K0 Q0 K1 Q1
TD6. 3
ADO TD6. Révision
4. Compteur programmable
On considère un compteur binaire 4 bits synchrone, désigné par CNT. Il dispose de 2 commandes synchrones :
. CE (Count Enable) : Autorisation de comptage
. CLR (Clear) : Reset (Mise à 0) du Compteur
La table de fonctionnement du compteur CNT est la suivante :
Le compteur est initialisé à 0 : Q3Q2 Q1Q0 = 0000 2 = 010 . Q3 est le MSB (bit de plus fort poids). On donne les 4 montages :
Pour chacun des montages, compléter la table suivante décrivant les états S = Q3Q2 Q1Q0 du
compteur exprimés en décimal (i.e. en base 10) en fonction de l’horloge :
Montage I :
Front montant d’horloge Init 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Etat S (en décimal) 0
Montage II :
Front montant d’horloge Init 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Etat S (en décimal) 0
Montage III :
Front montant d’horloge Init 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Etat S (en décimal) 0
Montage IV :
Front montant d’horloge Init 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Etat S (en décimal) 0
TD6. 4
ADO TD6. Révision
5= ( HEXA )
6= ( HEXA )
2. Donner (en Hexadécimal) le codage IEEE754 simple précision de la somme 5 + 6 en flottant. Lors du calcul, y-a-t-il
normalisation ?
3. Donner (en Hexadécimal) le codage IEEE754 simple précision de la multiplication 5 x 6 en flottant. Lors du calcul, y-
a-t-il normalisation ?
TD6. 5
ADO TD6. Révision
bus 1
A
R1 … Rn IR MDR MAR PC SP Y
ALU F
B
bus 2
Registres et ALU :
- R1 à Rn : registres généraux
- IR : registre d’instruction
- MDR : registre de donnée d’échange avec la mémoire
- MAR : registre d’adresse d’échange avec la mémoire
- PC : compteur ordinal
- SP : pointeur de pile
- Y : registre pour mémoriser l’entrée A de l’ALU
- ALU : Unité Arithmétique et Logique
Pour l’ALU, l’entrée A est directement lue sur la sortie du registre Y (aucune opération à effectuer par rapport au registre Y) ; l’entrée B est
lue directement sur le bus 2 ; la sortie F est inscrite directement sur le bus 1 quand une opération est déclenchée.
Pour simplifier, on considère une machine de Von Neumann manipulant des données sur 8 bits et des adresses sur 8 bits. On
s’intéresse à l’exécution de l’instruction suivante : ADD R1 (R2) qui additionne le contenu du registre R1 et la donnée en
mémoire dont l’adresse est contenue dans le registre R2. En fin de traitement de cette instruction, le résultat en sortie de l’ALU est
stocké dans le registre accumulateur R1. L’addition se fait sur des entiers relatifs codés en complément à 2. L’instruction entière
ADD R1 (R2) est codée par le mot 0xFA en mémoire, et est située à l’adresse 0x03 en mémoire. Les registres R1 et R2 ont été
préalablement chargés par le programme avec les valeurs suivantes : R1 contient 0xDD et R2 0xAB. Voici un extrait du contenu de
la mémoire :
(le préfixe 0x indique une valeur exprimée en Hexadécimal)
TD6. 6
ADO TD6. Révision
On s’intéresse à l’évolution des données dans cette machine lors du cycle de Chargement-Décodage-
0x00 Exécution (Fetch-Decode-Execute) de cette instruction (la partie décodage de l’instruction n’est pas ici
0x01 traitée, elle est supposée réalisée à la ligne 10 du tableau ci-dessous). On donne le début du micro-
programme qui commence par aller chercher l’opérande (R2) avant d’aller ensuite chercher l’opérande
0x02 R1 pour enfin exécuter l’instruction d’addition.
0x03 0xFA
Compléter le tableau suivant à partir de la ligne 12 et jusqu’à l’écriture du résultat de l’addition dans le
0x04 … registre R1 en ne remplissant dans les cases que les changements de valeurs comme cela est fait pour
… les lignes précédentes. Les premières lignes déjà remplies correspondent au début de l’exécution du
micro-programme :
0xAB 0x27
… …
TD6. 7
ADO TD6. Révision
On considère un processeur avec un pipeline à 8 étages possédant un temps de cycle de 0.5 ns . Les
étages 6 et 7 du pipeline sont consacrés à l’accès (lecture/écriture) à la mémoire cache de données.
1. Quel est le nombre maximal d’instructions qui peuvent s’exécuter simultanément dans ce
processeur ?
instructions simultanées
instructions / seconde
3. Quelle doit être la valeur maximale du temps d’accès au cache en cas de succès (cache-hits) ?
TD6. 8
ADO TD6. Révision
Pipeline P2
On considère une version modifiée du pipeline d’instructions P1 comme représenté ci-dessous (pipeline P2), c’est-à-dire en
déplaçant l’étage d’exécution de l’étage 4 à l’étage 6. Le calcul d’adresse continue à se faire à l’étage 4 :
étage pipeline P2
1 lit cache d’instructions
2 decode instruction
3 lit registres
4 calcul adresse
5 Acces cache de donnees
6 execute / acces cache de donnees
7 ecrit registre
2 bulles sont insérées dans le pipeline P2 si l’instruction immédiatement avant un LOAD/STORE met à jour un opérande du
LOAD/STORE.
I. Pipeline P1
On s’intéresse dans cette 1ère partie au pipeline P1.
On considère le programme ci-dessous écrit dans un assembleur donné, qui calcule la somme des N éléments d’un tableau contenant
des entiers. Le registre R4 est initialisé avec N, le registre R1 est initialisé avec l’adresse A du 1er élément du tableau et le registre
R3 contenant en fin d’exécution le résultat de la somme est initialisé à 0. Les éléments du tableau sont stockés sur 2 octets. Enfin, le
calcul de la somme est interrompu si celle-ci égale une valeur seuil donnée. Le registre R6 est initialisé avec ce seuil :
1: boucle: R2 = LOAD R1+0 // lit element du tableau
2: R4 = R4 SUB 1 // R4 = R4 - 1
3: R3 = R3 ADD R2 // ajoute a la somme
4: R7 = R3 SUB R6 // R7 = R3 - R6
5: BZ R7, fin // BZ (Branch Zero) : saut à l’étiquette fin si R7 = 0
6: R1 = R1 ADD 2 // R1 = R1 + 2
7: BNZ R4, boucle // BNZ (Branch Not Zero) : boucle si R4 ≠ 0
8: fin: … // fin de traitement
TD6. 9
ADO TD6. Révision
1. En supposant N grand et en partant d’une configuration où le calcul de la somme n’est pas interrompu, quel est le débit
d’exécution de la boucle de programme en instructions par cycle ?
instructions / cycle
instructions / cycle
II. Pipeline P2
On s’intéresse dans cette 2nde partie au pipeline P2.
Mêmes questions pour le pipeline P2 que pour le pipeline P1 :
1.
instructions / cycle
2.
instructions / cycle
_________
TD6. 10