الصفحة Préparation BAC : Juin 2025 Fonction : Traiter l'information YOUNESS
1
7 Sciences de l'ingénieur : ATC PLD : Circuits Logiques Programmables 06.78.26.25.20
PROGRAMMATION DES PLD
1- Comparateur binaire 4 bits :
Description par équations :
MODULE comparateur
TITLE 'comparateur logique 4 bits'
DECLARATIONS
Comparateur device ‘P16V8’; // PLD à programmer
B3, B2, B1, B0 pin 9, 8, 7, 6 ; // Variables d'entrée
A3, A2, A1, A0 pin 5, 4, 3, 2 ; // Variables d'entrée
A = [A3, A2, A1, A0] ; // Définition du bus A
B = [B3, B2, B1, B0] ; // Définition du bus B
S, I, E pin 15, 16, 17 istype 'com, buffer '; // Variables de sortie
EQUATIONS
S=A>B ; Utilisation de When …. Then ….
E=A==B ;
I=A<B ; EQUATIONS
TEST_VECTORS ([A, B] -> [S, E, I]); When A > B then S = 1 ;
[5, 5] -> [0, 1, 0]; When A = = Bthen E = 1 ;
[9, 12] -> [0, 0, 1]; When A < B then I =1 ;
[7, 6] -> [1, 0, 0];
END
2- Multiplexeur 4 bits :
Description par équations :
A- Solution 1 :
MODULE Multiplexeur
TITLE ‘Multiplexeur 4 bits'
DECLARATIONS
Multiplexeur device ‘P16V8’; // PLD à programmer
E3, E2, E1, E0 pin 9, 8, 7, 6 ; // Variables d'entrée
A1, A0 pin 5, 4; // Variables d'entrée
S pin 16 istype 'com, buffer '; // Variables de sortie
EQUATIONS
S = E3 & A1 & A0 # E2 & A1 &! A0 # E1 &! A1 & A0 # E0 &! A1 &! A0 ;
TEST_VECTORS ([E3, E2, E1, E0, A1, A0] -> [S]);
[0, 0, 0, 0, 0, 0] -> [0];
[0, 0, 0, 1, 0, 0] -> [1];
[0, 0, 0, 0, 0, 1] -> [0];
[0, 0, 1, 0, 0, 1] -> [1];
[0, 0, 0, 0, 1, 0] -> [0];
[0, 1, 0, 0, 1, 0] -> [1];
[0, 0, 0, 0, 1, 1] -> [0];
[1, 0, 0, 0, 1, 1] -> [1];
END
الصفحة Préparation BAC : Juin 2025 Fonction : Traiter l'information YOUNESS
2
7 Sciences de l'ingénieur : ATC PLD : Circuits Logiques Programmables 06.78.26.25.20
B- Solution 2 :
MODULE Multiplexeur
TITLE ‘Multiplexeur 4 bits'
DECLARATIONS
Multiplexeur device ‘P16V8’; // PLD à programmer
E3, E2, E1, E0, A1, A0 pin 9, 8, 7, 6, 5, 4 ; // Variables d'entrée
A = [A1, A0] ; // Définition du bus A
E = [E3, E2, E1, E0] ; // Définition du bus E
S pin 16 istype 'com, buffer '; // Variables de sortie
EQUATIONS
When A = [0, 0] then S = E0; // ou When A = 0 then S= E0;
When A = [0, 1] then S = E1; // ou When A = 1 then S= E1;
When A = [1, 0] then S = E2; // ou When A = 2 then S= E2;
When A = [1, 1] then S = E3; // ou When A = 3 then S= E3;
TEST_VECTORS ([E3, E2, E1, E0, A1, A0] -> [S]); // ou ([E, A] -> [S]);
[0, 0, 0, 0, 0, 0] -> [0]; // ou [0, 0] -> [0];
[0, 0, 0, 1, 0, 0] -> [1]; // ou [1, 0] -> [1];
[0, 0, 0, 0, 0, 1] -> [0]; // ou [0, 1] -> [0];
[0, 0, 1, 0, 0, 1] -> [1]; // ou [2, 1] -> [1];
[0, 0, 0, 0, 1, 0] -> [0]; // ou [0, 2] -> [0];
[0, 1, 0, 0, 1, 0] -> [1]; // ou [4, 2] -> [1];
[0, 0, 0, 0, 1, 1] -> [0]; // ou [0, 3] -> [0];
[1, 0, 0, 0, 1, 1] -> [1]; // ou [8, 3] -> [1];
END
3- Démultiplexeur 4 bits :
3.1- Description par équations :
A- Solution 1 :
MODULE Demultiplexeur
TITLE ‘Démultiplexeur 4 bits'
DECLARATIONS
Demultiplexeur device ‘P16V8’; // PLD à programmer
E, G, A1, A0 pin 7, 6, 5, 4; // Variables d'entrée
S3, S2, S1, S0 pin 12, 13, 14, 15 istype 'com, buffer '; // Variables de sortie
EQUATIONS
S3 = E & A1 & A0 &! G;
S2 = E & A1 &! A0 &! G;
S1 = E &! A1 & A0 &! G;
S0 = E &! A1 &! A0 &! G;
TEST_VECTORS ([G, E, A1, A0] -> [S3, S2, S1, S0]);
[1,.X.,.X.,.X.] -> [0, 0, 0, 0];
[0, 0, 0, 0] -> [0, 0, 0, 0];
[0, 1, 0, 0] -> [0, 0, 0, 1];
[0, 0, 0, 1] -> [0, 0, 0, 0];
[0, 1, 0, 1] -> [0, 0, 1, 0];
[0, 0, 1, 0] -> [0, 0, 0, 0];
[0, 1, 1, 0] -> [0, 1, 0, 0];
[0, 0, 1, 1] -> [0, 0, 0, 0];
[0, 1, 1, 1] -> [1, 0, 0, 0];
END
الصفحة Préparation BAC : Juin 2025 Fonction : Traiter l'information YOUNESS
3 Sciences de l'ingénieur : ATC PLD : Circuits Logiques Programmables 06.78.26.25.20
7
B- Solution 2 :
MODULE Demultiplexeur
TITLE ‘Demultiplexeur 4 bits'
DECLARATIONS
Demultiplexeur device ‘P16V8’; // PLD à programmer
E, G, A1, A0 pin 7, 6, 5, 4; // Variables d'entrée
S3, S2, S1, S0 pin 12, 13, 14, 15 istype 'com, buffer '; // Variables de sortie
A = [A1, A0] ; // Définition du bus A
S = [S3, S2, S1, S0] ; // Définition du bus S
EQUATIONS
When (G == 0) & (A == 0) then S0 = E;
When (G == 0) & (A == 1) then S1 = E;
When (G == 0) & (A == 2) then S2 = E;
When (G == 0) & (A == 3) then S3 = E;
TEST_VECTORS ([G, E, A] -> [S]);
[1,.X.,.X.] -> [0];
[0, 0, 0] -> [0];
[0, 1, 0] -> [1];
[0, 0, 1] -> [0];
[0, 1, 1] -> [2];
[0, 0, 2] -> [0];
[0, 1, 2] -> [4];
[0, 0, 3] -> [0];
[0, 1, 3] -> [8];
END
3.2- Description par table de vérité :
MODULE Demultiplexeur
TITLE ‘Demultiplexeur 4 bits'
DECLARATIONS
Demultiplexeur device ‘P16V8’; // PLD à programmer
E, G, A1, A0 pin 7, 6, 5, 4; // Variables d'entrée
S3, S2, S1, S0 pin 12, 13, 14, 15 istype 'com, buffer '; // Variables de sortie
TRUTH_TABLE ([G, E, A1, A0] -> [S3, S2, S1, S0]);
[1,.X.,.X.,.X.] -> [0, 0, 0, 0];
[0, 0, 0, 0] -> [0, 0, 0, 0]; Autre solution
[0, 0, 0, 1] -> [0, 0, 0, 0]; ([G, A1, A0] -> [S3, S2, S1, S0]);
[0, 0, 1, 0] -> [0, 0, 0, 0]; [1,.X.,.X.] -> [0, 0, 0, 0];
[0, 0, 1, 1] -> [0, 0, 0, 0]; [0, 0, 0] -> [0, 0, 0, E];
[0, 1, 0, 0] -> [0, 0, 0, 1]; [0, 0, 1] -> [0, 0, E, 0];
[0, 1, 0, 1] -> [0, 0, 1, 0]; [0, 1, 0] -> [0, E, 0, 0];
[0, 1, 1, 0] -> [0, 1, 0, 0]; [0, 1, 1] -> [E, 0, 0, 0];
[0, 1, 1, 1] -> [1, 0, 0, 0];
TEST_VECTORS ([G, E, A1, A0] -> [S3, S2, S1, S0]);
[1,.X.,.X.,.X.] -> [0, 0, 0, 0];
[0, 0, 0, 0] -> [0, 0, 0, 0];
[0, 0, 0, 1] -> [0, 0, 0, 0];
[0, 0, 1, 0] -> [0, 0, 0, 0];
[0, 0, 1, 1] -> [0, 0, 0, 0];
[0, 1, 0, 0] -> [0, 0, 0, 1];
[0, 1, 0, 1] -> [0, 0, 1, 0];
[0, 1, 1, 0] -> [0, 1, 0, 0];
[0, 1, 1, 1] -> [1, 0, 0, 0];
END
الصفحة Préparation BAC : Juin 2025 Fonction : Traiter l'information YOUNESS
4 Sciences de l'ingénieur : ATC PLD : Circuits Logiques Programmables 06.78.26.25.20
7
4- Décodeur BCD 7 segments :
Description par table de vérité :
MODULE BCD
TITLE ‘Décodeur BCD 7 segments '
DECLARATIONS
BCD device ‘P16V8; // PLD à programmer
A, B, C, D pin 2, 3, 4, 5 ; // Variables d'entrée
a, b, c, d, e, f, g pin 18, 17, 16, 15, 14, 13, 12; // Variables sortie
N = [D, C, B, A] ; // Définition du bus N
TRUTH_TABLE (N -> [a, b, c, d, e, f, g])
0 -> [1, 1, 1, 1, 1, 1, 0] ; // affichage du 0 dans le cas
1 -> [0, 1, 1, 0, 0, 0, 0] ; // d’un afficheur cathode commune
2 -> [1, 1, 0, 1, 1, 0, 1] ;
3 -> [1, 1, 1, 1, 0, 0, 1] ;
4 -> [0, 1, 1, 0, 0, 1, 1] ;
5 -> [1, 0, 1, 1, 0, 1, 1] ;
6 -> [1, 0, 1, 1, 1, 1, 1] ;
7 -> [1, 1, 1, 0, 0, 0, 0] ;
8 -> [1, 1, 1, 1, 1, 1, 1] ;
9 -> [1, 1, 1, 1, 0, 1, 1] ;
TEST_VECTORS (N -> [a, b, c, d, e, f, g])
0 -> [1, 1, 1, 1, 1, 1, 0] ;
1 -> [0, 1, 1, 0, 0, 0, 0] ;
2 -> [1, 1, 0, 1, 1, 0, 1] ;
3 -> [1, 1, 1, 1, 0, 0, 1] ;
4 -> [0, 1, 1, 0, 0, 1, 1] ;
5 -> [1, 0, 1, 1, 0, 1, 1] ;
6 -> [1, 0, 1, 1, 1, 1, 1] ;
7 -> [1, 1, 1, 0, 0, 0, 0] ;
8 -> [1, 1, 1, 1, 1, 1, 1] ;
9 -> [1, 1, 1, 1, 0, 1, 1] ;
END
5- Compteur modulo 4 :
5.1- Description par diagramme d’état :
MODULE Compteur
TITLE ‘Compteur modulo 4'
DECLARATIONS
Compteur device ‘P16V8’ ; // PLD à programmer
H, R pin 1, 2 ; // Variables d'entrée
Q0, Q1 pin 15, 14 Istype 'reg, buffer '; // Variables de sortie
EQUATIONS
[Q1, Q0].clk = H ;
[Q1, Q0].AR = ! R;
QSTATE = [Q1, Q0] ;
A = [0, 0] ;
B = [0, 1] ;
C = [1, 0];
D = [1, 1];
الصفحة Préparation BAC : Juin 2025 Fonction : Traiter l'information YOUNESS
5 Sciences de l'ingénieur : ATC PLD : Circuits Logiques Programmables 06.78.26.25.20
7
STATE_DIAGRAM QSTATE
State A: GOTO B;
State B: GOTO C;
State C: GOTO D;
State D: GOTO A;
TEST_VECTORS ([R, H,] -> [Q1, Q0])
[0, .X.] -> [0, 0] ;
[1, . C.] -> [0, 1] ;
[1, . C.] -> [1, 0] ;
[1, . C.] -> [1, 1] ;
[1, . C.] -> [0, 0] ;
END
5.2- Description par équation :
MODULE Compteur
TITLE ‘Compteur modulo 4'
DECLARATIONS
Compteur device ‘P16V8’ ; // PLD à programmer
H, R pin 1, 2 ; // Variables d'entrée
Q0, Q1 pin 15, 14 Istype 'reg, buffer '; // Variables de sortie
Q = [Q1,Q0] ; // Définition du bus Q
EQUATIONS
Q.clk = H ;
Q.AR = ! R;
When R == 0 then Q := 0 ELSE Q := Q + 1 ;
TEST_VECTORS ([R, H,] -> [Q1, Q0])
[0, .X.] -> [0, 0] ;
[1, . C.] -> [0, 1] ;
[1, . C.] -> [1, 0] ;
[1, . C.] -> [1, 1] ;
[1, . C.] -> [0, 0] ;
END
5.3- Description par Table de vérité :
MODULE Compteur
TITLE ‘Compteur modulo 4'
Compteur device ‘P16V8’
DECLARATIONS
Compteur device ‘P16V8’ ; // PLD à programmer
H, R pin 1, 2 ; // Variables d'entrée
Q0, Q1 pin 15, 14 Istype 'reg, buffer '; // Variables de sortie
EQUATIONS
[Q1, Q0].clk = H ;
[Q1, Q0].AR = ! R;
TEST_VECTORS ([R, H,] :> [Q1, Q0])
[0, .X.] :> [0, 0] ;
[1, . C.] :> [0, 1] ;
[1, . C.] :> [1, 0] ;
[1, . C.] :> [1, 1] ;
[1, . C.] :> [0, 0] ;
الصفحة Préparation BAC : Juin 2025 Fonction : Traiter l'information YOUNESS
6 Sciences de l'ingénieur : ATC PLD : Circuits Logiques Programmables 06.78.26.25.20
7
Méthode 2 :
TEST_VECTORS ([R, H,] -> [Q1, Q0])
[0, .X.] -> [0, 0] ;
[1, . C.] -> [0, 1] ;
[1, . C.] -> [1, 0] ;
[1, . C.] -> [1, 1] ;
[1, . C.] -> [0, 0] ;
END
6- Compteur modulo 5 réversible :
6.1- Description par diagramme d’état :
MODULE Compteur_reversible
TITLE ‘Compteur modulo 5'
DECLARATIONS
Compteur device ‘P16V8’ ; // PLD à programmer
H, R, Y pin 1, 2, 3 ; // Variables d'entrée
Q0, Q1, Q2 pin 14, 15, 16 Istype 'reg, buffer '; // Variables sortie
EQUATIONS
[Q2, Q1, Q0].clk = H ;
[Q2, Q1, Q0].AR = ! R;
QSTATE = [Q2, Q1, Q0];
A = [0, 0, 0];
B = [0, 0, 1];
C = [0, 1, 0];
D = [0, 1, 1];
E = [0, 1, 1];
STATE_DIAGRAM QSTATE
State A: When Y = = 1 Then B Else E;
State B: When Y = = 1 Then C Else A;
State C: When Y = = 1 Then D Else B;
State D: When Y = = 1 Then E Else C;
State E: When Y = = 1 Then A Else D;
TEST_VECTORS ([R, H, Y] -> [Q2, Q1, Q0])
[0, .X., .X.] -> [0, 0, 0] ;
[1, .C., 1] -> [0, 0, 1] ;
[1, .C., 1] -> [0, 1, 0] ;
[1, .C., 1] -> [0, 1, 1] ;
[1, .C., 1] -> [1, 0, 0] ;
[1, .C., 1] -> [0, 0, 0] ;
[1, .C., 0] -> [1, 0, 0] ;
[1, .C., 0] -> [0, 1, 1] ;
[1, .C., 0] -> [0, 1, 0] ;
[1, .C., 0] -> [0, 0, 1] ;
[1, .C., 0] -> [0, 0, 0] ;
END
الصفحة Préparation BAC : Juin 2025 Fonction : Traiter l'information YOUNESS
7 Sciences de l'ingénieur : ATC PLD : Circuits Logiques Programmables 06.78.26.25.20
7
6.2- Description par table de vérité :
MODULE Compteur_reversible
TITLE ‘Compteur modulo 5'
DECLARATIONS
Compteur device ‘P16V8’ ; // PLD à programmer
H, R, Y pin 1, 2, 3 ; // Variables d'entrée
Q0, Q1, Q2 pin 14, 15, 16 Istype 'reg, buffer '; // Variables sortie
EQUATIONS
[Q2, Q1, Q0].clk = H ;
[Q2, Q1, Q0].AR = ! R;
TRUTH_TABLE ([R, Y, Q2, Q1, Q0] :> [Q2, Q1, Q0])
[0, .X., .X., .X., .X.] :> [0, 0, 0] ;
[1, 1, 0, 0, 0] :> [0, 0, 1] ;
[1, 1, 0, 0, 1] :> [0, 1, 0] ;
[1, 1, 0, 1, 0] :> [0, 1, 1] ;
[1, 1, 0, 1, 1] :> [1, 0, 0] ;
[1, 1, 1, 0, 0] :> [0, 0, 0] ;
[1, 0, 0, 0, 0] :> [1, 0, 0] ;
[1, 0, 1, 0, 0] :> [0, 1, 1] ;
[1, 0, 0, 1, 1] :> [0, 1, 0] ;
[1, 0, 0, 1, 0] :> [0, 0, 1] ;
[1, 0, 0, 0, 1] :> [0, 0, 0] ;
TEST_VECTORS ([R, H, Y] -> [Q2, Q1, Q0])
[0, .X., .X.] -> [0, 0, 0] ;
[1, . C., 1] -> [0, 0, 1] ;
[1, . C., 1] -> [0, 1, 0] ;
[1, . C., 1] -> [0, 1, 1] ;
[1, . C., 1] -> [1, 0, 0] ;
[1, . C., 1] -> [0, 0, 0] ;
[1, . C., 0] -> [1, 0, 0] ;
[1, . C., 0] -> [0, 1, 1] ;
[1, . C., 0] -> [0, 1, 0] ;
[1, . C., 0] -> [0, 0, 1] ;
[1, . C., 0] -> [0, 0, 0] ;
END
6.3- Description par équation :
MODULE Compteur_reversible
TITLE ‘Compteur modulo 5'
DECLARATIONS
Compteur device ‘P16V8’ ; // PLD à programmer
H, R, Y pin 1, 2, 3 ; // Variables d'entrée
Q0, Q1, Q2 pin 14, 15, 16 Istype 'reg, buffer '; // Variables sortie
Q = [Q2, Q1, Q0] ; // Définition du bus Q
EQUATIONS
Q.clk = H ;
Q.AR = ! R;
When R == 0 then Q := 0 Else When H == 1 then Q := Q + 1
Else Q := Q – 1 ;
When Q > 4 then Q := 0 ;
END