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

De troyesGEII
Aller à : navigation, rechercher
m (Exercice 2)
m (Question 2)
Ligne 191 : Ligne 191 :
 
END arch;
 
END arch;
 
</source>
 
</source>
 +
 +
Le fichier de contraintes peut être simpllifié à :
 +
<pre>
 +
To,Direction,Location,I/O Bank,VREF Group,Fitter Location,I/O Standard,Reserved,Current Strength,Slew Rate,Differential Pair,Strict Preservation
 +
 +
A[0],Unknown,PIN_C10,7,B7_N0,PIN_C10,3.3-V LVTTL,,,,,
 +
A[1],Unknown,PIN_C11,7,B7_N0,PIN_C11,3.3-V LVTTL,,,,,
 +
A[2],Unknown,PIN_D12,7,B7_N0,,3.3-V LVTTL,,,,,
 +
A[3],Unknown,PIN_C12,7,B7_N0,,3.3-V LVTTL,,,,,
 +
B[0],Unknown,PIN_A12,7,B7_N0,,3.3-V LVTTL,,,,,
 +
B[1],Unknown,PIN_B12,7,B7_N0,,3.3-V LVTTL,,,,,
 +
B[2],Unknown,PIN_A13,7,B7_N0,,3.3-V LVTTL,,,,,
 +
B[3],Unknown,PIN_A14,7,B7_N0,,3.3-V LVTTL,,,,,
 +
Cin,Unknown,PIN_B14,7,B7_N0,,3.3-V LVTTL,,,,,
 +
 +
S[0],Unknown,PIN_A8,7,B7_N0,PIN_A8,3.3-V LVTTL,,,,,
 +
S[1],Unknown,PIN_A9,7,B7_N0,,3.3-V LVTTL,,,,,
 +
S[2],Unknown,PIN_A10,7,B7_N0,,3.3-V LVTTL,,,,,
 +
S[3],Unknown,PIN_B10,7,B7_N0,,3.3-V LVTTL,,,,,
 +
S[4],Unknown,PIN_D13,7,B7_N0,,3.3-V LVTTL,,,,,
 +
</pre>
 +
 
==Exercice 2==
 
==Exercice 2==
 
Il n'est pas inutile de comprendre ce que fait le schéma de l'énoncé, en particulier la présence des OU EXCLUSIFs.
 
Il n'est pas inutile de comprendre ce que fait le schéma de l'énoncé, en particulier la présence des OU EXCLUSIFs.

Version du 25 septembre 2020 à 16:59

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

TP 3

Exercice 1

Question 1

La table de vérité donnée dans wikipédia est :

A B Cin S Cout
0 0 0 0 0
0 0 1 1 0
0 1 0 1 0
0 1 1 0 1
1 0 0 1 0
1 0 1 0 1
1 1 0 0 1
1 1 1 1 1

Nous allons la modifier légèrement pour ses entrées et sorties : les 3 entrées sont regroupées et les 2 sorties sont aussi regroupées ensemble

Table de vérité
Entrées Sorties
e(2)=Cin e(1)=B e(0)=A S(1)=Cout S(0)=S
0 0 0 0 0
0 0 1 0 1
0 1 0 0 1
0 1 1 1 0
1 0 0 0 1
1 0 1 1 0
1 1 0 1 0
1 1 1 1 1

ATTENTION : Nous avons aussi volontairement changé l'ordre ses entrées et des sorties.Il est préférable d'avoir les sorties dans ce sens pour avoir le poids fort des deux bits de sortie à gauche. Pour les entrées c'est moins important.

Voici le fichier VHDL correspondant :

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
ENTITY add1bit IS PORT(
  e : in std_logic_vector(2 downto 0); -- Cin, B, A
  s : out std_logic_vector(1 downto 0)); -- Cout, S
END add1bit;

ARCHITECTURE arch of add1bit IS 
BEGIN
  with e select
    S <= "00" when "000", --0+0+0=00
         "01" when "001", --0+0+1=01
         "01" when "010", --0+1+0=01
         "10" when "011", --0+1+1=10
         "01" when "100", --1+0+0=01
         "10" when "101", --1+0+1=10
         "10" when "110", --1+1+0=10
         "11" when others;--1+1+1=11
END arch;

Question 2

Il faut déjà définir les entrées et sorties de notre problème, autrement dit définir l'entité. Parmi les diverses solutions possibles, nous allons choisir

library IEEE; 
use IEEE.std_logic_1164.all; 
--use IEEE.std_logic_arith.all; 
--use IEEE.STD_LOGIC_UNSIGNED.all; 

ENTITY add4 IS
PORT (A,B : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
      Cin : IN STD_LOGIC; --retenue entrée dans le schéma
      S : OUT STD_LOGIC_VECTOR(4 DOWNTO 0)); --retenue en S(4)
END add4;

Si l'on compare au schéma de l'énoncé :

Additionneur à propagation de retenue.

on impose ainsi les correspondances suivantes :

Schéma <-> VHDL

  • REntrée <-> Cin
  • A3 <-> A(3)
  • A2 <-> A(2)
  • A1 <-> A(1)
  • A0 <-> A(0)
  • B3 <-> B(3)
  • B2 <-> B(2)
  • B1 <-> B(1)
  • B0 <-> B(0)
  • RSortie <-> S(4)
  • S3 <-> S(3)
  • S2 <-> S(2)
  • S1 <-> S(1)
  • S0 <-> S(0)

Le programme VHDL devient :

library IEEE; 
use IEEE.std_logic_1164.all; 
--use IEEE.std_logic_arith.all; 
--use IEEE.STD_LOGIC_UNSIGNED.all; 

ENTITY add4 IS
PORT (A,B : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
      Cin : IN STD_LOGIC; --retenue entrée dans le schéma
      S : OUT STD_LOGIC_VECTOR(4 DOWNTO 0)); --retenue en S(4)
END add4;

ARCHITECTURE arch_add4 of add4 IS

  COMPONENT add1bit IS PORT(
    e : in std_logic_vector(2 downto 0); -- Cin, B, A
    s : out std_logic_vector(1 downto 0)); -- Cout, S
  END COMPONENT add1bit;

  SIGNAL R1, R2, R3 : std_logic; --fils internes non nommés dans le schéma : R1 à droite
BEGIN
  i0: add1bit PORT MAP(
                 e(2) => Cin,
                 e(1) => B(0),
                 e(0) => A(0),
                 S(1) => R1,
                 S(0) => S(0)); --Il n'y a aucune ambiguité pour VHDL ici
  i1: add1bit PORT MAP(
                 e(2) => R1,
                 e(1) => B(1),
                 e(0) => A(1),
                 S(1) => R2,
                 S(0) => S(1));
  i2: add1bit PORT MAP(
                 e(2) => R2,
                 e(1) => B(2),
                 e(0) => A(2),
                 S(1) => R3,
                 S(0) => S(2));
  i3: add1bit PORT MAP(
                 e(2) => R3,
                 e(1) => B(3),
                 e(0) => A(3),
                 S(1) => S(4),
                 S(0) => S(1));                     
END arch_add4

--******** Composant à câbler *********
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

ENTITY add1bit IS PORT(
  e : in std_logic_vector(2 downto 0); -- Cin, B, A
  s : out std_logic_vector(1 downto 0)); -- Cout, S
END add1bit;

ARCHITECTURE arch of add1bit IS 
BEGIN
  with e select
    S <= "00" when "000", --0+0+0=00
         "01" when "001", --0+0+1=01
         "01" when "010", --0+1+0=01
         "10" when "011", --0+1+1=10
         "01" when "100", --1+0+0=01
         "10" when "101", --1+0+1=10
         "10" when "110", --1+1+0=10
         "11" when others;--1+1+1=11
END arch;

Le fichier de contraintes peut être simpllifié à :

To,Direction,Location,I/O Bank,VREF Group,Fitter Location,I/O Standard,Reserved,Current Strength,Slew Rate,Differential Pair,Strict Preservation

A[0],Unknown,PIN_C10,7,B7_N0,PIN_C10,3.3-V LVTTL,,,,,
A[1],Unknown,PIN_C11,7,B7_N0,PIN_C11,3.3-V LVTTL,,,,,
A[2],Unknown,PIN_D12,7,B7_N0,,3.3-V LVTTL,,,,,
A[3],Unknown,PIN_C12,7,B7_N0,,3.3-V LVTTL,,,,,
B[0],Unknown,PIN_A12,7,B7_N0,,3.3-V LVTTL,,,,,
B[1],Unknown,PIN_B12,7,B7_N0,,3.3-V LVTTL,,,,,
B[2],Unknown,PIN_A13,7,B7_N0,,3.3-V LVTTL,,,,,
B[3],Unknown,PIN_A14,7,B7_N0,,3.3-V LVTTL,,,,,
Cin,Unknown,PIN_B14,7,B7_N0,,3.3-V LVTTL,,,,,

S[0],Unknown,PIN_A8,7,B7_N0,PIN_A8,3.3-V LVTTL,,,,,
S[1],Unknown,PIN_A9,7,B7_N0,,3.3-V LVTTL,,,,,
S[2],Unknown,PIN_A10,7,B7_N0,,3.3-V LVTTL,,,,,
S[3],Unknown,PIN_B10,7,B7_N0,,3.3-V LVTTL,,,,,
S[4],Unknown,PIN_D13,7,B7_N0,,3.3-V LVTTL,,,,,

Exercice 2

Il n'est pas inutile de comprendre ce que fait le schéma de l'énoncé, en particulier la présence des OU EXCLUSIFs.

  • Passer du binaire au code EXCESS-3 revient à ajouter 3, d'où la présence de l'additionneur avec les entrées (B3,B2,B1,B0) fixées à (GND,GND,Vcc,Vcc) c'est à dire (0,0,1,1)2 c'est à dire 3. C'est vrai que l'on passe à travers des OU EXCLUSIFs mais si vous mettez le Cin Global à 0 les OU EXCLUSIFS sont équivalents à des fils simples !!!!
  • Si vous mettez le Cin Global à 1, les OU EXCLUSIFS sont équivalents à des inverseurs logiques ce qui rentre donc dans (B3,B2,B1,B0) est (0,0,1,1)2 c'est à dire le complément bit à bit de 310 + la retenue Cin = 1. On fait donc un complément logique bit à bit auquel on ajoute un et cela s'appelle un complément à deux qui revient à faire une soustraction.

Comme d'habitude la résolution du problème passe par la définition des entrées/sorties c'est à dire de l'entité. On vous propose donc l'entité suivante :

library IEEE; 
use IEEE.std_logic_1164.all; 

ENTITY XS3Reversible IS
PORT (E : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
      Cin : IN STD_LOGIC; --retenue pour choix du sens de codage
      Cout : OUT STD_LOGIC; -- il y a une retenue en sortie de add4 : S(4)
      s : OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); 
END XS3Reversible;

Voici donc le code VHDL global :

library IEEE; 
use IEEE.std_logic_1164.all; 
--use IEEE.std_logic_arith.all; 
--use IEEE.STD_LOGIC_UNSIGNED.all;
 
ENTITY XS3Reversible IS
PORT (E : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
      Cin : IN STD_LOGIC; --retenue pour choix du sens de codage
      Cout : OUT STD_LOGIC; -- il y a une retenue en sortie de add4
      s : OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); 
END XS3Reversible;

ARCHITECTURE arch_XS3Reversible OF XS3Reversible IS
--Question 2 de l'exercice 1
  COMPONENT add4 IS
  PORT (A,B : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
        Cin : IN STD_LOGIC; --retenue entrée dans le schéma
        S : OUT STD_LOGIC_VECTOR(4 DOWNTO 0)); --retenue en S(4)
  END COMPONENT add4;
-- fils internes entre les sorties des ou exclusifs et les entrées B(i) de l'additionneur
  SIGNAL s_B : STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
  -- Fabrication des fils internes avec les OU EXCLUSIFs
  s_B(0) <= B(0) XOR Cin;
  s_B(1) <= B(0) XOR Cin;
  s_B(2) <= B(2) XOR Cin;
  s_B(3) <= B(3) XOR Cin;
  -- cablage du 7483 = add4
  i0: add4 PORT MAP(
              A => E,
              B => s_B,
              Cin => Cin,
              S(3 DOWNTO 0) => S,
              S(4) => Cout);
END arch_XS3Reversible;

auquel vous ajoutez votre code de l'exercice 1 (question 2) ou le code plus compact de l'énoncé qui a la même entité.

Le fichier de contrainte peut être simplifié à :

To,Direction,Location,I/O Bank,VREF Group,Fitter Location,I/O Standard,Reserved,Current Strength,Slew Rate,Differential Pair,Strict Preservation

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

S[0],Unknown,PIN_A8,7,B7_N0,PIN_A8,3.3-V LVTTL,,,,,
S[1],Unknown,PIN_A9,7,B7_N0,,3.3-V LVTTL,,,,,
S[2],Unknown,PIN_A10,7,B7_N0,,3.3-V LVTTL,,,,,
S[3],Unknown,PIN_B10,7,B7_N0,,3.3-V LVTTL,,,,,
Cout,Unknown,PIN_D13,7,B7_N0,,3.3-V LVTTL,,,,,

Exercice 3