Académique Documents
Professionnel Documents
Culture Documents
•PLD
•Le langage VHDL a été créé pour décrire des systèmes numérisés
destinés à une implantation dans des circuits logiques
programmables (PLD, FPGA, ASIC). Il remplace la saisie de schéma
traditionnelle.
S 1 a.b
S 2 a a.b.c
Pr: HLOU Fevrier 2012
Structure de VHDL
LIBRARY ieee;
USE ieee.std_logic_1164.all; Déclaration de la bibliothèque
USE ieee.std_logic_arith.all;
-Les bibliothèques déclarées au départ permettent d’utiliser les types " STD-
LOGIC " définis depuis 1993.
-" l’ENTITY " est la boîte avec ses entrées et ses sorties physiques. "
-L’architecture " contient la description du fonctionnement de la boîte et
possède son propre nom.
-Il existe une priorité entre opérateurs. Le plus simple est d’utiliser des
parenthèses.
- Les autres opérateurs sont : XOR (ou exclusif), NAND, NOR, &
(concaténation), + (addition), - (soustraction), * (multiplication), / (division).
- numéro1 est une description structurelle :elle est très proche d’une saisie de schéma.
Exemple: multiplexeur:
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_arith.all;
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_arith.all;
ENTITY combi3 IS
PORT (
c :IN INTEGER RANGE 0 TO 3;
e : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
s : OUT STD_LOGIC
);
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_arith.all;
ENTITY combi4 IS
PORT (
c :IN INTEGER RANGE 0 TO 3;
e : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
S : OUT STD_LOGIC
);
END combi4;
ARCHITECTURE archi OF combi4 IS
BEGIN
PROCESS(c)
BEGIN
CASE c IS
WHEN 0 => s<= e(0);
WHEN 1 => s<= e(1);
WHEN 2 => s<= e(2);
WHEN 3 => s<= e(3);
END CASE;
END PROCESS;
END archi;
a5 a4 a3 a2 a1 a0
X X X X X
X X X X X
+ + + + +
S5 s4 s3 s2 s1 s0
Le cahier des charges est le suivant : le nombre S en sortie indique, en binaire, le nombre de signaux d’entrée
à 1.
Si a = 1001 alors S = 010
Si a = 1100 alors S = 010
Si a = 1111 alors S = 100
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_arith.all;
ENTITY combi7 IS
PORT (
a: IN STD_LOGIC_VECTOR(3 DOWNTO 0);
S : OUT INTEGER RANGE 0 TO 4
);
END combi7;
ARCHITECTURE archi OF combi7 IS
BEGIN
PROCESS (a)
VARIABLE resultat : INTEGER;
BEGIN
resultat := 0;
FOR i IN 0 TO 3 LOOP
IF (a (i) = '1') THEN
resultat := resultat + 1;
END IF;
END LOOP;
s <= resultat;
END PROCESS;
END archi;
Ces muni blocs pourront alors être décrits sous forme comportementale
« une fois pour toute »
la synthèse est un processus lent (en terme de temps de calcul). Plus un bloc est gros et
complexe, plus sa synthèse prendra du temps. Il vaut donc mieux travailler sur des blocs plus
petits, plus simples à synthétiser, et rassembler le tout à la fin.
Déclaration
component AND_2
port (
a : IN STD_LOGIC ;
b : IN STD_LOGIC ;
s : OUT STD_LOGIC ;
end component;
Instanciation
<nom_instance>:<nom_composant> PORT MAP (liste des connection);
entity AND_3 is
port(
e1 : in bit; -- ou e1 : IN STD_LOGIC ;
e2 :IN STD_LOGIC ;
e3 : IN STD_LOGIC ;
s : OUT STD_LOGIC
e1 e2 e3
);
end entity; z
--
architecture arc of AND_3 is inst1
--
signal z : bit;
component and2 s
port (
inst2
a : IN STD_LOGIC ;
b : IN STD_LOGIC ;
s : OUT STD_LOGIC );
end component;
--
begin
inst1 : and2 port map (e1, e2 , z);
inst2 : and2 port map (z, e3, s);
end arc
a
s
b
cin1 cin2
a 4bits
b 4bits
s0
‘0’
s1
s2
s3
component AND_2
port (
a : IN STD_LOGIC ;
b : IN STD_LOGIC ;
s : OUT STD_LOGIC ;
end component;