0% ont trouvé ce document utile (0 vote)
613 vues12 pages

Decodeur

Ce document décrit les décodeurs et encodeurs, leurs fonctionnalités, leurs tables de vérité et leurs modélisations en VHDL. Il contient des exemples d'utilisation des décodeurs et encodeurs à priorité, ainsi que leurs modélisations comportementales en VHDL.

Transféré par

REDA SAADALLAH
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
613 vues12 pages

Decodeur

Ce document décrit les décodeurs et encodeurs, leurs fonctionnalités, leurs tables de vérité et leurs modélisations en VHDL. Il contient des exemples d'utilisation des décodeurs et encodeurs à priorité, ainsi que leurs modélisations comportementales en VHDL.

Transféré par

REDA SAADALLAH
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Décodeurs et encodeurs:

description, utilisation, modélisation VHDL et implémentation

Pierre Langlois

http://creativecommons.org/licenses/by-nc-sa/2.5/ca/

INF3500 : Conception et implémentation de systèmes numériques


Décodeurs et encodeurs : sujets de ce thème

• Décodeurs:
– Fonctionnalité
– Table de vérité
– Modélisation en VHDL
– Synthèse
• Encodeurs à priorité
– Fonctionnalité
– Table de vérité
– Modélisation en VHDL
– Synthèse

INF3500 : Conception et implémentation de systèmes numériques 2


Module combinatoire utile: le décodeur – exemple d’utilisation

• Système de gicleurs automatiques domestique.


• La pression de l’aqueduc municipal est insuffisante
pour activer tous les gicleurs en même temps.
• Les gicleurs sont divisés en quatre zones.
• Une seule zone doit arroser à la fois.
• Chaque zone est munie d’une valve.
• Une seule valve s’ouvre à la fois.
• Une valve principale doit aussi être ouverte.

INF3500 : Conception et implémentation de systèmes numériques 3


Décodeur – table de vérité

• Un décodeur active un signal spécifique


correspondant à un code numérique en particulier.
• Un décodeur a n signaux d’entrée et 2n signaux de # A2 A1 A0 F7 F6 F5 F4 F3 F2 F1 F0
sortie. 0 0 0 0 0 0 0 0 0 0 0 1
1 0 0 1 0 0 0 0 0 0 1 0
– Chacun des signaux de sortie correspond à un des 2 0 1 0 0 0 0 0 0 1 0 0
mintermes et maxtermes composés des signaux 3 0 1 1 0 0 0 0 1 0 0 0
d’entrée. 4 1 0 0 0 0 0 1 0 0 0 0
– Une et une seule ligne de sortie est active à un 5 1 0 1 0 0 1 0 0 0 0 0
moment donné. 6 1 1 0 0 1 0 0 0 0 0 0
7 1 1 1 1 0 0 0 0 0 0 0
– Le numéro de la ligne active ligne correspond à la
valeur binaire appliquée aux lignes d’entrée.
Table de vérité d’un décodeur 3:8
– Selon les décodeurs, la ligne active pourra être à (A2, A1, A0) sont les entrées.
une valeur 0 ou une valeur 1, et toutes les autres (F7, F6, …, F0) sont les sorties.
lignes seront à l’autre valeur.

INF3500 : Conception et implémentation de systèmes numériques 4


Décodeur 3:8 – modèle VHDL

library ieee;
• Une assignation choisie spécifie les huit cas use ieee.std_logic_1164.all;

possibles du signal d’entrée F. entity decodeur38 is


port(
• L’utilisation de la clause others permet de A : in std_logic_vector(2 downto 0);
F: out std_logic_vector(7 downto 0)
rendre le modèle plus robuste à la simulation. En );
effet, le type std_logic peut prendre des end decodeur38;

valeurs autres que ‘0’ et ‘1’. Lors de la simulation, architecture flotDeDonnees of decodeur38 is
si le signal F prend une valeur comme « X1W », la begin
sortie du décodeur sera un vecteur de ‘X’. with A select F <=
"00000001" when "000",
• L’expression (others => ‘X’) permet "00000010" when "001",
"00000100" when "010",
d’assigner la valeur ‘X’ à chacun des éléments du "00001000" when "011",
"00010000" when "100",
vecteur F. "00100000" when "101",
"01000000" when "110",
"10000000" when "111",
(others => 'X') when others;

end flotDeDonnees;

INF3500 : Conception et implémentation de systèmes numériques 5


Parenthèse: les agrégats en VHDL
-- Exemple 1
variable Data_1 : BIT_VECTOR (0 to 3) := ('0','1','0','1'); -- assignation positionelle

-- Exemple 2
variable Data_2 : BIT_VECTOR (0 to 3) := (1=>'1',0=>'0',3=>'1',2=>'0'); -- assignation nommée

-- Exemple 3
signal Data_Bus : Std_Logic_Vector (15 downto 0);
. . .
Data_Bus <= (15 downto 8 => '0', 7 downto 0 => '1'); -- assignation positionelle avec gammes d’indices

-- Exemple 4
type Status_Record is record
Code : Integer;
Name : String (1 to 4);
end record;
variable Status_Var : Status_Record := (Code => 57, Name => "MOVE");

-- Exemple 5
signal Data_Bus : Std_Logic_Vector (15 downto 0);
. . .
Data_Bus <= (14 downto 8 => '0', others => '1'); -- utilisation du choix others (en dernier)

-- Exemple 6
signal Data_Bus : Std_Logic_Vector (15 downto 0);
. . .
Data_Bus <= (others => 'Z'); -- utilisation du choix others par lui-même

INF3500 : Conception et implémentation de systèmes numériques 6


Décodeur général – modèle VHDL

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity decodeur is
generic (
n : positive := 3 -- nombre de signaux d'entrée
);
port(
A : in std_logic_vector(n - 1 downto 0);
F: out std_logic_vector(2 ** n - 1 downto 0)
);
end decodeur;

architecture comportementale of decodeur is


begin

process(A)
begin

F <= (to_integer(unsigned(A)) => '1', others => '0');

end process;

end comportementale;

INF3500 : Conception et implémentation de systèmes numériques 7


Module combinatoire utile: l’encodeur à priorité – exemple d’utilisation

• L’indice du ‘1’ le plus significatif d’un nombre binaire non signé donne la valeur plancher du logarithme en
base 2 de ce nombre: on peut le trouver avec un encodeur à priorité.
• Les autres bits du nombre peuvent être interprétés comme une valeur binaire fractionnaire.
• La somme de l’indice et de la valeur binaire fractionnaire donne une approximation du logarithme en base 2
du nombre.

N, base N, base 2 indice du ‘1’ partie ~log2N ~log2N log2N


10 le plus fractionnaire = indice + partie fract. = indice +
significatif (base 2) partie fract.
(base 10)
4 00000100 2 .00 010.0000000 2.0 2.0
7 00000111 2 .11 010.1100000 2.75 2.8073…
15 00001111 3 .111 011.1110000 3.875 3.9068…
65 01000001 6 .000001 110.0000010 6.015625 6.0223…
237 11101101 7 .1101101 111.1101101 7.8515625 7.8887…

INF3500 : Conception et implémentation de systèmes numériques 8


Module combinatoire utile: l’encodeur à priorité – exemple d’utilisation

V erreur
encodeur à priorité
N / D
8 8:3 A / ~log2(N)
3

compte

décaleur - gauche /
8

INF3500 : Conception et implémentation de systèmes numériques 9


Encodeur à priorité – table de vérité

• Un encodeur identifie un signal actif parmi un D7 D6 D5 D4 D3 D2 D1 D0 A 2 A 1 A 0 V


ensemble de signaux, et produit un code qui 0 0 0 0 0 0 0 0 - - - 0
correspond à ce signal actif. 0 0 0 0 0 0 0 1 0 0 0 1
0 0 0 0 0 0 1 - 0 0 1 1
• Un encodeur fonctionne de façon contraire à un
0 0 0 0 0 1 - - 0 1 0 1
décodeur. 0 0 0 0 1 - - - 0 1 1 1
– Il a n lignes de sortie et 2n lignes d’entrée. 0 0 0 1 - - - - 1 0 0 1
0 0 1 - - - - - 1 0 1 1
– Le code à la sortie représente le numéro de la ligne
0 1 - - - - - - 1 1 0 1
qui est active. 1 - - - - - - - 1 1 1 1
– Un signal de sortie spécial indique si au moins une
des lignes en entrée est active.
Table de vérité partielle d’un encodeur 8:3
• Un encodeur à priorité permet d’avoir plus d’une (D7, D6, …, D0) sont les entrées.
ligne d’entrée active à la fois. La priorité peut être (A2, A1, A0 et V) sont les sorties.
accordée à la ligne ayant le plus grand ou le plus
petit numéro, ou selon un autre ordre.

INF3500 : Conception et implémentation de systèmes numériques 10


Encodeur à priorité – modèle VHDL
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
• La priorité est donnée aux lignes avec un numéro
entity encodeurP is
élevé. generic (
n : positive := 3 -- largeur du code de sortie
• Au début du processus, on donne une valeur par );
port(
défaut aux signaux de sortie V et A, au cas où D : in std_logic_vector(2 ** n - 1 downto 0); -- le bus d'entrée
A : out std_logic_vector(n - 1 downto 0); -- le code de sortie
aucune des entrées n’est active. );
V : out std_logic -- '1' si au moins un signal d'entrée est actif

• La valeur par défaut donnée au signal A est un end encodeurP;

architecture comportementale of encodeurP is


« peu-importe » (don’t-care), représenté pour le begin

type std_logic par un tiret ‘-‘. process(D)


begin
-- des valeurs par défaut sont essentielles
-- au cas où aucun signal d'entrée n'est actif
V <= '0';
A <= (others => '-');
for k in 2 ** n - 1 downto 0 loop -- priorité aux valeurs élevées
if D(k) = '1' then
A <= std_logic_vector(to_unsigned(k, n));
V <= '1';
exit; -- termine la boucle
end if;
end loop;
end process;

end comportementale;
INF3500 : Conception et implémentation de systèmes numériques 11
Vous devriez maintenant être capable de …

• Utiliser des décodeurs et des encodeurs à priorité dans


un chemin de données. (B3)
• Reconnaître et utiliser la modélisation de décodeurs et
encodeurs en VHDL. (B2, B3)
• Effectuer le processus de synthèse d’un décodeur et
d’un encodeur du modèle VHDL et son implémentation
dans un FPGA. (B3)

Code Niveau (http://fr.wikipedia.org/wiki/Taxonomie_de_Bloom)


B1 Connaissance - mémoriser de l’information.
B2 Compréhension – interpréter l’information.
B3 Application – confronter les connaissances à des cas pratiques simples.
B4 Analyse – décomposer un problème, cas pratiques plus complexes.
B5 Synthèse – expression personnelle, cas pratiques plus complexes.
INF3500 : Conception et implémentation de systèmes numériques 12

Vous aimerez peut-être aussi