Академический Документы
Профессиональный Документы
Культура Документы
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};
'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
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
-- 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;