Vous êtes sur la page 1sur 2

Décodeur BCD/7seg (1): Décodeur BCD/7seg (2): entity Décodeur BCD/7seg (2): architecture (cas1)

Un décodeur BCD permet d’adapter des données binaires codées sur 4 bits
architecture decarch of decbcd7seg is
(représentant les chiffres de 0 à 9) aux entrées d’un afficheur 7 segments (chaque
a begin
entrée étant connectée à un segment et permettant de l’allumer ou de l’éteindre) b
pF BCD c
WITH BCD SELECT
a
Donnée BCD
/7 d Commande segments
a e segments<=“1111110" WHEN "0000",
pF BCD b f b pf seg f “0110000" WHEN "0001",
c
g
Donnée BCD
/7 d g h
“1101101" WHEN "0010",
e c
pf seg f
“1111001" WHEN "0011",

g
e “0110011" WHEN "0100",

h d h “1011011" WHEN "0101",


Commande segments
entity decbcd7seg is “0011111" WHEN "0110",
Port ( BCD: in std_logic_vector (3 downto 0); “1110000" WHEN "0111",
Ecrire un programme VHDL permettant de modéliser le décodeur pour les deux cas: “1111111" WHEN "1000",
segments: out std_logic_vector (7 downto 0) );
• Cas1: Les segments actifs sur niveau logique haut “1110011" WHEN "1001",
end decbcd7seg;
• Cas2: Les segments actifs sur niveau logique bas “0000000" WHEN OTHERS
end decarch;
Remarque : Ne pas tenir compte du segment h

DAMERGI Emir – INSAT 2019/20 3 DAMERGI Emir – INSAT 2019/20 4 DAMERGI Emir – INSAT 2019/20 5

Décodeur BCD/7seg (3): architecture (cas 2) Encodeur de priorité (1): Encodeur de priorité (2):
architecture decarch of decbcd7seg is
begin

WITH BCD SELECT


segments<="0000001" WHEN "0000",
"1001111" WHEN "0001",
"0010010" WHEN "0010",
Un encodeur de priorité est un circuit qui donne en sortie le numéro (codé en
0 0 0 0 0 0 1 "0000110" WHEN "0011",
1 0 0 1 1 1 1 "1001100" WHEN "0100", binaire) de l’entrée active la plus prioritaire (ei étant plus prioritaire que ej pour tout i>j).
0 0 1 0 0 1 0
Question 1 : Si p=2n, déterminer le nombre de bits en sortie (la valeur de k).
"0100100" WHEN "0101",
Par exemple, si seules les entrées e5 et e8 sont à 1, la sortie (bits sk à s0) codera 8
0 0 0 0 1 1 0 "0100000" WHEN "0110",
1 0 0 1 1 0 0 "0001111" WHEN "0111", en binaire (e8 étant plus prioritaire e5).
0 1 0 0 1 0 0 "0000000" WHEN "1000", Réponse: Pour coder 2n valuers on a besoin de n bits
Question 1 : Si p=2n, déterminer le nombre de bits en sortie (la valeur de k).
1 1 0 0 0 0 0 "0000100" WHEN "1001",
 p=2n  k=n
0 0 0 1 1 1 1 “1111111" WHEN OTHERS Question 2 : Donner le circuit « encodeur de priorité» en VHDL pour p=8.
0 0 0 0 0 0 0 end decarch;
0 0 0 1 1 0 0

DAMERGI Emir – INSAT 2019/20 6 DAMERGI Emir – INSAT 2019/20 8 DAMERGI Emir – INSAT 2019/20 9

Encodeur de priorité (3): entity Encodeur de priorité (4): architecture -1- Encodeur de priorité (4): architecture -2-

request request Architecture encodarch of encodeur is


signal output: std_logic_vector (3 downto 0);
begin
requestnbr requestnbr
requestcode requestcode output <= ‘’1111’’ when requestnbr (7)=‘1’ else
‘’1110’’ when requestnbr (6)=‘1’ else
Question 2 : Donner le circuit « encodeur de priorité » en VHDL pour p=8.
Question 2 : Donner le circuit « encodeur de priorité » en VHDL pour p=8. ‘’1101’’ when requestnbr (5)=‘1’ else
‘’1100’’ when requestnbr (4)=‘1’ else
combinatoire signal_output <= signal1 WHEN condition1 ELSE ‘’1011’’ when requestnbr (3)=‘1’ else
entity encodeur is
signal2 WHEN condition2 ELSE ‘’1010’’ when requestnbr (2)=‘1’ else
Port (requestnbr: in std_logic_vector (7 downto 0);
Conditionnel signalN WHEN conditionN ‘’1001’’ when requestnbr (1)=‘1’ else
requestcode: out std_logic_vector (2 downto 0); ‘’1000’’ when requestnbr (0)=‘1’ else
ELSE autre_signal ; ‘’0000’’;
request : out std_logic));
Priorité request <= output(3);
end encodeur
requestcode<=output(2 downto 0);
End encodarch
request & requestcode
DAMERGI Emir – INSAT 2019/20 10 DAMERGI Emir – INSAT 2019/20 11 DAMERGI Emir – INSAT 2019/20 12
Compteur/Décompteur synchrone -1- Compteur/Décompteur synchrone -2-: entity Compteur/Décompteur synchrone -3- : architecture
• Soit le compteur/décompteur 16 bits avec commande de chargement (Figure ci-dessous). Un signal temporaire pour effectuer les ARCHITECTURE aCmpt OF Compteur IS
library ieee; traitements (peut être utilisé comme entrée SIGNAL Count: std_logic_vector(15 downto 0);
BEGIN
use ieee.std_logic_1164.all; ou sortie) contrairement au signal Counter

use ieee.std_logic_unsigned.all;
priorité Liste de sensibilité = clk, signaux asynchrones PROCESS( Clk,rst )
BEGIN
IF rst=
ENTITY Compteur IS
Ordre de traitement ( if ): ELSIF (clk'event and clk='1')
PORT (
1- Signaux Asynchrones : Rst IF load
• Les signaux Load, Inc et Dec sont synchrones. clk, rst, inc, dec , load: in std_logic; 2- Signal d’horloge (Clk)
ELSIF inc
2-x: Signaux synchrone par ordre
• Le signal de remise à zéro (Rst) est asynchrone. Load_val: in std_logic_vector (15 downto 0);
ELSIF dec
de priorité Load, inc et dec
• Tous ces signaux de contrôle sont actifs au niveau logique bas. Counter : out std_logic_vector (15 downto 0) END IF;
END IF;
Question: Donner le code VHDL pour modéliser le compteur. );
A la fin du traitement (process) la sortie Counter<=Count;
END Compteur; récupère la valeur du signal temporaire
END PROCESS;

END aCmpt;
DAMERGI Emir – INSAT 2019/20 14 DAMERGI Emir – INSAT 2019/20 15 DAMERGI Emir – INSAT 2019/20 16

Compteur/Décompteur synchrone -4- : architecture Exercice : Registre à décalage série-parallèle Synthèse -1-
ARCHITECTURE aCmpt OF Compteur IS Il s’agit de développer un modèle structurel d’un registre N bits avec une entrée série
SIGNAL Count: std_logic_vector(15 downto 0); IF rst='0' THEN et une sortie parallèle basé sur des composants flip-flops
BEGIN Count<=(OTHERS=>'0'); - - Tous les bits à 0

PROCESS( clk,rst) ELSIF (clk'event and clk='1') then


BEGIN
IF rst= IF load = ‘0’ THEN Count <=Load_val;

ELSIF (clk'event and clk='1') ELSIF inc='0' THEN


IF load IF Count="1111" THEN
Count<="0000";
ELSIF inc Principe : à chaque front d’horloge, les bits sont décalés de la sortie d’une bascule (Q) à la suivante.
ELSE
Count <= Count + 1; La sortie de la bascule N-1 étant l’entrée du système DIN.
ELSIF dec Question : Le code VHDL utilisé vous semble-t-il être cohérent avec le
Les sorties des bascules représentant ainsi la sortie du système complet DOUT.
ELSIF dec='0' THEN fonctionnement désiré ? :
END IF;
IF Count=“0000" THEN • Entrées: Horloge CLK (1 bit), reset synchrone RST_B (1 bit) actif au niveau bas, données série DIN (1 bit). • donner le code correspondant au circuit
END IF;
Count<=“1111"; • Donner le circuit correspondant au code
Counter<=Count; ELSE • Sortie: Contenu du registre DOUT (N bits). N peut être un paramètre générique.
END PROCESS; Count <= Count - 1; Question 1 : Donner le code VHDL modélisant la bascule.
Rappel: Dans un process clocké, chaque affectation génère un flip-flop entre les parties gauche et droite de l’affectation
END aCmpt; END IF; Question 2 : Donner le code VHDL du système complet (Registre série-parallèle) en utilisant « generate »
17

DAMERGI Emir – INSAT 2019/20 DAMERGI Emir – INSAT 2019/20 DAMERGI Emir – INSAT 2019/20 21

Synthèse -2- Synthèse -3-

A
+ C
B Process(clk)
Begin
+ E If (clk’event and clk=‘1’) then

D C <=A+B;

E <=D+(A+B);
Dans un process clocké:
Chaque affectation génère un flip- End if
flop entre les parties gauche et End
droite de l’affectation

DAMERGI Emir – INSAT 2019/20 22 DAMERGI Emir – INSAT 2019/20 23

Vous aimerez peut-être aussi