Exo 1
Exo 1
Exo 1
Du combinatoire au squentiel
-- comb_seq.vhd
entity comb_seq is
port (
e1, e2 : in bit ;
s_et, s_latch, s_edge : out bit
) ;
end comb_seq ;
architecture ww of comb_seq is
begin
et : process
begin
wait on e1, e2 ;
if( e1 = '1' ) then
s_et <= e2 ;
else
s_et <= '0' ;
end if ;
end process ;
latch : process
begin
wait on e1, e2 until e1 = '1' ;
s_latch <= e2 ;
end process ;
edge : process
begin
wait on e1 until e1 = '1' ;
s_edge <= e2 ;
end process ;
end ww ;
2
Montrer que les noms des processus correspondent aux oprateurs dcrits.
Proposer une criture quivalente qui utilise des listes de sensibilits sans
instructions wait .
Noter les liberts prises par certains petits compilateurs de synthse de circuits
programmables (discussion avec lenseignant).
b
3
elsif(T = '1') then
etat <= not etat;
end if;
end process;
end primitive;
2.
Variables et signaux.
a
4
Pourquoi la deuxime architecture est-elle fausse ?
Conclure quant aux comportements respectifs des variables et des signaux.
b
De la lisibilit du code.
Le programme suivant propose trois versions dun diviseur de frquence par 10 :
-- div_10.vhd
entity div_10 is
port(
hor : in bit ;
sort : buffer bit );
end div_10 ;
architecture piege of div_10 is
begin
diviseur : process
variable compte : integer range 0 to 5 := 0 ;
begin
wait until hor = '1' ;
compte := compte + 1 ;
if compte = 5 then
compte := 0 ;
sort <= not sort ;
end if ;
end process diviseur ;
end piege ;
architecture perverse of div_10 is
signal compte : integer range 0 to 4 := 0 ;
begin
diviseur : process
begin
wait until hor = '1' ;
compte <= compte + 1 ;
if compte = 4 then
compte <= 0 ;
sort <= not sort ;
end if ;
end process diviseur ;
end perverse ;
architecture correcte of div_10 is
signal compte : integer range 0 to 4 := 0 ;
begin
diviseur : process
begin
wait until hor = '1' ;
if compte = 4 then
compte <= 0 ;
sort <= not sort ;
else
compte <= compte + 1 ;
end if ;
end process diviseur ;
end correcte ;
3.
Exercice de synthse
Dans les transmissions tlphoniques grande distance, les informations transitent sous
forme numrique, transmises en srie (un bit la fois), au rythme dune horloge. Le code
binaire utilis est transform en un code 3 niveaux de tension sur la ligne (cble coaxial,
par exemple) :
un ZERO logique correspond toujours une tension nulle,
horloge
(hor)
donnes
(din)
tension
0
hor
din
etat2
moins=1
din
Complter
le
diagramme
de
transitions propos, en
Du combinatoire au squentiel
Le processus et est combinatoire : s_et prend une valeur dfinie quelques
soient les valeurs de e1 et e2.
Pour le processus latch : si e1 = 1 tout changement est report en sortie, cest le
mode transparent. Si e1 = 0 la valeur de s_latch nest pas spcifie, elle ne
change pas, donc est mmorise.
Pour le processus edge : seuls des changements de e1, suivis par une valeur de
e1 gale 1 sont susceptibles de modifier la sortie. Cest une bascule sensible
aux fronts montants de e1.
architecture ww of comb_seq is
begin
et : process (e1,e2)
begin
if( e1 = '1' ) then
s_et <= e2 ;
else
s_et <= '0' ;
end if ;
end process ;
latch : process (e1,e2)
begin
if( e1 = '1' ) then
s_latch <= e2 ;
end if ;
end process ;
edge : process (e1)
begin
if( e1 = '1' ) then
s_edge <= e2 ;
end if ;
end process ;
end ww ;
Des bascules sres :
entity d_edge is
port ( d,hor : in bit ;
s : out bit) ;
end d_edge;
architecture d_wait of d_edge is
begin
process
begin
wait until hor = '1';
s <= d ;
end process ;
end d_wait ;
Schma correspondant :
hor
ck
ck
qb
Chronogramme :
D
qa
8
La commande raz est synchrone. Pour crer une commande asynchrone, voir
question 1-a.
raz*T
1
raz+T
2.
Variables et signaux.
a
'0'
a
3.
De la lisibilit du code.
Les trois versions ralisent le mme oprateur.
En synthse, la premire version gnre un signal la place de la variable, si
loutil de synthse accepte cette construction, ce qui nest pas toujours le cas. Le
signal gnr compte de 0 4, ce qui est correct, pas de 0 5 comme la variable.
La deuxime version provoque une erreur en simulation, compte + 1 dpasse 4, il
y aurait donc dbordement sil ny avait pas linstruction if qui modifie la valeur
projete de compte.
Exercice de synthse
etat0
din
hor
din
plus
codeur
etat1
plus=1
din
din
din
etat3
moins
din
etat2
moins=1
din
<= plus
<= moins ;
<= plus ;
<= moins ;
sorties directes :