Vous êtes sur la page 1sur 6

ELN/FGEI/UMMTO

Corrigé Partiel FPGA & VHDL


Master 1 Électronique des Systèmes Embarqués
04 Novembre 2020 - Durée 1h30mn

Exercice 1 : (8 pts) Compteur/décompteur BCD avec entrée de préchargement


On désire implémenter un compteur/décompteur avec entrée de préchargement et sortie 7 Segments (Voir
figure ci-dessous)
Ce système est composé d’un Compteur/décompteur BCD suivi d’un décodeur BCD 7 Segments.
Qin
a
CD
Compteur/ Décodeur f b
Load g
Décompteur BCD/
Hin BCD Qout 7Segments e c

d
Reset Hout

Figure 1: Compteur/décompteur BCD à sorties 7 Segments


Les entrées du système sont :
→ CD permet de de sélectionner le comptage (CD=1) ou décomptage (CD=0).
→ Load permet de charger le compteur avec la valeur présente sur l’entrée Qin.
→ Hin signal d’horloge du compteur
→ Reset entrée de mise à zéro asynchrone du compteur (indépendante de Hin)
Et ses sorties sont :
→ Hout est une sortie d’horloge qui génère un front montant à chaque fois que le comptage passe de 0 à 9
(cas du décomptage) ou de 9 à 0 (dans le cas du comptage).
→ S est la sortie servant à piloter un afficheur 7 segments.
1. Donnez la description VHDL de ce circuit en implémentant d’abord le compteur BCD et le décodeur
comme des composants.
2. En utilisant ce circuit, réaliser un compteur/décompteur à 4 Digits (allant de 0000 ↔ 9999) qui sera
utilisé pour une bobineuse. Un capteur optique permet d'avoir le nombre de tours effectué par la
bobineuse
Donner d’abord le schéma de brochage en considérant le circuit précédent comme un composant,
puis sa description VHDL.

Exercice 2 : (6 pts) Générateur de fréquences : T Q


• Donnez la description VHDL de la bascule T dont le
fonctionnement est le suivant : Bascule
T H Q T
H
0 | Q
1 | Q Figure 2: Bascule T
On souhaite implémenter un diviseur de fréquence à base de bascule T dont le circuit est donnée sur la
figure ci-dessous. Son fonctionnement est le suivant :
Le circuit recevra sur son entrée Clk un signal carrée de fréquence f.
Start

T Q T Q T Q S8
Bascule Bascule Bascule Fréq. f/8
T T T
Clk
H H H S4
Fréquence f Fréq. f/4
S2
Fréq. f/2
Figure 3: Diviseur de fréquence

1/2
ELN/FGEI/UMMTO
Corrigé Partiel FPGA & VHDL
Master 1 Électronique des Systèmes Embarqués
04 Novembre 2020 - Durée 1h30mn

Si :
→ Start=0, les sorties restent inchangées
→ Start=1, chaque bascule divisera la fréquence du signal à son entrée H par 2. En sortie on aura alors S8
qui sera un signal carrée de fréquence f/8, S6 de fréquence f/4 et enfin S2 de fréquence f/2.
• Donnez la description VHDL de ce diviseur de fréquence en considérant la bascule T comme un
composant (déjà implémenté dans la première partie de l’exercice)

Exercice 3 : (6 pts)
→ Quelle est la fonction (détaillée) de la description VHDL suivante : Préciser les entrées sorties sur un
schéma bloc.
→ Quel est le rôle de chacune des sorties du circuit (ZERO, CARRY, ….)
LIBRARY IEEE;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

ENTITY MTH IS
PORT( X : IN UNSIGNED (7 DOWNTO 0);
Y : IN UNSIGNED (7 DOWNTO 0);
OP : IN UNSIGNED (2 DOWNTO 0);
QOUT : OUT UNSIGNED (7 DOWNTO 0);
ZERO : OUT STD_LOGIC ;
CARRY : OUT STD_LOGIC ;
UPPER : OUT STD_LOGIC ;
LOWER : OUT STD_LOGIC ;
EQUAL : OUT STD_LOGIC
);
END MTH;

ARCHITECTURE cal OF MTH IS


SIGNAL RESULT : UNSIGNED (8 DOWNTO 0);
BEGIN
PROCESS (X, Y, OP)
BEGIN
ZERO <= '1' WHEN RESULT(7 DOWNTO 0) = "00000000" ELSE '0';
IF X > Y THEN UPPER <= '1';
ELSE IF X=Y THEN EQUAL <= '1' ;
ELSE LOWER <= '1' ;
ENDIF ;
END IF ;
WITH OP SELECT RESULT <=
('0'& A ) + ('0'& B) WHEN "000",
('0'& A ) - ('0'& B) WHEN "001",
('0'& A ) * ('0'& B) WHEN "010",
('0'& A ) / ('0'& B) WHEN "011",
('0'& A ) AND ('0'& B) WHEN "100",
('0'& A ) OR ('0'& B) WHEN "101",
('0'& A ) XOR ('0'& B) WHEN "110",
NOT ('0'& A ) WHEN "111",
"000000000" WHEN others;
END PROCESS ;
QOUT <= RESULT (7 DOWNTO 0);
CARRY <= RESULT(8);
END cal;

2/2
ELN/FGEI/UMMTO
Corrigé Partiel FPGA & VHDL
Master 1 Électronique des Systèmes Embarqués
04 Novembre 2020 - Durée 1h30mn

Corrigé Exo. 1 :
Module Compteur/Décompteur BCD
entity COMPTEUR is
port (Hin, Load,CD, Reset : in std_logic;
Qin : in std_logic_vector(3 downto 0);
Hout : out std_logic ;
Qout : out std_logic_vector(3 downto 0) );
end COMPTEUR;

architecture DESCRIPTION of COMPTEUR is


signal Q : std_logic_vector(3 downto 0);
begin
process(H, Load, Reset)
Begin
if(Reset=1) then Q <= 0; - - Remise a zéro asynchrone
elsif (Load'event and Load ='1') then Q <= Qin; - - Préchargement
elsif (Hin'event and Hin ='1') then
if (CD='1') then Q <= Q+1; - - Comptage
if(Q ='1010') then Q<=0; Hout <= 1;
else Hout <= 0;
end if;
else Q <= Q-1; – Décomptage
if(Q ='1111') then Q<=9; Hout <= 1;
else Hout <= 0;
end if;
end if;
end if;
end process;
end DESCRIPTION;
Module Décodeur BCD/7Seg
entity DEC_BCD_7 is
port ( bcd: in STD_LOGIC_VECTOR (3 downto 0);
S: out STD_LOGIC_VECTOR (6 downto 0));
end DEC_BCD_7;

architecture DEC_BCD_7_arch of DEC_BCD_7 is


begin
process(bcd)
begin
case bcd is
when "0000"=>S<="1111110";
when "0001"=>S<="0110000";
when "0010"=>S<="1101101";
when "0011"=>S<="1111001";
when "0100"=>S<="0110011";
when "0101"=>S<="1011011";
when "0110"=>S<="1011111";
when "0111"=>S<="1110000";
when "1000"=>S<="1111111";
when "1001"=>S<="1111011";
when others => S<="-------";
end case;
end process;
end DEC_BCD_7_arch;

3/2
ELN/FGEI/UMMTO
Corrigé Partiel FPGA & VHDL
Master 1 Électronique des Systèmes Embarqués
04 Novembre 2020 - Durée 1h30mn

Description du Compteur/décompteur programmable sortie 7 segments


entity Cmpt7S is
port (Hin, Load,CD, Reset : in std_logic;
Qin : in std_logic_vector(3 downto 0);
Hout : out std_logic ;
S: out STD_LOGIC_VECTOR (6 downto 0) );
end Cmpt7S;

architecture CD7S of Cmpt7S is


Component COMPTEUR
port (Hin, Load,CD, Reset : in std_logic;
Qin : in std_logic_vector(3 downto 0);
Hout : out std_logic ;
Qout : out std_logic_vector(3 downto 0) );
end component;

Component DEC_BCD_7
port (bcd: in STD_LOGIC_VECTOR (3 downto 0);
S: out STD_LOGIC_VECTOR (6 downto 0));
end component

Signal Q : std_logic_vector(3 downto 0) ;


begin
instance1 : COMPTEUR port map(Hin, Load, CD, Reset, Qin, Hout, Q);
instance2 : DEC_BCD_7 port map(Q, S);
end CS7S;
Schéma du compteur 4 Digits :

S3 S2 S1 S0

S S S S
C
CD CD CD CD
L Load Load Load
Load
R Reset Reset Reset
Reset

Hin Qin Hout Hin Qin Hout Hin Qin Hout Hin Qin Hout

Clkout
Clkin H3 H2 H1

Qi2 Qi1 Qi0


Qi3

Description du compteur 4 Digits :


entity CD4DIGIT is
port (Clkin, C,L, R : in std_logic;
Qi3, Qi2, Qi1, Qi0 : in std_logic_vector(3 downto 0);
Clkout : out std_logic ;
S3, S2, S1, S0: out STD_LOGIC_VECTOR (6 downto 0) );
end CD4DIGIT;

4/2
ELN/FGEI/UMMTO
Corrigé Partiel FPGA & VHDL
Master 1 Électronique des Systèmes Embarqués
04 Novembre 2020 - Durée 1h30mn

architecture CD4D of CD4DIGIT is


Component Cmpt7S
port (Hin, Load,CD, Reset : in std_logic;
Qin : in std_logic_vector(3 downto 0);
Hout : out std_logic ;
S: out STD_LOGIC_VECTOR (6 downto 0) );
end component;

Signal H3, H2, H1 : std_logic ;


begin
instance1 : Cmpt7S port map(Clkin, L, C, R, Qi3, H3, S3);
instance2 : Cmpt7S port map(H3, L, C, R, Qi2, H2, S2);
instance3 : Cmpt7S port map(H2, L, C, R, Qi1, H1, S1);
instance4 : Cmpt7S port map(H1, L, C, R, Qi0, Clkout, S0);
end CD4D;
Corrigé Exo. 2 :
Description de la bascule T
entity BT is
port ( T, H: in STD_LOGIC;
Q: out STD_LOGIC);
end BT;

architecture BasculeT of BT is
signal Qs STD_LOGIC ;
begin
process(H)
begin
if(H’event AND H=1 AND T=1) Qs <= NOT (Qs) ;
end process;
Q <= Qs ;
end BasculeT;
Description du Générateur de fréquences
entity GF is
port (Start, Clk : in std_logic;
S8, S4, S2: out STD_LOGIC );
end GF;

architecture GenFreq of GF is

Component BT
port ( T, H: in STD_LOGIC;
Q: out STD_LOGIC);
end component

Signal Q1, Q2 : std_logic;


begin
instance1 : BT port map(Start, Clk, Q1);
instance1 : BT port map(Start, Q1, Q2);
instance1 : BT port map(Start, Q2, S8);
S4 <= Q2 ;
S2 <= Q1 ;
end CS7S;

5/2
ELN/FGEI/UMMTO
Corrigé Partiel FPGA & VHDL
Master 1 Électronique des Systèmes Embarqués
04 Novembre 2020 - Durée 1h30mn

Corrigé Exo. 3 :
UAL 8 bits réalisant 4 opérations arithmétiques (+ - * /) et 4 opérations logiques
(AND OR XOR et NOT) selon l’entrée OP qui est sur 3 bits. Elle possède une
sortie de bits d’états sur 5 bits qui indiquent :
Z si le résultat de l’opération est nul
UPPER si l’entrée X est plus grande que Y
LOWER si X est plus petit que Y
EQUAL si X=Y
CARRY si l’opération génére une retenue.

6/2

Vous aimerez peut-être aussi