Etude d`un additionneur

Transcription

Etude d`un additionneur
VHDL exercises
Etude d’additionneur
P. Bakowski
[email protected]
Additionneur binaire
Modéliser et simuler l'additionneur binaire complet
(full adder).
a
b
cout
cin
a, b – entrées
s – sortie
cin – retenue d’entrée
cout – retenue de sortie
s
P. Bakowski
2
Additionneur binaire - fonction
a
b
cout
cin
s
P. Bakowski
a
0
0
0
0
1
1
1
1
b
0
0
1
1
0
0
1
1
cin
0
1
0
1
0
1
0
1
s
0
1
1
0
1
0
0
1
cout
0
0
0
1
0
1
1
1
3
Additionneur binaire - entity
entity adder is
port (a,b,cin: in bit; s,cout: out bit);
end adder;
-- a,b,cin,s,cout sont des signaux
interface de l’additionneur
P. Bakowski
4
Additionneur binaire - architecture
architecture behavioral of adder is
begin
s <= (a xor b) xor cin after sum_del;
cout <= (a and b) or (cin and a) or (cin and b)
after carry_del;
end behavioral;
a
b
cout
cin
délais d’affectation
s
P. Bakowski
5
Additionneur binaire - architecture
architecture behavioral of adder is
begin
s <= (a xor b) xor cin after sum_del;
cout <= (a and b) or (cin and a) or (cin and b)
after carry_del;
end behavioral;
a
b
cout
cin
délais d’affectation à définir
comme:
un littéral
une constante
un paramètre
s
P. Bakowski
6
Additionneur binaire - architecture
entity adder is
generic sum_del: time:= 10 ns;
generic carry_del: time:= 20 ns;
port (a,b,cin: in bit; s,cout: out bit);
end adder;
a
b
cout
cin
délais d’affectation à définir
comme:
un littéral
une constante
un paramètre
s
P. Bakowski
7
Additionneur 4-bits
a(3) b(3)
cout
s(3)
a(2) b(2)
c(2)
s(2)
a(1) b(1)
c(1)
s(1)
a(0) b(0)
c(0)
cin
s(0)
entity adder4 is
port (a,b: in bit_vector(3 downto 0); cin: in bit;
s: out bit_vector(3 downto 0); cout: out bit);
end adder4;
P. Bakowski
8
adder4: architecture algorithmique
A partir de la description d'un additionneur binaire
écrire un additionneur 4-bit en version
fonctionnelle - architecture algorithmique
Mots clés à étudier:
• process
• variable
• for.. loop
P. Bakowski
9
adder4: architecture algorithmique
architecture algorithmique of adder4 is
signal...
process (liste de sensibilité)
variable ...
begin
for i in ... loop
-- ici mettre l'opération de l'additionneur binaire
end loop;
end process;
end algorithmique ;
Attention: le seul endroit pour déclarer
une variable – à l’intérieur du process
P. Bakowski
10
adder4: architecture algorithmique
architecture algorithmique of adder4 is
process (liste de sensibilité)
variable retenue: bit;
begin
retenue
..
end process;
cout <= retenue after 4*carry_del;
end algorithmique ;
a(i) b(i)
s(i)
La première version de l'architecture algorithmique utilise
une variable interne pour le stockage de la valeur de la
retenue entre les étages de l'additionneur; le délai entre
cin est cout est globalisé
P. Bakowski
11
adder4: architecture algorithmique
architecture algorithmique of adder4 is
process
variable retenue: bit;
begin
retenue
..
wait for carry_del;
end process;
end algorithmique ;
a(i) b(i)
s(i)
La deuxième version de l'architecture algorithmique doit
utiliser l'instruction wait afin de modéliser les délais
locaux (e.g: wait on a,b,cin; wait for carry_del)
P. Bakowski
12
addern: architecture algorithmique
entity addern is
generic: taille integer:=4;
port (a,b: in bit_vector(taille-1 downto 0);
cin: in bit;
s: out bit_vector(taille-1 downto 0);
cout: out bit);
end addern;
La troisième version de l'architecture algorithmique est
générique : dans l'interface de cette version il faut
introduire le terme générique caractérisant la taille de
l'additionneur. Le module de l'architecture doit être
modifiée en conséquence.
P. Bakowski
13
Architecture « data flow »
La version de l'architecture (additionneur 4 bits)
du type data flow ne contient que des affectations
type signal enchainées par les signaux internes:
architecture dataflow of adder4 is
signal c: bit_vector(3 downto 0);
begin
s(0) <= ..
after ..
c(0) <= ..
after ..
s(1) <= ..
after ..
c(1) <= ..
after ..
..
end dataflow;
P. Bakowski
14
Architecture structurelle
Une architecture structurelle est construite à partir
des composants – components.
Mots clés a étudier:
signal,
component,
port map,
generate, ..
instances de l’additionneur adder: composant
P. Bakowski
15
Architecture structurelle 1
architecture structurelle of adder4 is
signal c: bit_vector(3 downto 0);
component adder
port (...);
-- ici il faut copier le port de l'entity
end component;
begin
add1: adder port map(...);
add2: ...
...
end structurelle;
P. Bakowski
instances câblés
16
Architecture structurelle 2
Dans la deuxième version de l'architecture
structurelle doit utiliser le mécanisme de
génération des instanciations:
generate
à étudier:
boucle principale de génération
for ..
conditions de génération (instanciation)
if ..
P. Bakowski
17
Architecture structurelle 2
architecture structurelle of addern is
signal c: bit_vector(taille-1 downto 0);
component adder
..
begin
ADD: for i in 0 to taille-1 generate
INADD: if i=0 adder port map (…)
end generate INADD;
ADDX : if i>0 adder port map (…)
end generate ADDX;
end generate ADD;
...
end structurelle;
P. Bakowski
18