Vous êtes sur la page 1sur 6

Rapport Présenté à

L’École Polytechnique de Tunisie

Circuits en VHDL

Réalisé par :
Youssef Hammami

Année universitaire 2022-2023


Enoncé
Le circuit d’un registre à décalage synchrone (front montant) est donné sur la figure 1 ci-jointe.

 L’horloge Clock est active sur front montant


 S0, S1 sont deux entrées de sélection qui permettent de choisir le mode de fonctionnement du
registre.
 IL et IR sont respectivement les entrées série gauche et droite
 I (I3,I2,I1,I0) Iest l’entrée de chargement parallèle sur 4 bits
 Q (Q3, Q2, Q1, Q0) est la sortie du registre sur 4bits.

Le fonctionnement de ce circuit est décrit par la table sur la figure 2 ci-jointe.


Travail demandé :
1) Ecrire le code VHDL de l’architecture correspondante à ce comportement.
2) Ecrire le code VHDL TestBench pour tester les différents scénarii de ce module
3) Donner le chronogramme de la simulation (vous pouvez utiliser l'outil en
ligne https://www.edaplayground.com/ )
Critères d'évaluation :
Description VHDL et TestBench complets et corrects, maitrise du simulateur VHDL en ligne.
Travail
1) Écrire le code VHDL

library ieee;
use ieee.std_logic_1164.all;
entity REG is port (
CLK, IR,IL,S0,S1 : in std_logic;
I : in std_logic_vector (3 downto 0);
Q : out std_logic_vector (3 downto 0));
end REG;
architecture DEC of reg is
signal QS: std_logic_vector (3 downto 0);
Begin
Q <= QS;
process ( CLK)
begin
if (CLK'event and CLK ='1') then
if (S0='0' and S1= '0') then
QS<=QS;
elsif (S0='1' and S1= '0') then
QS<=I;
elsif (S0 ='0' and S1='1') then
QS(3)<=QS(2);
QS(2)<=QS(1);
QS(1)<=QS(0);
QS(0)<=IR;
elsif (S0 ='1' and S1='1') then
QS(0)<=QS(1);
QS(1)<=QS(2);
QS(2)<=QS(3);
QS(3)<=IL;
end if;
end if;
end process;
end DEC;
2) Écrire le code VHDL TestBench

library ieee;
use ieee.std_logic_1164.all;
entity testbench is
end entity;
architecture test of testbench is
component REG port (
CLK, IR,IL,S0,S1 : in std_logic;
I: in std_logic_vector (3 downto 0);
Q : out std_logic_vector (3 downto 0));
end component;
signal CLK : std_logic := '0';
signal IR : std_logic := '0';
signal IL : std_logic := '0';
signal S0 : std_logic := '0';
signal S1 : std_logic := '0';
signal I : std_logic_vector (3 downto 0) := (others => '0');
signal Q : std_logic_vector (3 downto 0);
Begin
dut: REG port map (
CLK => CLK,
IR => IR,
IL => IL,
S0 => S0,
S1 => S1,
I => I,
Q => Q
);
CLK_process : process
begin
CLK <= not CLK ;
wait for 1 ms;
end process;
stim_proc: process
begin
S0 <= '0';
S1 <= '0';
IR <= '1';
IL <= '0';
I <= "0011";
wait for 4 ms;
S0 <= '1';
S1 <= '0';
wait for 4 ms;
S0 <= '0';
S1 <= '1';
wait for 4 ms;
S0 <= '1';
S1 <= '1';
wait for 4 ms;
end process;
END;
3)Le chronogramme de la simulation

Vous aimerez peut-être aussi