Cours:TP M1102 TP 1 Corr : Différence entre versions

De troyesGEII
Aller à : navigation, rechercher
m (Question 2 : Équation en VHDL)
m
 
(9 révisions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
 
<accesscontrol>Acces:Prof</accesscontrol>
 
 
=M1102 : TP1 : solutions=
 
=M1102 : TP1 : solutions=
 
==Exercice 0==
 
==Exercice 0==
Ligne 95 : Ligne 93 :
 
|}
 
|}
 
===Question 2 : Équation en VHDL===
 
===Question 2 : Équation en VHDL===
Voici l'équation logique simplifiée :  <math>y = e2.e1.e0 + \bar{e2} </math>.
+
Voici l'équation logique simplifiée :  y = e2.e1.e0 + /e2.
  
'''e rappeler qu'il n'y a pas de priorité des opérateurs en VHDL contrairement à l'algèbre de Boole, ce qui impose l'usage de parenthèses pour expliciter les priorités.'''
+
'''Se rappeler qu'il n'y a pas de priorité des opérateurs en VHDL contrairement à l'algèbre de Boole, ce qui impose l'usage de parenthèses pour expliciter les priorités.'''
  
 
Voici comment s'écrit l'équation en VHDL. On vous laisse écrire l'entité et l'architecture.
 
Voici comment s'écrit l'équation en VHDL. On vous laisse écrire l'entité et l'architecture.
Ligne 106 : Ligne 104 :
  
 
===Question 3===
 
===Question 3===
 +
Complétez tout ceci pour avoir l'architecture et l'entité :
 
<source lang=VHDL>
 
<source lang=VHDL>
 
   signal a : std_logic_vector(2 downto 0);
 
   signal a : std_logic_vector(2 downto 0);
Ligne 114 : Ligne 113 :
 
         '1' when others;
 
         '1' when others;
 
-- plus efficace que le listing équivalent à la table de vérité
 
-- plus efficace que le listing équivalent à la table de vérité
 +
</source>
 +
 +
==Exercice 2 : Vote au directoire==
 +
Voici la table de vérité :
 +
 +
; Table de vérité
 +
:{| border cellspacing="0" width="150"
 +
|- style = "background:#b3e2d1;text-align:center"
 +
| colspan="4"|Entrées||colspan="1"|Sortie
 +
|- style="text-align:center"
 +
|'''d'''||'''c'''||'''b'''||'''a'''||'''v'''
 +
|- style="text-align:center"
 +
|0||0||0||0||0
 +
|- style="text-align:center"
 +
|0||0||0||1||0
 +
|- style="text-align:center"
 +
|0||0||1||0||0
 +
|- style="text-align:center"
 +
|0||0||1||1||0
 +
|- style="text-align:center"
 +
|0||1||0||0||0
 +
|- style="text-align:center"
 +
|0||1||0||1||0
 +
|- style="text-align:center"
 +
|0||1||1||0||0
 +
|- style="text-align:center"
 +
|0||1||1||1||1
 +
|- style="text-align:center"
 +
|1||0||0||0||0
 +
|- style="text-align:center"
 +
|1||0||0||1||1
 +
|- style="text-align:center"
 +
|1||0||1||0||1
 +
|- style="text-align:center"
 +
|1||0||1||1||1
 +
|- style="text-align:center"
 +
|1||1||0||0||1
 +
|- style="text-align:center"
 +
|1||1||0||1||1
 +
|- style="text-align:center"
 +
|1||1||1||0||1
 +
|- style="text-align:center"
 +
|1||1||1||1||1
 +
|}
 +
Voici un morceau du programme VHDL :
 +
<source lang=VHDL>
 +
-- Vote au directoire
 +
signal e : std_logic_vector(3 downto 0);
 +
begin
 +
  e <= d&c&b&a;
 +
  with e select
 +
    v <= '0' when x"0" | x"1" | x"2" | x"3" | x"4" | x"5" | x"6" | x"8",
 +
        '1' when others;
 +
</source>
 +
 +
D'après tableau de karnaugh, on a :
 +
 +
v = a.b.c + d.c + d.a + d.b
 +
 +
On peut analyser/confirmer la logique de cette expression. Si le directeur vote oui, il suffit d'un associé votant oui pour valider le vote. Si le directeur vote non, il faut les 3 associés pour valider le vote. Et cette expression inclue le cas où tout le monde vote oui.
 +
 +
En VHDL, l'équation s'écrit :
 +
 +
<source lang=VHDL>
 +
-- Vote au directoire
 +
s <= ( a and b and c) or (d and c) or ( d and b) or (d and a);
 +
</source>
 +
 +
==Exercice 3: Vote au directoire amélioré==
 +
Voici la table de vérité :
 +
 +
; Table de vérité
 +
:{| border cellspacing="0" width="150"
 +
|- style = "background:#b3e2d1;text-align:center"
 +
| colspan="4"|Entrées||colspan="1"|Sortie
 +
|- style="text-align:center"
 +
|'''D'''||'''C'''||'''B'''||'''A'''||'''v'''
 +
|- style="text-align:center"
 +
|0||0||0||0||0
 +
|- style="text-align:center"
 +
|0||0||0||1||0
 +
|- style="text-align:center"
 +
|0||0||1||0||0
 +
|- style="text-align:center"
 +
|0||0||1||1||0
 +
|- style="text-align:center"
 +
|0||1||0||0||0
 +
|- style="text-align:center"
 +
|0||1||0||1||0
 +
|- style="text-align:center"
 +
|0||1||1||0||1
 +
|- style="text-align:center"
 +
|0||1||1||1||1
 +
|- style="text-align:center"
 +
|1||0||0||0||0
 +
|- style="text-align:center"
 +
|1||0||0||1||0
 +
|- style="text-align:center"
 +
|1||0||1||0||1
 +
|- style="text-align:center"
 +
|1||0||1||1||1
 +
|- style="text-align:center"
 +
|1||1||0||0||1
 +
|- style="text-align:center"
 +
|1||1||0||1||1
 +
|- style="text-align:center"
 +
|1||1||1||0||1
 +
|- style="text-align:center"
 +
|1||1||1||1||1
 +
|}
 +
 +
Voici un morceau du programme VHDL :
 +
<source lang=VHDL>
 +
-- Vote au directoire amélioré
 +
signal e : std_logic_vector(3 downto 0);
 +
begin
 +
  e <= D&C&B&A;
 +
  with e select
 +
    v <= '1' when x"6" | x"7" | x"A" | x"B" | x"C" | x"D" | x"E" | x"F",
 +
        '0' when others;
 +
</source>
 +
 +
D'après tableau de karnaugh, on a :
 +
 +
v = d.c + c.b + d.b
 +
 +
On peut analyser/confirmer la logique de cette expression. Si le directeur vote oui, il suffit d'un associé votant oui pour valider le vote. Si le directeur vote non, il faut les 3 associés pour valider le vote. Et cette expression inclue le cas où tout le monde vote oui.
 +
 +
En VHDL, l'équation s'écrit :
 +
 +
<source lang=VHDL>
 +
-- Vote au directoire amélioré
 +
s <= (d and c) or ( c and b) or (d and b);
 
</source>
 
</source>

Version actuelle datée du 21 juillet 2021 à 14:52

M1102 : TP1 : solutions

Exercice 0

Avec deuxième fichier pour les contraintes

library ieee;
use ieee.std_logic_1164.all;
--use ieee.std_logic_arith.all;
--use ieee.std_logic_unsigned.all;

entity exo0tp1 is port (
  e0,e1 : IN std_logic;
  s_et,s_ou : OUT std_logic);
END entity;

ARCHITECTURE behavior OF exo0tp1 IS
  SIGNAL s_e,s_s: std_logic_vector(1 downto 0);
BEGIN
  s_e <= e1 & e0; -- A retenir : manière de regrouper des signaux
  s_et <= s_s(1);
  s_ou <= s_s(0);
  WITH s_e SELECT
    s_s <= "00" WHEN "00",
           "01" WHEN "01",
           "01" WHEN "10",
           "11" WHEN others;
END behavior;

et le fichier de contrainte :

To,Direction,Location,I/O Bank,VREF Group,Fitter Location,I/O Standard,Reserved,Current Strength,Slew Rate,Differential Pair,Strict Preservation
e0,Unknown,PIN_C10,7,B7_N0,PIN_C10,3.3-V LVTTL,,,,,
e1,Unknown,PIN_C11,7,B7_N0,PIN_C11,3.3-V LVTTL,,,,,
s_et,Unknown,PIN_A8,7,B7_N0,PIN_A8,3.3-V LVTTL,,,,,
s_ou,Unknown,PIN_A9,7,B7_N0,,3.3-V LVTTL,,,,,

Avec les contraintes dans le fichier VHDL

library ieee;
use ieee.std_logic_1164.all;
--use ieee.std_logic_arith.all;
--use ieee.std_logic_unsigned.all;

entity exo0tp1 is port (
  e0,e1 : IN std_logic;
  s_et,s_ou : OUT std_logic);
END entity;

ARCHITECTURE behavior OF exo0tp1 IS
  SIGNAL s_e,s_s: std_logic_vector(1 downto 0);
  attribute chip_pin : string;
  attribute chip_pin of e0 : signal is "c10";
  attribute chip_pin of e1 : signal is "c11";
  attribute chip_pin of s_et : signal is "a8";
  attribute chip_pin of s_ou : signal is "a9";
BEGIN
  s_e <= e1 & e0; -- A retenir : manière de regrouper des signaux
  s_et <= s_s(1);
  s_ou <= s_s(0);
  WITH s_e SELECT
    s_s <= "00" WHEN "00",
           "01" WHEN "01",
           "01" WHEN "10",
           "11" WHEN others;
END behavior;

Exercice 1

Question 1

Table de vérité
Entrées Sorties
e2 e1 e0 a b s
0 0 0 0 1 1
0 0 1 0 1 1
0 1 0 0 1 1
0 1 1 1 1 1
1 0 0 0 0 0
1 0 1 0 0 0
1 1 0 0 0 0
1 1 1 1 0 1

Question 2 : Équation en VHDL

Voici l'équation logique simplifiée : y = e2.e1.e0 + /e2.

Se rappeler qu'il n'y a pas de priorité des opérateurs en VHDL contrairement à l'algèbre de Boole, ce qui impose l'usage de parenthèses pour expliciter les priorités.

Voici comment s'écrit l'équation en VHDL. On vous laisse écrire l'entité et l'architecture.

s <= (e2 and e1 and e0) or (not e2);

Question 3

Complétez tout ceci pour avoir l'architecture et l'entité :

  signal a : std_logic_vector(2 downto 0);
begin
  a <= e2 & &e1 & e0;
  with a select
    s <= '0' when "100" | "101" | "110",
         '1' when others;
-- plus efficace que le listing équivalent à la table de vérité

Exercice 2 : Vote au directoire

Voici la table de vérité :

Table de vérité
Entrées Sortie
d c b a v
0 0 0 0 0
0 0 0 1 0
0 0 1 0 0
0 0 1 1 0
0 1 0 0 0
0 1 0 1 0
0 1 1 0 0
0 1 1 1 1
1 0 0 0 0
1 0 0 1 1
1 0 1 0 1
1 0 1 1 1
1 1 0 0 1
1 1 0 1 1
1 1 1 0 1
1 1 1 1 1

Voici un morceau du programme VHDL :

-- Vote au directoire
signal e : std_logic_vector(3 downto 0);
begin
  e <= d&c&b&a;
  with e select
    v <= '0' when x"0" | x"1" | x"2" | x"3" | x"4" | x"5" | x"6" | x"8",
         '1' when others;

D'après tableau de karnaugh, on a :

v = a.b.c + d.c + d.a + d.b

On peut analyser/confirmer la logique de cette expression. Si le directeur vote oui, il suffit d'un associé votant oui pour valider le vote. Si le directeur vote non, il faut les 3 associés pour valider le vote. Et cette expression inclue le cas où tout le monde vote oui.

En VHDL, l'équation s'écrit :

-- Vote au directoire
s <= ( a and b and c) or (d and c) or ( d and b) or (d and a);

Exercice 3: Vote au directoire amélioré

Voici la table de vérité :

Table de vérité
Entrées Sortie
D C B A v
0 0 0 0 0
0 0 0 1 0
0 0 1 0 0
0 0 1 1 0
0 1 0 0 0
0 1 0 1 0
0 1 1 0 1
0 1 1 1 1
1 0 0 0 0
1 0 0 1 0
1 0 1 0 1
1 0 1 1 1
1 1 0 0 1
1 1 0 1 1
1 1 1 0 1
1 1 1 1 1

Voici un morceau du programme VHDL :

-- Vote au directoire amélioré
signal e : std_logic_vector(3 downto 0);
begin
  e <= D&C&B&A;
  with e select
    v <= '1' when x"6" | x"7" | x"A" | x"B" | x"C" | x"D" | x"E" | x"F",
         '0' when others;

D'après tableau de karnaugh, on a :

v = d.c + c.b + d.b

On peut analyser/confirmer la logique de cette expression. Si le directeur vote oui, il suffit d'un associé votant oui pour valider le vote. Si le directeur vote non, il faut les 3 associés pour valider le vote. Et cette expression inclue le cas où tout le monde vote oui.

En VHDL, l'équation s'écrit :

-- Vote au directoire amélioré
s <= (d and c) or ( c and b) or (d and b);