0% ont trouvé ce document utile (0 vote)
538 vues6 pages

Modélisation VHDL des Circuits Logiques

Le document présente plusieurs exercices sur la modélisation VHDL d'opérations arithmétiques et logiques. Les exercices portent sur la description d'additionneurs, de multiplexeurs et de multiplieurs en utilisant des opérateurs arithmétiques et logiques VHDL.

Transféré par

Sarah Nour
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)
538 vues6 pages

Modélisation VHDL des Circuits Logiques

Le document présente plusieurs exercices sur la modélisation VHDL d'opérations arithmétiques et logiques. Les exercices portent sur la description d'additionneurs, de multiplexeurs et de multiplieurs en utilisant des opérateurs arithmétiques et logiques VHDL.

Transféré par

Sarah Nour
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

ECOLE NATIONALE POLYTECHNIQUE

Département d’Electronique
Modélisation et Synthèse de Circuits Logiques

1° Année
Bibliothèques et descriptions
Série d’Exercices
Exercices
Exercice 1 Réécrire le code Vhdl de l’Additionneur complet 1 bit en utilisant l’opérateur
arithmétique + à trois entrées (a, b, et cin la retenue entrante), et deux sorties (le bit de
somme s et le bit de retenue sortante cout).
library IEEE; -Le paquetage std_logic_1164 de la
use IEEE.STD_LOGIC_1164.all; bibliothèque standard IEEE définit le type
use IEEE.NUMERIC_STD.all;
entity full_add1 is
std_logic
port( a, b, cin: in std_logic;
s, cout : out std_logicr) ; -Dans le paquetage numeric_std de IEEE,
end entity; les opérations arithmétiques se font sur des
architecture arc of full_add1 is nombres de type unsigned. Nécessité,
signal resultat : unsigned(1 downto 0); donc, de déclarer un signal intermédiaire,
begin resultat, de type unsigned sur 2 bits pour
resultat <= (‘0’ & a)+(‘0’ & b)+ (‘0’ & cin); pouvoir effectuer l'addition.
s <= resultat (0);
cout <= resultat (1); L'opérateur de concaténation & permet
end arc; l’extension à 2 bits de l’expression affecté au
signal resultat.
Exercice 2 déduire de l’exercice précédent une description structurelles d’un
Additionneur 4 bits (à base des full Adders)
library IEEE; Begin
use IEEE.STD_LOGIC_1164.all; -- Assosciation par position
use IEEE.NUMERIC_STD.all; inst_full_add0: full_adder1 port map (a(0), b(0), ‘0’, s(0), c(0));
inst_full_add1: full_adder1 port map (a(1), b(1), c(0’, s(1), c(1));
entity full_adder4 is inst_full_add2: full_adder1 port map (a(2), b(2), c(1), s(2), c(2));
port( inst_full_add3: full_adder1 port map (a(3), b(3), c(2), s(3), cout);
a, b: in std_logic_vector(3 downto 0); end arc;
s :out std_logic_vector(3 downto 0);
cout : out std_logicr;
end entity;

architecture arc of full_adder4 is


component full_add1 is
port( a, b, cin: in std_logic;
s, cout : out std_logic_vector;
end component;
signal c : unsigned(2 downto 0);
-- ou std_logic_vector(2 downto 0)
Exercice 3 : plutôt que de décrire l'additionneur 4 bits sous forme d'assemblage d'additionneurs
1 bits, on aurait pu décrire son comportement (sa fonctionnalité). En vous inspirant du code de
l'additionneur 1 bit (à base de l’opérateur +), écrivez une description concise de l'additionneur 4
bits.

ENP/ 1ère ELN Modélisation et Synthèse des Circuits Logiques MSCL


Taghi Serie de TD N°2 Page 1
Exercice 4 Exercice 5
Compléter la description VHDL suivante du Compléter la description VHDL suivante d’un
multiplexeur 8_1 circuit additionneur de 3 nombres a, b, et c utilisant
library IEEE; l’opérateur +
use IEEE.STD_LOGIC_1164.all; library IEEE;
use IEEE.NUMERIC_STD.all; use IEEE.STD_LOGIC_1164.all;
entity Mux8to1 is use IEEE.NUMERIC_STD.all;
port( Address : in STD_LOGIC_VECTOR(2 downto entity adder is
0); port( a : in std_logic_vector(7 downto 0);
IP : in STD_LOGIC_VECTOR(7 downto 0); b : in integer; c : in signed(7 downto 0));
OP : out STD_LOGIC); sum : out std_logic_vector(7 downto 0);
end entity; end entity;
architecture BEHAVIOUR of Mux8to1 is architecture behaviour of adder is
begin begin sum <= ……………………………….
OP <=IP( …… ……(Address))); end architecture;
end architecture ;

Exercice 6 Exercice 7 Multiplication non signée et multiplication


Corriger la partie architecture de la description VHDL signée
suivante d’un multiplexeur 4-1 Quelles seront les valeurs des signaux et des sorties
library ieee; générées lors de la simulation du circuit décrit ci-
use ieee.std_logic_1164.all; après :
use IEEE.NUMERIC_STD.all; library ieee;
entity mux4to1 is use ieee.std_logic_1164.all;
port( s : in std_logic_vector(1 downto 0); use ieee.std_logic_unsigned.all ;
oe : in std_logic; -- output enable use ieee.std_logic_arith.all;
a, b, c, d : in std_logic; entity nombres_signes is port(
x : out std_logic); x : out std_logic_vector(7 downto 0);
end mux4to1; y : out std_logic_vector(7 downto 0));
architecture arch of mux4to1 is end nombres_signes;
begin architecture arch_nombres_signes of nombres_signes
x <= 'Z' when oe = 0 else is
a when s = 1 else signal x1_int, x2_int : std_logic_vector(3 downto 0);
b when s = 2 else signal y1_int, y2_int : signed(3 downto 0);
c when s = 3 else signal y_int : signed(7 downto 0);
d; begin
end arch; x1_int <= "1111";
x2_int <= "1111";
x <= x1_int * x2_int;
y1_int <= "1111"; y2_int <= "1111";
y_int <= signed(y1_int) * signed(y2_int);
y <= std_logic_vector(y_int);
end arch_nombres_signes;

Exercice 8 Exercice 9 Multiplication non signée 2bits * 2bits,


Compléter la clause de contexte de la description résultat sur 4bits
VHDL suivante Compléter la clause de contexte de la description
Library ieee ; VHDL suivante
Use ieee.std_logic_1164.all ; library ieee;
……………………………….. use ieee.std_logic_1164.all;
Entity add8_v2 is ---------------------------------------
Port(a, b: in std_logic_vector(7 downto 0); entity mult_2bits is
sum: out std_logic_vector(7 downto 0)); port( a, b : in std_logic_vector(1 downto 0);
architecture arc_add8_v2 is y : out std_logic_vector(3 downto 0));
begin end mult_2bits;
sum<= a+b; architecture arch_mult_2bits of mult_2bits is
end arc_add8_v2; begin
y <= a * b; end arch_mult_2bits;

ENP/ 1ère ELN Modélisation et Synthèse des Circuits Logiques MSCL


Taghi Serie de TD N°2 Page 2
Exercice10
- Décrire l’architecture du circuit signed_mult Fonctions arithmétiques à l’aide d’opérateurs de
effectuant la multiplication signée à l’aide de décalage
l’opérateur *, recevant en entrée des entiers - Décrire les opérations effectuées par
signés codées std_logic sur 8 bits et retournant un les affectations concurrentes de
entier signé codé _logic sur 16 bits l’architecture suivante :
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
LIBRARY ieee; use IEEE.STD_LOGIC_ARITH.ALL;
USE ieee.std_logic_1164.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL;
USE ieee.std_logic_arith.ALL; entity OperationsArithmetiques is
ENTITY signed_mult IS Port (a:in STD_LOGIC_VECTOR(7downto 0);
PORT ( b : in STD_LOGIC_VECTOR(7 downto 0);
b:IN STD_LOGIC_VECTOR(7 DOWNTO 0); x1 :out STD_LOGIC_VECTOR(7 downto 0);
a:IN STD_LOGIC_VECTOR(7 DOWNTO 0); x2 :out STD_LOGIC_VECTOR(7 downto 0);
result: OUT STD_LOGIC_VECTOR (15 x3 :out STD_LOGIC_VECTOR(7 downto 0);
DOWNTO 0)); x4 :out STD_LOGIC_VECTOR(7 downto 0);
END signed_mult; x5 :out STD_LOGIC_VECTOR(7 downto 0));
ARCHITECTURE rtl OF signed_mult IS end OperationsArithmetiques;
. architecture Behavioral of
. OperationsArithmetiques is
. begin
END rtl; x1 <= "00" & a(7 downto 2);
x2 <= shr(a,"101");
x3 <= b(5 downto 0) & "00";
x4 <= shl(b,"11");
x5 <= shr(a,"10") + shl(b,"10");
end Behavioral;

Exercice 11
Réécrire le code vhdl ci-contre library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
- en utilisant le style with select, entity BBX is
port
- en utilisant le style équations logiques, ( Sel : in std_logic_vector(2 downto 0);
y : out std_logic_vector(7 downto 0) );
- quel est le circuit décrit par ce code end entity Decoder;
architecture DF of BBX is
begin
y <= "00000001" when Sel="000" else
"00000010" when Sel="001" else
"00000100" when Sel="010" else
"00001000" when Sel="011" else
"00010000" when Sel="100" else
"00100000" when Sel="101" else
"01000000" when Sel="110" else
"10000000";
end architecture Behavioral;

Exercice12
a) Décrire en Vhdl un Comparateur élémentaire de
deux nombres de un bit, retournant les valeurs sup,
inf, égal, et différent (style when else, et style with
select)
b) Déduire la description structurelle d’un
comparateur de deux entiers de 4 bits à base de
comparateurs élémentaires
c) Réécrire le code du comparateur 4 bits en utilisant
les opérateurs relationnels

ENP/ 1ère ELN Modélisation et Synthèse des Circuits Logiques MSCL


Taghi Serie de TD N°2 Page 3
Exercice 13 : calcul de l’opposé arithmétique

Le schéma ci-contre représente un


circuit de calcul de l’opposé
arithmétique d’un nombre entier
- Donner une description
structurelle à base de porte xor et
composants demi Additionneur
Prendre le soin de décrire en Vhdl
les différents composants

Exercice 14
1. Etablir une description structurelle d’un multiplexeur 4 vers 1 à base de multiplexeurs 2 vers 1,
. • Proposer d’autres solutions de réalisation de ce multiplexeur, au moyen d’instructions concurrentes.

2. Une porte universelle peut réaliser toutes les fonctions booléennes possibles de ses entrées. a.
Combien de fonctions une porte universelle à deux entrées peut-elle réaliser? b. Donner un module
VHDL pour une porte universelle à deux entrées.

3. Décrire un module en VHDL pour un décodeur d’affichage à sept segments pour les 16 chiffres en
base hexadécimale.

4. Décrire un module en VHDL qui accepte en entrée un nombre de six bits et qui a deux sorties, une
pour indiquer si le nombre est divisible par trois et l’autre s’il est divisible par cinq.

5. La fonction majorité est vraie quand le nombre de bits en entrée de valeur ‘1’ est plus grand que le
nombre de bits de valeur ‘0’.
a. Donner un module VHDL pour une fonction majorité à 4 bits.
b. Donner un module VHDL pour une fonction majorité à nombre arbitraire de bits.

6. La fonction parité est vraie si le nombre de bits en entrée égaux à ‘1’ est pair.
a. Donner un module VHDL pour une fonction parité à 4 bits.
b. Donner un module VHDL pour une fonction parité à nombre arbitraire de bits.

7. Décrire un module en VHDL qui accepte en entrée un code BCD et qui a une sortie indiquant si le
code est valide ou non.

8. Décrire un module en VHDL qui accepte en entrée deux nombres A et B exprimés en complément à
deux avec quatre bits, et avec deux sorties : une indiquant si les nombres sont identiques, et l’autre
indiquant si A est plus grand que B.

Exercice 15
Faites la conception d’un circuit numérique combinatoire qui accepte en entrée trois nombres signés
A, B, et C exprimés avec W bits et qui a pour sortie la médiane des trois nombres.
Dans une liste de nombres, la médiane est au milieu de la liste classée par ordre de grandeur. Par
exemple, la médiane de {10, -1, 7} est 7. La médiane de {15, 12, 12} est 12.
Vous pouvez utiliser des opérations logiques et arithmétiques (dont la comparaison), des
multiplexeurs, décodeurs et encodeurs, et toute porte logique. Votre circuit doit être purement
combinatoire, il ne doit pas inclure d’éléments à mémoire.
Donnez un diagramme de votre circuit identifiant clairement les entrées, les sorties, les blocs de
traitement et leurs interconnexions. Et la description VHDL

ENP/ 1ère ELN Modélisation et Synthèse des Circuits Logiques MSCL


Taghi Serie de TD N°2 Page 4
Solution : Une façon d’aborder le problème consiste
à reconnaître qu’il y a 6 possibilités pour l’ordre de
A, B, C : ABC, ACB, BAC, BCA, CAB et CBA.
Il y a plusieurs solutions possibles.
A) structurelle : utilise uniquement trois
comparateurs et un multiplexeur comme ci-contre
B)Flôt de données :.
architecture arch of mediane
is signal ApgB : std_logic := '0';
signal ApgC : std_logic := '0';
signal BpgC : std_logic := '0';
begin
ApgB <= '1' when A > B else '0';
ApgC <= '1' when A > C else '0';
BpgC <= '1' when B > C else '0';
with ApgB & ApgC & BpgC select
lamediane <= B when "000",
C when "001", A when
"011",
A when "100", C when
"110",
B when "111",
(others => 'X') when others;
end arch;

Exercice 16
Faites la conception d’un circuit numérique combinatoire qui accepte en entrée un nombre non-signé
exprimé avec 8 bits ainsi qu’un facteur exprimé avec 4 bits. La sortie doit être un produit de 12 bits du
nombre et de son facteur. Utilisez uniquement les opérations d’addition, soustraction et décalage.
Votre circuit doit être purement combinatoire, il ne doit pas inclure d’éléments à mémoire.
a. Donnez un diagramme de votre circuit.
b. Donnez sa description en VHDL.

.
Exercise 17 Code Gray
A combinational circuit is required to act as
an encoder to convert binary code into Gray
code. Determine minimum sum-of-products
expressions for the output functions G3, G2,
G1, G0. Realize the resulting functions under
the assumption that the only logic gates
available are XOR gates with 2 inputs. Write
the corresponding VHDL programs.

Exercice 18
Un décodeur Excess 3 est un circuit qui
prend comme entrée le code 4 bits E3
E 2E 1 E0 et valide une sortie parmi
les 10 (indice n de la table ci-contre). On
évitera de confondre ce circuit avec un
transcodeur BCD Excess 3. Étudier un tel
circuit, l'implanter. Écrire le programme
VHDL correspondant.

ENP/ 1ère ELN Modélisation et Synthèse des Circuits Logiques MSCL


Taghi Serie de TD N°2 Page 5
Exercice 19
Faites la conception d’un circuit numérique combinatoire qui accepte en entrée un vecteur de 8 bits
représentant un nombre positif de secondes. Votre circuit doit avoir deux sorties binaires donnant le
nombre de minutes et secondes correspondantes. Donnez un diagramme de votre circuit, ne donnez
pas de code VHDL. Indiquez la largeur des ports de sortie en bits. Vous pouvez utiliser des opérations
logiques et arithmétiques (mais pas la division ni le modulo), la comparaison, des multiplexeurs,
décodeurs et encodeurs, et toute autre porte logique de base. Votre circuit doit être purement
combinatoire, il ne doit pas inclure d’éléments à mémoire.

Exercice 20
La plupart des systèmes numériques utilisent le système binaire pour les opérations arithmétiques.
Cependant, lors de l’affichage pour des êtres humains, le système décimal est utilisé. Les circuits de
conversion entre les deux sont complexes et lents. La représentation décimale encodée en binaire
(BCD – binary coded decimal) a pour but de remédier à cette situation. En BCD, chaque chiffre d’un
nombre peut prendre une valeur entre 0 et 9, inclusivement, et est encodé sur quatre bits : {0000, 0001,
0010, 0011, 0100, 0101, 0110, 0111, 1000, 1001}.
Pour additionner deux chiffres BCD, on utilise un additionneur binaire à quatre bits et une retenue. Il y
a deux cas: soit que la somme est un chiffre BCD valide (0 à 9) ou bien la somme est égale ou
supérieure à 10. Dans le premier cas, aucune action n’est requise. Dans le deuxième cas, il faut ajouter
+6 à la somme obtenue. La combinaison de la retenue et de la somme finale produit alors un résultat
correct.
Exemple : addition 3 + 4 en BCD :
a. Donnez un diagramme d’un circuit
combinatoire pour un additionneur BCD à un
chiffre. Vous pouvez utiliser des opérations
logiques et arithmétiques (mais pas la division
ni le modulo), la comparaison, des
multiplexeurs, décodeurs et encodeurs, et
toute autre porte logique de base. Identifiez
bien chaque bloc et donnez la largeur en bits
de tous les signaux. Votre circuit doit être
purement combinatoire, il ne doit pas inclure
d’éléments à mémoire.
b. En utilisant des instances d’un module
additionneur BCD à un chiffre développé à la
partie a., donnez un diagramme d’un circuit
combinatoire pour un additionneur BCD à 8
chiffres. Vous pouvez supposer que les
additionneurs à 4 bits de votre module
peuvent accepter une retenue en entrée en
plus de produire une retenue de sortie.
Identifiez bien chaque bloc et donnez la
largeur en bits de tous les signaux. Votre
circuit doit être purement combinatoire, il ne
doit pas inclure d’éléments à mémoire.
c. En utilisant une seule instance du module
additionneur BCD à un chiffre développé à la
partie a., donnez un circuit séquentiel itératif
pour un additionneur BCD à 8 chiffres. Vous
pouvez supposer que les additionneurs à 4 bits
de votre module peuvent accepter une retenue
en entrée en plus de produire une retenue de
sortie.

ENP/ 1ère ELN Modélisation et Synthèse des Circuits Logiques MSCL


Taghi Serie de TD N°2 Page 6

Vous aimerez peut-être aussi