Vous êtes sur la page 1sur 16

Introduction au langage VHDL

Exercices:
1 Fonctions logiques combinatoires . ................................................3 1.1 Exercice 1 : Dcodage dadresses . ..............................................3 1.2 Exercice 2 : Multiplexeur . .....................................................5 1.3 Exercice 3 : Dcodeur Hexadcimal / 7 segments . ................................7 1.4 Exercice 4 : Dmultiplexeur 1 8 . ..............................................9 2 Sorties trois tats, entres/sorties . ...........................................10 2.1 Exercice 5 : Buffer trois tats . ..............................................10 2.2 Exercice 6 : Transceiver . .....................................................10 3 Circuits logiques squentiels . ..................................................11 3.1 Exercice 7 : Latch . ...........................................................11 3.2 Exercice 8 : Registre . ........................................................12 3.3 Exercice 9 : Registre avec mise zro asynchrone . ............................12 3.4 Exercice 10 : Registre avec mise zro et mise un synchrone ................13 3.5 Exercice 11 : Compteur binaire avec mise zro asynchrone ....................13 3.6 Exercice 12 : Compteur binaire chargeable .....................................14 3.7 Exercice 13 : Compteur/Dcompteur binaire chargeable . .........................16

Introduction au langage VHDL

1 Fonctions logiques combinatoires


1.1 Exercice 1 : Dcodage dadresses Logigramme de la fonction raliser On donne ci-dessous un plan mmoire (mapping memory) raliser. A15 A14 A13 $FFFF ROM1 (8k) $E000 $DFFF ROM2 (8k) $C000 $BFFF Libre (32k) $4000 $3FFF I/O (8k) $2000 $1FFF RAM (8k) $0000 Solution 1 classique : Tableau dadressage
A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 @ $FFFF $E000 $DFFF $C000 $BFFF $4000 $3FFF $2000 $1FFF $0000 Remarque : Les broches de slection des botiers mmoires sont actives ltat bas. Decod_Add

ROM1 ROM2 Libre IO RAM

Equations /ROM1 =

/Libre /A13 A13

/A15./A14

/0A115.A14

A15.A14

A15./A14

/ROM2 = /libre = /I_O =

/RAM =

Solution 2 : Description flot de donnes en VHDL (.vhd) entity Decod_Add is

architecture flot_Decod_Add of Decod_Add is begin

end flot_Decod_Add; 3

Introduction au langage VHDL

Solution 3 : Descriptions comportementales en VHDL (.vhd) Utilisation dune affectation concurrente conditionnelle On se limite la sortie ROM1. entity Decod_Add1 is port( BusAdd: in std_logic_vector (15 downto 13) ; ROM1: out std_logic ); end Decod_Add1 ; architecture comporte1_Decod_Add1 of Decod_Add1 is begin ROM1 <= '0' when (BusAdd = X"7") else '1' ; -- else indispensable end comporte1_Decod_Add1; -- voir remarque ci-dessous

Utilisation dune affectation concurrente slective On se limite la sortie ROM1. architecture comporte2_Decod_Add1 of Decod_Add1 is begin with BusAdd select ROM1 <= '0' when "111", -- others indispensable '1' when others; -- voir remarque ci-dessous end comporte2_Decod_Add1;

Piges viter lors de la synthse des fonctions combinatoires : Les mmorisations implicites !
Remarque concernant les affectations ci-dessus Il est fortement conseill de rendre les conditions listes exhaustives, c'est dire de ne pas laisser de cas indtermins. Sinon le compilateur risque de gnrer une logique inattendue appele mmorisation implicite. Dans le cas d'une affectation conditionnelle, l'exhaustivit des conditions est obtenue par un else final. Dans le cas d'une affectation slective, l'exhaustivit des conditions est obtenue par others.

Exemple:
C <= B when A=1 ; est interprt comme signifiant : C <= B when A=1 else C; et se synthtise comme ci-contre !

B A

& 1 & C

Si le but est dexprimer C prend la valeur de B quand A = 1, sinon nimporte quoi il faut crire : C <= B when A=1 else -; qui se synthtise par :

B A

&

ou

B A

Introduction au langage VHDL

1.2 Exercice 2 : Multiplexeur Rappels : La fonction multiplexage est une fonction combinatoire qui possde N entres et M sorties (M < N). Elle transmet sur une des sorties, une des entres slectionnes par une adresse pralablement applique aux n entres de commande (appeles entres de slection ou dadresse).

MUX

Ralisation dun multiplexeur 4 -> 1 Solution 1 classique : Table de vrit partielle E0 n2 n1 E0 E1 E2 E3 S E1 0 0 0 X X X E2 0 0 1 X X X E3 0 1 X 0 X X 0 1 X 1 X X n2, n1 1 0 X X 0 X 1 0 X X 1 X 1 1 X X X 0 n2 1 1 X X x 1 0 0 X : Indiffrent 1 1 S = -------------------------------------------

S MUX4_1

n1 0 1 0 1

E0 X X X X

E1 X X X X

E2 X X X X

E3 X X X X

S E0 E1 E2 E3

Remarque : Lquation fait apparatre des sommes de produits faciles synththiser dans un PLD.

Solution 2 : Description comportementale en VHDL (.vhd) entity mux4_1 is

end mux4_1

Remarque : choisir une affectation concurrente. architecture comporte_mux4_1 of mux4_1 is begin

end comporte_mux4_1; 5

Introduction au langage VHDL

Proposer les modifications effectuer pour que le dcodeur prcdant traite des vecteurs e3, e2, e1, e0 et s de 8 bits. entity mux4_1 is

end mux4_1 ;

Schma RTL: Multiplexeur 4 -> 1

architecture Comporte_Mux4_1 of Mux4_1 is begin -- Premire solution: affectation concurente conditionnelle s <= e0 e1 e2 e3 when when when when n n n n = = = = "00" else "01" else "10" else "11";

architecture Comporte_Mux4_1 of Mux4_1 is begin -- Deuxime solution: affectation concurente slective with n select s <= e0 e1 e2 e3

when when when when

"00", "01", "10", others;

end Comporte_Mux4_1; end Comporte_Mux4_1; Remarque : Mme schma dans les deux cas.

Introduction au langage VHDL

1.3 Exercice 3 : Dcodeur Hexadcimal / 7 segments Organisation des afficheurs commander (anodes communes)

"0"

"1"

Segment clair Caractres afficher

Segment teint

Schma fonctionnel du dcodeur

MSB

q3 q2 q1

Dcodeur Hexadcimal / 7 segments

LSB

q0

a b c d e f g

Fonctionnement attendu Les entres q3, q2, q1 et q0 peuvent prendre l'tat logique 0 ou 1 . Pour chacune des combinaisons possibles du mot binaire Q = q3q2q1q0, on doit afficher le caractre hexadcimal correspondant.

Introduction au langage VHDL

Solution 1 classique : Table de vrit et dtermination des quations des segments Pour chacune des combinaisons de Q, on dtermine le code envoyer sur les commandes des segments a, b, c, d, e, f et g. Ceci peut tre rsum dans une table de vrit. q3 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 q2 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 q1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 q0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 a 0 1 b 0 0 c 0 0 d 0 1 e 0 1 f 0 1 g 1 1 Affichage 0 1 2 3 4 5 6 7 8 9 A b c d E F
/q1.q0 q1.q0 q1./q0

a = ------------------------------------------------------

a /q3./q2 /q3.q2 q3.q2 q3./q2

/q1./q0

Solution 2: Description comportementale en VHDL

entity Hex7seg is

architecture comporte_Hex7seg of Hex7seg is begin

end Hex7seg;

end comporte_ Hex7seg;

Introduction au langage VHDL

1.4 Exercice 4 : Dmultiplexeur 1 8 Ecrire le fichier .VHD correspondant au dmultiplexeur 1 8 ci-dessous.

S0 S1 I S6 S7 SEL 3

Solution 1 : utilisation dun when else architecture comporte_Demux1_8 of Demux1_8 is entity Demux1_8 is begin

end Demux1_8; end Demux1_8;

Solution 2: utilisation dune instruction generate Compte tenu de la rptition des instructions, il est interressant dutiliser linstruction generate. On remplace les sortie distinctes S0S7 par un vecteur de bit de manire disposer dun indice variable :

entity GDemux1_8 is

architecture comporte_GDemux1_8 of GDemux1_8 is

begin

end GDemux1_8;

end GDemux1_8;

Introduction au langage VHDL

2 Sorties trois tats, entres/sorties

2.1 Exercice 5 : Buffer trois tats Ecrire le fichier .VHD correspondant au buffer ci-dessous.
OE

8
D_IN

D_OUT

entity Buff_3_Etat is

architecture comporte_Buff_3 of Buff_3_Etat is begin

end comporte_Buff_3; end Buff_Trois_Etat ;

Remarque: La formulation (others => Z) est quivalente ZZZZZZZZ

2.2 Exercice 6 : Transceiver Ecrire le fichier .VHD correspondant au transceiver ci-dessous.

OEAB

8 D_IN

D_OUT

OEBA

entity Transceiver is

architecture comporte_Trans of Transceiver is begin

end comporte_Trans; end Transceiver;

10

Introduction au langage VHDL

Schma RTL du Transceiver

3 Circuits logiques squentiels


Circuit squentiel asynchrone Rappel : Un latch (ou verrou) possde deux modes de fonctionnement : passant lorsque son entre LE (Latch Enable) est un (par exemple), verrouill lorsque LE est zro. 3.1 Exercice 7 : LATCH Ecrire le fichier .VHD correspondant au Latch ci-dessous. 8

D LE

entity Latch is

architecture comporte_Latch of Latch is begin

end Latch;

end comporte_Latch;

Schma RTL du LATCH

11

Introduction au langage VHDL

Circuits squentiels synchrones 3.2 Exercice 8 : Registre 8 bits Ecrire le fichier .VHD correspondant au registre ci-dessous. D CLK 8 8 Fonctionnement Q <= D si CLK

entity Reg is

architecture comporte_Reg of Reg is begin

end comporte_Reg; end Reg;

Schma RTL du registre 8 bits

3.3 Exercice 9 : Registre avec mise zro asynchrone Ecrire le fichier .VHD correspondant au registre ci-dessous (mise zro asynchrone). 8 D clk 8 Q

rst

12

Introduction au langage VHDL

entity RegRAZAS is

architecture compRegRAZAS of RegRAZAS is begin

end RegRAZAS;

end compRegRAZAS;

Remarque: Etant asynchrone, le signal rst peut dclencher le processus. Il doit donc se situer dans la liste de sensibilit. 3.4 Exercice 10 : Registre avec mise zro et mise un synchrone Ecrire le fichier .VHD correspondant au registre ci-dessous (mise zro et mise un synchrone). set 8 D clk 8 Q

rst entity RegSync is

La mise zro doit tre prioritaire. architecture comporteRegSync of RegSync is begin

end RegSync; end comporteRegSync; Remarque : Le processus est uniquement dclench par le signal clk. La position de rst dans le processus le rend prioritaire sur le transfert Q <- D.

13

Introduction au langage VHDL

3.5 Exercice 11 : Compteur binaire avec mise zro asynchrone Ecrire le fichier .VHD correspondant au compteur binaire avec mise zro asynchrone ci-dessous. 8

CPTR

clk rst

entity CPTR is

architecture comporteCPTR of CPTR is begin

end Reg_Sync; end comporteCPTR; 3.6 Exercice 12 : Compteur binaire chargeable Ecrire le fichier .VHD correspondant au compteur chargeable ci-dessous (chargement synchrone, reset asynchrone). 8 D clk load rst CMPL 8 Q

entity CMPL is

architecture comporteCMPL of CMPL is

begin

end CMPL;

end comporteCMPL;

Remarque: Le type unsigned est associ des vecteurs de bits considrs comme reprsentant des nombres non signs. 14

Introduction au langage VHDL

Fichier de simulation .abv


module testcptl // input clk, rst, load pin; D_7_,D_6_,D_5_,D_4_,D_3_,D_2_,D_1_,D_0_ pin ; // output Q_7_,Q_6_,Q_5_,Q_4_,Q_3_,Q_2_,Q_1_,Q_0_ pin istype 'reg_d,buffer'; // Vectors Q = [Q_7_,Q_6_,Q_5_,Q_4_,Q_3_,Q_2_,Q_1_,Q_0_]; D = [D_7_,D_6_,D_5_,D_4_,D_3_,D_2_,D_1_,D_0_]; // constantes c = .c.; x = .x.; X = [x,x,x,x,x,x,x,x]; equations test_vectors ([clk,rst, load, D] -> [Q]) [c,1,0,0] -> [X]; @repeat 5 {[c,0,0,X] -> [X];} [c,0,1,8] -> [X]; @repeat 20 {[c,0,0,X] -> [X];} end

Simulation fonctionnelle

15

Introduction au langage VHDL

3.7 Exercice 13 : Compteur/Dcompteur binaire chargeable Ecrire le fichier .VHD correspondant au compteur/dcompteur ci-dessous. 8 D clk load rst down up entity CMP_DEC is architecture comporte_CMP_DEC of CMP_DEC is
CMPDEC

8 Q

Fonctionnement attendu - chargement synchrone, - reset asynchrone UP DOWN___Comportement_______ 0 0 Rien 1 0 compte 0 1 dcompte 1 1 Rien

begin

end CMP_DEC; end comporte_CMP_DEC;

Fichier de simulation .abv


module testcpde // input clk, rst, load,up,down D_7_,D_6_,D_5_,D_4_,D_3_,D_2_,D_1_,D_0_ // output Q_7_,Q_6_,Q_5_,Q_4_,Q_3_,Q_2_,Q_1_,Q_0_

pin; pin ;

pin istype 'reg_d,buffer';

// Vectors Q = [Q_7_,Q_6_,Q_5_,Q_4_,Q_3_,Q_2_,Q_1_,Q_0_]; D = [D_7_,D_6_,D_5_,D_4_,D_3_,D_2_,D_1_,D_0_]; // constantes c = .c.; x = .x.; X = [x,x,x,x,x,x,x,x]; equations test_vectors ([clk,rst,load,up,down,D] -> [Q]) [c,1,0,0,0,0] -> [X]; @repeat 10 {[c,0,0,1,0,X] -> [X];} [c,0,1,0,0,20] -> [X]; @repeat 10 {[c,0,0,0,1,X] -> [X];} end

16

Introduction au langage VHDL

Fichier .vhd
entity Div3b is port( E, Rc: in std_logic ; s: out std_logic ); end Div3b; architecture Comporte of Div3b is (A REFAIRE) type liste_etat is (Etat0,Etat1,Etat2,Etat3); signal etat:liste_etat; begin process(E) begin if (E'event and E='1') then case etat is when Etat0 => s <= '1'; if Rc='1' then etat <= Etat3; else etat <= Etat1; end if; when Etat1 => etat <= Etat2; s <= '0'; when Etat2 => etat <= Etat0; s <= '0';

when others => etat <= Etat2; s <= '1'; end case; end if; end process; -- Autre solution: affectation externe de la sortie -- s <= '1'when ((etat = Etat3) or (etat = Etat0)) else '0'; end Comporte;

Simulation fonctionnelle

Remarque : Dcalage des valeurs du bus dtats : voir lannexe 2 du cours Introduction au langage VHDL

VHDL

CORRECTION DES EXERCICES


14022011

CFBS

TSO5

Introduction au VHDL

21

VHDL_Exercices_du_cours_corr