Exercice 1 (en TD) Prise en main du logiciel Quartus II, synthse en VHDL:
Raliser le composant xor3 dcrit par le schma suivant (en gardant les noms de signaux) en
VHDL et effectuer toute la chane de dveloppement.
XOR2_A
a XOR2_B
sig_int
b x
c
Composant xor3
Structure du fichier
library IEEE;
Dclaration de la bibliothque use IEEE.std_logic_1164.all;
ENTITY xor3 IS
PORT (
a : IN STD_LOGIC;
b : IN STD_LOGIC;
c : IN STD_LOGIC;
Dclaration de lentit (brochage) x : OUT STD_LOGIC
);
END xor3;
1
11. Modifier la longueur de la simulation (1 us) et la frquence de la grille (100 ns) (
3.10.3).
12. Regrouper les signaux dentre (a, b, c) dans un groupe, par exemple aa ( 3.10.5), et
initialiser le groupe par une valeur incrmente ( 3.10.8).
13. Sauvegarder le fichier de chronogrammes sous le nom xor3.vwf.
14. Appeler, puis lancer le simulateur ( 3.11.1).
15. Vrifier les rsultats de la simulation ( 3.11.2) noter les rsultats de la fonction
logique pour diffrentes valeurs lentre et les retards de la sortie par rapport aux
entres. Comparer les avec le tableau de vrit de la fonction ralise.
Questions/problmes :
1. De combien de signaux dentres/sorties et de signaux internes dispose le module sur
la Figure 1 ?
2. Dessinez le symbole du module dvelopp.
Entres Sorties
a b s rs
0 0 0 0
0 1 1 0
1 0 1 0
1 1 0 1
A noter : Il sagit dun demi-additionneur, parce quil nadditionne pas la retenue du bit
prcdent.
Questions/problmes :
1. Compltez les chronogrammes de sorties s (somme) et rs (retenue sortante) dans la
Figure 2 et confrontez les avec le tableau de vrit du demi-additionneur.
2. En utilisant le rsultat de la simulation (temporelle), mesurez le retard du signal s la
sortie par rapport aux entres.
rs
2
Exercice 3 - Ralisation dun demi-additionneur dun bit en utilisant deux composants
une porte logique XOR deux entres et une porte logique AND deux entres :
Il sagit de crer une entit reprsentant un additionneur de deux donnes dun bit dfini dans
lexercice 2. Cet additionneur doit tre dcrit en VHDL en utilisant deux composants (dcrits
dans deux autres fichiers VHDL).
Questions/problmes :
1. Quel est la diffrence de comportement entre le module de lExercice 2 et 3 ?
Exercice 4 - Ralisation dun additionneur complet fa (FA = Full Adder) sur un bit :
Il sagit de crer en VHDL une entit reprsentant un additionneur complet sur un bit pour
satisfaire le tableau de vrit suivant :
re b a s rs
0 0 0 0 0
0 0 1 1 0
0 1 0 1 0
0 1 1 0 1
1 0 0 1 0
1 0 1 0 1
1 1 0 0 1
1 1 1 1 1
A noter : Il sagit dun additionneur complet, parce quil additionne deux donnes dentre a
et b (chacune dune largeur dun bit) plus la retenue du bit prcdent (re). Il faut deux demi-
additionneurs pour raliser un additionneur complet.
Questions/problmes :
1. Simuler le projet pour les chronogrammes dentres prsents dans la Figure 3 et
compltez dans cette figure les signaux de sorties obtenus dans la simulation.
2. Proposez le schma dun additionneur complet bas sur les demi-additionneurs.
re
rs
3
Exercice 5 (en TD) - Ralisation dun additionneur sur 4 bits :
Il sagit de crer en VHDL une entit reprsentant un additionneur complet sur 4 bits donn
par le schma de la Figure 4 :
i0 : fa
ret_e
re ret_i(1)
a(0) rs s(0)
a
b(0) s
b
i1 : fa
re ret_i (2)
a(1) rs s(1)
a
b(1) s
b
i2 : fa
re ret_i(3)
a(2) rs s(2)
a
b(2) s
b
i3 : fa
re
a(3) rs s(3)
a
b(3) s
b
ret_s
Composant add4
Questions/problmes :
1. Dessinez le symbole du module add4.
2. Combien de niveaux hirarchiques et combien de types dentits (types de modules)
contient le projet ?
3. Quel est le nombre dlments logiques (Logic Elements LE) utilis dans le projet
(suivant le rapport de compilation) ?
4. Simulez le projet pour les chronogrammes dentres suivant la Figure 5, compltez les
rsultats de la simulation dans cette mme figure.
ret_e
a 0 1 E F 7 1 8 F
b 1 1 1 1 8 F 8 F
ret_s
4
Exercice 6 - Ralisation dun additionneur sur 16 bits, base sur les additionneurs
gnriques sur 4 bits, en utilisant la structure FOR GENERATE :
Il sagit de crer une entit reprsentant un additionneur sur 16 bits donn par le schma sur la
Figure 6 et donc bas sur lutilisation de quatre composants add4.
ret_e i0 : add4
ret_e ret_i(1)
a(3..0) ret_s s(3..0)
a(3..0)
b(3..0) s(3..0)
b(3..0)
i1 : add4
ret_e ret_i(2)
a(7..4) ret_s
a(3..0) s(7..4)
b(7..4) s(3..0)
b(3..0)
i2 : add4
ret_e ret_i(3)
a(11..8) ret_s
a(3..0) s(11..8)
b(11..8) s(3..0)
b(3..0)
i3 : add4
ret_e
a(15..12) ret_s
a(3..0) s(15..12)
b(15..12) s(3..0)
b(3..0)
ret_s
Composant add16
La diffrence par rapport lExercice 5 (o vous avez d instancier quatre fois le mme
composant) est que vous devez maintenant utiliser la structure FOR GENERATE pour
effectuer une instanciation multiple du mme composant.
Questions/problmes :
1. Dessinez le symbole du module add16.
2. Combien de niveaux hirarchiques et combien de types dentits (types de modules)
contient le projet ?
3. Quel est le nombre dlments logiques (Logic Elements LE) utilis dans le projet
(suivant le rapport de compilation) ?
4. Simulez le projet pour les chronogrammes dentres suivant la Figure 7, compltez les
rsultats de la simulation dans cette mme figure.
ret_e
ret_s
5
Exercice 7 (en TD) Ralisation dun multiplexeur deux entres de 8 bits
Il sagit de crer lentit mux2x8 reprsentant un multiplexeur avec deux entres de donnes 8
bits (a et b) et une entre dun bit permettant de slectionner le canal a ou b (sel). Si sel = 0,
cest la donne du canal a qui est prsente la sortie, sinon, cest la donne du canal b.
8
a 8
8 MUX d_out
b
1
sel
Questions/problmes :
1. Faites un tableau prcisant le nombre de bits m du signal sel pour un nombre de
canaux n allant de 2 32.
2. Quel est le nombre minimum de bits m du signal sel en gnral pour slectionner un
sur n canaux (donnez la formule m = f(n)) ?
Exercice 8 (en TD) Ralisation dun codeur code un sur sept vers code binaire avec
priorit :
Il sagit de crer lentit pri_enc (Priority Encoder) reprsentant un codeur de sept bits
dentres sur un code de trois bits. Le codeur est destin coder les demandes dinterruption
arrivant de sept sources diffrentes vers un processeur : La demande req(1) tant la plus
prioritaire et la demande req(7) la moins prioritaire. On ne peut pas exclure larrive
simultane de deux demandes. On aura dans ce cas le numro de la demande plus prioritaire
la sortie du codeur. Les demandes sont actives un. Sil ny a pas de demande dinterruption,
le codeur donne 0 la sortie. Le symbole du composant est prsent sur la figure suivante :
req(1)
req(2)
req(3) 3 int
req(4)
pri_enc
req(5)
req(6)
req(7)
Questions/problmes :
1. Combien de combinaisons lentre doit-on tester pour valider le comportement du
module ?
6
Exercice 9 (en TD) Ralisation dun dcodeur code binaire sur 4 bits -> code
afficheur sept segments
Il sagit de crer une entit en VHDL permettant de dcoder une valeur binaire sur 4 bits un
code de sept bits pour afficher la valeur numrique prsente lentre du module sur un
afficheur sept segments. On suppose tout dabord dutiliser un afficheur anode commune.
Un segment est donc allum avec le niveau logique zro la sortie du dcodeur. Les segments
de lafficheur sont cods de la manire suivante :
a
f b
g
e c
Questions/problmes :
1. Comment peut-on changer facilement la polarit de sorties (pour utiliser un afficheur
cathode commune) ?
2. Proposez une solution permettant dteindre toutes les diodes avec une entre ena (si
ena = 0, les segments sont teints).
Tableau de fonctionnement :
op Fonction
0 Addition
1 soustraction
7
Exercice 11 (en TD) Ralisation dun multiplexeur quatre entres de 8 bits avec
autorisation de sortie (sortie trois tats)
Il sagit de raliser un multiplexeur quatre entres de 8 bits en utilisant les modules de
lexercice numro 7. La sortie de ce multiplexeur sera autorise par un signal oe (Output
Enable). Si ce signal est gal un, la sortie du multiplexeur est autorise (basse impdance),
sinon, elle est en haute impdance (Z).
8
a
8 8
b
8 MUX d_out
c
8
d
2
sel
1
oe
d q
d q
ena
ena
d 5 7 0 3 9 1 4 8
ena
q U 7 0 3 1 4 8
Exercice 13 Ralisation dun dcodeur dadresse de 8 bits command par un signal ale
Raliser le dcodeur dadresse de 8 bits (voir la figure suivante) permettant de valider le
signal hit la sortie (le mettre 1) si pendant lintervalle o le signal ale (Address Latch
Enable) tait actif, la valeur prsente sur le bus partag par les adresses et les donnes a_d
lentre du dcodeur (qui correspond ce moment une adresse) tait suprieurs 63(10)
(0011 1111(2)). Le signal hit doit rester valide jusqu la prochaine activation du signal ale.
8
decod_adr
a_d(7..0) hit
ale
a_d 64 07 00 60 B9 6A 4C 40 11
ale
hit
Exercice 14 (en TD) Ralisation dune bascule D synchrone avec RAZ asynchrone
Raliser en langage VHDL une bascule D synchrone, sensible sur le front montant du signal
dhorloge clk, avec remise zro asynchrone raz (active zro).
Questions/problmes :
1. Expliquez, quel est le signal prioritaire : clk ou raz. Quelle est la structure VHDL
employer ?
Questions/problmes :
1. Quelle est lutilisation pratique de la bascule T ?
2. Proposez le montage pour raliser la bascule T en utilisant la bascule D.
Questions/problmes :
1. Quelle est lutilisation pratique de la bascule JK ?
2. Proposez le montage pour raliser la bascule T en utilisant la bascule JK.
9
exemple 100 Hz) et comparer les deux valeurs : la valeur originale et la valeur chantillonne
(et donc retarde). Si les deux valeurs sont gales un, il faut enregistrer dans la deuxime
bascule la sortie du circuit la valeur logique un, si elles sont gales zro, il faut enregistrer
zro et si les valeurs sont diffrentes, il faut garder la valeur prcdente du registre (pour
viter de copier des rebonds la sortie du dispositif). Nous disposons dun signal bouton
(avec des rebonds) et le signal dhorloge clk100 de 100 Hz pour gnrer le signal
bouton_sans_rebonds.
Questions/problmes :
1. Quel sera le retard du signal gnr (bouton_sans_rebonds) par rapport au signal
original prsent la sortie de linterrupteur (bouton) ?
Exercice 18 (en TD) Ralisation dun registre synchrone de 8 bits avec la remise zro
Raliser en langage VHDL un registre synchrone de 8 bits, sensible sur le front montant du
signal dhorloge clk. Lcriture dans le registre est autorise si le signal ena est gal un. Le
signal raz doit tre actif un.
d 8
d 8 q
ena
ena q
clk clk
raz
raz
Questions/problmes :
1. Quelle est lutilisation pratique des registres ?
din 8
din 8 dout
n_wr
n_wr dout
addr 2 addr
clk
clk
Questions/problmes :
1. Quelle est lutilisation pratique de la mmoire ?
10
Exercice 20 (en TD) Ralisation dun diviseur de frquence par deux
Il sagit de crer une entit permettant de diviser la frquence dhorloge clk par deux. Le
schma de cette unit base sur une bascule D est prsent sur la Figure 16.
D Q clk_div2
clk Clk Q
D Q D Q D Q D Q
clk
Clk Q Clk Q Clk Q Clk Q
Questions/problmes :
1. Notez bien le temps de basculement de diffrentes bascules. Quelle est la consquence
de ce comportement ?
Questions/problmes :
1. Quel est le rapport cyclique du signal dhorloge gnr ?
11
De plus, le compteur peut tre remis zro dune manire asynchrone par un signal rst actif
zro. Le symbole du compteur est prsent sur la Figure 18.
init(7..0)
load cnt(7..0)
ena
dir
clk rst
Questions/problmes :
1. Avant proposer le code VHDL, dfinissez la priorit de tous les signaux de contrle
(load, ena, dir, clk et rst).
Exercice 24 (en TD) Ralisation dun squenceur pour animer 4 diodes LED
Il sagit de crer une entit permettant danimer quatre diodes LED D1 D4. A chaque instant
donn, au plus une diode peut tre allume et elle restera allume pendant une priode
dhorloge. Puis cest la diode suivante qui doit sallumer. Il y a deux modes de
fonctionnement (deux suites possibles) slectionns par lintermdiaire du signal dentre sel :
a) sens horaire (si sel = 0),
b) contre sens (si sel = 1).
D1
D4 D2
D3
Le module a une entre dhorloge (clk), une entre de slection du mode (sel) et un signal de
remise zro asynchrone actif zro (reset). Aprs la remise zro lafficheur se trouve dans
un tat initial (aucune diode allume), puis une des deux suites commence suivant la valeur
dentre sel, en partant de la diode D1. Si on changeait la direction pendant le fonctionnement
de lafficheur, le contrleur doit passer directement de la suite a) la suite b) (sans passer par
ltat initial comme ctait le cas aprs la remise zro du contrleur). Le module a quatre
sorties connectes avec les cathodes des diodes (les diodes sallument donc avec le niveau
logique zro).
Questions/problmes :
1. Quel est le type de machine dtat que vous avez employ ?
12
Exercice 25 (en TD) Commande dun ascenseur dans un immeuble deux tages (plus
RDC)
Il sagit de crer lentit commande permettant de commander (dune manire simplifie) le
moteur dun ascenseur avec trois boutons dappel call actif ltat bas (un bouton par tage).
Lentit commande doit pouvoir mettre en marche le moteur dascenseur (par la sortie
cmnd_go) et changer sa direction (par la sortie cmnd_dir). Par exemple, call(0) = 0 signifie
un appel au RDC, call(1) = 0 un appel au premier tage. Lappel dun tage plus haut est
prioritaire (au cas o il a deux appels simultans). On peut remettre zro la commande de
lascenseur avec un bouton reset qui est prsent dans larmoire de commande (inaccessible
aux utilisateurs normaux). Deux diodes LED led_up (pour la monte) et led_down (pour la
descente) chaque tage permettent de visualiser, si lascenseur est en train de monter
(led_up = 0), de descendre (led_down = 0) ou sil est arrt (led_up = led_down = 1) ou
bloqu dans ltat arrt de secours (led_up = led_down = 0). Les diodes led_up pour
chaque tage sont connectes en parallle. De mme pour les diodes led_down (le module a
donc seulement une sortie led_up et une sortie led_down). Le signal cmnd_go = 1 met
lascenseur en marche (et allume une des diodes led_up ou led_down). Le signal cmnd_dir
dfinie la direction du mouvement (cmnd_dir = 1 pour la monte, cmnd_dir = 0 pour la
descente).
commande
call(2..0) led_up
led_down
clk cmnd_go
reset cmnd_dir
Questions/problmes :
1. Quest quil faut ajouter pour scuriser le fonctionnement du systme ?
13
addr addri addri+1 addri+2
nCS
nWR
1. 2. 3. 4. 5. 6. 1. 2. 3. 4. 5. 6. 1.
A noter : Les sorties data doivent tre en haute impdance pendant les phase 1., 2, 3 et 6.
Lcriture de donnes seffectue la fin de la phase 4. Le compteur dadresses est incrment
au dbut de la phase 2. Les donnes peuvent avoir la mme valeur (incrmente) que ladresse
(datai = addri).
Questions/problmes :
1. Dessinez le schma bloc de lapplication (compteur donnes/adresse + machine
dtats).
2. Dessinez le diagramme tats/transitions pour la machine dtats qui sappellera
sm_ctrl.
3. Pourquoi la phase 3. doit sachever AVANT que lon mette les sorties data en haute
impdance ?
Questions :
1. Dessinez le schma bloc de lapplication (compteur + machine dtats).
2. Dessinez le diagramme tats/transitions pour la machine dtats qui sappellera
sm_ctrl.
3. Quest quil faut faire pour raliser le compteur et la machine dtat dans deux entits
diffrentes ?
14