Documente Academic
Documente Profesional
Documente Cultură
Université de Carthage
جعمتيةةقرطعج
0 f b
Mux 4 bits 7 bits
Décodeur
Circuit de Z 7 segments CodeHex
D 4 bits Y 4 bits g
décalages 1 (Dec7seg)
(SHIFTER) e c
1 bit
Sel
d
3 bits
Fct
1) Décrire en VHDL le circuit multiplexeur, appelé Mux. (1 point )
-- Question1 ----MUX ------------- P1: process(Sel,D,Y)
------------------------------------ begin
library ieee; if(Sel = '1') then
use ieee.std_logic_1164.all; Z <= Y;
entity mux is else
port Z <= D;
( Sel : in std_logic; end if;
D,Y : in std_logic_vector(3 downto 0);
Z: out std_logic_vector(3 downto 0) end process P1;
);
end mux; end comport;
architecture comport of mux is
begin
2) On suppose que le décodeur 7 segment est de type anode commune, c'est-à-dire un 0 Volt sur un segment
permet son allumage et un 5 Volt (1 logique) permet de l’éteindre. On suppose aussi que les segments sont
connectés comme suit :
- Segment a est connecté à CodeHex(0) Exemple : Le code du chiffre 0 (Z = "0000") sera alors décodé à
- Segment b est connecté à CodeHex(1) CodeHex = "1000000". Uniquement le segment g est égal à 1.
- Segment c est connecté à CodeHex(2)
- Segment d est connecté à CodeHex(3) Donner la valeur de la sortie CodeHex du décodeur pour chaque
code des chiffres 0 à F.
1/5
- Segment e est connecté à CodeHex(4)
- Segment f est connecté à CodeHex(5)
- Segment g est connecté à CodeHex(6)
2/5
Donner le code VHDL comportemental de ce circuit en utilisant un processus et l’instruction case. (4 points)
library ieee; when "001" =>
use ieee.std_logic_1164.all; Y <= ((3 downto 1)=> D(2 downto 0), 0 => '0');
entity SHIFTER is -- decalage gauche
port(
Fct : in std_logic_vector(2 downto 0); when "010" =>
D : in std_logic_vector(3 downto 0); Y <= (D(0),D(3),D(2),D(1) ); -- rotation droite
Y : out std_logic_vector(3 downto 0) ); when "011" =>
end SHIFTER; Y <= (D(2),D(1),D(0),D(3) ); -- rotation gauche
architecture arch of SHIFTER is
begin when others =>
P3: process(Fct,D)
begin
Y <= D; -- pas de rotation
case Fct is end case;
when "000" => end process P3;
Y <= (3=> '0', (2 downto 0) => D(3 downto 1)); end arch;
-- decalage droite
-- Y <= '0' & D(3 downto 1);
5) Le circuit global aura comme entrées (Fct, D et sel) et comme sortie (CodeHex) comme présenté dans figure ci-
dessus. Donner la description VHDL structurelle du circuit global qui réutilise des instances des circuits décrits
dans les questions précédentes. ( 3 points)
library ieee; component SHIFTER
use ieee.std_logic_1164.all; port( Fct : in std_logic_vector(2 downto 0);
D : in std_logic_vector(3 downto 0);
entity GLOBAL is Y : out std_logic_vector(3 downto 0));
port( Fct : in std_logic_vector(2 downto 0); end component;
Sel : in std_logic;
D : in std_logic_vector(3 downto 0); begin
CodeHex : out std_logic_vector(7 downto 0) );
end GLOBAL; SHIFTER1: SHIFTER
architecture archG of GLOBAL is port map(Sel=>Sel, Fct=> Fct, Y=>Y);
signal Y, Z : std_logic_vector(3 downto 0);
component mux mux1: mux
port ( Sel : in std_logic; port map(D=>D,Sel=>Sel ,Y=>Y, Z => Z);
D,Y : in std_logic_vector(3 downto 0);
Z: out std_logic_vector(3 downto 0) );
end component; Dec7seg1: Dec7seg
port map(Z => Z, CodeHex => CodeHex);
component Dec7seg
port(Z: in std_logic_vector(3 downto 0); end archG;
CodeHex : out std_logic_vector(6 downto 0) );
end component;
6) Coder en VHDL un testbench qui pour la valeur de D égale à "0101", permet de stimuler toutes les fonctions de
décalage et d’afficher le résultat Y sur l’afficheur 7 segments. (2points)
entity TB is D <= "0101"; Fct <= "100";
end TB; Sel <= '1'; wait for 20 ns;
architecture test of TB is
component GLOBAL stimuli: process Fct <= "101";
port(Fct : in std_logic_vector(2 downto 0); begin wait for 20 ns;
Sel : in std_logic; Fct <= "000";
D : in std_logic_vector(3 downto 0); wait for 20 ns; Fct <= "110";
CodeHex:out std_logic_vector(6 downto 0)); wait for 20 ns;
end component; Fct <= "001";
wait for 20 ns; Fct <= "111";
signal D : std_logic_vector(3 downto 0); wait;
signal sel: std_logic; Fct <= "010";
signal Fct : std_logic_vector(2 downto 0); wait for 20 ns; end process stimuli;
signal CodeHex : std_logic_vector(6 downto 0);
begin Fct <= "011"; end test;
wait for 20 ns; 3/5
GLOBAL1: GLOBAL port map(Fct, Sel, D, CodeHex);
Exercice2 : Circuit de complément à 2 générique
On se propose de réaliser un circuit qui calcule le complément à 2 d’une entrée codée sur N bits. Le circuit OPP1
ci-dessous est composé de deux entrées (Xe et Ce) et deux sorties (Xs et Cs) codées toutes sur 1 bit.
1) Donner le code VHDL comportemental de ce circuit en se basant sur des instructions concurrentes
2) Coder en VHDL le circuit OPP3 en utilisant l’instruction concurrente for … generate. Indication :
exprimer la sortie S en fonction de l'entrée E et du signal interne C (exprimer S(i) en fonction de E(i) et
C(i) pour i allant de 0 à 2) (exprimer de même C(i+1) en fonction de E(i) et C(i) pour i allant de 0 à 2).
library ieee; gen1: for I in 0 t 2 generate
use ieee.std_logic_1164.all; C(I+1) <= C(I) xor E(I);
S(I) <= C(I) or E(I);
entity OPP3 is end generate gen1;
port(E : in std_logic_vector(2 downto 0);
S : out std_logic_vector(2 downto 0)); C(0) <= '0';
end OPP3; Cout <= C(3); 2 points
architecture comport3 of OPP3 is end comport3;
signal C : std_logic_vector(3 downto 0);
begin
4/5
3) Donner le code VHDL du circuit générique OPPN correspondant (le cas général de la question 2).
4) Reprendre la même question en décrivant de façon structurelle le circuit générique de paramètre N qui
réutilise N circuits OPP1.
library ieee;
use ieee.std_logic_1164.all; gen2: for I in 0 t N-1 generate
OPPx: OPP port map(
entity OPPN is Ce => C(I),
generic(N : integer := 8); Xe => E(I),
port
X(S) => S(I),
( E : in std_logic_vector(N-1 downto 0);
S : out std_logic_vector(N-1 downto 0) Cs => C(I+1)
); );
end OPPN; end generate gen2;
2 points
architecture Structurelle of OPPN is C(0) <= '0';
signal C : std_logic_vector(N downto 0); Cout <= C(N);
end Structurelle;
component OPP is
port
( Ce, Xe : in std_logic;
Xs, Cs: out std_logic
);
end component;
begin
5/5