Cours:TP M1102 TP 1 Corr : Différence entre versions
m (→Exercice 2) |
m (→Exercice 2) |
||
Ligne 117 : | Ligne 117 : | ||
</source> | </source> | ||
− | ==Exercice 2== | + | ==Exercice 2 : Vote au directoire== |
Voici la table de vérité : | Voici la table de vérité : | ||
Ligne 181 : | Ligne 181 : | ||
-- Vote au directoire | -- Vote au directoire | ||
s <= ( a and b and c) or (d and c) or ( d and b) or (d and a); | 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 du 23 septembre 2020 à 18:12
Il s’agit d’une page protégée.
Sommaire
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);