Académique Documents
Professionnel Documents
Culture Documents
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
Equations /ROM1 =
/A15./A14
/0A115.A14
A15.A14
A15./A14
/RAM =
end flot_Decod_Add; 3
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
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.
end mux4_1
end comporte_mux4_1; 5
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 ;
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
end Comporte_Mux4_1; end Comporte_Mux4_1; Remarque : Mme schma dans les deux cas.
1.3 Exercice 3 : Dcodeur Hexadcimal / 7 segments Organisation des afficheurs commander (anodes communes)
"0"
"1"
Segment teint
MSB
q3 q2 q1
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.
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 = ------------------------------------------------------
/q1./q0
entity Hex7seg is
end Hex7seg;
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
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
begin
end GDemux1_8;
end GDemux1_8;
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
OEAB
8 D_IN
D_OUT
OEBA
entity Transceiver is
10
D LE
entity Latch is
end Latch;
end comporte_Latch;
11
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
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
entity RegRAZAS is
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
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
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
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
begin
end CMPL;
end comporteCMPL;
Remarque: Le type unsigned est associ des vecteurs de bits considrs comme reprsentant des nombres non signs. 14
Simulation fonctionnelle
15
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
pin; pin ;
// 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
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
CFBS
TSO5
Introduction au VHDL
21
VHDL_Exercices_du_cours_corr