Overblog
Editer la page Suivre ce blog Administration + Créer mon blog
Dr. Mohamad Alwan

Examen VHDL 1ere session 2008

 

Exercice 1 : (10 points)

 Il s’agit de développer un modèle structurel d’un registre N bits avec une entrée série et une sortie parallèle basé sur les composants des bascules D.

  Sans-titre22-copie-1.JPG

 L’entrées: Horloge CLK (1 bit), reset RST_B remise à zéro (1 bit) asynchrone actif au niveau bas (’0’), données série DIN (1 bit) et les Sorties: Contenu du registre DOUT (N bits). N un paramètre générique. Faire une description structurelle en langage VHDL (entity et architecture) d’un registre Registre série-parallèle à 16 bits (voir shéma ci-dessus) . L’usage d’une instruction generate est requise.

 

 

 

Exercice 2: (5 points)

 

On considère le programme ci-dessous (écrit en VHDL) :

 

Library ieee;

use ieee.std_logic_1164.all;

 

entity transitm is port ( clk, e : in bit ;

s : out bit );

end transitm ;

 

architecture quasi_struct of transitm is

signal qa, qb : bit ;

 

 

begin

schem : process (clk)

begin

If ( clk'event and clk = '1') then

qa <= e ;

qb <= qa ;

end if;

end process schem ;

s <= qa xor qb ;

end quasi_struct ;

 

  1. Déduire de ce programme, par une construction méthodique, un schéma (bascules

            et portes logiques).

  1. Compléter le chronogramme ci-dessous.

Sans-titre23.JPG

 

 Exercice 3 : (5 points)

 

Le système à concevoir dispose de deux entrées et de deux sorties. Les entrées sont l’horloge clk et la commande C ; les sorties sont S1 et S2. Les entrées et les sorties sont de type std_logic sauf C est de type bit. Le système est actif sur front descendant. Le système répond au chronogramme suivant :

 

 

Sans-titre3.JPG

 

 

 

Donner la description en langage VHDL (Entity et Architecture) de ce système en utilisant un process. Dans le process, utiliser l’instruction case …. is when, et l’instruction if ….. then …. else.

 

 

 

Correction

Exercice1:

 

 Library ieee;

use ieee.std_logic_1164.all;

 

Entity D_RAZ is port

(D, clk, CLR : in std_logic;

  Q : out std_logic);

End D_RAZ;

 

Architecture arch_D_RAZ of D_RAZ is

Begin

process (clk, CLR)

 

Begin

 

IF (CLR='0') then Q<='0';

ELSIF (clk'event and clk = '1') then Q<=D;

END IF;

END process;

END arch_D_RAZ;

 

Library ieee;

use ieee.std_logic_1164.all;

 

entity registre is port

(DIN, clk, REST_B : in std_logic;

DOUT : out std_logic_vector (15 downto 0));

End registre;

 

architecture arch_registre of registre is

component D_RAZ port (D, clk, CLR : in std_logic;

  Q : out std_logic);

end component;

 

signal S : std_logic_vector (15 downto 0);

 

constant Nb_bits : integer :=15;

 

begin

cellule : for i in Nb_bits downto 0 generate

 

  cellule_16 : if i = Nb_bits generate

            D_RAZN_1 : D_RAZ port map ( DIN, clk, REST_B,S(15));

       DOUT(i)<=S(i);     

       end generate cellule_16;

 

cellule_int : if (i<Nb_bits and i >0 ) generate

             

         D_RAZint : D_RAZ port map ( S(i+1), clk, REST_B,S(i));

       DOUT(i)<=S(i);       

      end generate cellule_int;

 

cellule_0 : if (i=0 ) generate

             

         D_RAZ0 : D_RAZ port map ( S(i+1), clk, REST_B,S(i));

     DOUT(0)<=S(0);        

end generate cellule_0;

 

end generate cellule;

 

end arch_registre;

 

Exercice2:

sol2.JPG

 

Exercice 3 :

 

Library ieee;

use ieee.std_logic_1164.all;

 

entity seq is port (clk: in std_logic;

C: in bit; S1,S2: out std_logic);

end seq;

 

architecture arch_seq of seq is

signal Etat : std_logic_vector (2 downto 0);

begin

process (C,clk)

 

begin

 

if (clk' event and clk ='0') then

 

case Etat is

when "000" => S1<='0' ;  S2<='0';

if C='1' then Etat <= "001";

else Etat <= "000";

end if;

 

when "001" => S1<='1' ;  S2<='0';

 

if C='0' then Etat <= "010";

else Etat <= "001";

end if;

 

when "010" => S1<='1' ;  S2<='1';

if C='0' then Etat <= "011";

else Etat <= "001";

end if;

 

when "011" => S1<='0' ;  S2<='1';

if C='0' then Etat <= "100";

else Etat <= "001";

end if;

 

when "100" => S1<='0' ;  S2<='0';

if C='0' then Etat <= "000";

end if;

 

 

When others => Etat <= "000";

end case;

end if;

end process;

end arch_seq;

 

 

 

Partager cette page
Repost0
Pour être informé des derniers articles, inscrivez vous :