Vous êtes sur la page 1sur 5

Cours/TD

VHDL
LOGIQUE COMBINATOIRE SIMPLE
1) Lire et pratiquer le tutorial ISE
Suivre les diffrentes tapes. Dans un premier temps, ne cherchez pas aller trop vite
mais plutt bien comprendre ce que vous fates.
Le premier exemple trait sera celui que nous avons vu en cours :
-------------------------------------Circuit
library ieee;
use ieee.std_logic_1164.all;
entity circuit is
port (a,b: in std_logic;
s: out std_logic);
end circuit;
architecture archi of circuit is
begin
s <= a and b;
end archi;
------------------------------------------------------------------------Testbench
library ieee;
use ieee.std_logic_1164.all;
entity tb_circuit is
end tb_circuit;
architecture archi of tb_circuit is
signal entree1, entree2, sortie: std_logic;
component circuit
port (a,b: in std_logic;
s: out std_logic);
end component;
begin
uut: circuit port map (a => entree1, b=> entree2, s => sortie);
stimuli:process
begin
entree1<='0';
entree2<='0';
wait for 30 ns;
entree1<='1';
wait for 30 ns;
entree1<='1';
entree2<='1';
wait for 30 ns;
end process;
end archi;
----------------------------------

Questions :
a. Quest-ce quune entity ?

Cest une bote noire ou encore linterface dun module matriel.
Elle prcise:
- Le nom du circuit
- Les ports dentres/sorties (nom, direction, type)
- Les paramtres ventuels pour les modles gnriques

b. Quest-ce quune architecture ?

Cest la description interne du circuit. Elle est toujours associe une entit.
le corps de l'architecture est situ entre begin et end

L'entit et l'architecture sont des units de compilation obligatoires pour dcrire un
modle
Une mme entit peut avoir plusieurs architectures

c. Quest-ce quun signal ?

Les signaux reprsentent des entits physiques (quipotentielles)

Ils permettent deffectuer:
- des communications entre entits
- des communications entre processus

Dclaration dun signal

signal nom_signal : type {:= valeur init};

d. A quoi sert loprateur <= ?



Affectation dune valeur un signal
nom_signal <= valeur ;

e. Quest-ce que std_logic_1164 ?

Cest un package de la bibliothque ieee (Library en anglais). Il sera systmatiquement
utilis dans les fichiers VHDL que vous dcrirez.
Ce package dfinit notamment le type std_logic :
type std_logic is (

'U',
'X',
'0',
'1',
'Z',
'W',
'L',
'H',
'-',

----------

non-initialis
conflit fort
0 fort
1 fort
haute impdance
conflit faible
0 faible
1 faible
dont care

);


Un port ou un signal dclar std_logic peut prendre nimporte laquelle de ces valeurs

f. Quest-ce quun component ?



Une entit pralablement conue et compile peut-tre rutilise. Par exemple, on
rutilise dans le testbench le composant circuit qui a t pralablement conu.
Pour cela, on dclare que lon va utiliser ce composant de la manire suivante :

component nom_du_composant
generic (paramtres gnriques);

-- si le composant dispose de paramtres


-- gnriques, on rajoute cette ligne

port (description des ports e/s);


end component;


Cette dclaration se fait systmatiquement entre architecture et begin .

g. A quoi sert un port map ?

Une fois quun composant a t dclar, il est ncessaire, dans le corps de larchitecture
(cest dire entre begin et end ), dinstancier ce composant. Linstanciation
correspond la manire dont ce composant va tre connect lensemble de la
structure. La syntaxe est la suivante :

Nom_instance : nom_composant
generic map (affectation des valeurs la liste des paramtres)
-- si le composant dispose de paramtres
-- gnriques, on rajoute cette ligne
port map (liste_des_connexions) ;


h. A quoi sert un process ?

Lxcution dun procs seffectue de manire squentielle (entre les mots cls begin
et end process; ).
Un processus peut possder un nom (label).
Un processus peut tre vu comme une boucle sans fin.
Dans le cas du testbench prcdent, il est activ ds le dbut de la simulation et
recommence ds quon arrive end process

i. A quoi sert le wait ?

Il suspend lexcution dun processus, dans le cas de wait for 30 ns , cette suspension
a une dure fixe 30 ns.

Exercices :
a. Modifier le testbench prcdent afin quil permette de tester toutes les
combinaisons possibles en entre
b. Simuler votre circuit

2) Utilisation des oprateurs logiques


A partir de ce que vous avez appris dans la premire partie de ce cours/TD et des
oprateurs logiques du package std_logic_1164 de la bibliothque ieee, vous devez
raliser plusieurs composants et les simuler grce des testbench.
Exercices :
a. Concevoir et simuler un composant nomm c1 qui a 2 entres, e1 et e2, et 2
sorties s1 et s2, avec s1 = e1 e2 et s2 = e1 . e2, comme prsent ci-dessous :


-- modle structurel dun demi-additionneur 1 bit
library ieee;
use ieee.std_logic_1164.all;
entity c1 is
port(e1,e2: in std_logic; s1,s2: out std_logic);
end c1;
architecture archi of demi_add1 is
begin
s1 <= e1 xor e2 ;
s2 <= e1 and e2 ;
end archi;



b. Concevoir et simuler un composant nomm c2 qui a 3 entres, a, b et rin, et 2
sorties s et rout. Son interface et son architecture sont dcrites ci-dessous :



-- modele structurel dun additionneur 1 bit
library ieee;
use ieee.std_logic_1164.all;
entity c2 is
port (a,b,rin: in std_logic; s, rout: out std_logic);
end c2;

architecture archi of c2 is
component c1
port (e1,e2: in std_logic; s1,s2: out std_logic);
end component;
signal n1, n2, n3: std_logic;
begin
inst1: c1
port map( e1=>a,e2=>b,s1=>n1,s2=>n2);
inst2: c1
port map (e1=>n1,e2=>rin,s1=>s,s2=>n3);
rout <= n2 or n3 ;
end archi;
-- simulation de ladditionneur 1 bit
library ieee;
use ieee.std_logic_1164.all;
entity simul_add1 is
end simul_add1;
architecture a_sim of simul_add1 is
signal bit1, bit2, ret_e, ret_s, som: std_logic;
component c2
port(a,b,rin: in std_logic; s, rout: out std_logic);
end component;
begin
add: c2 port map ( a=>bit1,b=>bit2,rin=>ret_e,
s=>som,rout=>ret_s);
genere: process
begin
ret_e<='0'; bit1<='0'; bit2 <='0';
wait for 30 ns;
bit1<='1'; wait for 30 ns;
bit2<='1';
wait for 30 ns;
ret_e<='1';
wait for 30 ns;
end process;
end a_sim;