Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
et de la Recherche Scientifique
Université de Carthage
جامعـة قرطاج
corr
2 points
2 points
1
Exercice II : Circuit de régulation de la température
Un capteur de température fournit la température ambiante sur 7 bits. Le but est de maintenir la
température d’une pièce à une consigne donnée. Une sortie sera appliquée (tout ou rien) à un circuit de
chauffage pour le faire fonctionner ou l’arrêter. On appellera CHAUF cette sortie (voir figure 1).
On veut concevoir une machine à 3 états finis qui opère comme suit :
Etat1- On mesure la température (appelée TEMP) et on la compare avec la consigne (appelée CONS).
Etat2- Dans le cas où une différence positive est constatée (consigne plus chaude que la pièce), on
envoie ‘1’ en sortie "CHAUF" pendant une durée de 2 minutes.
Etat3- A la fin de cette durée, on se met dans l’état attente pendant 4 minutes où la sortie reste à ‘0’ et
ensuite on repart à l’état1 où une nouvelle lecture de température sera faite.
L’interface externe du circuit de contrôle est la présentée en figure 1. Les ports MCLK,
EN_1SEC et CHAUF sont codés sur 1 bit. On suppose que l’entrée EN_1SEC est délivrée par un
temporisateur externe qui génère une impulsion de 1 cycle à chaque seconde, il sert pour le calcul des
durées des étapes 2 et 3.
Figure 1.
II-1) Donner la machine à état Finis du système.
3 points
1 point
process(MCLK)
begin
if MCLK’event and MCLK=’1’ then 1 Point
etat_present <= etat_suiv;
end if;
end process;
2
process(EN_1SEC)
variable diff : std_logic_vector(6 downto 0);
variable cmpt: integer;
begin
If EN_1SEC =’1’ then
case etat_present is
when Etat1=>
diff:= CONS-TEMP; 2.5 Points
if diff(6)=’0’ then
etat_suiv<= Etat2 ;
Else etat_suiv<= Etat1 ;
End if ;
When Etat2=>
CHAUF<=’1’;
Cmpt:=cmpt+1;
End if ;
If cmpt= 120 then
cmpt:= 0
etat_suiv<= Etat3 ;
Else etat_suiv<= Etat2 ;
End if ;
When Etat3=>
CHAUF<=’0’;
Cmpt:=cmpt+1;
End if;
If cmpt= 240 then
etat_suiv<= Etat1 ;
cmpt:= 0
Else etat_suiv<=3;
End if;
End case;
End if;
End process;
End FSM;
Exercice III : Codeur AMI d’une ligne de transmission
Dans les transmissions téléphoniques à grande distance, les informations transitent sous forme
numérique, transmises en série (un bit à la fois), au rythme d’une horloge. Le code binaire utilisé est
transformé en un code à 3 niveaux de tension sur la ligne (câble coaxial, par exemple) comme le montre
la figure 2.
Un ZERO logique correspond toujours à une
tension nulle,
Les niveaux logiques UN sont représentés par
des impulsions, qui durent une période de
l’horloge de transmission, alternativement
positives et négatives, d’où le nom du code
AMI.
On notera que le système doit se « souvenir »
de la polarité de la dernière impulsion
transmise pour fonctionner correctement.
Figure 2.
La création des impulsions alternées passe par un changement de code : le codeur reçoit l’horloge
d’émission, hor, et les données à transmettre, din. Il fournit en sortie deux signaux binaires que nous
nommerons plus et moins, générés suivant l’algorithme ci-dessous :
si din = ‘0’ : plus = ‘0’ , moins = ‘0’ ;
si din = ‘1’ : plus = ‘1’ , moins = ‘0’ ou plus = ‘0’ , moins = ‘1’, en alternance.
3
On se propose d’étudier plusieurs solutions pour réaliser ce codeur. L’idée générale est de réaliser une
machine synchrone à quatre états, conformément à la figure 3.
Figure 3.
III-1) C’est une machine de Moore ou de Mealy ?
Moore, sorties en fonction de l’état uniquement
III-2) Proposer le code VHDL de ce codeur.
entity amicod is
port( hor, din : in std_logic ;
plus, moins : out STD_LOGIC ); 0.5 Points
end amicod ;
reg :process(hor)
begin
if (hor’event and hor=’1’) then
etat <= etsuiv;
1 Point
end if;
end process reg ;
encode : process(din,etat)
begin
--default value
etsuiv <= etat0;
case etat is
when etat0 =>
if din=’0’ the etsuiv <= etat1;
else etsuiv <= etat2; end if;
when etat1 =>
if din=’1’ the etsuiv <= etat2; 2 Points
else etsuiv <= etat1; end if;
when etat2 =>
if din=’1’ the etsuiv <= etat0;
else etsuiv <= etat3; end if;
when etat3 =>
if din=’1’ the etsuiv <= etat0;
else etsuiv <= etat3; end if;
when others;
end case;
end process encode;
4
III-3) Si on utilise deux bascules pour représenter les 4 états, donner le circuit logique du circuit
électronique du codeur.
2 Points
5
6
7
8