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

De troyesGEII
Aller à : navigation, rechercher
m (Exercice 1 : Multiplieur de deux nombres de 2 bits)
m (Exercice 3 Transcodeur pour dé)
Ligne 185 : Ligne 185 :
  
 
==Exercice 3 Transcodeur pour dé==
 
==Exercice 3 Transcodeur pour dé==
 +
 +
; Table de vérité
 +
:{| border cellspacing="0" width="150"
 +
|- style = "background:#b3e2d1;text-align:center"
 +
| colspan="3"|Entrées||colspan="7"|Sorties
 +
|- style="text-align:center"
 +
|'''e2'''||'''e1'''||'''e0'''||'''D7'''||'''D6'''||'''D5'''||'''D4'''||'''D3'''||'''D2'''||'''D1'''
 +
|- style="text-align:center"
 +
|0||0||0||0||0||0||0||0||0||0
 +
|- style="text-align:center"
 +
|0||0||1||0||0||0||1||0||0||0
 +
|- style="text-align:center"
 +
|0||1||0||1||0||0||0||0||1||0
 +
|- style="text-align:center"
 +
|0||1||1||1||0||0||1||0||0||1
 +
|- style="text-align:center"
 +
|1||0||0||1||0||1||0||1||0||1
 +
|- style="text-align:center"
 +
|1||0||1||1||0||1||1||1||0||1
 +
|- style="text-align:center"
 +
|1||1||0||1||1||1||0||1||1||1
 +
|- style="text-align:center"
 +
|1||1||1||0||0||0||0||0||0||0
 +
|}

Version du 24 septembre 2020 à 16:04

Il s’agit d’une page protégée.

TP2

Exercice 1 : Multiplieur de deux nombres de 2 bits

Si X est un nombre sur 2 bits (X1,X0)2, Y est un nombre sur 2 bits (Y1,Y0)2 alors le réultat Z est un nombre sur 4 bits (Z3,Z2,Z1,Z0)2. En effet, X et Y qui sont donc sur 2 bits peuvent varier entre 0 et 3 et donc leur produit Z entre 0 et 9 ce qui est un nombre sur 4 bits.

Table de vérité
Entrées Sorties Résultat numérique
X Y Z Z = X x Y
X1 X0 Y1 Y0 Z3 Z2 Z1 Z0
0 0 0 0 0 0 0 0 0 = 0 x 0
0 0 0 1 0 0 0 0 0 = 0 x 1
0 0 1 0 0 0 0 0 0 = 0 x 2
0 0 1 1 0 0 0 0 0 = 0 x 3
0 1 0 0 0 0 0 0 0 = 1 x 0
0 1 0 1 0 0 0 1 1 = 1 x 1
0 1 1 0 0 0 1 0 2 = 1 x 2
0 1 1 1 0 0 1 1 3 = 1 x 3
1 0 0 0 0 0 0 0 0 = 2 x 0
1 0 0 1 0 0 1 0 2 = 2 x 1
1 0 1 0 0 1 0 0 4 = 2 x 2
1 0 1 1 0 1 1 0 6 = 2 x 3
1 1 0 0 0 0 0 0 0 = 3 x 0
1 1 0 1 0 0 1 1 3 = 3 x 1
1 1 1 0 0 1 1 0 6 = 3 x 2
1 1 1 1 1 0 0 1 9 = 3 x 3

Exercice 2 : Transcodeur binaire 7 segments

Si l'on vous demande de lire attentivement la première ligne de la table de vérité, c'est simplement pour vous faire constater qu'un zéro se fait en éteignant le segment 'g' et que donc pour éteindre un segment il faut lui mettre un 1 logique ce qui permet de déduire que pour allumer un segment il faut mettre un 0 logique.

Table de vérité
Entrées Sorties
sw3 sw2 sw1 sw0 g f e d c b a
0 0 0 0 1 0 0 0 0 0 0
0 0 0 1 1 1 1 1 0 0 1
0 0 1 0 0 1 0 0 1 0 0
0 0 1 1 0 1 1 0 0 0 0
0 1 0 0 0 0 1 1 0 0 1
0 1 0 1 0 0 1 0 0 1 0
0 1 1 0 0 0 0 0 0 1 0
0 1 1 1 1 1 1 1 0 0 0
1 0 0 0 0 0 0 0 0 0 0
1 0 0 1 0 0 1 0 0 0 0
1 0 1 0 0 0 0 1 0 0 0
1 0 1 1 0 0 0 0 0 1 1
1 1 0 0 1 0 0 0 1 1 0
1 1 0 1 0 1 0 0 0 0 1
1 1 1 0 0 0 0 0 1 1 0
1 1 1 1 0 0 0 1 1 1 0

Et voici un programme VHDL de correction qui n'utilise que des std_logic :

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
ENTITY transcod7segs IS PORT(
  sw0,sw1,sw2,sw3 : in std_logic; -- 4 entrées
  g,f,e,d,c,b,a : out std_logic); -- 7 sorties
END transcod7segs;
ARCHITECTURE arch of transcod7segs IS
  signal entree4 : std_logic_vector(3 downto 0);
  signal 7segments : std_logic_vector(6 downto 0);
BEGIN
  -- construction de l'entrée 4 bits
  entree4 <= sw3 & sw2 & sw1 & sw0;
  -- table de vérité avec with select when
  with entree4 select
                --gfedcba
    7segments <= "1000000" when "0000",
                 "1111001" when "0001",
                 "0100100" when "0010",
                 "0110000" when "0011",
                 "0011001" when "0100",
                 "0010010" when "0101",
                 "0000010" when "0110",
                 "1111000" when "0111",
                 "0000000" when "1000",
                 "0010000" when "1001",
                 "0001000" when "1010",
                 "0000011" when "1011",
                 "1000110" when "1100",
                 "0100001" when "1101",
                 "0000110" when "1110",
                 "0001110" when others;
  -- construction des sorties individuelles
  a <= 7segments(0);
  b <= 7segments(1);
  c <= 7segments(2);
  d <= 7segments(3);
  e <= 7segments(4);
  f <= 7segments(5);
  g <= 7segments(6);
END;

Il faudra lui préférer une version uniquement avec des std_logic_vectors qui est en général plus facile à câbler.

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
ENTITY transcod7segs IS PORT(
  sw : in std_logic_vector(3 downto 0);
  s7segs : out std_logic_vector(6 downto 0));
END transcod7segs;
ARCHITECTURE arch of transcod7segs IS 
BEGIN
  with sw select
             --gfedcba
    s7segs <= "1000000" when "0000",
              "1111001" when "0001",
              "0100100" when "0010",
              "0110000" when "0011",
              "0011001" when "0100",
              "0010010" when "0101",
              "0000010" when "0110",
              "1111000" when "0111",
              "0000000" when "1000",
              "0010000" when "1001",
              "0001000" when "1010",
              "0000011" when "1011",
              "1000110" when "1100",
              "0100001" when "1101",
              "0000110" when "1110",
              "0001110" when others;
END;

Son fichier csv de containtes est :

To,Direction,Location,I/O Bank,VREF Group,Fitter Location,I/O Standard,Reserved,Current Strength,Slew Rate,Differential Pair,Strict Preservation
clock_50,Input,,,,PIN_P11,3.3-V LVTTL,,,,,

SW[0],Unknown,PIN_C10,7,B7_N0,PIN_C10,3.3-V LVTTL,,,,,
SW[1],Unknown,PIN_C11,7,B7_N0,PIN_C11,3.3-V LVTTL,,,,,
SW[2],Unknown,PIN_D12,7,B7_N0,,3.3-V LVTTL,,,,,
SW[3],Unknown,PIN_C12,7,B7_N0,,3.3-V LVTTL,,,,,

s7segs[0],Unknown,PIN_C14,7,B7_N0,,3.3-V LVTTL,,,,,
s7segs[1],Unknown,PIN_E15,7,B7_N0,,3.3-V LVTTL,,,,,
s7segs[2],Unknown,PIN_C15,7,B7_N0,,3.3-V LVTTL,,,,,
s7segs[3],Unknown,PIN_C16,7,B7_N0,,3.3-V LVTTL,,,,,
s7segs[4],Unknown,PIN_E16,7,B7_N0,,3.3-V LVTTL,,,,,
s7segs[5],Unknown,PIN_D17,7,B7_N0,,3.3-V LVTTL,,,,,
s7segs[6],Unknown,PIN_C17,7,B7_N0,,3.3-V LVTTL,,,,,

Exercice 3 Transcodeur pour dé

Table de vérité
Entrées Sorties
e2 e1 e0 D7 D6 D5 D4 D3 D2 D1
0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 1 0 0 0
0 1 0 1 0 0 0 0 1 0
0 1 1 1 0 0 1 0 0 1
1 0 0 1 0 1 0 1 0 1
1 0 1 1 0 1 1 1 0 1
1 1 0 1 1 1 0 1 1 1
1 1 1 0 0 0 0 0 0 0