Systemes Numeriques
Numeration - Logique Combinatoire - Logique Sequentielle
S01 : Traitement Numerique de l'Information
Chapitre 1 : Systemes de Numeration
Binaire, Octal, Decimal, Hexadecimal
🎯 Objectifs du chapitre
- Comprendre les differentes bases de numeration
- Representer les nombres dans chaque base
- Connaitre les prefixes et notations
- Compter dans les differentes bases
1.1 Definition d'un Systeme de Numeration
1.2 Les Quatre Bases Principales
| Base | Nom | Symboles | Prefixe C | Usage |
|---|---|---|---|---|
| 2 | Binaire | 0, 1 | 0b | Circuits numeriques |
| 8 | Octal | 0-7 | 0 | Unix (permissions) |
| 10 | Decimal | 0-9 | aucun | Usage courant |
| 16 | Hexadecimal | 0-9, A-F | 0x | Adresses memoire |
Correspondance Hexadecimal
| Hex | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Dec | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| Bin | 0000 | 0001 | 0010 | 0011 | 0100 | 0101 | 0110 | 0111 | 1000 | 1001 | 1010 | 1011 | 1100 | 1101 | 1110 | 1111 |
1.3 Comptage en Binaire
COMPTAGE BINAIRE SUR 4 BITS
Decimal │ Binaire │ Hex Decimal │ Binaire │ Hex
────────┼─────────┼───── ────────┼─────────┼─────
0 │ 0000 │ 0 8 │ 1000 │ 8
1 │ 0001 │ 1 9 │ 1001 │ 9
2 │ 0010 │ 2 10 │ 1010 │ A
3 │ 0011 │ 3 11 │ 1011 │ B
4 │ 0100 │ 4 12 │ 1100 │ C
5 │ 0101 │ 5 13 │ 1101 │ D
6 │ 0110 │ 6 14 │ 1110 │ E
7 │ 0111 │ 7 15 │ 1111 │ F
Avec n bits, on peut representer 2ⁿ valeurs (de 0 a 2ⁿ-1)
4 bits → 16 valeurs (0 a 15)
8 bits → 256 valeurs (0 a 255)
1.4 Poids des Bits
POIDS DES BITS (exemple: 10110101₂ = 181₁₀)
Position: 7 6 5 4 3 2 1 0
Bit: 1 0 1 1 0 1 0 1
Poids: 128 64 32 16 8 4 2 1
│ │ │ │ │
└─────────┼────┼─────────┼─────────┤
│ │ │ │
Valeur: 128 + 0 + 32 + 16 + 0 + 4 + 0 + 1 = 181
MSB = Most Significant Bit (bit de poids fort) = position 7
LSB = Least Significant Bit (bit de poids faible) = position 0
Chapitre 2 : Conversions entre Bases
Methodes de conversion
2.1 Decimal → Binaire (Divisions successives)
METHODE DES DIVISIONS PAR 2
Exemple : Convertir 45₁₀ en binaire
45 ÷ 2 = 22 reste 1 ←─┐
22 ÷ 2 = 11 reste 0 │
11 ÷ 2 = 5 reste 1 │ Lire les restes
5 ÷ 2 = 2 reste 1 │ de bas en haut
2 ÷ 2 = 1 reste 0 │
1 ÷ 2 = 0 reste 1 ←─┘
Resultat : 45₁₀ = 101101₂
Verification : 32 + 8 + 4 + 1 = 45 ✓
2.2 Binaire → Decimal (Addition des poids)
METHODE DES POIDS
Exemple : Convertir 11010110₂ en decimal
Position: 7 6 5 4 3 2 1 0
Bit: 1 1 0 1 0 1 1 0
Poids: 128 64 32 16 8 4 2 1
Calcul : 128 + 64 + 0 + 16 + 0 + 4 + 2 + 0
= 128 + 64 + 16 + 4 + 2
= 214
Resultat : 11010110₂ = 214₁₀
2.3 Binaire ↔ Hexadecimal (Groupes de 4 bits)
BINAIRE → HEXADECIMAL
Grouper par 4 bits depuis la droite, puis convertir chaque groupe
Exemple : 10111010₂ → Hex
1011 1010
↓ ↓
B A
Resultat : 10111010₂ = BA₁₆ = 0xBA
HEXADECIMAL → BINAIRE
Remplacer chaque chiffre hex par ses 4 bits
Exemple : 3F₁₆ → Binaire
3 F
↓ ↓
0011 1111
Resultat : 3F₁₆ = 00111111₂
2.4 Tableau Recapitulatif des Conversions
| Decimal | Binaire | Octal | Hexadecimal |
|---|---|---|---|
| 0 | 0000 0000 | 000 | 00 |
| 10 | 0000 1010 | 012 | 0A |
| 25 | 0001 1001 | 031 | 19 |
| 100 | 0110 0100 | 144 | 64 |
| 127 | 0111 1111 | 177 | 7F |
| 255 | 1111 1111 | 377 | FF |
Chapitre 3 : Codes Binaires Speciaux
Nombres signes, reels, caracteres
3.1 Nombres Signes : Complement a 2
Calcul du Complement a 2
METHODE : Inverser tous les bits + ajouter 1
Exemple : Representer -45 sur 8 bits
1. Ecrire +45 en binaire : 00101101
2. Inverser tous les bits : 11010010 (complement a 1)
3. Ajouter 1 : 11010010
+ 1
──────────
11010011 (complement a 2)
Resultat : -45₁₀ = 11010011₂ (en complement a 2)
PLAGE SUR 8 BITS :
01111111 = +127 (maximum positif)
00000001 = +1
00000000 = 0
11111111 = -1
10000000 = -128 (minimum negatif)
| Bits | Non signe | Signe (C2) |
|---|---|---|
| 8 | 0 a 255 | -128 a +127 |
| 16 | 0 a 65 535 | -32 768 a +32 767 |
| 32 | 0 a 4 294 967 295 | -2 147 483 648 a +2 147 483 647 |
3.2 Nombres Reels : Virgule Flottante (IEEE 754)
FORMAT IEEE 754 SIMPLE PRECISION (32 bits)
┌───┬─────────────────┬─────────────────────────────────────┐
│ S │ Exposant │ Mantisse │
│ 1 │ 8 bits │ 23 bits │
└───┴─────────────────┴─────────────────────────────────────┘
31 30 23 22 0
S = Signe (0 = positif, 1 = negatif)
Exposant = Exposant biaise (biais = 127)
Mantisse = Partie fractionnaire (1.xxxxx implicite)
Valeur = (-1)^S × 1.Mantisse × 2^(Exposant - 127)
Exemple : 5.75₁₀
5.75 = 101.11₂ = 1.0111 × 2²
S = 0 (positif)
Exposant = 2 + 127 = 129 = 10000001₂
Mantisse = 01110000000000000000000
Resultat : 0 10000001 01110000000000000000000
3.3 Codes Caracteres : ASCII et Unicode
| Caractere | ASCII (Dec) | ASCII (Hex) | Binaire |
|---|---|---|---|
| '0' | 48 | 0x30 | 0011 0000 |
| '9' | 57 | 0x39 | 0011 1001 |
| 'A' | 65 | 0x41 | 0100 0001 |
| 'Z' | 90 | 0x5A | 0101 1010 |
| 'a' | 97 | 0x61 | 0110 0001 |
| 'z' | 122 | 0x7A | 0111 1010 |
| Espace | 32 | 0x20 | 0010 0000 |
- Majuscule → Minuscule : ajouter 32 (ou mettre bit 5 a 1)
- Chiffre '0'-'9' : soustraire 48 pour obtenir la valeur
3.4 Code BCD (Binary Coded Decimal)
CODE BCD : Chaque chiffre decimal code sur 4 bits
Exemple : 259₁₀ en BCD
2 5 9
↓ ↓ ↓
0010 0101 1001
BCD : 0010 0101 1001
DIFFERENCE BCD vs BINAIRE :
Nombre │ BCD │ Binaire
─────────┼─────────────────┼──────────────
25 │ 0010 0101 │ 0001 1001
99 │ 1001 1001 │ 0110 0011
BCD : Utile pour afficheurs 7 segments
Chapitre 4 : Algebre de Boole
Operateurs et theoremes fondamentaux
4.1 Operateurs Logiques de Base
ET (AND)
S = A · B
S = 1 si A=1 ET B=1
OU (OR)
S = A + B
S = 1 si A=1 OU B=1
NON (NOT)
S = Ā
S = inverse de A
Tables de Verite
| ET (AND) | ||
|---|---|---|
| A | B | A·B |
| 0 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 1 |
| OU (OR) | ||
|---|---|---|
| A | B | A+B |
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 1 |
| XOR | ||
|---|---|---|
| A | B | A⊕B |
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
4.2 Operateurs Complementaires
| NAND (NON-ET) | ||
|---|---|---|
| A | B | A↑B |
| 0 | 0 | 1 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
| NOR (NON-OU) | ||
|---|---|---|
| A | B | A↓B |
| 0 | 0 | 1 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 0 |
4.3 Theoremes de l'Algebre de Boole
| Propriete | Forme ET | Forme OU |
|---|---|---|
| Identite | A · 1 = A | A + 0 = A |
| Element nul | A · 0 = 0 | A + 1 = 1 |
| Idempotence | A · A = A | A + A = A |
| Complementation | A · Ā = 0 | A + Ā = 1 |
| Involution | A̿ = A | |
| Commutativite | A · B = B · A | A + B = B + A |
| Associativite | (A·B)·C = A·(B·C) | (A+B)+C = A+(B+C) |
| Distributivite | A·(B+C) = A·B + A·C | A+(B·C) = (A+B)·(A+C) |
| Absorption | A·(A+B) = A | A + A·B = A |
4.4 Theoremes de De Morgan
APPLICATION DE DE MORGAN
Pour simplifier : F = (A·B)̄ + C̄
Etape 1 : Appliquer De Morgan sur (A·B)̄
(A·B)̄ = Ā + B̄
Donc : F = Ā + B̄ + C̄
Pour transformer en NAND uniquement :
F = A·B + C
En NAND :
F = ((A·B)̄ · C̄)̄
Schema : NAND(NAND(A,B), NAND(C,C))
Chapitre 5 : Tableaux de Karnaugh
Simplification graphique des fonctions logiques
5.1 Principe du Tableau de Karnaugh
Construction pour 2, 3 et 4 variables
KARNAUGH 2 VARIABLES KARNAUGH 3 VARIABLES
B BC
0 1 00 01 11 10
┌─────┬─────┐ ┌─────┬─────┬─────┬─────┐
0 │ │ │ 0 │ │ │ │ │
A ├─────┼─────┤ A ├─────┼─────┼─────┼─────┤
1 │ │ │ 1 │ │ │ │ │
└─────┴─────┘ └─────┴─────┴─────┴─────┘
KARNAUGH 4 VARIABLES
CD
00 01 11 10
┌─────┬─────┬─────┬─────┐
00 │ │ │ │ │
├─────┼─────┼─────┼─────┤
01 │ │ │ │ │
AB ├─────┼─────┼─────┼─────┤
11 │ │ │ │ │
├─────┼─────┼─────┼─────┤
10 │ │ │ │ │
└─────┴─────┴─────┴─────┘
NOTE : Les lignes et colonnes utilisent le CODE GRAY
(00, 01, 11, 10) pour que les cases adjacentes
ne different que d'un bit !
5.2 Regles de Regroupement
- Groupes de 2n : 1, 2, 4, 8, 16 cases
- Adjacence : Horizontale, verticale, ou par "repliement" (bords)
- Recouvrement : Une case peut appartenir a plusieurs groupes
- Maximiser : Faire les plus grands groupes possibles
- Minimiser : Utiliser le moins de groupes possible
5.3 Exemple Complet
SIMPLIFICATION PAR KARNAUGH
Table de verite :
A B C │ S
──────┼───
0 0 0 │ 1
0 0 1 │ 0
0 1 0 │ 1
0 1 1 │ 1
1 0 0 │ 1
1 0 1 │ 0
1 1 0 │ 1
1 1 1 │ 1
Tableau de Karnaugh :
BC
00 01 11 10
┌─────┬─────┬─────┬─────┐
0 │ 1 │ 0 │ 1 │ 1 │
A ├─────┼─────┼─────┼─────┤
1 │ 1 │ 0 │ 1 │ 1 │
└─────┴─────┴─────┴─────┘
Groupements :
- Colonne 00 (4 cases) : /C (B et A elimes car ils varient)
- Rectangle 11 et 10 (4 cases) : B
Resultat : S = C̄ + B
Verification : Sans simplification S aurait 6 termes !
5.4 Karnaugh 4 Variables - Exemple
EXEMPLE 4 VARIABLES : F(A,B,C,D) = Σm(0,2,5,7,8,10,13,15)
CD
00 01 11 10
┌─────┬─────┬─────┬─────┐
00 │ 1 │ 0 │ 0 │ 1 │ Groupe Rouge : coins
├─────┼─────┼─────┼─────┤ (cases 0,2,8,10) → B̄D̄
01 │ 0 │ 1 │ 1 │ 0 │
AB ├─────┼─────┼─────┼─────┤ Groupe Vert : colonne 01,11
11 │ 0 │ 1 │ 1 │ 0 │ (cases 5,7,13,15) → BD
├─────┼─────┼─────┼─────┤
10 │ 1 │ 0 │ 0 │ 1 │
└─────┴─────┴─────┴─────┘
F = B̄D̄ + BD = B ⊕ D̄ (ou B XNOR D)
Simplification de 8 termes a 2 termes !
Chapitre 6 : Portes Logiques
Symboles et circuits integres
6.1 Symboles des Portes Logiques
SYMBOLES IEC / ANSI DES PORTES LOGIQUES
AND (ET) OR (OU) NOT (NON)
A ──┬──┐ A ──┬──╲ A ────┬──o── S
B ──┴──┼── S B ──┴──╱── S │
│ └──
NAND NOR XOR
A ──┬──┐ A ──┬──╲ A ──┬──╲═╲
B ──┴──┼─o─ S B ──┴──╱─o─ S B ──┴──╱═╱── S
│
REPRESENTATION SIMPLIFIEE (rectangles IEC)
┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐
│ & │ │ ≥1 │ │ 1 │ │ =1 │
└─────┘ └─────┘ └─────┘ └─────┘
AND OR NOT/XOR XOR
Avec cercle en sortie = fonction inversee (NAND, NOR)
6.2 Circuits Integres TTL/CMOS
| Reference | Fonction | Portes | Entrees |
|---|---|---|---|
74LS00 | NAND | 4 | 2 |
74LS02 | NOR | 4 | 2 |
74LS04 | NOT | 6 | 1 |
74LS08 | AND | 4 | 2 |
74LS32 | OR | 4 | 2 |
74LS86 | XOR | 4 | 2 |
74LS10 | NAND | 3 | 3 |
74LS20 | NAND | 2 | 4 |
- 74xx : TTL standard (5V)
- 74LSxx : TTL Low-Power Schottky
- 74HCxx : CMOS haute vitesse
- 74HCTxx : CMOS compatible TTL
Chapitre 7 : Circuits Combinatoires
Decodeurs, multiplexeurs, additionneurs
7.1 Decodeur (Decoder)
DECODEUR 2 VERS 4 (74LS139)
A B │ Y0 Y1 Y2 Y3 ┌──────────────┐
─────┼──────────────── A ──┤ ├── Y0
0 0 │ 1 0 0 0 B ──┤ DECODEUR ├── Y1
0 1 │ 0 1 0 0 │ 2 → 4 ├── Y2
1 0 │ 0 0 1 0 │ ├── Y3
1 1 │ 0 0 0 1 └──────────────┘
Equations :
Y0 = Ā · B̄
Y1 = Ā · B
Y2 = A · B̄
Y3 = A · B
DECODEUR 3 VERS 8 (74LS138)
Entrees : A, B, C (+ Enable G1, /G2A, /G2B)
Sorties : Y0 a Y7 (actives a l'etat bas)
Utilise pour le decodage d'adresses memoire
7.2 Encodeur (Encoder)
ENCODEUR PRIORITAIRE 8 VERS 3 (74LS148)
Fonction inverse du decodeur :
- 8 entrees (I0 a I7)
- 3 sorties binaires (A2, A1, A0)
- Encode la position de l'entree active
I7 I6 I5 I4 I3 I2 I1 I0 │ A2 A1 A0
────────────────────────┼──────────
0 X X X X X X X │ 1 1 1 (7)
1 0 X X X X X X │ 1 1 0 (6)
1 1 0 X X X X X │ 1 0 1 (5)
...
Priorite : I7 est la plus prioritaire
7.3 Multiplexeur (MUX)
MULTIPLEXEUR 4 VERS 1 (74LS153)
┌───────────────┐
D0 ────────────────────────┤ │
D1 ────────────────────────┤ MUX │
D2 ────────────────────────┤ 4 → 1 ├──── Y
D3 ────────────────────────┤ │
├───────────────┤
S1 ────────────────────────┤ SEL │
S0 ────────────────────────┤ │
└───────────────┘
Table de fonctionnement :
S1 S0 │ Y
──────┼────
0 0 │ D0
0 1 │ D1
1 0 │ D2
1 1 │ D3
Equation : Y = D0·S̄1·S̄0 + D1·S̄1·S0 + D2·S1·S̄0 + D3·S1·S0
UTILISATION COMME GENERATEUR DE FONCTION
Un MUX 4→1 peut implementer n'importe quelle fonction de 2 variables
en connectant 0, 1, ou les entrees aux entrees donnees.
7.4 Demultiplexeur (DEMUX)
DEMULTIPLEXEUR 1 VERS 4
Fonction inverse du MUX :
- 1 entree de donnees (D)
- 2 entrees de selection (S1, S0)
- 4 sorties (Y0, Y1, Y2, Y3)
L'entree D est routee vers la sortie selectionnee
S1 S0 │ Y0 Y1 Y2 Y3
──────┼──────────────────
0 0 │ D 0 0 0
0 1 │ 0 D 0 0
1 0 │ 0 0 D 0
1 1 │ 0 0 0 D
Note : Un decodeur avec Enable peut servir de DEMUX
(l'Enable devient l'entree de donnees)
7.5 Additionneur
Demi-Additionneur (Half Adder)
DEMI-ADDITIONNEUR
Additionne 2 bits sans retenue entrante
A B │ S Cout S = A ⊕ B (XOR)
──────┼───────── Cout = A · B (AND)
0 0 │ 0 0
0 1 │ 1 0 ┌─────────────┐
1 0 │ 1 0 A ──┤ HALF ├── S
1 1 │ 0 1 B ──┤ ADDER ├── Cout
└─────────────┘
Additionneur Complet (Full Adder)
ADDITIONNEUR COMPLET
Additionne 2 bits + retenue entrante
A B Cin │ S Cout
───────────┼─────────
0 0 0 │ 0 0
0 0 1 │ 1 0
0 1 0 │ 1 0
0 1 1 │ 0 1
1 0 0 │ 1 0
1 0 1 │ 0 1
1 1 0 │ 0 1
1 1 1 │ 1 1
S = A ⊕ B ⊕ Cin
Cout = A·B + Cin·(A ⊕ B)
ADDITIONNEUR 4 BITS (74LS283)
A3 B3 A2 B2 A1 B1 A0 B0
│ │ │ │ │ │ │ │
┌┴──┴┐ ┌┴──┴┐ ┌┴──┴┐ ┌┴──┴┐
C4 ──┤ FA ├──┤ FA ├──┤ FA ├──┤ FA ├── C0 (=0)
└─┬──┘ └─┬──┘ └─┬──┘ └─┬──┘
S3 S2 S1 S0
Resultat : S = A + B (addition binaire)
7.6 Comparateur
COMPARATEUR 4 BITS (74LS85)
┌─────────────────┐
A3-A0 ─────────┤ ├── A > B
B3-B0 ─────────┤ COMPARATEUR ├── A = B
│ ├── A < B
Cascade in ────┤ │
└─────────────────┘
Comparaison bit a bit de A et B
Equation pour 1 bit :
- A > B : A · B̄
- A = B : A ⊙ B (XNOR)
- A < B : Ā · B
Pour n bits : chainage en cascade possible
Chapitre 8 : Bascules (Flip-Flops)
RS, D, JK - Logique sequentielle
🎯 Objectifs du chapitre
- Distinguer logique combinatoire et sequentielle
- Comprendre le fonctionnement des bascules
- Maitriser les tables caracteristiques
- Dessiner des chronogrammes
8.1 Combinatoire vs Sequentielle
Combinatoire
Sortie = f(entrees actuelles)
Pas de memoire
Ex: portes, MUX, decodeur
Sequentielle
Sortie = f(entrees + etat precedent)
Memoire (bascules)
Ex: compteurs, registres
8.2 Bascule RS (Set-Reset)
BASCULE RS A PORTES NOR
R ────┬───[≥1]────┬─── Q
│ │
└─────×─────┘
│
┌─────×─────┐
│ │
S ────┴───[≥1]────┴─── Q̄
TABLE DE VERITE
S R │ Q(t+1) │ Commentaire
──────┼─────────┼─────────────────
0 0 │ Q(t) │ Memorisation
0 1 │ 0 │ Reset (RAZ)
1 0 │ 1 │ Set (mise a 1)
1 1 │ ? │ INTERDIT
Equation caracteristique : Q(t+1) = S + R̄·Q(t)
Condition : S·R = 0 (jamais S=R=1 simultanement)
8.3 Bascule D (Data/Delay)
BASCULE D (sur front montant)
┌───────────┐
D ───┤ ├─── Q
│ D │
CLK ─┤ > ├─── Q̄
│ │
└───────────┘
TABLE DE VERITE (front montant ↑)
CLK │ D │ Q(t+1)
─────┼───┼────────
↑ │ 0 │ 0
↑ │ 1 │ 1
autre│ X │ Q(t) (memorisation)
Equation : Q(t+1) = D
La sortie Q "copie" l'entree D au moment du front d'horloge.
C'est la bascule la plus utilisee en pratique.
Chronogramme
CHRONOGRAMME BASCULE D
CLK ──┐ ┌──┐ ┌──┐ ┌──┐ ┌──┐ ┌──
└──┘ └──┘ └──┘ └──┘ └──┘
↑ ↑ ↑ ↑ ↑
D ────┐ ┌───────────┐
└─────┘ └────────
Q ─────────┐ ┌───────────┐
└─────┘ └───
Q change UNIQUEMENT sur les fronts montants (↑)
Q prend la valeur de D juste AVANT le front
8.4 Bascule JK
BASCULE JK (sur front montant)
┌───────────┐
J ───┤ ├─── Q
│ JK │
K ───┤ > ├─── Q̄
│ │
CLK ─┤ │
└───────────┘
TABLE DE VERITE (front montant ↑)
J K │ Q(t+1) │ Mode
──────┼─────────┼────────────
0 0 │ Q(t) │ Memorisation
0 1 │ 0 │ Reset
1 0 │ 1 │ Set
1 1 │ Q̄(t) │ Toggle (basculement)
Equation caracteristique : Q(t+1) = J·Q̄(t) + K̄·Q(t)
Avantage : PAS D'ETAT INTERDIT (J=K=1 = toggle)
La bascule JK est la plus "complete"
8.5 Bascule T (Toggle)
BASCULE T
Cas particulier de JK avec J = K = T
T │ Q(t+1) │ Mode
───┼─────────┼────────────
0 │ Q(t) │ Memorisation
1 │ Q̄(t) │ Toggle
Equation : Q(t+1) = T ⊕ Q(t)
Application : Diviseur de frequence par 2
Si T = 1 en permanence, Q change a chaque front
→ Frequence de Q = Frequence CLK / 2
8.6 Entrees Asynchrones
BASCULE D AVEC PRESET ET CLEAR
/PRE
│
┌──────┴──────┐
D ───┤ ├─── Q
│ D │
CLK ─┤ > ├─── Q̄
│ │
└──────┬──────┘
│
/CLR
/PRE et /CLR sont ASYNCHRONES (independants de CLK)
Actifs a l'etat BAS (active low)
/PRE │ /CLR │ Effet
─────┼──────┼─────────────────
0 │ 1 │ Q = 1 (force)
1 │ 0 │ Q = 0 (force)
1 │ 1 │ Fonctionnement normal
0 │ 0 │ INTERDIT
Chapitre 9 : Registres
Stockage et decalage de donnees
9.1 Registre Parallele
REGISTRE 4 BITS PARALLELE (PIPO)
D3 D2 D1 D0 (entrees paralleles)
│ │ │ │
▼ ▼ ▼ ▼
┌─┴─┐ ┌─┴─┐ ┌─┴─┐ ┌─┴─┐
│ D │ │ D │ │ D │ │ D │
│ > │ │ > │ │ > │ │ > │
└─┬─┘ └─┬─┘ └─┬─┘ └─┬─┘
│ │ │ │
└────────┴────────┴────────┴────── CLK
│ │ │ │
▼ ▼ ▼ ▼
Q3 Q2 Q1 Q0 (sorties paralleles)
Au front d'horloge : Q ← D (les 4 bits simultanement)
Circuit : 74LS175 (4 bascules D), 74LS374 (8 bascules D)
9.2 Registre a Decalage
SISO
Serial In, Serial Out
Ligne a retard
SIPO
Serial In, Parallel Out
Conversion serie→parallele
PISO
Parallel In, Serial Out
Conversion parallele→serie
PIPO
Parallel In, Parallel Out
Stockage (registre simple)
9.3 Registre SIPO
REGISTRE A DECALAGE SIPO 4 BITS
Din ──▶┌───┐ ┌───┐ ┌───┐ ┌───┐
│ D │───▶│ D │───▶│ D │───▶│ D │
│ > │ │ > │ │ > │ │ > │
└─┬─┘ └─┬─┘ └─┬─┘ └─┬─┘
│ │ │ │
CLK ─────┴────────┴────────┴────────┘
│ │ │ │
Q3 Q2 Q1 Q0
CHRONOGRAMME (entree serie : 1011)
CLK ─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─
└─┘ └─┘ └─┘ └─┘ └─┘
Din ─1───0───1───1──────────
Q3 ─0───1───0───1───1──────
Q2 ─0───0───1───0───1──────
Q1 ─0───0───0───1───0──────
Q0 ─0───0───0───0───1──────
Apres 4 CLK : Q3Q2Q1Q0 = 1011 (donnee serie convertie en parallele)
Circuit : 74HC595 (SIPO 8 bits avec latch), tres utilise !
9.4 Applications des Registres a Decalage
- Communication serie : UART, SPI, I²C
- Extension d'E/S : 74HC595 pour piloter des LEDs, afficheurs
- Multiplication/Division par 2 : Decalage a gauche/droite
- Ligne a retard : Retarder un signal de n coups d'horloge
- Generateur pseudo-aleatoire : LFSR (Linear Feedback Shift Register)
Decalage a droite = division par 2
Exemple : 0011 (3) decale a gauche → 0110 (6)
Chapitre 10 : Compteurs
Asynchrones et synchrones
10.1 Compteur Asynchrone (Ripple Counter)
COMPTEUR ASYNCHRONE 4 BITS
CLK ──▶┌───┐ ┌───┐ ┌───┐ ┌───┐
│ T │ │ T │ │ T │ │ T │
│ │───▶│ │───▶│ │───▶│ │
└─┬─┘ └─┬─┘ └─┬─┘ └─┬─┘
│ │ │ │
Q0 Q1 Q2 Q3
(LSB) (MSB)
Chaque bascule T divise la frequence par 2
Q0 change a chaque front de CLK
Q1 change a chaque front de Q0
etc.
INCONVENIENT : Temps de propagation cumule
Les bits ne changent pas exactement au meme moment
→ Etats transitoires (glitches)
Circuit : 74LS93 (compteur asynchrone 4 bits)
10.2 Compteur Synchrone
COMPTEUR SYNCHRONE 4 BITS (avec bascules JK)
Equations pour chaque bascule :
Q0 : J0 = K0 = 1 (toggle toujours)
Q1 : J1 = K1 = Q0 (toggle si Q0=1)
Q2 : J2 = K2 = Q0·Q1 (toggle si Q0=Q1=1)
Q3 : J3 = K3 = Q0·Q1·Q2 (toggle si Q0=Q1=Q2=1)
TOUTES les bascules recoivent le meme CLK !
CHRONOGRAMME
CLK ─┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌
└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘
Q0 ─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌
└─┘ └─┘ └─┘ └─┘ └─┘ └─┘ └─┘ └─┘
Q1 ───┐ ┌───┐ ┌───┐ ┌───┐ ┌
└───┘ └───┘ └───┘ └───┘
Q2 ───────┐ ┌───────┐ ┌
└───────┘ └───────┘
Q3 ───────────────┐ ┌
└───────────────┘
Compte: 0 1 2 3 4 5 6 7 8 9 A B C D E F 0...
Circuits : 74LS161, 74LS163 (compteurs synchrones 4 bits)
10.3 Compteur Modulo N
COMPTEUR MODULO 10 (DECADE / BCD)
Compte de 0 a 9 (0000 a 1001) puis revient a 0
Methode : Detecter l'etat 1010 (10) et forcer RESET
Q3 ──┐
Q1 ──┼──[&]──▶ RESET
│
Si Q3=1 ET Q1=1 (etat 1010), alors RESET
Alternative : Utiliser un compteur avec chargement
et detecter 9 pour charger 0
COMPTEUR MODULO N QUELCONQUE
Pour modulo 6 (0 a 5) : detecter 110 (6)
RESET = Q2 · Q1
Circuit dedie : 74LS90 (compteur decade)
10.4 Compteur/Decompteur
COMPTEUR/DECOMPTEUR (UP/DOWN COUNTER)
Signal UP//DOWN controle le sens de comptage
UP//DOWN = 1 : Comptage (0, 1, 2, 3, ...)
UP//DOWN = 0 : Decomptage (F, E, D, C, ...)
Circuit : 74LS191 (compteur/decompteur synchrone 4 bits)
Entrees :
- CLK : Horloge
- UP//DOWN : Sens de comptage
- LOAD : Chargement parallele
- EN : Enable
Sorties :
- Q0-Q3 : Valeur du compteur
- RCO : Ripple Carry Out (retenue)
- MAX/MIN : Indicateur de fin de comptage
10.5 Tableau Recapitulatif des Compteurs
| Circuit | Type | Bits | Modulo | Caracteristiques |
|---|---|---|---|---|
| 74LS90 | Async | 4 | 10 | Decade (BCD) |
| 74LS93 | Async | 4 | 16 | Binaire |
| 74LS161 | Sync | 4 | 16 | Clear async |
| 74LS163 | Sync | 4 | 16 | Clear sync |
| 74LS191 | Sync | 4 | 16 | Up/Down |
| 74LS193 | Sync | 4 | 16 | Up/Down, 2 CLK |
Chapitre 11 : FPGA et CPLD
Circuits logiques programmables
11.1 Evolution des Circuits Programmables
EVOLUTION DES PLD (Programmable Logic Device)
Annees Circuit Capacite Caracteristiques
────────────────────────────────────────────────────────
1970s PAL/PLA ~100 portes Fusibles, OTP
1980s GAL ~100 portes Reprogrammable
1990s CPLD ~10k portes Architecture fixe
2000s+ FPGA ~1M+ portes Architecture flexible
PLD → CPLD → FPGA
Complexite croissante ───────────────────────────▶
Flexibilite croissante ─────────────────────────▶
11.2 CPLD (Complex PLD)
ARCHITECTURE CPLD
┌─────────────────────────────────────────────────────┐
│ │
│ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ │
│ │Macrocell│ │Macrocell│ │Macrocell│ │Macrocell│ │
│ │ LAB │ │ LAB │ │ LAB │ │ LAB │ │
│ └────┬───┘ └────┬───┘ └────┬───┘ └────┬───┘ │
│ │ │ │ │ │
│ └───────────┼───────────┼───────────┘ │
│ │ │ │
│ ══════════╪═══════════╪══════════ │
│ │ │ │
│ MATRICE D'INTERCONNEXION │
│ (Programmable Interconnect) │
│ │
│ ┌──┐ ┌──┐ ┌──┐ ┌──┐ ┌──┐ ┌──┐ ┌──┐ ┌──┐ │
│ │I/O│I/O│I/O│I/O│I/O│I/O│I/O│I/O│ │
│ └──┘ └──┘ └──┘ └──┘ └──┘ └──┘ └──┘ └──┘ │
└─────────────────────────────────────────────────────┘
Avantages :
- Temps de propagation deterministe
- Non volatile (Flash/EEPROM)
- Demarrage instantane
Exemples : Xilinx CoolRunner, Altera MAX II
11.3 FPGA (Field Programmable Gate Array)
ARCHITECTURE FPGA
┌─────────────────────────────────────────────────────────┐
│ I/O I/O I/O I/O I/O I/O I/O I/O │
│ │ │ │ │ │ │ │ │ │
│ ┌─┴─┐ ┌─┴─┐ ┌─┴─┐ ┌─┴─┐ ┌─┴─┐ ┌─┴─┐ ┌─┴─┐ ┌─┴─┐ │
│ │CLB│═│CLB│═│CLB│═│CLB│═│CLB│═│CLB│═│CLB│═│CLB│ I/O │
│ └─┬─┘ └─┬─┘ └─┬─┘ └─┬─┘ └─┬─┘ └─┬─┘ └─┬─┘ └─┬─┘ │
│ ║ ║ ║ ║ ║ ║ ║ ║ │
│ ┌─╨─┐ ┌─╨─┐ ┌─╨─┐ ┌─╨─┐ ┌─╨─┐ ┌─╨─┐ ┌─╨─┐ ┌─╨─┐ │
│ │CLB│═│CLB│═│BRAM│═│CLB│═│DSP│═│CLB│═│CLB│═│CLB│ I/O │
│ └─┬─┘ └─┬─┘ └─┬─┘ └─┬─┘ └─┬─┘ └─┬─┘ └─┬─┘ └─┬─┘ │
│ ║ ║ ║ ║ ║ ║ ║ ║ │
│ ... ... ... ... ... ... ... ... │
│ │
└─────────────────────────────────────────────────────────┘
CLB = Configurable Logic Block (LUT + Flip-Flops)
BRAM = Block RAM (memoire integree)
DSP = Digital Signal Processing (multiplieur)
═ = Interconnexion programmable
11.4 CLB et LUT
STRUCTURE D'UN CLB (Configurable Logic Block)
┌─────────────────────────────────────────────┐
│ CLB │
│ ┌──────────────────────────────────────┐ │
│ │ SLICE │ │
│ │ ┌─────────┐ ┌─────────┐ │ │
│ │ │ LUT4 │───────▶│ D │──▶ Q │ │
│ │ │ (16x1) │ │ FF │ │ │
│ │ └─────────┘ └─────────┘ │ │
│ │ ┌─────────┐ ┌─────────┐ │ │
│ │ │ LUT4 │───────▶│ D │──▶ Q │ │
│ │ │ (16x1) │ │ FF │ │ │
│ │ └─────────┘ └─────────┘ │ │
│ └──────────────────────────────────────┘ │
└─────────────────────────────────────────────┘
LUT (Look-Up Table) :
- Table de verite programmable
- LUT4 = 4 entrees → 1 sortie (16 bits de config)
- Peut implementer N'IMPORTE QUELLE fonction de 4 variables
Exemple : LUT4 pour S = A·B + C·D
Configuration : table de 16 valeurs stockee en SRAM
11.5 Fabricants et Outils
| Fabricant | Familles FPGA | Logiciel |
|---|---|---|
| AMD/Xilinx | Spartan, Artix, Zynq | Vivado |
| Intel/Altera | Cyclone, MAX 10, Arria | Quartus Prime |
| Lattice | iCE40, ECP5, CrossLink | Diamond, Radiant |
| Microchip | PolarFire, IGLOO2 | Libero SoC |
- Digilent Basys 3 (Artix-7 - Xilinx)
- Terasic DE10-Lite (MAX 10 - Intel)
- Lattice iCEstick (iCE40)
Chapitre 12 : Introduction au VHDL
Langage de description materielle
12.1 Qu'est-ce que le VHDL ?
- VHSIC = Very High Speed Integrated Circuit
- Developpe dans les annees 1980 pour le DoD americain
- Normalise IEEE 1076 (1987, 1993, 2008)
- Concurrent principal : Verilog
12.2 Structure d'un Programme VHDL
-- Declaration des bibliotheques library IEEE; use IEEE.STD_LOGIC_1164.ALL; -- ENTITE : Interface externe (ports d'E/S) entity nom_circuit is port ( entree1 : in STD_LOGIC; entree2 : in STD_LOGIC; sortie : out STD_LOGIC ); end nom_circuit; -- ARCHITECTURE : Description du fonctionnement interne architecture comportement of nom_circuit is -- Declarations internes (signaux, constantes) begin -- Instructions concurrentes sortie <= entree1 and entree2; end comportement;
12.3 Types de Donnees
| Type | Description | Valeurs |
|---|---|---|
STD_LOGIC | 1 bit logique | '0', '1', 'Z', 'X', '-' |
STD_LOGIC_VECTOR | Bus de n bits | "1010", "00FF" |
BIT | 1 bit simple | '0', '1' |
INTEGER | Entier | -2³¹ a 2³¹-1 |
BOOLEAN | Booleen | TRUE, FALSE |
UNSIGNED | Entier non signe | Arithmetique |
SIGNED | Entier signe | Complement a 2 |
12.4 Operateurs Logiques
-- Operateurs logiques de base S1 <= A and B; -- ET S2 <= A or B; -- OU S3 <= not A; -- NON S4 <= A nand B; -- NON-ET S5 <= A nor B; -- NON-OU S6 <= A xor B; -- OU exclusif S7 <= A xnor B; -- NON-OU exclusif
12.5 Instructions Concurrentes
Affectation conditionnelle (WHEN...ELSE)
-- Multiplexeur 2 vers 1 Y <= A when SEL = '0' else B; -- Multiplexeur 4 vers 1 Y <= D0 when SEL = "00" else D1 when SEL = "01" else D2 when SEL = "10" else D3;
Selection (WITH...SELECT)
-- Decodeur 7 segments with BCD select SEG <= "1111110" when "0000", -- 0 "0110000" when "0001", -- 1 "1101101" when "0010", -- 2 "1111001" when "0011", -- 3 "0000000" when others;
12.6 Process (Instructions Sequentielles)
-- Bascule D avec reset asynchrone process(CLK, RST) begin if RST = '1' then Q <= '0'; elsif rising_edge(CLK) then Q <= D; end if; end process; -- Compteur 4 bits process(CLK, RST) begin if RST = '1' then count <= "0000"; elsif rising_edge(CLK) then count <= count + 1; end if; end process;
12.7 Exemple Complet : Compteur 4 bits
library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.NUMERIC_STD.ALL; entity compteur_4bits is port ( CLK : in STD_LOGIC; RST : in STD_LOGIC; EN : in STD_LOGIC; COUNT : out STD_LOGIC_VECTOR(3 downto 0) ); end compteur_4bits; architecture rtl of compteur_4bits is signal cnt : unsigned(3 downto 0) := "0000"; begin process(CLK, RST) begin if RST = '1' then cnt <= "0000"; elsif rising_edge(CLK) then if EN = '1' then cnt <= cnt + 1; end if; end if; end process; COUNT <= std_logic_vector(cnt); end rtl;
12.8 Resume VHDL
- Entity = Interface (ports E/S)
- Architecture = Description interne
- Concurrent = Instructions executees en parallele
- Process = Instructions sequentielles (IF, CASE)
- rising_edge(CLK) = Front montant
- <= = Affectation de signal
Chapitre 7 : Circuits Combinatoires
Decodeurs, multiplexeurs, additionneurs
7.1 Decodeur
DECODEUR 2 VERS 4 (74LS139)
┌─────────────┐
A ───┤ ├─── Y0 (= Ā·B̄)
B ───┤ DECODEUR ├─── Y1 (= Ā·B)
E ───┤ 2 → 4 ├─── Y2 (= A·B̄)
│ ├─── Y3 (= A·B)
└─────────────┘
TABLE DE VERITE :
E A B │ Y0 Y1 Y2 Y3
────────┼────────────────
1 X X │ 1 1 1 1 (desactive)
0 0 0 │ 0 1 1 1
0 0 1 │ 1 0 1 1
0 1 0 │ 1 1 0 1
0 1 1 │ 1 1 1 0
Sorties actives a l'etat BAS (logique negative)
Usage : Decodage d'adresses memoire (74LS138 = 3→8)
7.2 Encodeur (Codeur)
Fonction inverse du decodeur : 2n entrees → n sorties.
ENCODEUR PRIORITAIRE 8 VERS 3 (74LS148)
8 entrees (une seule active) → 3 sorties binaires
Entree active │ Sortie (A2 A1 A0)
──────────────┼───────────────────
I0 │ 0 0 0
I1 │ 0 0 1
I2 │ 0 1 0
I3 │ 0 1 1
I4 │ 1 0 0
I5 │ 1 0 1
I6 │ 1 1 0
I7 │ 1 1 1
Prioritaire : Si plusieurs entrees actives,
l'entree de plus haut indice a la priorite.
7.3 Multiplexeur (MUX)
MULTIPLEXEUR 4 VERS 1 (74LS153)
┌─────────────┐
D0 ──┤ │
D1 ──┤ MUX │
D2 ──┤ 4 → 1 ├─── Y
D3 ──┤ │
├─────────────┤
S1 ──┤ SELECTION │
S0 ──┤ │
└─────────────┘
TABLE DE VERITE :
S1 S0 │ Y
───────┼────
0 0 │ D0
0 1 │ D1
1 0 │ D2
1 1 │ D3
Equation : Y = D0·S̄1·S̄0 + D1·S̄1·S0 + D2·S1·S̄0 + D3·S1·S0
Usage : Selection de donnees, routage de signaux
7.4 Demultiplexeur (DEMUX)
Inverse du MUX : 1 entree vers 2n sorties. Equivalent a un decodeur avec entree de donnees.
DEMULTIPLEXEUR 1 VERS 4
┌─────────────┐
D ────┤ DEMUX ├─── Y0
│ 1 → 4 ├─── Y1
S1 ──┤ ├─── Y2
S0 ──┤ ├─── Y3
└─────────────┘
S1 S0 │ Y0 Y1 Y2 Y3
───────┼─────────────────────
0 0 │ D 0 0 0
0 1 │ 0 D 0 0
1 0 │ 0 0 D 0
1 1 │ 0 0 0 D
7.5 Additionneur
Demi-additionneur (Half Adder)
DEMI-ADDITIONNEUR (2 entrees, pas de retenue entrante)
A B │ S (Somme) C (Retenue)
─────┼─────────────────────────
0 0 │ 0 0
0 1 │ 1 0
1 0 │ 1 0
1 1 │ 0 1
Equations : S = A ⊕ B (XOR)
C = A · B (AND)
Schema :
A ──┬────[XOR]──── S
│
B ──┼────[AND]──── C
│
Additionneur complet (Full Adder)
ADDITIONNEUR COMPLET (avec retenue entrante Cin)
A B Cin │ S Cout
──────────┼──────────
0 0 0 │ 0 0
0 0 1 │ 1 0
0 1 0 │ 1 0
0 1 1 │ 0 1
1 0 0 │ 1 0
1 0 1 │ 0 1
1 1 0 │ 0 1
1 1 1 │ 1 1
Equations : S = A ⊕ B ⊕ Cin
Cout = A·B + Cin·(A ⊕ B)
ADDITIONNEUR 4 BITS (cascade de Full Adders)
A3 B3 A2 B2 A1 B1 A0 B0
│ │ │ │ │ │ │ │
┌┴──┴┐ ┌┴──┴┐ ┌┴──┴┐ ┌┴──┴┐
C4←─┤ FA │←─C3──┤ FA │←─C2──┤ FA │←─C1──┤ FA │←─C0=0
└──┬─┘ └──┬─┘ └──┬─┘ └──┬─┘
S3 S2 S1 S0
Circuit integre : 74LS283 (additionneur 4 bits)
7.6 Comparateur
COMPARATEUR 4 BITS (74LS85)
Compare deux nombres A et B de 4 bits
┌─────────────────┐
A3 ──┤ ├─── A > B
A2 ──┤ │
A1 ──┤ COMPARATEUR ├─── A = B
A0 ──┤ │
B3 ──┤ 4 BITS ├─── A < B
B2 ──┤ │
B1 ──┤ │
B0 ──┤ │
└─────────────────┘
Entrees de cascade pour extension a plus de 4 bits
Chapitre 8 : Bascules (Flip-Flops)
RS, D, JK, T - Logique sequentielle
🎯 Objectifs du chapitre
- Distinguer logique combinatoire et sequentielle
- Comprendre le fonctionnement des bascules
- Maitriser les tables de transition
- Analyser les chronogrammes
8.1 Logique Combinatoire vs Sequentielle
Combinatoire
Sorties = f(Entrees)
Pas de memoire
Decodeurs, MUX, portes
Sequentielle
Sorties = f(Entrees, Etat)
Memoire (bascules)
Compteurs, registres
8.2 Bascule RS (Reset-Set)
BASCULE RS ASYNCHRONE (verrou RS / RS Latch)
Realisee avec 2 portes NOR :
R ──┬──[≥1]──┬── Q
│ │
└────────┤
│
┌────────┘
│ │
S ──┴──[≥1]──┴── Q̄
TABLE DE VERITE :
S R │ Q(t+1) │ Mode
─────┼────────┼─────────────
0 0 │ Q(t) │ Memorisation
0 1 │ 0 │ Reset (RAZ)
1 0 │ 1 │ Set (mise a 1)
1 1 │ ? │ INTERDIT !
Equation : Q(t+1) = S + R̄·Q(t) avec S·R = 0
⚠️ L'etat S=R=1 est interdit (instable)
8.3 Bascule D (Data / Delay)
BASCULE D (la plus utilisee)
Symbole :
┌─────────┐
D ───┤ D Q ├─── Q
│ │
CLK ─┤ > Q̄ ├─── Q̄
└─────────┘
TABLE DE VERITE (front montant ↑) :
CLK │ D │ Q(t+1)
────┼───┼───────
↑ │ 0 │ 0
↑ │ 1 │ 1
Equation : Q(t+1) = D
La sortie Q prend la valeur de D au front d'horloge
et la maintient jusqu'au prochain front.
"D" comme "Data" ou "Delay" (retard d'un cycle)
Circuit integre : 74LS74 (double bascule D)
- Front montant (↑) : Transition 0 → 1
- Front descendant (↓) : Transition 1 → 0
- La bascule ne reagit qu'au moment du front, pas aux niveaux
8.4 Bascule JK
BASCULE JK (la plus versatile)
Symbole :
┌─────────┐
J ───┤ J Q ├─── Q
│ │
CLK ─┤ > Q̄ ├─── Q̄
│ │
K ───┤ K │
└─────────┘
TABLE DE VERITE (front montant ↑) :
J K │ Q(t+1) │ Mode
─────┼────────┼─────────────
0 0 │ Q(t) │ Memorisation
0 1 │ 0 │ Reset
1 0 │ 1 │ Set
1 1 │ Q̄(t) │ Basculement (Toggle)
Equation : Q(t+1) = J·Q̄(t) + K̄·Q(t)
Avantage : Pas d'etat interdit !
Le mode J=K=1 bascule (toggle) a chaque front.
Circuit integre : 74LS76 (double bascule JK)
8.5 Bascule T (Toggle)
BASCULE T (Trigger / Toggle)
TABLE DE VERITE :
T │ Q(t+1)
──┼────────
0 │ Q(t) Memorisation
1 │ Q̄(t) Basculement
Equation : Q(t+1) = T ⊕ Q(t)
Realisation : Bascule JK avec J = K = T
Usage principal : Division de frequence
Avec T=1 permanent, la sortie Q change a chaque front
→ Frequence divisee par 2
8.6 Chronogrammes
CHRONOGRAMME BASCULE D (front montant)
CLK ──┐ ┌──┐ ┌──┐ ┌──┐ ┌──┐ ┌──
└──┘ └──┘ └──┘ └──┘ └──┘
↑ ↑ ↑ ↑ ↑
D ─────────┐ ┌─────────┐
└─────┘ └─────────
Q ────────────────┐ ┌─────────┐
└─────┘ └──
Q prend la valeur de D a chaque front montant (↑)
CHRONOGRAMME BASCULE T (T=1 permanent)
CLK ──┐ ┌──┐ ┌──┐ ┌──┐ ┌──┐ ┌──
└──┘ └──┘ └──┘ └──┘ └──┘
Q ────┐ ┌─────┐ ┌─────┐
└─────┘ └─────┘ └────
La frequence de Q = frequence CLK / 2
8.7 Entrees Asynchrones
ENTREES DE FORCAGE ASYNCHRONES
┌─────────────┐
/PRE ┤ │ PRE = Preset (mise a 1)
│ │ CLR = Clear (mise a 0)
D ───┤ D Q ├── Q
│ │ Ces entrees agissent
CLK ─┤ > Q̄ ├── Q̄ INDEPENDAMMENT de l'horloge
│ │
/CLR ┤ │ Priorite : /PRE et /CLR > CLK
└─────────────┘
/PRE /CLR │ Q │ Mode
──────────┼──────┼─────────────────
0 1 │ 1 │ Forcage a 1
1 0 │ 0 │ Forcage a 0
1 1 │ f(D) │ Fonctionnement normal
0 0 │ ? │ INTERDIT
Les "/" indiquent des entrees actives a l'etat bas
Chapitre 9 : Registres
Stockage et decalage de donnees
9.1 Registre de Memorisation (PIPO)
REGISTRE 4 BITS PIPO
D3──┤D Q├──Q3 D2──┤D Q├──Q2
│ > │ │ > │
CLK─┤ │ CLK─┤ │
└────┘ └────┘
D1──┤D Q├──Q1 D0──┤D Q├──Q0
│ > │ │ > │
CLK─┤ │ CLK─┤ │
└────┘ └────┘
Au front d'horloge : Q3Q2Q1Q0 ← D3D2D1D0
Circuit integre : 74LS374 (registre 8 bits avec 3-state)
9.2 Registre a Decalage (Shift Register)
REGISTRE A DECALAGE SISO (Serial In, Serial Out)
┌────┐ ┌────┐ ┌────┐ ┌────┐
Sin ──▶│ D │──▶│ D │──▶│ D │──▶│ D │──▶ Sout
│ Q │ │ Q │ │ Q │ │ Q │
CLK ─┤ > │───┤ > │───┤ > │───┤ > │
└────┘ └────┘ └────┘ └────┘
Q3 Q2 Q1 Q0
A chaque front d'horloge :
- Q0 ← Q1
- Q1 ← Q2
- Q2 ← Q3
- Q3 ← Sin
Les donnees "glissent" vers la droite
Types de registres a decalage
| Type | Entree | Sortie | Usage |
|---|---|---|---|
| SISO | Serie | Serie | Ligne a retard |
| SIPO | Serie | Parallele | Conversion serie → parallele |
| PISO | Parallele | Serie | Conversion parallele → serie |
| PIPO | Parallele | Parallele | Memorisation |
9.3 Registre SIPO (74HC595)
74HC595 - REGISTRE A DECALAGE SIPO 8 BITS
Tres utilise pour etendre les sorties d'un microcontroleur
┌────────────────────┐
SER ─┤ Entree serie │──── QA
│ │──── QB
SRCLK┤ Horloge decalage │──── QC
│ │──── QD 8 sorties
RCLK ┤ Horloge latch │──── QE paralleles
│ │──── QF
/OE ─┤ Output Enable │──── QG
│ │──── QH
/SRCLR┤ Clear ├──── QH' (cascade)
└────────────────────┘
Principe :
1. Envoyer 8 bits en serie (SER + SRCLK)
2. Valider vers les sorties (RCLK)
Double registre : decalage + latch de sortie
Permet de charger les donnees sans "glitch" sur les sorties
9.4 Applications des Registres
- Memorisation temporaire : Buffer de donnees
- Conversion serie/parallele : UART, SPI, I2C
- Multiplication/Division : Decalage = × ou ÷ par 2
- Extension d'E/S : 74HC595 pour LEDs, afficheurs
- Generateur de sequences : Registre a retroaction (LFSR)
- Decalage a gauche d'1 position = multiplication par 2
- Decalage a droite d'1 position = division par 2
Chapitre 10 : Compteurs
Asynchrones et synchrones
10.1 Compteur Asynchrone (Ripple Counter)
COMPTEUR ASYNCHRONE 4 BITS
Les bascules sont en cascade : Q de l'une → CLK de la suivante
┌────┐ ┌────┐ ┌────┐ ┌────┐
CLK ───────────▶│ T │────▶│ T │────▶│ T │────▶│ T │
│ Q │ │ Q │ │ Q │ │ Q │
└──┬─┘ └──┬─┘ └──┬─┘ └──┬─┘
Q0 Q1 Q2 Q3
(LSB) (MSB)
Chaque bascule T divise la frequence par 2
Sequence : 0000 → 0001 → 0010 → ... → 1111 → 0000
⚠️ INCONVENIENT : Les sorties ne changent pas simultanement
→ Delai de propagation cumule (ripple = ondulation)
→ Etats transitoires errones (glitches)
Circuit integre : 74LS93 (compteur 4 bits)
10.2 Compteur Synchrone
COMPTEUR SYNCHRONE 4 BITS (avec bascules JK)
Toutes les bascules ont la MEME horloge !
La logique combinatoire controle J et K.
Equations de controle :
J0 = K0 = 1 (Q0 bascule toujours)
J1 = K1 = Q0 (Q1 bascule si Q0=1)
J2 = K2 = Q0·Q1 (Q2 bascule si Q0=Q1=1)
J3 = K3 = Q0·Q1·Q2 (Q3 bascule si Q0=Q1=Q2=1)
┌─AND─┐
Q0──┬──────────────┤ ├──J3,K3
│ ┌─AND─┐ │ │
Q1──┼────┤ ├───┤ │
│ │ │ └─────┘
Q2──┼────┤ │
│ └─────┴───J2,K2
│
└──────────────J1,K1
1 ─────────────────J0,K0
Circuit integre : 74LS161 (compteur 4 bits synchrone)
10.3 Compteur Modulo N
COMPTEUR MODULO 10 (Compteur decade / BCD)
Compte de 0 a 9 puis revient a 0
Methode : Detecter 10 (1010) et forcer RESET
Detection : Q3·Q1 = 1 quand compte = 10
(car 10 = 1010, Q3=1 et Q1=1)
Q3 ──┬──[AND]──── /CLR (Reset asynchrone)
Q1 ──┘
Sequence : 0→1→2→3→4→5→6→7→8→9→(10→0)
Le compteur passe tres brievement par 10
avant d'etre remis a 0.
Circuit integre : 74LS90 (compteur decade)
COMPTEUR MODULO N (generalisation)
Pour compter de 0 a N-1 :
1. Utiliser un compteur ≥ N
2. Detecter N avec portes AND
3. Connecter a l'entree RESET
10.4 Compteur/Decompteur
| Circuit | Type | Bits | Fonctions |
|---|---|---|---|
74LS90 | Asynchrone | 4 | Decade (mod 10) |
74LS93 | Asynchrone | 4 | Binaire |
74LS161 | Synchrone | 4 | Binaire + Load |
74LS163 | Synchrone | 4 | Binaire + Clear sync |
74LS191 | Synchrone | 4 | Up/Down binaire |
74LS192 | Synchrone | 4 | Up/Down decade |
10.5 Chronogramme d'un Compteur 3 bits
CHRONOGRAMME COMPTEUR 3 BITS (0 a 7)
CLK ─┐ ┌┐ ┌┐ ┌┐ ┌┐ ┌┐ ┌┐ ┌┐ ┌┐ ┌─
└┘ └┘ └┘ └┘ └┘ └┘ └┘ └┘ └┘
Q0 ─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─
└─┘ └─┘ └─┘ └─┘ └─┘
Q1 ───┐ ┌───┐ ┌───┐ ┌─
└───┘ └───┘ └───┘
Q2 ───────┐ ┌───────┐
└───────┘ └─
Valeur 0 1 2 3 4 5 6 7 0 1 2
Q0 : frequence CLK / 2
Q1 : frequence CLK / 4
Q2 : frequence CLK / 8
Chapitre 11 : FPGA et CPLD
Circuits logiques programmables
11.1 Evolution des Circuits Programmables
EVOLUTION DES PLD (Programmable Logic Device)
1970s 1980s 1990s 2000s+
│ │ │ │
▼ ▼ ▼ ▼
┌────┐ ┌────┐ ┌──────┐ ┌──────┐
│PAL │ ───▶ │GAL │ ───▶ │ CPLD │ ───▶ │ FPGA │
│ │ │ │ │ │ │ │
└────┘ └────┘ └──────┘ └──────┘
PAL : Programmable Array Logic (fusibles, OTP)
GAL : Generic Array Logic (EEPROM, reprogrammable)
CPLD : Complex PLD (plusieurs blocs PAL + interconnexions)
FPGA : Field Programmable Gate Array (millions de portes)
11.2 Architecture CPLD
ARCHITECTURE CPLD
┌─────────────────────────────────────────────────┐
│ │
│ ┌─────────┐ MATRICE ┌─────────┐ │
│ │ BLOC 1 │ D'INTERCON- │ BLOC 2 │ │
│ │(16 macro│◀═══NEXION══════▶│(16 macro│ │
│ │ cells) │ PROGRAMMABLE │ cells) │ │
│ └────┬────┘ └────┬────┘ │
│ │ │ │
│ ┌────┴────┐ ┌────┴────┐ │
│ │ I/O │ │ I/O │ │
│ │ Block │ │ Block │ │
│ └─────────┘ └─────────┘ │
│ ↕ ↕ │
└────────╫───────────────────────────╫──────────┘
║ ║
Broches Broches
Fabricants : Xilinx (CoolRunner), Altera/Intel (MAX)
Capacite : quelques centaines a quelques milliers de portes
11.3 Architecture FPGA
ARCHITECTURE FPGA
┌────────────────────────────────────────────────┐
│ IOB IOB IOB IOB IOB IOB IOB │
│ ┌───┐ ┌───┐ ┌───┐ ┌───┐ ┌───┐ ┌───┐ ┌───┐ │
│ └───┘ └───┘ └───┘ └───┘ └───┘ └───┘ └───┘ │
│ │
│ ┌───┐ ══ ┌───┐ ══ ┌───┐ ══ ┌───┐ │
│ │CLB│ │CLB│ │CLB│ │CLB│ IOB │
│ └───┘ └───┘ └───┘ └───┘ │
│ ║ ║ ║ ║ │
│ ┌───┐ ┌───┐ ┌────┐ ┌───┐ │
│ │CLB│ │CLB│ │BRAM│ │CLB│ IOB │
│ └───┘ └───┘ └────┘ └───┘ │
│ ║ ║ ║ ║ │
│ ┌───┐ ┌────┐ ┌───┐ ┌───┐ │
│ │CLB│ │DSP │ │CLB│ │CLB│ IOB │
│ └───┘ └────┘ └───┘ └───┘ │
│ │
└────────────────────────────────────────────────┘
CLB = Configurable Logic Block (LUT + Flip-Flops)
IOB = Input/Output Block
BRAM = Block RAM (memoire integree)
DSP = Digital Signal Processing block
══ = Interconnexions programmables
11.4 Comparaison CPLD vs FPGA
| Critere | CPLD | FPGA |
|---|---|---|
| Capacite | 100 - 10K portes | 10K - 10M portes |
| Configuration | Flash (non volatile) | SRAM (volatile) ou Flash |
| Demarrage | Instantane | Necessite chargement |
| Timing | Previsible | Variable selon routage |
| Ressources | Logique pure | RAM, DSP, PLL... |
| Consommation | Faible | Plus elevee |
| Cout | Faible | Variable (eleve pour gros) |
| Usage | Glue logic, decodage | Traitement complexe |
11.5 Fabricants et Outils
| Fabricant | FPGA | Logiciel |
|---|---|---|
| AMD/Xilinx | Spartan, Artix, Kintex, Virtex, Zynq | Vivado, ISE |
| Intel/Altera | Cyclone, MAX, Arria, Stratix | Quartus Prime |
| Lattice | iCE40, ECP5, CrossLink | Diamond, Radiant |
| Microchip | PolarFire, IGLOO, SmartFusion | Libero SoC |
Chapitre 12 : Introduction au VHDL
Langage de description materielle
12.1 Qu'est-ce que le VHDL ?
- VHSIC = Very High Speed Integrated Circuit
- Concurrent (parallele) comme le materiel
- Fortement type
- Insensible a la casse (maj/min)
12.2 Structure d'un Programme VHDL
-- Inclusion des bibliotheques library IEEE; use IEEE.STD_LOGIC_1164.ALL; -- ENTITE : Interface externe (ports) entity nom_circuit is port ( entree1 : in STD_LOGIC; entree2 : in STD_LOGIC; sortie : out STD_LOGIC ); end nom_circuit; -- ARCHITECTURE : Description interne architecture comportement of nom_circuit is begin sortie <= entree1 and entree2; end comportement;
12.3 Types de Donnees
| Type | Description | Exemple |
|---|---|---|
STD_LOGIC | 1 bit (9 etats possibles) | '0', '1', 'Z', 'X' |
STD_LOGIC_VECTOR | Bus de n bits | "1010", "00FF" |
BIT | 1 bit simple | '0', '1' |
INTEGER | Entier | 0, -5, 255 |
BOOLEAN | Vrai/Faux | TRUE, FALSE |
12.4 Exemple : Porte ET
library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity porte_et is port ( A : in STD_LOGIC; B : in STD_LOGIC; S : out STD_LOGIC ); end porte_et; architecture comportement of porte_et is begin S <= A and B; end comportement;
12.5 Exemple : Bascule D
library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity bascule_D is port ( CLK : in STD_LOGIC; RST : in STD_LOGIC; D : in STD_LOGIC; Q : out STD_LOGIC ); end bascule_D; architecture comportement of bascule_D is begin process(CLK, RST) begin if RST = '1' then Q <= '0'; elsif rising_edge(CLK) then Q <= D; end if; end process; end comportement;
12.6 Exemple : Compteur 4 bits
library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.NUMERIC_STD.ALL; entity compteur_4bits is port ( CLK : in STD_LOGIC; RST : in STD_LOGIC; EN : in STD_LOGIC; COUNT : out STD_LOGIC_VECTOR(3 downto 0) ); end compteur_4bits; architecture comportement of compteur_4bits is signal cnt : unsigned(3 downto 0) := "0000"; begin process(CLK, RST) begin if RST = '1' then cnt <= "0000"; elsif rising_edge(CLK) then if EN = '1' then cnt <= cnt + 1; end if; end if; end process; COUNT <= std_logic_vector(cnt); end comportement;
12.7 Instructions Concurrentes vs Sequentielles
Concurrent
Hors process<= affectation signal
when...else, with...select
Sequentiel
Dans un process
if...then...else
case...when, for...loop
-- Instruction CONCURRENTE (hors process) Y <= A when SEL = '0' else B; -- Instruction SEQUENTIELLE (dans process) process(SEL, A, B) begin if SEL = '0' then Y <= A; else Y <= B; end if; end process;