Electronique numérique, Electronics
Introduction en électronique
numérique,
L'utilisation de systèmes digitaux et
numériques est en grande utilisation, large application,...Il n'y a qu'à
regarder autour de nous, et dans toutes les applications,
L’explosion de la microélectronique et
l’architecture complexe de systèmes.
Un nombre de plus en plus grand de machines
(caméra numérique, voiture, machine à laver, etc.) utilisent de l'électronique
numérique.
Nous trouvions, jusqu'à l'apparition du
microprocesseur, deux grands secteurs dans le domaine des systèmes digitaux.
Cette division a subsisté chez les
fabricants d'ordinateurs où nous trouvons encore:
•
le département matériel (hardware)
•
le département logiciel ou programmation (software)
L'apparition du microprocesseur a eu pour
effet de diminuer l'importance du matériel et de provoquer un déplacement des
moyens de traitement des circuits et des
signaux aux applications complexes.
Ce qui fait que nous nous trouvons de plus en
plus face à des programmes et aux applications électroniques qui cernent la machine au plus près.
Cela oblige les programmeurs à connaître
de mieux en mieux le matériel (hardware,
microcontrôleurs,….) pour mieux "coller" ou développer de l'application avec le programme.
Après avoir réduit le marché de la logique
câblée, le microprocesseur est parti à la conquête de l'électronique basse
fréquence.
Il a fait son entrée dans un nombre important
de secteurs (jeux, télécommunications, automatique, etc.).
L'augmentation des possibilités
d'intégration (nombre de transistors par mm2 , avec technologie 0.35 µm2
micron mètre) conduit à une nouvelle évolution.
Les circuits logiques programmables
(CPLD, FPGA,…) deviennent abordables et possibles.
La programmation des petites applications se
trouve remplacée par de la logique câblée dans ces circuits programmables et
complexes.
Cette évolution permet d'envisager une
augmentation de la vitesse de traitement des fonctions.
Jusqu'à présent, l'apprentissage de la logique
se faisait à travers la dé- couverte des fonctions logiques élémentaires
contenues dans les circuits intégrés des familles 74xxx, dont on peut voir
quelques types dans figure 1,
Les expérimentations se limitaient aux
fonctions proposées par les fabricants de ces circuits.
La conception de fonctions logiques regroupant
plusieurs de ces circuits nécessitait un câblage conséquent, et la réalisation
d'un circuit imprimé de grande surface
Fig-1
Les expérimentations se limitaient aux
fonctions proposées par les fabricants de ces circuits.
La conception de fonctions logiques
regroupant plusieurs de ces circuits électroniques nécessitait un câblage
conséquent, le développement et la réalisation d'un circuit imprimé de grande
surface.
L'apparition des circuits logiques
programmables de type PLD (Programmable Logic Device), CPLD (Complexe PLD, fig
2)
Fig-2
FPGA (Field Programmable Gate Array,
figure 1- 2, page 3)
a
permis de s'affranchir de cette limitation. En effet, l'utilisateur peut créer,
dans ces circuits, toutes les fonctions logiques qu'il souhaite avec comme
seules limitations, la place disponible dans le circuit choisi et/ou la vitesse
de fonctionnement de celui-ci.
La taille actuelle de ces circuits permet
l’intégration d’un système à processeur complet.
En anglais, l’abréviation est SoPC (SOC
System on chip programmable).
Les outils de développement mis à la
disposition des utilisateurs doivent donc permettre de passer de la description
du comportement d'une fonction logique à son câblage dans le circuit et cela de
la manière la plus simple possible.
Au début des années 90, la description
du comportement des fonctions logiques était faite par l'utilisation de langage
dit de "description de matériel".
Parmi ceux-ci, on peut citer:
La première génération de ces langages
permettaient des descriptions au niveau logique.
Il a existé deux langages:
• Le CUPL utilisé dans les années 1980 à
1994.
•
Le langage ABEL (Advanced Boolean Equation Language) utilisé dans les années
1990 à 1998 Ce langage a été créé par la société DATA I/O et utilisé ou imité
par quasiment tous les concepteurs d'outils de développement pour ce type de
circuit (XABEL pour XILINX, AHDL pour ALTERA, PLD pour ORCAD, XPLA pour
PHILIPS, etc..)
Ce langage n'est plus utilisé actuellement.
L'augmentation de la complexité des circuits
programmable a nécessité de disposer de langage permettant des descriptions de
plus haut niveau (comportementale).
Deux langages sont apparus au début des
années 1990 pour la conception de circuits ASIC (circuit intégré spécialisé).
Ils se sont imposées dés le milieu 1995 pour
les circuits logiques programmables. Il s'agit:
• Le langage VHDL (Very High Speed
Integrated Circuit, Hardware Description Language) qui a été créé pour le
développement de circuits intégrés logiques complexes.
Il doit son succès, essentiellement, à sa
standardisation sous la référence IEEE-1076, qui a permis d'en faire un langage
unique pour la description, la modélisation, la simulation, la synthèse et la
documentation.
•
Le langage VERILOG qui est proche du langage VHDL et qui est surtout utilisé
aux Etats-Unis.
• Le langage et Script Spice électrique
pour le écriture et connexion électrique sur Orcad et Cadence.
• Le langage Bython, Script Shell,…
• Le développement aujourd’hui sur les
microcontrôleurs (MPLAB par Langage C,…) aussi sur les microprocesseurs ARM7 et
ARM 9
Par langage C (soit sur Code blocks ou sur Visual C),…
Fig-3
........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
Conversion Binaire – Décimal
Exemple 1 :
1 1 0 1 1 (binaire)
1·24 + 1·23 + 0·22 + 1·21 + 1·20
16 + 8 + 0 + 2 + 1 = 27 10 (décimal)
1·24 + 1·23 + 0·22 + 1·21 + 1·20
16 + 8 + 0 + 2 + 1 = 27 10 (décimal)
Exemple2:
1 1
1 0 0
1.24 +
1.23 + 1.22 + 0.21 + 0.20 (binaire)
16 +
8 + 4 + 0
+ 0 = 28 (décimal)
Ex3 :
1 0 1 1 0 1 0 1 binaire
1·27 + 0·26 + 1·25 + 1·24 + 0·23 + 1·22 + 0·21 + 1·20
128 + 0 + 32 + 16 + 0 + 4 + 0 + 1 = 181 décimal
1·27 + 0·26 + 1·25 + 1·24 + 0·23 + 1·22 + 0·21 + 1·20
128 + 0 + 32 + 16 + 0 + 4 + 0 + 1 = 181 décimal
Ex4 :
1 0
0 1
1.23
+ 0.22 + 0.21
+ 2.20
8 + 0 +
0 + 2 =
10
Conversion Décimal – Binaire
1 5 8
décimal
1·102 + 5·101 + 8·100 num. position
1·102 + 5·101 + 8·100 num. position
en décimal
0001·(1010)10 + 0101·(1010)01 + 1000·(1010)00 =
0001·(1010)10 + 0101·(1010)01 + 1000·(1010)00 =
Système de numération Octal
et hexadécimal.
266/8 = 33 reste 2
33/8 = 4 reste 1
4/8 = 0 reste 4
26610 = 4128
33/8 = 4 reste 1
4/8 = 0 reste 4
26610 = 4128
Addition binaire :
0 + 0 = 0
1 + 0 = 1
1 + 1 = 10 = 0 + report de 1 sur le rang de gauche
1 + 1 + 1 = 11 = 1 + report de 1 sur le rang de gauche
1 + 0 = 1
1 + 1 = 10 = 0 + report de 1 sur le rang de gauche
1 + 1 + 1 = 11 = 1 + report de 1 sur le rang de gauche
………………………………………………………………………….
Portes logiques et algèbre booléenne
Tous les circuits numériques
fonctionnent en mode binaire, c'est-à-dire un mode dans lequel les signaux ne
peuvent prendre que deux valeurs, soit ’0’ ou soit ’1’.
Les valeurs ’0’ et ’1’ correspondent à des
plages de tensions définies à l'avance.
Cette caractéristique des circuits
logiques nous permet de recourir à l'algèbre de Boole pour l'analyse et la
conception de systèmes numériques.
Dans ce chapitre, nous étudierons les
portes logiques, qui constituent les blocs élémentaires des circuits logiques
et nous verrons comment il est possible de décrire leur fonctionnement grâce à
l'algèbre booléenne.
Aussi, nous vous apprendrons comment on
réussit à construire des circuits logiques en combinant les portes et comment
l'algèbre de Boole parvient à décrire et à analyser ces derniers, ces résulté.
L'algèbre booléenne se distingue
principalement de l'algèbre ordinaire par des constantes et des variables qui
ne peuvent prendre que les deux valeurs possibles 0 et 1.
Nous traduirons cela en indiquant que la
lampe est soit à ’1’ (pour allumée) ou soit à ’0’ (pour éteinte). Nous pouvons
faire de même avec un interrupteur qui est soit ouvert (’0’) ou soit fermé
(’1’).
La fonction logique OU (or) Nous utiliserons
le symbole (#) Cette fonction est très souvent représentée par le symbole (+)
La fonction logique ET (and) Nous utiliserons
le symbole (.)
La fonction logique d’inversion NON (not) Nous
utiliserons le symbole ( ¯ )
……………………………………………………………………….....
Une porte OU à deux entrées est un
circuit dont la sortie est active si l’une ou l’autre des entrées est actives.
La figure 4 nous fait voir le symbole
utilisé pour représenter une porte OU à deux entrées. De manière générale, la
fonction de sortie d’une porte OU à n entrées est active (niveau 1) si une
seule entrée est active (niveau 1).
La fonction de sortie est inactive
(niveau 0) si toutes les entrées sont inactives (niveau 0).
Dans de nombreuses littératures,
l’opérateur OU et représenté par le symbole de l’addition.
X = A + B
Nous n’utiliserons pas cette symbolique afin de ne pas confondre
l’opé- rateur logique OU avec l’opérateur arithmétique d’addition (+). Dans la
suite de ce manuel nous utiliserons le symbole # ou or pour l’opérateur logique
OU.
Fig - 4
Soit deux variables logiques
indépendantes, A et B. Quand on combine A et B au moyen de la fonction logique
ET, le résultat X s'exprime symboliquement par l’expression suivante :
X = A · B Dans cette expression, le signe · signifie l'opération booléenne ET, dont les règles d'opération sont données dans la table de vérité de la figure 5.
Fig-5
L'opération NON, contrairement aux
opérations ET et OU, ne concerne qu'une variable d'entrée.
Par exemple, si la variable A est
soumise à une opération NON, le résultat
X est donné par l'expression: où le
trait de sur alignement représente l'opération NON.
L'opération NON porte également le nom
d'inversion ou de complémentation. On trouve un autre signe pour indiquer une
inversion: il s'agit de point d’exclamation (!). Donc :
_
!A =
A
Le circuit INVERSEUR (NOT)
On peut
voir à la figure 6 le symbole d'un circuit NON, appelé plus couramment
inverseur. Un tel circuit n'a toujours qu'une entrée, et sa sortie prend le
niveau logique opposé du niveau logique de l'entrée.
L'opération NON, contrairement aux
opérations ET et OU, ne concerne qu'une variable d'entrée. Par exemple, si la
variable A est soumise à une opération NON, le résultat X est donné par
l'expression:
_
X = A
Fig - 6
La porte OU-exclusif (XOR)
La sortie d'une porte OU-exclusif est au
niveau haut seulement les deux entrées sont à des niveaux logiques différents.
Une porte O clusif n'a toujours que deux entrées.
On peut dire par là qu'il n'existe
portes OU-exclusif à trois ou quatre entrées.
Ces deux entrées sont nées pour que.
Cette
expression ainsi:
X = A ⊕B
Fig-7
De manière générale, la fonction de
sortie d’une porte OU-exclusif indique la différence entre les deux signaux
d’entrées.
La sortie est active (niveau 1) si l’état logique
des entrées est différent.
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Tout circuit logique, quelle que soit sa complexité, peut être décrit au
moyen des opérations booléennes déjà décrites parce que la porte ET, la porte
OU et la porte NON sont les circuits constitutifs élémentaires des systèmes
numériques.
Fig - 8
X <= (A and B) or C, (Script et écriture en VHDL)
...........................................................................................................
Fig-9
X <= (A and B) or C, (Script et écriture en VHDL)
Z <= (X and D) or E, (Script et écriture en VHDL)
Y <= X and D, (Script et écriture en VHDL)
………………………………………………
Fig- 10
X
<= not A or B ; (Script et écriture en VHDL)
X <= not (A or B) ; (Script et écriture en VHDL)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Fig-11
Y <=
(A.C) or ( B . not C) or (not A. B. C) ;
(Script et écriture en VHDL)
Explication :
en VHDL :
Y <= (A and C) or (B and C) ; en VHDL :
Y = AC # BC # ABC
Y <= (A and C) or (B and C) ; en VHDL :
Y = AC # BC # ABC
Exemple
Y =AC # BC
Y = (AC) ⊕ (BC)
Y =AC # BC
Y = (AC) ⊕ (BC)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
THÉORÈMES DE DE MORGAN
Deux des plus importants théorèmes de
l'algèbre booléenne nous ont été légués par le mathématicien De Morgan.
Les théorèmes de De Morgan se révèlent
d'une grande utilité pour simplifier des expressions comprenant des sommes ou
des produits de variables complémentés. Voici ces deux théorèmes:
_____ _ _
( X # Y) = X . Y
_____ _ _
( X . Y) = X # Y
…………………………………………………………………………+++++++++++++++++++++++++++++++++++++
Simplification algébrique
a. Applications successives des théorèmes de De Morgan en vue
d'obtenir une somme de produit b. Trouver des variables communes pour la mise
en facteur de ces dernière.
b. Trouver des variables communes pour la mise en facteur de ces
dernières.
Fig- 12
………………………………………………………………………………………………
On voit qu'il y a trois combinaisons qui
produisent une valeur 1 pour la sortie X.
Les termes ET pour chacune de ces combinaisons
figurent à droite de la table de vérité. Nous pouvons numéroter chaque ligne de
la table de vérité. Nous parlerons de l’équation d’un minterme.
_
_ _
X = CBA # CBA # CBA
L'expression complète s'obtient en effectuant
des OU logique de ces trois mintermes, ce qui nous donne :
Nous pouvons écrire
cette expression logique sous une forme compacte en indiquant uniquement le
numéro des mintermes à 1, soit :
X = Σ 2, 3, 7
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
On a parlé et j'ai discuté avec vous, les méthodes de
karnough dans les autres articles concernant les
circuits électroniques.
…………………………………………………….
Fig-13
Nous allons donner la description en
VHDL synthétisable du décodeur présenté sur la figure
library
IEEE;
use IEEE.Std_Logic_1164.all;
use IEEE.Std_Logic_1164.all;
entity Dec_2in4 is
port(Sel_i : in Std_Logic_vector(1 downto 0);
--
Entrees de selection
EN_i : in Std_Logic ;
-- Entree de validation
Y_o : out Std_Logic_Vector(3 downto 0)
-- sorties
);
end Dec_2in4 ;
EN_i : in Std_Logic ;
-- Entree de validation
Y_o : out Std_Logic_Vector(3 downto 0)
-- sorties
);
end Dec_2in4 ;
architecture
Flot_Dec
of Dec_2in4 is
signal Y_s : Std_Logic_Vector(3 downto 0) ;
begin
signal Y_s : Std_Logic_Vector(3 downto 0) ;
begin
-- determination de la valeur de sortie
with Sel_i select
Y_s <= "0001" when "00",
"0010" when "01",
"0100" when "10",
"1000" when "11",
"XXXX" when others ;-- simulation
-- affectation de la valeur de sortie
Y_o <= Y_s when (EN_i = '1') else
"0000";
end Flot_Dec;
++++++++++++++++++++++++++++++++++++++++++++++++
Fig-14, multiplexeur 4 in 1
library
IEEE;
use IEEE.Std_Logic_1164.all;
use IEEE.Std_Logic_1164.all;
entity
Mux_4in1
is
port(Sel_i : in Std_Logic_vector(1 downto 0);
-- Entrees de selection
EN_i : in Std_Logic ;
-- Entree de validation
D0_i, D1_i, D2_i, D3_i : in Std_Logic;
-- Entree de donnees
Y_o : out Std_Logic
-- sortie
);
end Mux_4in1 ;
architecture Flot_mux_mik of Mux_4in1 is
port(Sel_i : in Std_Logic_vector(1 downto 0);
-- Entrees de selection
EN_i : in Std_Logic ;
-- Entree de validation
D0_i, D1_i, D2_i, D3_i : in Std_Logic;
-- Entree de donnees
Y_o : out Std_Logic
-- sortie
);
end Mux_4in1 ;
architecture Flot_mux_mik of Mux_4in1 is
signal
Y_s1
: Std_Logic ;
begin
--
determination de la valeur de sortie
with Sel_i select
Y_s1 <= D0_i when "00",
D1_i when "01",
D2_i when "10",
D3_i when "11",
'X' when others; -- simulation
with Sel_i select
Y_s1 <= D0_i when "00",
D1_i when "01",
D2_i when "10",
D3_i when "11",
'X' when others; -- simulation
-- affectation de la valeur de sortie
Y_o <= Y_s1 when (EN_i = '1') else
'0';
end Flot_mux_mik;
Y_o <= Y_s1 when (EN_i = '1') else
'0';
end Flot_mux_mik;
…………………………………………………………
Commentaires
Enregistrer un commentaire