Académique Documents
Professionnel Documents
Culture Documents
TD N°1 :
Ex1 : Comparateur
On veut modéliser un circuit permettant de comparer 2 bus de données de 8 bits, A et B, et de
générer 3 signaux de sortie :
- EQUA si les données sur les deux bus sont égales,
- SUPE si la donnée du bus A est supérieure à la donnée du bus B,
- INFE si la donnée du bus A est inférieure à la donnée du bus B,
- A et B sont des entrées du type std_logic_vecteur;
- EQUA, SUPE, INFE sont des sorties de type std_logic ;
Ex 3 : Diagramme d’état
Le système à concevoir dispose de trois entrées et de deux sorties. Les entrées sont l’horloge clk,
RAZ et la commande x ; les sorties sont S0 et S1. Les entrées et les sorties sont de type std_logic
sauf x est de type bit. La description du système se fait par un nombre fini d’états. Ci-dessous la
représentation schématique d’un système à 4 états (A, B, C et D) :
Ex 4 : Registre à décalage
Le registre à décalage commandé est représenté sur la figure suivant. Ce registre doit être capable
de réaliser un décalage vers la droite commandé par le signal ShiftR, et un décalage vers la gauche
commandé par le signal ShiftL et utilise des données de 8 bits.
• Une entrée parallèle (Din) sur 8 bits, qui est chargée dans le registre sur un front montant
d’horloge si le signal Load vaut ‘1’.
TD N°2 :
Ex 1 : Détecteur de parité
On souhaite modéliser un détecteur de parité pour des mots de 4 bits par une description VHDL qui
est composée de 2 parties :
- Interface (entité) :
Signal d’entrée (mode in) étant une donnée de type bit_vector sur 4 bits: DIN
Signaux de sortie (mode out): ODP (parité impaire de type bit), EVP (parité paire de type bit)
- Comportement (architecture) :
ODP= ‘1’ si le nombre de ‘1’ dans DIN est impaire, sinon ODP= ‘0’
EVP=‘1’ si le nombre de ‘1’ dans DIN est pair, sinon EVP= ‘0’
Ex 2 :
Registres à décalage à rétroaction linéaire, on souhaite utiliser le registre à décalage à rétroaction
linéaire normalement employé pour générer des bits aléatoires suivant pour réaliser un compteur:
Ecrivez une description comportementale en VHDL (entité et architecture) qui réalise ce circuit.
Ex 3 :
On considère la fonction incremente ci-contre:
1. Dans quelles parties d’un programme VHDL peut on insérer un tel code ? (Deux réponses au
moins)
2. Représenter le schéma généré par cette fonction si on l’applique à un vecteur de trois éléments
binaires.
3. Quelle est l’opération réalisée ?
4. Utiliser cette fonction pour réaliser un compteur binaire synchrone 16 bits qui compte à chaque
front montant d’horloge.
5. Modifier le compteur précédent pour lui adjoindre une commande raz de remise à zéro
synchrone et une commande d’autorisation de comptage EN.
Ex 4 :
La description d’état est utilisée pour décrire des systèmes séquentiels quelconques (machine
d’état). La description du système se fait par un nombre fini d’états. Ci-dessous la représentation
schématique d’un système à 4 états (M0 à M3), 2 sorties (S1 et S2), 2 entrées X et Y, sans oublier
l’entrée d’horloge qui fait avancer le processus, et celle de remise à zéro qui permet de l’initialiser :
L’état initial est M0. Les 2 sorties sont à 0. Au coup d’horloge on passe inconditionnellement à
l’état M1 sauf si la condition Y=1 a été vérifiée, ce qui mène à l’état M3 ou si X=0 a été validé ce
qui mène à M2.
TD N°3 :
Ex 1 :
Il s’agit de développer un modèle structurel d’un registre N bits avec une entrée série et une sortie
parallèle basé sur les composants des bascules D.
Les entrées: Horloge CLK (1 bit), reset RST_B remise à zéro (1 bit) asynchrone actif au niveau
bas (’0’) et données série DIN (1 bit)
Les sorties: Contenu du registre DOUT (N bits). N un paramètre générique. Faire une description
structurelle en langage VHDL (entity et architecture) d’un registre Registre série-parallèle à 16 bits
(voir shéma ci-dessus).
L’usage d’une instruction generate est requise.
Ex 2:
On considère le programme ci-dessous (écrit en VHDL) :
Library ieee;
use ieee.std_logic_1164.all;
begin
schem : process (clk)
begin
If ( clk'event and clk = '1') then
qa <= e ;
qb <= qa ;
end if;
end process schem ;
s <= qa xor qb ;
end quasi_struct ;
Ex 3 :
Le système à concevoir dispose de deux entrées et de deux sorties. Les entrées sont l’horloge clk et
la commande C ; les sorties sont S1 et S2. Les entrées et les sorties sont de type std_logic sauf C est
de type bit. Le système est actif sur front descendant. Le système répond aux chronogrammes
suivants:
TD N°4 :
Ex 1 :
Le circuit d’un registre à décalage synchrone (front montant) est donné sur la figure suivante :
Ex 2 :
On considère le programme VHDL suivant qui décrit le fonctionnement d’une bascule :
entity basc is
Port ( T, clk, init : in bit;
S: out bit);
end basc;
begin
S <= etat;
process (clk)
begin
if (clk'event and clk='1') then
if ( init ='0') then
etat <= '1';
elsif (T='0') then
etat <= not etat;
end if;
end if;
end process;
end primitive;
4. Modifier le programme précédent pour qu’il rajoute à la bascule une commande raz, de remise à
zèro, asynchrone.
5.Transformer le programme pour qu’il utilise le type st-logic. Rajouter une commande oe de
contrôle qui fasse passer la sortie en haute impédence si oe=’0’.
Ex 3 :
Il s’agit de réaliser un signal d’horloge (CLOCK) à un fréquence de 1Hz à partir d’un quartz (OSC)
qui génère un signal d’horloge à 10 MHz, qu’il va donc falloir diviser par 10.106 afin d’obtenir la
fréquence voulue. Cette opération peut se faire en 2 étapes tout d’abord avec un diviseur par 5.10 6
puis un diviseur par 2.
1. Donner la description en langage VHDL (Entity et Architecture) d’un diviseur par 5.106 à partir
de 3 compteurs 8 bits. Utiliser pour cela 3 variables (COUNT_0, COUNT_1, COUNT_2) de type
integer, représentant chacune la valeur d’un compteur.
2. Donner la description d’un diviseur par 2 en utilisant la bascule D avec remise à zèro asynchrone
(RST).
Library ieee;
use ieee.std_logic_1164.all;
entity comparateur8bits is port
(A, B: in std_logic_vector (7 downto 0);
EQUA, SUPE, INFE: out std_logic);
end comparateur8bits;
Ex 2 :
1- Le schéma correspondant
2- C’est une description comportementale, puisqu’il n’y a aucune composante. C’est un processus
combinatoire car il inclut toutes les entrées (signaux lus) dans la liste de sensitivité. De plus, toutes
les valeurs possibles de sel sont traitées.
Ex 3 :
Library ieee;
use ieee.std_logic_1164.all;
-- entity statement
-- architecture statement
End FSM;
library ieee;
use ieee.std_logic_1164.all;
--library SYNTH ;
--use SYNTH.vhdlsynth.all ;
BEGIN
Par M.JAROU 10 | P a g e
Elément de Module : Electronique numérique 2 ENSAK-Cycle ingénieur
TD N°2 :
Ex 1 :
Library ieee;
use ieee.std_logic_1164.all;
Par M.JAROU 11 | P a g e
Elément de Module : Electronique numérique 2 ENSAK-Cycle ingénieur
Ex 2 :
entity compteur
port( clk, reset: in std logic;
S0, S1, S2: out std logic));
end entity compteur;
Ex 3 :
1. La définition d'un sous programme VHDL appartient à une zone déclarative ou à une
bibliothèque d'objets ressources. La fonction peut être définie dans :
La zone déclarative d'une entité,
La zone déclarative d'une architecture,
Dans un paquetage (package).
Dans la dernière méthode, qui est de loin la meilleure, la déclaration de la fonction (sa signature, ou
l'équivalent d'un prototype du langage C) appartient à l'en-tête de paquetage (package header)
tandis que la définition (le code) de la fonction appartient au corps (pacqkage body) du paquetage.
2.
4.
entity compteur is
port(hor : in bit ;
compte : out bit_vector(15 downto 0)) ;
Par M.JAROU 12 | P a g e
Elément de Module : Electronique numérique 2 ENSAK-Cycle ingénieur
process
begin
wait until hor = '1' ;
cpt <= incremente(cpt) ;
end process ;
end fonc ;
5.
entity compteur is
port(hor, en, raz : in bit ;
compte : out bit_vector(15 downto 0)) ;
function incremente (e : in bit_vector)
-- suite de la définition de la fonction
end incremente ;
end compteur ;
Par M.JAROU 13 | P a g e
Elément de Module : Electronique numérique 2 ENSAK-Cycle ingénieur
process
begin
wait until hor = '1' ; -- commandes synchrones
if raz ='0' then -- mise à zéro prioritaire
cpt <= (others => '0') ;
elsif en = '0' then -- comptage actif à '0'
cpt <= incremente(cpt) ;
end if ; -- par défaut : mémoire
end process ;
end fonc ;
6.
entity compteur is
port(hor, en, raz : in bit ;
compte : out bit_vector(15 downto 0)) ;
end compteur ;
Par M.JAROU 14 | P a g e
Elément de Module : Electronique numérique 2 ENSAK-Cycle ingénieur
Ex 4 :
library
ieee;
use ieee.std_logic_1164.all;
ENTITY machine1 IS
PORT (RAZ, horl :IN STD_LOGIC; -- Ne pas oublier remise à 0 et horloge !
X, Y :IN STD_LOGIC;
S1, S2 :OUT STD_LOGIC);
END machine1;
Par M.JAROU 15 | P a g e
Elément de Module : Electronique numérique 2 ENSAK-Cycle ingénieur
TD N°3 :
Ex1:
Library ieee;
use ieee.std_logic_1164.all;
Library ieee;
use ieee.std_logic_1164.all;
begin
cellule : for i in Nb_bits downto 0 generate
end arch_registre;
Par M.JAROU 16 | P a g e
Elément de Module : Electronique numérique 2 ENSAK-Cycle ingénieur
Ex2:
Ex3 :
Library ieee;
use ieee.std_logic_1164.all;
Par M.JAROU 17 | P a g e
Elément de Module : Electronique numérique 2 ENSAK-Cycle ingénieur
TD N°4:
Ex 1 :
library ieee;
use ieee.std_logic_1164.all;
Par M.JAROU 18 | P a g e
Elément de Module : Electronique numérique 2 ENSAK-Cycle ingénieur
Ex 2 :
1) Seul le signal d’horloge clk fait partie de la liste de sensibilité de process. Seul un changement
d’état du signal clk va déclencher le process et par conséquent évaluer les instruction de celui-
ci.
2) La commande « init » est synchrone de l’horloge clk, et elle n’est pas mentionnés dans la liste
de sensiblité du process, par conséquence le process ne sera déclenché que par le signal
d’horloge clk. La commande ne fera que si un front montant sur clk aura lieu.
3) chronogramme
4)
entity basc is
Port ( T, clk, init,raz : in bit;
S: out bit);
end basc;
5.
Library ieee;
use ieee.std_logic_1164.all;
entity basc is
Port ( T, clk, init,raz,oe : in std_logic;
S: out std_logic);
end basc;
Par M.JAROU 19 | P a g e
Elément de Module : Electronique numérique 2 ENSAK-Cycle ingénieur
Ex 3 :
1.
Library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity div_2 is
Port ( CLOCK : inout std_logic; RST : in std_logic; Q: out
std_logic);
end div_2;
Par M.JAROU 20 | P a g e