Beruflich Dokumente
Kultur Dokumente
2.
2.1.
28/10/2014 11:18
R. EL ALAMI
2.
2.1.
28/10/2014 11:18
R. EL ALAMI
2.
2.2.
28/10/2014 11:18
R. EL ALAMI
2.
2.3.
28/10/2014 11:18
R. EL ALAMI
2.
2.3.
28/10/2014 11:18
R. EL ALAMI
2.
2.4.
28/10/2014 11:18
R. EL ALAMI
2.
2.4.
28/10/2014 11:18
R. EL ALAMI
2.4.
28/10/2014 11:18
R. EL ALAMI
2.4.
2.4.2
Out 1
Bloc A
In 2
In 3
Out 2
In 3
Bloc B
Bloc C
Out 1
Bloc D
Bloc E
Out 2
R. EL ALAMI
10
2.4.
2.4.2
. Port :
. Mode :
28/10/2014 11:18
R. EL ALAMI
11
2.4.
2.4.2
In
Out
Inout
Buffer
R/W
Adresse
Mmoire
Donnes
28/10/2014 11:18
Busy
Erreur
R. EL ALAMI
12
2.4.
2.4.2
. Dclaration :
ENTITY nom_entite IS
PORT ( entrees : IN type_entrees;
sorties : OUT type_sorties;
entreessorties : INOUT type_entreessorties;
entreessorties_buffer : BUFFER type_entreessorties_buffer)
END nom_entite;
28/10/2014 11:18
R. EL ALAMI
13
2.4.
2.4.2
a)
Le NOM_DU_SIGNAL.
Il est compos de caractres, le premier caractre doit tre une lettre, sa
longueur est quelconque, mais elle ne doit pas dpasser une ligne de code.
VHDL nest pas sensible la casse , cest dire quil ne fait pas la
distinction entre les majuscules et les minuscules.
28/10/2014 11:18
R. EL ALAMI
14
2.4.
b)
Le SENS du signal
2.4.2
- in
- out
- inout
- buffer
description.
28/10/2014 11:18
R. EL ALAMI
15
2.4.
c)
Le TYPE
2.4.2
28/10/2014 11:18
R. EL ALAMI
16
Exercices
Exercice 1 : Dfinir
lentit dcrivant un
additionneur de deux
fois un bit.
Exercice 2 : Dfinir
lentit dcrivant un
additionneur de deux
mots de quatre bits.
17
2.4.
2.4.2
clk : IN bit;
a,b : IN bit_vector(7 DOWNTO 0);
cin : IN bit;
s : OUT bit_vector(7 DOWNTO 0);
cout : OUT bit)
END adder_pip;
28/10/2014 11:18
R. EL ALAMI
18
2.4.
2.4.3
R. EL ALAMI
19
2.4.
2.4.3 Architecture
. Exemples
ARCHITECTURE comportementale OF adder_pip IS
BEGIN
PROCESS(clk)
VARIABLE carry : bit;
28/10/2014 11:18
R. EL ALAMI
20
2.4.
2.4.3 Architecture
. Exemples -- Dcodeurs
7 segments
entity DEC7SEG4 is
port (DEC :in std_logic_vector(3 downto 0);
SEG:out std_logic_vector(6 downto 0));
end DEC7SEG4;
architecture DESCRIPTION of DEC7SEG4 is
begin
SEG <= "1111110" when DEC = 0
else "0110000" when DEC = 1
else "1101101" when DEC = 2
else "1111001" when DEC = 3
else "0110011" when DEC = 4
else "1011011" when DEC = 5
else "1011111" when DEC = 6
else "1110000" when DEC = 7
else "1111111" when DEC = 8
else "1111011" when DEC = 9
else "-------";
end DESCRIPTION;
28/10/2014 11:18
R. EL ALAMI
21
2.4.
2.4.3 Architecture
. 3 Types de description :
. Description comportementale
. Description structurelle
. Description mixte
28/10/2014 11:18
R. EL ALAMI
22
2.4.
A.
Architecture : Description comportementale
. Description haut niveau
ARCHITECTURE haut_niveau OF adder IS
BEGIN
S <= A + B;
END haut_niveau;
. Description
. Description
bas niveau
R. EL ALAMI
23
2.4.
A.
. Exemple : Description
D
Q
Horloge
Q
28/10/2014 11:18
Q-1
R. EL ALAMI
24
2.4.
A.
Architecture : Description comportementale
. Exemple : Description comportementale d'une bascule D
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_arith.all;
ENTITY basculed IS
PORT
(
d,clk : IN bit;
q: OUT bit);
END basculed;
ARCHITECTURE comportementale OF basculed IS
BEGIN
PROCESS(clk)
BEGIN
IF (clk='1') THEN q<=d;END IF;
END PROCESS;
END comportementale;
28/10/2014 11:18
R. EL ALAMI
25
2.4.
A.
VHDL
S(0)
A(1)
B(1)
A(0)
B(0)
28/10/2014 11:18
S(1)
26
2.4.
A.
et du structurel
reset
D
b
a
Adder
28/10/2014 11:18
S_inter
clk
s
VHDL
27
28/10/2014 11:18
R. EL ALAMI
28
28/10/2014 11:18
R. EL ALAMI
29
28/10/2014 11:18
R. EL ALAMI
30
2.
2.4.
28/10/2014 11:18
R. EL ALAMI
31
28/10/2014 11:18
R. EL ALAMI
32
28/10/2014 11:18
R. EL ALAMI
33
28/10/2014 11:18
R. EL ALAMI
34
28/10/2014 11:18
R. EL ALAMI
35
2.
2.5.
3 types dobjets :
Constantes :
Variables :
Signaux :
28/10/2014 11:18
R. EL ALAMI
36
2.
2.5.
Constantes :
. Utilisation des constantes et des variables : proche des
langages traditionnels
. Constantes (Constant)
. Objets internes valeurs fixes et dfinitives
. Synthse : Mise VCC ou au GND Surface nulle
. Dclaration : constant nom : type := valeur;
. Exemple :
CONSTANT pi : real:=3.141592 ;
28/10/2014 11:18
R. EL ALAMI
37
2.
2.5.
Variables :
. Variables (Variable)
. Objets permettant de conserver une valeur pendant un
certain temps
. Utilisable qu'au sein d'un processus (dfinition dans le
process)
. Peu utilis en synthse logique
. Exemple:
VARIABLE octet1 : std_logic_vector(0 TO 7) := "00000001";
28/10/2014 11:18
R. EL ALAMI
38
2.
2.5.
Signaux : (signal)
28/10/2014 11:18
R. EL ALAMI
39
2.
2.5.
Signaux : (signal)
28/10/2014 11:18
R. EL ALAMI
a
b
Tmp (fil)
a
b
Tmp (fil)
40
2.
2.5.
2 modes de fonctionnement :
mode inertiel :
filtre les impulsions de longueur insuffisante
mode transmission :
transmission de toutes les impulsions
28/10/2014 11:18
R. EL ALAMI
41
2.
2.5.
Mode inertiel
utiliser pour les composants dont le temps de travers est non
nul (tous les composants dcrits de faon raliste)
28/10/2014 11:18
R. EL ALAMI
42
2.
2.5.
Mode transport
toutes les transitions en entre sont transmises en sortie avec un
dcalage gal au temps de propagation.
28/10/2014 11:18
R. EL ALAMI
43
2.
2.5.
28/10/2014 11:18
R. EL ALAMI
44
2.
2.5.
28/10/2014 11:18
R. EL ALAMI
45
2.
2.6.
28/10/2014 11:18
R. EL ALAMI
46
2.
2.6.
28/10/2014 11:18
R. EL ALAMI
47
2.
entiers :
-231 + 1 entier 231 - 1
. Types
donn
R. EL ALAMI
48
2.
. Types
numrs :
R. EL ALAMI
49
2.
physiques :
son unit
par des sous units
on peut effectuer des calculs sur ces types
Oprateurs
Arithmtiques: + * / abs
Relationnels: = /= < <= > >=
28/10/2014 11:18
R. EL ALAMI
50
2.
Les tableaux :
dimensions multiples
les indices sont de type discret (numr ou entier)
2 sortes de tableaux :
contraint : on spcifie le sens de variation des indices
non contraint : on repousse la dfinition de la taille plus tard
28/10/2014 11:18
R. EL ALAMI
51
2.
2.6.2.1
Type : tableaux
28/10/2014 11:18
R. EL ALAMI
52
2.
2.6.2.1
Type : tableaux
28/10/2014 11:18
R. EL ALAMI
53
2.
2.6.2.1
Type : tableaux
Oprateurs
Relationnels: = /= < <= > >=
Logiques*: and or nand nor xor xnor not
Dcalage et rotation*: sll srl sla sra rol ror
(* tableaux 1 dimension de types bit ou boolean seulement;
oprations logiques effectues bit bit)
Concatnation: & (tableaux 1 dimension seulement)
28/10/2014 11:18
R. EL ALAMI
54
2.
Un type enregistrement dfinit une collection d'lments (ou de champs) nomms dont
les valeurs peuvent tre de types diffrents. Chaque nom d'lment doit tre unique.
Exemples de types non prdfinis
type memory_bus is record
R. EL ALAMI
55
2.
Exemple :
type article is record
champs1 : integer;
champs2 : bit;
end record;
type pointeur is access article;
variable p, q : pointeur;
p:= new pointeur ;
28/10/2014 11:18
R. EL ALAMI
56
2.
Les fichiers (FILE) sont trs utiliss pour stocker des donnes telles que
Mmoires ROM, Donnes de test.
type text is file of string ;
Type prdfini (dans paquetage TEXTIO)
L'usage du paquetage TEXTIO requiert la dclaration de la clause use
suivante:
use STD.TEXTIO.all;
Exemples de types non prdfinis
type word is bit_vector(7 downto 0);
type word_file is file of word;
type real_file is file of real;
28/10/2014 11:18
R. EL ALAMI
57
2.
2.6.4 Sous-Types
28/10/2014 11:18
R. EL ALAMI
58
2.
Prdfinis
Integer
Natural
28/10/2014 11:18
Positive
bit
Boolean
Real
Time
Bit-vector
R. EL ALAMI
59
2.
2.7
. Remarque :
. Oprateurs
logiques
Nom
Signification
And
Et
Nand
Non et
Or
Ou
Nor
Xor
28/10/2014 11:18
Type oprandes
Boolean
Bit ou Bit_vector
Non ou
Ou exculsif
Xnor
Egal
Not
Non
R. EL ALAMI
60
2.
2.7
. Oprateurs
. Exemple 1
logiques
Synthse
a(0)
b(0)
c(0)
a(1)
b(1)
c(1)
Exemple 2
SIGNAL d, e, f, g : bit;
g <= (d AND e) AND f;
28/10/2014 11:18
Synthse
R. EL ALAMI
d
e
f
61
2.
2.7
. Oprateurs relationnels
Nom
=
/=
<
<=
>
>=
Type oprandes
Signification
Egal
Non gal
Entres : Tout scalaire
Infrieur
Sortie : Boolean
Infrieur ou gal
Suprieur
Suprieur ou gal
Exemple
Synthse
a0
a1
!b0
a0
!b1
!b0
a1
!b1
28/10/2014 11:18
R. EL ALAMI
62
2.
2.7
Oprateurs standards
. Oprateurs
Nom
de dcalages
Type oprandes
Signification
Sll Sla
Dcalage gauche
Srl Sra
Dcalage droite
Rol
Ror
Bit_vector
Rotation gauche
Rotation droite
Exemple
Synthse
a0
a1
b0
a2
b1
a3
b2
'0'
b3
clk
28/10/2014 11:18
R. EL ALAMI
63
2.
2.7
Oprateurs
arithmtiques
Nom
Type oprandes
Incrmentation de 1 ou addition
Dcrmentaion de 1 ou soustraction
Integer, Real
28/10/2014 11:18
Multiplication
Division
abs
Valeur absolue
**
Exponentiel
mod
Autres
Signification
Modulo
Integer
rem
Reste
oprateurs
Nom
Type oprandes
Signification
&
Bit, Bit_vector
Concatnation
R. EL ALAMI
64
2.
2.7
. Exemple
: addition
S = (A + B) + (C - 1)
T = ((A + B) + C - 1)
Synthse
A
B
C
-1
A
B
C
-1
Use ieee.numeric_std.all ;
Use ieee.std_logic_arith.all ;
28/10/2014 11:18
R. EL ALAMI
65
2.
2.7
. Oprateur
de concatnation
Nom
Type oprandes
Signification
&
Bit, Bit_vector
Concatnation
ARCHITETCURE ...
SIGNAL A : BIT_VECTOR(2 DOWNTO 0 );
SIGNAL B : BIT;
SIGNAL C : BIT_VECTOR(5 DOWNTO 0 );
BEGIN
C <= not B & "101" & not A(2 DOWNTO 1);
R. EL ALAMI
A(1)
C(0)
A(2)
C(1)
VDD
GND
VDD
C(2)
C(3)
C(4)
C(5)
66
2.
2.7
. Oprateur
de concatnation
28/10/2014 11:18
R. EL ALAMI
67
2.
2.7
-- BUS = 9 en dcimal
-- BUS = 9 en dcimal
-- BUS = 9 en dcimal
R. EL ALAMI
68
2.
2.7
Exemple:
Library ieee;
Use ieee.std_logic_1164.all;
entity AFFEC is
port (
E1,E2 : in std_logic;
BUS1,BUS2,BUS3 : out std_logic_vector(3 downto 0);
S1,S2,S3,S4 : out std_logic)
end AFFEC;
architecture DESCRIPTION of AFFEC is
begin
S1 <= '1'; -- S1 = 1
S2 <= '0'; -- S2 = 0
S3 <= E1; -- S3 = E1
S4 <= '1' when (E2 ='1') else S4'; -- S4 = 1 si E1=1 sinon S4
BUS1 <= "1000"; -- BUS1 = "1000"
BUS2 <= E1 & E2 & "10"; -- BUS2 = E1 & E2 & 10
BUS3 <= x"A"; -- valeur en HEXA -> BUS3 = 10(dc)
end DESCRIPTION;
28/10/2014 11:18
R. EL ALAMI
69
2.
2.8
28/10/2014 11:18
des signaux
des tableaux
des types
R. EL ALAMI
70
2.
2.8
->
->
->
->
Limite
Limite
Limite
Limite
gauche de T
droite de T
basse de T
haute de T
28/10/2014 11:18
R. EL ALAMI
71
2.
2.8
left = 7
right = 0
low = 0
high = 7
R. EL ALAMI
72
2.
2.8
28/10/2014 11:18
R. EL ALAMI
73
2.
2.8
28/10/2014 11:18
R. EL ALAMI
74
2.
2.8
Attributs de signal
Pour cette catgorie dattribut, le prfixe doit tre un signal. Le type du
rsultat peut tre signal ou fonction.
Objets signaux implicites:
S'delayed (T)
S'stable(T)
Fonctions:
S'event
S'last_event
S'last_value
28/10/2014 11:18
R. EL ALAMI
75
2.
2.8
Attributs de signal
Sactive :
boolean
true si il y a eu une transaction (affectation) sur le signal dans le
cycle de simulation en cours
Squiet(T) :
boolean
true si le signal a eu ni transaction ni vnement pendant un temps T
Stransaction :
signal
cest un signal de type bit qui change dtats pour chaque
transaction du signal
Slast_active :
time
rend le temps coul depuis la dernire transaction
28/10/2014 11:18
R. EL ALAMI
76
2.
2.8
28/10/2014 11:18
R. EL ALAMI
77
2.
2.9
. Particularisme
. Excution parallle
. Excution par dfaut
. Les instructions au sein d'une architecture sont excutes en parallle ou de
manire concurrente
. Excution concurrente = Excution combinatoire
. Chaque opration dans une architecture est excute chaque instant
. Excution squentielle
. Ncessit d'utiliser un PROCESS
. Le process est excut chaque fois qu'un signal dclar dans sa liste de
sensibilit change de valeur.
. Les instructions sont excutes squentiellement
. Les modifications des signaux (signal) sont effectives la fin du process
28/10/2014 11:18
R. EL ALAMI
78
2.
2.9
. Excution mixte
. Possibilit d'associer dans une mme architecture des modules excution
parallle et squentielle
. Exemple : Comparateur synchrone une horloge clk
LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY comp_synch IS PORT (
a, b, clk, reset : IN std_logic;
qs : OUT std_logic);
END comp_synch;
ARCHITECTURE archi_mixte OF comp_synch IS
SIGNAL q : std_logic;
BEGIN
q<='1 WHEN a=b ELSE '0';
PROCESS(clk, reset)
BEGIN
IF reset='0' THEN qs<='0';
ELSIF (clk'event AND clk='1') THEN qs <= q;
END IF;
END PROCESS;
END archi_mixte;
28/10/2014 11:18
R. EL ALAMI
a
b
Comparateur
q
clk
qs
Reset
79
2.
2.10 Instructions
. Deux
I2
I3
I2
I3
R. EL ALAMI
80
2.10 Instructions
2.10.1
Instructions de type parallle
. Assignation inconditionnelle
signal <= expression
. Assignation conditionnelle
28/10/2014 11:18
R. EL ALAMI
81
2.10 Instructions
2.10.1
Instructions de type parallle
. Assignation slective
WITH slecteur SELECT
signal <= {expression WHEN valeur_slecteur1,
expression WHEN valeur_slecteur2,
expression WHEN OTHERS};
ARCHITECTURE flot_de_donnees OF mux IS
SIGNAL selection : std_logic_vector(0 TO 1);
SIGNAL a,b,c,d,s : std_logic_vector(0 TO 7);
BEGIN
WITH selection SELECT
s <= a WHEN "00",
b WHEN "01",
c WHEN "10",
d WHEN OTHERS;
END flot_de_donnees;
28/10/2014 11:18
R. EL ALAMI
82
2.10 Instructions
2.10.1
Instructions de type parallle
.
28/10/2014 11:18
R. EL ALAMI
83
2.10 Instructions
2.10.1
Instructions de type parallle
Instanciation de multiples composants
. Instruction GENERATE
label : FOR variable_boucle IN val_initiale TO val_finale GENERATE
{instructions parallles}
END GENERATE label
label : IF condition GENERATE
{instructions parallles}
END GENERATE label
Notez que :
le ELSE n'existe pas (oubli de VHDL ?) et qu'il faut refaire un 2me IF.
Les deux instructions IF GENERATE et FOR GENERATE ont besoin
obligatoirement d'une tiquette
28/10/2014 11:18
R. EL ALAMI
84
2.10 Instructions
2.10.2
Instructions de type squentiel
. Instruction
PROCESS
[label] : PROCESS
-- Partie dclarative du process
BEGIN
-- Corps du process
-- phrases squentielles
WAIT ON (liste_signaux)
END PROCESS [label]
R. EL ALAMI
85
2.10 Instructions
2.10.2
Instructions de type squentiel
. Instruction
PROCESS
Phrases wait:
wait
wait
wait
wait
on A, B;
-- changement de A ou B
for dlai;
-- une certaine dure
until condition;
on ListeDeSignaux until condition
R. EL ALAMI
86
2.10 Instructions
2.10.2
Instructions de type squentiel
entity toto is
end toto;
architecture var of toto is
signal trigger, sum : integer := 0;
begin
process
variable var1 : integer := 1;
variable var2 : integer := 2;
variable var3 : integer := 3;
begin
wait on trigger;
var1 := var2 + var3;
var2 := var1;
var3 := var2;
sum <= var1 + var2 + var3;
end process;
end var;
R. EL ALAMI
87
2.10 Instructions
2.10.2
Instructions de type squentiel
entity toto is
end toto;
architecture var of toto is
signal trigger, sum : integer := 0;
signal sig1 : integer := 1;
signal sig2 : integer := 2;
signal sig3 : integer := 3;
begin
process
begin
wait on trigger;
sig1 <= sig2 + sig3;
sig2 <= sig1;
sig3 <= sig2;
sum <= sig1 + sig2 + sig3;
end process;
end var;
Si trigger change t=10, tous les signaux sont mis jour t=10+D : sig1=5,
sig2=1, sig3=2 et sum=6
28/10/2014 11:18
R. EL ALAMI
88
2.10 Instructions
2.10.2
Instructions de type squentiel
Un port de sortie ne peut tre utilis que comme destination
dune expression. Exemple:
entity nonet is
port (a, b : in bit;
z, zbarre : out bit);
end nonet;
architecture fausse of nonet is
begin
z <= a and b;
zbarre <= not z;
end fausse;
architecture correcte of nonet is
signal resultat : bit;
begin
resultat <= a and b;
z <= resultat;
zbarre <= not resultat;
end correcte;
28/10/2014 11:18
R. EL ALAMI
89
2.10 Instructions
2.10.2
Instructions de type squentiel
. Instruction
28/10/2014 11:18
R. EL ALAMI
90
2.10 Instructions
2.10.2
Instructions de type squentiel
. Ces instructions sont uniquement utilises dans un Process
. Assignation inconditionnelle de variables et de signaux
Mme traitement que pour le mode parallle
SIGNAL sig : integer;
PROCESS(clk)
VARIABLE var : integer := 0;
BEGIN
sig <= sig + 1;
var := var + 1;
END PROCESS;
. Instruction IF
IF condition THEN
instructions_sequentielles
ELSIF condition THEN
instructions_sequentielles
ELSE
instructions_sequentielles
END IF;
28/10/2014 11:18
R. EL ALAMI
91
2.10 Instructions
2.10.2
Instructions de type squentiel
. Instruction CASE
CASE expresssion is
{WHEN valeur_expression => instructions_sequentielles};
{WHEN OTHERS => instructions_sequentielles};
END CASE;
. Instruction LOOP
instruction_pour_iteration LOOP
instructions_sequentielles
END LOOP;
VARIABLE indice,resultat : INTEGER := 0;
Boucle1 : WHILE indice < 10 LOOP
indice := indice + 1;
resultat := resultat + adresse(indice);
END LOOP boucle1;
28/10/2014 11:18
CASE selection IS
WHEN '0' => s <= a;
WHEN '1' => s <= b;
WHEN OTHERS => NULL;
END CASE;
R. EL ALAMI
92
2.10 Instructions
2.10.2
Instructions de type squentiel
. Instruction NEXT
NEXT label_boucle WHEN condition
. Instruction EXIT
R. EL ALAMI
93
2.10 Instructions
2.10.2
Instructions de type squentiel
. Instruction NULL
Instruction sans aucun effet
CASE commande_moteur IS
WHEN avant => marche_avant;
WHEN arriere => marche_arriere;
WHEN statuquo => NULL;
END CASE;
. Instruction ASSERT
Vrification d'une condition spcifique
Information d'une ventuelle violation de cette condition
ASSERT condition REPORT message SEVERITY {note/warning/error/Failure}
PROCESS(clk)
BEGIN IF clk='1' THEN
ASSERT d'STABLE(15 ns);
REPORT "setup non respect" SEVERITY warning;
END IF;
END PROCESS;
28/10/2014 11:18
R. EL ALAMI
94
2.10 Instructions
2.10.3
Exemples
Multiplexeur 8 bits
4 vers 1
Entres
Entree1
Entree2
Entree3
Entree4
28/10/2014 11:18
Sorties
8
8
8
8
Multiplexeur 8 bits
4 vers 1
Sel1 Sel2
R. EL ALAMI
Sortie
95
2.10 Instructions
2.10.3
Exemples
28/10/2014 11:18
R. EL ALAMI
96
2.10 Instructions
2.10.3
Exemples
28/10/2014 11:18
R. EL ALAMI
97
2.10 Instructions
2.10.3
Exemples
28/10/2014 11:18
R. EL ALAMI
98
2.
2.11
28/10/2014 11:18
R. EL ALAMI
99
28/10/2014 11:18
R. EL ALAMI
100
entity AND_3 is
port(
e1 : in bit;
e2 : in bit;
e3 : in bit;
s : out bit);
end entity;
28/10/2014 11:18
101
28/10/2014 11:18
R. EL ALAMI
102
Adder1.vhd
ENTITY half_adder IS
PORT( a,b,cin : IN bit;
cout,s : OUT bit);
END half_adder
ARCHITECTURE arch_half OF half_adder
IS
BEGIN
s <= a XOR b XOR cin;
cout <= (a AND b) OR (a AND cin)
OR (b AND cin);
END arch_half;
28/10/2014 11:18
Adder2.vhd
ENTITY full_adder IS
PORT(
ENTITY full_adder IS
a,b : IN bit_vector(1 DOWNTO 0);
PORT(
cin : IN bit;
a,b : IN bit_vector(1 DOWNTO 0);
cout : OUT bit;
cin : IN bit;
s : out bit_vector(1 DOWNTO 0));
cout : OUT bit;
END full_adder
s : out bit_vector(1 DOWNTO 0));
ARCHITECTURE arch_full OF full_adder IS
END full_adder
SIGNAL inter : bit;
COMPONENT half_adder
ARCHITECTURE arch_full OF full_adder IS
PORT (a,b,cin : IN bit;
SIGNAL inter : bit;
cout,s : OUT bit);
COMPONENT half_adder PORT (a,b,cin : IN bit;
END COMPONENT;
cout,s : OUT bit);
BEGIN
END COMPONENT;
u1:half_adder PORT MAP
BEGIN
(a(0),b(0),cin,inter,s(0));
u1:half_adder PORT MAP
u2:half_adder PORT MAP
(a(0),b(0),cin,inter,s(0));
(a(1),b(1),inter, cout,s(1));
u2:half_adder PORT MAP (a(1),b(1),inter,s(1));
END arch_full;
END arch_full;
R. EL ALAMI
103
28/10/2014 11:18
R. EL ALAMI
104
. Possibilit d'utiliser un mme objet plusieurs fois avec des tailles diffrentes
. La clause generic map dans l'instanciation du composant ADD permet de fixer
la valeur du paramtre.
Dclaration d'un
additionneur
ENTITY adder is
GENERIC (largeur : integer :=8); -- valeur par dfaut
PORT(
END adder;
Instanciation avec
une largeur de 16 bits
28/10/2014 11:18
R. EL ALAMI
105
28/10/2014 11:18
R. EL ALAMI
106
28/10/2014 11:18
R. EL ALAMI
107
28/10/2014 11:18
R. EL ALAMI
108
entity Add is
port (
A, B, Cin : in std_logic;
S, Cout : out std_logic);
end Add ;
Lentit Additionneur
gnrique scrit :
entity AdditionneurN is
generic (N : Natural := 8);
port (
X, Y : in std_logic_vector ( N-1 downto 0);
Cin : in std_logic;
S : out std_logic_vector (N-1 downto 0);
Cout : out std_logic);
end AdditionneurN ;
28/10/2014 11:18
R. EL ALAMI
109
28/10/2014 11:18
R. EL ALAMI
110
. 2 parties :
28/10/2014 11:18
R. EL ALAMI
112
in: le paramtre est pass en valeur et ne peut donc pas tre modifi par la
procdure
out: le paramtre est modifi par la procdure,
inout: le paramtre est pass par rfrence et il peut donc tre lu et
modifi
. Dclaration
. Appel
28/10/2014 11:18
de procdures
PROCEDURE nom (liste de paramtres) IS dclaration
BEGIN instructions END nom;
R. EL ALAMI
113
28/10/2014 11:18
R. EL ALAMI
114
Tous les paramtres dune fonction sont de mode in: en dehors de ses
variables locales, une fonction ne peut modifier que la valeur retourne.
En plus, les paramtres ne peuvent pas tre de type variable: ils ne
peuvent tre que des constantes ou des signaux
. Dclaration
des fonctions
R. EL ALAMI
115
MinMax(x, y, z, t);
Il faut 2
fonctions min et max pour avoir
l'quivalent en fonction. Voici
l'exemple de min :
function min (a,b : unsigned(7 downto 0)
return unsigned(7 downto 0) is
varaiable min : unsigned(7 downto0);
begin
if (a < b) then
min := a;
else
min := b;
end if;
return min;
endfunction
...
z := min(x, y);
28/10/2014 11:18
R. EL ALAMI
116
28/10/2014 11:18
R. EL ALAMI
117
La librairie IEEE
A mettre au dbut de votre description
Pour rajouter les types tendues std_logic et std_logic_vector
use IEEE.STD_LOGIC_1164.all;
28/10/2014 11:18
R. EL ALAMI
118
28/10/2014 11:18
R. EL ALAMI
119
. Bibliothque WORK
- En ralit : Un espace de travail
- Tous les lments crs par l'utilisateur au sein d'un mme projet
y sont rangs
- Ces lments sont rutilisables tout instant dans le projet aprs
les avoir dclars
. Exemple d'utilisation d'un package issu de la bibliothque WORK
- L'utilisateur a cr un package operateur_arithmetique dans WORK
- Pour y avoir accs
USE WORK.operateur_arithmetique.ALL
- Pour utiliser l'lment mult de ce package
FOR ALL : multiplieur USE ENTITY WORK.mult(comportementale)
28/10/2014 11:18
R. EL ALAMI
120