Vous êtes sur la page 1sur 2

Masters Mécatronique & Microsystèmes 1 / PICS1 Jeudi 6 janvier 2011

FPGA/CPLD – VHDL 15h-16h30

Documents/calculatrices interdits

1) Que signifient les sigles CPLD, FPGA et VHDL ? (points négatifs si faux)

2) Quelles sont les différences entre un CPLD et un FPGA.

3) Quelle est la différence entre un signal et une variable? Dans quelles parties du programme
sont-ils respectivement déclarés? Pour un diviseur de fréquence, va-t-on utiliser un signal ou
une variable ? (justifiez)

4) Quelle est la différence entre les instructions dans un process et celles hors d’un process ?

5) Quelle technique peut-on utiliser en graphique pour stabiliser des signaux de sortie (pour
éviter les "glitchs")? Même question en VHDL.

6) Pourquoi vaut-il mieux utiliser l'entrée enable d'un compteur plutôt que l'entrée horloge
pour une horloge secondaire?

7) Qu’est ce que la structure « pipe-line » ? Son but, ses avantages/défauts ? Illustrez votre
réponse avec un exemple (en l’expliquant).

8) Complétez le chronogramme du programme suivant:


LIBRARY ieee; ARCHITECTURE archi OF DS2 IS
USE ieee.std_logic_1164.all; SIGNAL b: STD_LOGIC ;
USE ieee.std_logic_arith.all; BEGIN
ENTITY DS2 IS PROCESS
PORT ( BEGIN
a, h: IN STD_LOGIC; WAIT UNTIL h='1';
s: OUT STD_LOGIC b <= a;
); s <= b;
END DS2; END PROCESS;
END archi;
9) Une célèbre voiture d'une série américaine possède le jeu de lumière suivant:
XXXOOOOO
OXXXOOOO

OOOOOXXX
OOOOXXXO

XXXOOOOO avec X lumière allumée et O lumière éteinte
Tracer le graphe d'état correspondant à ce fonctionnement en précisant bien vos entrées et
sorties et tous autres choix qui vous semblent nécessaires.

10) Ecrivez en VHDL (on s'attardera surtout à la structure plutôt qu'à une syntaxe exacte) un
registre à décalage de 3 étages avec des mots d'un octet

8 D Q D Q D Q
8
clk

11) Ecrire en VHDL un compteur de parité d’un mot de 8 bits (sortie d’un bit valant 0 si le
nombre de 0 du mot de 8 bits est pair, 1 sinon).

12) Expliquez ce que fait globalement (PAS ligne par ligne !) cette description suivante :

LIBRARY ieee; BEGIN


USE ieee.std_logic_1164.all; wait until h ='1' ;
USE ieee.numeric_std.all; if hor >=25174999 then
ENTITY exam2 IS hor <= 0;
PORT ( if comp > "000" then comp <= comp -1 ;
h, sel: IN STD_LOGIC; else comp <= "000";
data : IN STD_LOGIC_VECTOR(7 end if;
downto 0); else hor <= hor +1 ;
seg : OUT STD_LOGIC_VECTOR (1 to if sel = '1' then
7)); tmp := 0;
END exam2; for i in 0 to 7 loop
if data(i) = '1' then
ARCHITECTURE archi OF exam2 IS tmp := tmp +1;
component seven_seg is end if;
port ( end loop;
entree : in std_logic_vector (3 downto 0); comp <= to_unsigned(tmp,3);
sortie : out std_logic_vector (1 to 7)); else comp <= comp;
end component; end if;
SIGNAL hor : integer range 0 to 2517499; end if;
SIGNAL comp : unsigned (2 downto 0); end process;
aff: seven_seg PORT MAP (std_logic_vector('0'
BEGIN &comp) ,seg);
PROCESS end archi;
variable tmp : integer;