Vous êtes sur la page 1sur 43

Programmation VHDL

• Outils de programmation
• Structure d’un programme
• Entité
• Architecture
• Les différentes descriptions d’une architecture:
 de type flot de données,
comportementale ou procédurale,
structurale et
architecture de test
1
Le VHDL
• VHDL: VHSIC = VHSIC (very-high-speed integrated circuits)
Hardware Description Language
• Développé dans les années 80 aux États-Unis Défense américaine,
• VHDL est devenu une norme IEEE numéro 1076 en 1987.
• Révisée en 1993 pour supprimer quelques ambiguïtés et améliorer
la portabilité du langage, cette norme est vite devenue un standard
en matière d'outils de description de fonctions logiques.
• le langage VHDL sert à:
 concevoir des ASICs,
 programmer des composants programmables de
type PLD, CPLD et FPGA,
 concevoir des modèles de simulations numériques
ou des bancs de tests.
2
Structure d’une description VHDL
En VHDL, une structure logique est décrite à
l'aide d'une entité et d'une architecture de la
façon suivante :

Entrées Sorties
Structure Logique

3
Entité et Architecture
Entité (ENTITY):
L'entité donne les informations concernant les
signaux d'entrées et de sorties de la structure
ainsi que leurs noms et leurs types.
L'entité est une vue de l'extérieur du composant
(interface) .

4
Syntaxe:

ENTITY Nom de l'entité IS


Description des entrées et des sorties de la
structure en explicitant pour chacune d'entre elles le
nom, la direction (IN, OUT et INOUT) et le type.
END Nom de l'entité ;

Pour le type des entrées/sorties, on utilise principalement


deux :

std_logic : 1 bit
std_logic_vector: 1 vecteur de bits
5
Les types
• VHDL est un langage fortement typé.
• Tous les objets définis en VHDL doivent
appartenir à un type avant d'être utilisés.
• Deux objets sont compatibles s’ils ont la même
définition de type.
• Un type définit l'ensemble des valeurs que peut
prendre un objet ainsi que l'ensemble des
opérations disponibles sur cet objet.

6
7
Dans le paquetage STANDARD de la bibliothèque STD,
plusieurs types énumérés sont définis :
 type boolean is (FALSE, TRUE);
 type bit is ('0', '1');
 type severity_level is (NOTE, WARNING, ERROR, FAILURE);
 type character is ( NUL, SOH, STX, ETX,..., '0','1', ...);

Dans le paquetage STD_LOGIC_1164 de la bibliothèque


IEEE, le type STD_ULOGIC est défini par :

type std_ulogic is ('U', 'X, 'O', '1', 'Z', 'W', 'L', 'H', '-');

8
 Ceci permet d'avoir 9 états significatifs de la logique.

 Ces états illustrent les cas où le signal est soumis à de


multiples affectations.

 Dans ce cas chaque valeur a un niveau de priorité.

 La liste suivante donne la signification de ces 9 valeurs en


commençant par la valeur de plus grande priorité :

9
Au démarrage les signaux sont dans un état inconnu 'U'.
'X' indique un conflit, le signal lui est affecté d'un côté à
'1' et d'un autre à '0'.
'0' et '1' correspondant aux valeurs booléennes du
signal.
'Z' correspond à l'état haute 'impédance".
'W' est la valeur d'un signal relié à 2 résistances de
tirage, une tirant à 0 (pull down) et l'autre à 1 (pull up).
'H' et 'L' sont des valeurs d'un signal relié
respectivement à une résistance de tirage à 1 et à 0.
'-' est un état indifférent. Utile pour décrire les tables de
vérité.

10
 Au niveau de la syntaxe, pour indiquer la valeur
d'un bit, scalaire, on met le symbole entre
apostrophes : '1'

 dans le cas d'un vecteur, on utilisera des


guillemets droits : "11"

 Ces types sont définis dans la bibliothèque


ieee.std_logic_1164.all (il faudra le spécifier avant
chaque entité VHDL).

11
Architecture:
L'architecture décrit le comportement de l'entité.
l'architecture explicitera les liens entre les entrées et les
sorties (implémentation).
Syntaxe:

ARCHITECTURE Nom de l'architecture OF Nom de l'entité IS


Zone de déclaration.
BEGIN
Description de la structure logique.
END nom de l'architecture ;

N.B: Il est possible de créer plusieurs architectures pour une même


entité. Chacune de ces architectures décrira l'entité de façon
différente.
12
Structure d'un programme VHDL

13
Modèle VHDL d’un circuit combinatoire
simple

14
library IEEE; Librairie: définition de type, fonctions,
use IEEE.std_logic_1164.all; …etc.

entity add3bits is
Port (
Cin: in std_logic;
X: in std_logic;
Y: in std_logic; Entité: interface avec le monde extérieur
Définit les ports, leurs types et leurs
Cout: out std_logic; directions
S: out std_logic
);
End add3bits;

15
Architecture flotdedonnees of add3bits is
signal T1: std_logic; Architecture: partie
déclarative et corps.
signal T2: std_logic;
signal T3: std_logic; Décrit le comportement
begin du circuit.
S<=T1 xor Cin;
Cout<= T3 or T2;
T1<=X xor Y;
T2<=X and Y;
T3<= Cin and T3;
end flotdedonnees;

Principe de la concurrence: l’ordre n’est pas important dans le


corps de l’architecture.
16
Les différentes descriptions d’une
architecture

Structurale

Par flot de données

comportementale

17
Description structurale

• Un circuit numérique peut être défini par sa


structure, c’est à dire par un assemblage de blocs.

• Une description structurale correspond à une


description par schéma, où les instanciations des
composantes et leurs interconnexions sont
énumérées avec du texte.

• Une description structurale est appropriée pour relier


différents sous-systèmes d’un circuit numérique.

18
Blocs (sous-systèmes) Circuit numérique

19
Exemple de description structurale

20
entity NAND2 is
port (
I0, I1 : in std_logic;
O : out std_logic
);
end NAND2;

architecture arch of NAND2 is


begin
O <= not (I0 and I1);
end arch;

21
entity XOR2 is
port (
I0, I1 : in std_logic;
O : out std_logic
);
end XOR2;

architecture arch of XOR2 is


begin
O <= I0 xor I1;
end arch;

22
entity INV is
port (
I : in std_logic;
O : out std_logic
);
end INV;

architecture arch of INV is


begin
O <= not I;
end arch;

23
library ieee;
use ieee.std_logic_1164.all;

entity combinatoire1 is
port (
A, B, C : in std_logic;
F : out std_logic
);
end combinatoire1;

24
architecture structurale of combinatoire1 is
component INV
port (I: in std_logic; O: out std_logic);
end component;
component NAND2
port (I0, I1: in std_logic; O: out std_logic);
end component;
component XOR2
port (I0, I1: in std_logic; O: out std_logic);
end component;
signal S1, S2 : std_logic;

Begin
Instanciation
U1: NAND2 port map (I0 => S2, I1 => A, O => F);
de composants
U2: XOR2 port map (I0 => S1, I1 => B, O => S2);
U3: INV port map (I => C, O => S1);
end structurale; 25
Exemple de description structurale

S1 S2

26
Description par flot de données

• Le modèle d’un circuit par flot de données décrit sa


fonction sans nécessairement définir sa structure.
• Les valeurs des signaux et des ports du circuits sont
établies par des affectations concurrentes de valeurs.
• Trois types d’énoncés concurrents:
Avec des opérateurs logiques:
and, or, nand, nor, xor, xnor, not
Selection (équivalent à un énoncé case):
With-select
Conditionnel (équivalent à un if else):
When-else
27
Avec des opérateurs logiques
library ieee;
use ieee.std_logic_1164.all;

entity combinatoire1 is
port (
A, B, C : in std_logic;
F : out std_logic
);
end combinatoire1;

architecture flotdedonnees1 of combinatoire1 is


begin
F <= not(A and (B xor (not C)));
end flotdedonnees1;

28
Sélection
architecture flotdedonnees2 of combinatoire1 is
signal entree : std_logic_vector (2 downto 0);
begin
entree <= (A,B,C);
with entree select
F <=
‘1’ when "000" ;
‘1’ when "001" ;
‘1’ when "010" ;
‘1’ when "011" ;
………….
…………
‘0’ when others ;

end flotdedonnees2;

29
Enoncé conditionnel

architecture flotdedonnees3 of combinatoire1 is


begin
F <= ‘1’ when (A = ‘0’ or B/= C ) else ‘0’;
end flotdedonnees3;

30
Description comportementale
• Une description comportementale utilise des
énoncés similaires à ceux d’un langage procédural
comme C ou java, incluant les structures de contrôle
(condition, répétition).
• Les descriptions comportementales en VHDL se font
à l’aide de l’énoncé " process " à l’intérieur d’une
architecture.
• Un processus (process) décrit une partie du circuit
qui s’exécute de façon concurrente à d’autres
processus et à des affectations concurrentes de
signaux.
31
• Le défi: garder en tête la nature du circuit désiré et
l’inventaire des composants matériels disponibles pour
que la description soit synthétisable.

• On peut alors abstraire le comportement du circuit à


un niveau élevé, et donc définir un système complexe,
de façon concise, paramétrable et plus facilement
modifiable.

32
• Chaque composant interne du système est un
processus (process) de l'architecture.

• Une architecture est un ensemble de processus.

• Les processus s'exécutent en parallèle.

• Les processus de l'architecture sont interconnectés


par le biais des signaux (signal).

33
34
Exemple 1 de description comportementale

library ieee;
use ieee.std_logic_1164.all;

entity combinatoire1 is
port (
A, B, C : in std_logic;
F : out std_logic
);
end combinatoire1;
35
architecture comportementale1 of combinatoire1 is

begin

process (A, B, C)
begin
F <= not(A and (B xor not (C)));
end process;

end comportementale1;

Similaire à une description par flot de données avec opérateurs


logiques
36
architecture comportementale2 of combinatoire1 is
begin
process (A, B, C)
begin
if A=‘0’ or B /= C then
F <= ‘1’;
else
F <= ‘0’;
end if;
end process;
end comportementale2;

Similaire à une description par flot de données avec énoncé


conditionnel.

37
Un autre exemple: porte ET à 4 entrées

library ieee;
use ieee.std_logic_1164.all;

entity porteET4 is
port (
I : in std_logic_vector (3 downto 0);
F : out std_logic
);
end porteET4 ;
38
architecture comportementale1 of porteET4 is
begin
process (I)
begin
F <= I(3) and I(2) and I(1) and I(0); end process;
end comportementale1;

Similaire à une description par flot de donnée

39
architecture comportementale2 of porteET4 is
begin
process (I)
variable sortie: std_logic;
begin
sortie:=1;
for k in 3 downto 0 loop
sortie := sortie and I(k);
end loop;
F <= sortie;
end process;
end comportementale2;

40
Entité paramétrable

library ieee;
use ieee.std_logic_1164.all;

entity porteET is
generic (
w : positive := 8 -- nombre d’entrées de la porte ET
);
port (
I : in std_logic_vector (w-1 downto 0);
F : out std_logic
);
end porteET;
41
architecture comportementale of porteET is
begin
process (I)
variable sortie: std_logic;
begin
sortie:=1;
for k in w-1 downto 0 loop
sortie := sortie and I(k);
end loop;
F <= sortie;
end process;
end comportementale;

42
FIN DU COURS

43

Vous aimerez peut-être aussi