Vous êtes sur la page 1sur 4

USTO-MB/Fac GE/ELN/ M2

TRAVAUX PRATIQUES : VHDL et FPGA 2019-2020

TP1 : circuits logiques élémentaires

Objectifs du TP : Décrire des circuits combinatoires de base et des registres

1. Introduction :
Les circuits logiques combinatoires élémentaires sont basés sur les opérateurs classiques : AND , OR ,
NOT ,XOR, NAND , NOR et XNOR. Ces opérateurs acceptent en entrée des signaux tout aussi bien scalaires
que vectoriels.
La description de circuits logiques combinatoires tels que les multiplexeurs , comparateurs , etc… est basée
sur l’utilisation de process dont la liste de sensibilité ne comporte pas de référence à l’horloge.
Quant aux registres , il est nécessaire d’utiliser un process séquentiel synchrone.

2. Description d'un circuit combinatoire :


Soit à décrire sous VHDL le circuit Encodeur 2 entrées/4 sorties dont la table de vérité est la suivante :

In1 In0 Out3 Out2 OUT1 Out0 IN1 3 OUT3


0 0 0 0 0 1 2 OUT2
0 1 0 0 1 0 IN0 1 OUT1
1 0 0 1 0 0 OUT0
0
1 1 1 0 0 0

library ieee ; Ces 4 lignes indiquent les bibliothéques de ressources utilisées .


use ieee.std_logic_1164.all ;
use ieee.std_logic_arith.all ;
use ieee.std_logic_unsigned.all ;

entity encodeur is Déclaration de l'identificateur du circuit : encodeur


port(
in0,in1 : in std_logic; Déclaration des signaux d'entrée
out0,out1,out2,out3 : out Déclaration des signaux de sortie
std_logic
);
end encodeur;
Déclaration de l'architecture du circuit encodeur ( son fonctionnement
architecture bhv of encodeur is interne )
begin
conformément à la table de vérité
out0 <= not(in1) and not(in0); conformément à la table de vérité
out1 <= not(in1) and (in0); conformément à la table de vérité
out2 <= (in1) and not(in0); conformément à la table de vérité
out3 <= (in1) and (in0);
end bhv;

Travail à effectuer :
 Créez le projet Encodeur
 Effectuez la saisie de la description VHDL précédente
 Effectuez la compilation
 Ouvrez la fenêtre de simulation.
o Insérez les 2 signaux d'entrée In1 et In0 ensuite les 4 signaux de sortie out3,out2,out1
et out0
o In1 : signal périodique de fréquence 10MHz
o In0 : signal périodique de fréquence 3MHz
o Effectuez la simulation . Interprétez les résultats : table de vérité et temps de réponse.
 Activez le menu PROCESSING  CLASSIC TIMING ANALYZER TOOL et notez la
fréquence maximum de fonctionnement du circuit . L'indication est-elle correcte?
3. Description d'un circuit séquentiel synchrone :

Rappels :
Un circuit séquentiel synchrone comporte un ou plusieurs registres .
Les registres sont constitués par regroupement de bascules D.
La bascule D comporte une entrée d'horloge CLK, une entrée de remise à '0' reset , une entrée de donnée
D et une sortie Q.
La bascule D est sensible à un front d'horloge : soit montant , soit descendant.
Bascule D : avec et sans entrée de validation : EN

D Q
D Q

Clk EN

Clk
Reset
Reset

Régles de fonctionnement :

 bascule D sensible au front d’horloge : le front actif


 Q reproduit l’état de D établi avant l’arrivée du front actif. Sinon : risques de metastabilité. Tsetup
et Thold : à respecter.
 En : si le signal de validation est présent ( en ) , il doit être actif avant l’occurrence du front actif
d’horloge.
 Le signal reset (et/ou set) est asynchrone . 4

Soit à décrire un encodeur sequentiel synchrone 2 entrées / 4 sorties suivant :


Outp
Out3_2_1_0
In1_0 Inp 4
2 Regout
Regin 2 IN1 3
2 4
Clk IN0 1
0
Clk

Reset

Ce circuit comporte :
Un registre d'entrée : Regin acceptant en entrée le signal vectoriel In1_0 ( 2 bits) et délivrant un signal de
sortie vectoriel Inp (2bits).
Un circuit combinatoire représentant l'encodeur combinatoire de l'exercice précédent.
Un registre de sortie Regout acceptant en entrée un signal vectoriel Outp (4bits) et délivrant un signal de
sortie vectoriel Out3_2_1_0 ( 4 bits).

library ieee ; Ces 4 lignes indiquent les bibliothéques de ressources


use ieee.std_logic_1164.all ; utilisées .
use ieee.std_logic_arith.all ;
use ieee.std_logic_unsigned.all ;

entity encod_seq is Déclaration de l'identificateur du circuit : encod_seq


port(
clk,reset : in std_logic; Déclaration des signaux d'entrée clk et reset
in1_0 : in std_logic_vector(1 downto 0); Déclaration du signal d'entrée vectoriel in1_0
out3_2_1_0 : out std_logic_vector(3 downto 0) Déclaration du signal de sortie vectoriel out3_2_1_0
);
end encod_seq;

architecture bhv of encod_seq is Déclaration de l'architecture du circuit encod_seq ( son


signal inp : std_logic_vector(1 downto 0); fonctionnement interne )
signal outp : std_logic_vector(3 downto 0);
begin

process(clk,reset) Description du registre d'entrée REGIN


begin
if reset='1' then
inp <= (others => '0');
elsif rising_edge(clk) then
inp <= in1_0;
end if;
end process;

outp(0) <= not(inp(1)) and not(inp(0)); conformément à la table de vérité


outp(1) <= not(inp(1)) and (inp(0)); conformément à la table de vérité
outp(2) <= (inp(1)) and not(inp(0)); conformément à la table de vérité
outp(3) <= (inp(1)) and (inp(0)); conformément à la table de vérité

process(clk,reset) Description du registre de sortie REGOUT


begin
if reset='1' then
out3_2_1_0 <= (others => '0');
elsif rising_edge(clk) then
out3_2_1_0 <= outp;
end if;
end process;

end bhv;

Travail à effectuer :
 Créez le projet Encod_seq
 Effectuez la saisie de la description VHDL précédente
 Effectuez la compilation .
 Consultez le rapport de compilation et déterminez le nombre de registres utilisés et le nombre
d'éléments logiques . Expliquez le nombre de registres . Déduire le nombre de registres par élément
logique.
 Activez la vue RTL en utilisant le menu : TOOLS  NETLIST VIEWERS  RTL VIEWER et
notez le schéma du circuit obtenu . Commentaires ?
 Activez le menu PROCESSING  CLASSIC TIMING ANALYZER TOOL et notez la fréqsuence
maximum de fonctionnement du circuit . L'indication vous semble-elle correcte ? comment faut-il
procéder pour déterminer la fréquence maximum de travail d'un circuit combinatoire ?
 Simulation :
o Ouvrez la fenêtre de simulation .
o Insérez les signaux reset, clk, in1_0 et out3_2_1_0
o Signal Reset : à '1' entre t=10ns et t=20ns ; à '0' ailleurs
o Signal CLK : signal périodique de fréquence 100 MHz.

o En utilisant l'outil COUNT VALUE situé dans le panneau de gauche de la fenêtre de


simulation , affectez au signal IN1_0 les valeurs générées par un compteur s'incrémentant
toutes les 50 ns.

Pour celà , sélectionnez le signal IN1_0 , ensuite l'outil ; sélectionnez dans la fenêtre qui
apparait le menu TIMING ensuite inscrivez 50 ns devant COUNT EVERY
 Effectuez la simulation . Interprétez les résultats : table de vérité et temps de réponse.

4. Circuit séquentiel asynchrone :


Soit la description VHDL d'un circuit séquentiel asynchrone suivante :

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity async is
port(in1,In2: in std_logic;
q: out std_logic);
end async;
architecture bhv of async is
signal qint, qbint: std_logic;
begin
qint<= in1 nor qbint;
qbint<= in2 nor qint;
q<=qint;
end bhv;

 créez le projet ASYNC ,


 effectuez la saisie de la description VHDL précédente ensuite compilez.
 Visualisez le schéma du circuit obtenu par Quartus : de quel circuit séquentiel asynchrone s'agit-il ?
 Effectuez une simulation pour confirmer votre réponse précédente .

Vous aimerez peut-être aussi