Vous êtes sur la page 1sur 7

Département d’Ingénierie des systèmes électriques et

Mme Boumeridja. électroniques : Master 1 RT

1 Partie 1
TUTORIEL SUR VHDL

Il a l’acronyme VHSIC Very High Speed Integrated Circuit


Hardware Description Langage qui veut dire que c’est un langage
dédié à la modélisation du matériel.

Il existe depuis la fin des années 80.


Les points forts de ce langage sont divers tels que :
Méthodologies de conception diverses
Outil complet (design, simulation, synthèse)
Haut niveau d’abstraction (indépendant de la technologie).

Tout code VHDL contient une paire entité/architecture.

1. Entité:
Cette entité définit le nom de la description VHDL ainsi que ses entrées/sorties.
La syntaxe est donnée comme suit :
entity NOM_DE_L_ENTITE is

port(déclaration des entrées/sorties);

end NOM_DE_L_ENTITE;

Le port décrit dans l’entité possède la syntaxe suivante :


NOM_DU_SIGNAL : MODE TYPE;

N.B : NOM_DE_L_ENTITE, NOM_DU_SIGNAL et autres sont


appelés IDENTIFICATEURS et doivent avoir la règle suivante :
 Caractères alphanumériques anglo-saxon ;
 Possèdent un seul caractère qui est :’_’ ;
 Deux caractères ‘_’ ne se suivent pas ;
 Il ne peut se terminer par «_ »
 Ne pas utiliser un mot réservé.

Le MODE du signal peut-être :


 in  un port d’entrée
 out  un port de sortie
 Inout  un port bidirectionnel

Faculté de la Technologie Module : DSP & FPGA


Département d’Ingénierie des systèmes électriques et
Mme Boumeridja. électroniques : Master 1 RT

2
Le TYPE utilisé pour un signal peut être : état logique

std_logic : ‘0’  état logique bas


’1’  état logique haut
‘Z’  Haute impédance,
‘L  faible 0
‘H’  faible 1
‘X’  inconnu
‘W’  faible inconnu
‘U’  non initialisé
‘-’  quelconque

N.B : Ce type représente un vrai signal électronique.

 Etat logique est donné entre apostrophe comme : ‘0’‘1’‘Z’.

Ou bien :
std_logic_vector(N downto 0) ou (0 to N) : « 0011» qui est un bus
composé de différents états logiques.

 Un bus d’état logique est donné entre guillemets "01111001 ".

Ou bien :
integer : comme son nom l’indique est un entier ;
syntaxe:
type integer is range implementation_defined;
Sa taille doit être comprise entre –2,147,483,647 (–231+1) jusqu’à
+2,147,483,647 (+231–1).

Deux sous-types sont tirés du type integer qui sont : natural et positive.

Natural commence de : 0 jusqu’à +2,147,483,647 (+231–1).


Positive commence de : 1 jusqu’à +2,147,483,647 (+231–1).

Le type integer est non restreint et si on l’utilise dans un code VHDL, il


est donné restreint comme suit :
type ten is range 0 to 9;
type digit is range -9 to 9;

Faculté de la Technologie Module : DSP & FPGA


Département d’Ingénierie des systèmes électriques et
Mme Boumeridja. électroniques : Master 1 RT

3
Il est utilisé comme un port dans une entité, comme un indice de boucle
dans un compteur, etc.

Ou bien :

Booléen est prédéfini comme ‘false’ et ‘true’.


Type boolean is (false,true);

Comme :
equal: out boolean ;

On donne l’exemple d’un demi-


additionneur associant Entité/Architecture :

Son entité est décrite en VHDL par :

entity HA is
port(A,B : in std_logic;
S,R : out std_logic
);
end HA;

Figure 1

2. Architecture :
Elle décrit le fonctionnement du système donc les relations entre les
entrées et les sorties.
Si un système comprend plusieurs sous-systèmes, chacun sera décrit par
une paire entité/architecture.
Le fonctionnement peut être combinatoire et/ou séquentielle.
On recense trois grands styles d’architecture :
 Flot de données
 Structurel
 Comportemental

L’architecture de l’exemple de la figure 1 :

architecture arch_HA_flot of HA is
begin

Faculté de la Technologie Module : DSP & FPGA


Département d’Ingénierie des systèmes électriques et
Mme Boumeridja. électroniques : Master 1 RT

4
S <= A xor B;
C <= A and B;
end arch_HA_flot;

3. LES BIBLIOTHEQUES :

Mais ne pas oublier de spécifier l’entête de la bibliothèque utilisée ainsi que les
packages comme :
library ieee;
use ieee.std_logic_1164.all;

Pourquoi faire cela?

Tout code VHDL nécessite la déclaration d’une ou de plusieurs


bibliothèques car ces dernières incluent la définition des types de
signaux et des opérations que l’on peut effectuer dans le code.

4. Déclaration d’un vecteur


Deux déclarations possibles sont décrites :

1. MSB à droite et LSB à gauche


Elle est décroissante comme l’exemple l’indique :

std_logic_vector (3 downto 0);


On montre la position du MSB et du LSB comme suit :

2. MSB à gauche et LSB à droite


Elle est croissante selon l’exemple suivant :

std_logic_vector (0 to 3);

La position du MSB et LSB est donnée :

Faculté de la Technologie Module : DSP & FPGA


Département d’Ingénierie des systèmes électriques et
Mme Boumeridja. électroniques : Master 1 RT

Les types que l’on a utilisés dans l’entité sont divisés en deux catégories :
Scalaires comme :
Entier
Flottant
Physique : Définition unité de mesure
Énumérés : Liste

Ou

Composites comme :
Tableaux (Array)
Enregistrement (Record)

N.B : Les types peuvent admettre des sous-types définis par l’instruction
Subtype.

5. Les opérateurs en VHDL :


Il existe 6 groupes d’opérateurs :
a. Opérateurs logiques :

b. Opérateurs relationnels :
Ils sont définis pou tous les types scalaires et les vecteurs de scalaires. Les
deux opérandes doivent être du même type.

Faculté de la Technologie Module : DSP & FPGA


Département d’Ingénierie des systèmes électriques et
Mme Boumeridja. électroniques : Master 1 RT

c. Opérateurs arithmétiques :
Ils sont définis pou les types numériques.

Accès à un élément d’un bus :


On suppose que l’on a un bus binaire de 16 bits :

Faculté de la Technologie Module : DSP & FPGA


Département d’Ingénierie des systèmes électriques et
Mme Boumeridja. électroniques : Master 1 RT

7 Cet opérateur  est utilisé aussi comme opérateur de décalage logique ou


arithmétique sur un vecteur comme :
Syntaxe pour un décalage logique à droite :
Signal Vect8 : std_logic_vector 7 downto 0) :=00011110;

Si on veut faire un décalage à droite d’une position sur ce vecteur en


remplissant la case vide par un ‘0’ logique comme suit:

00011110  0 0001111
7 downto 0 7 downto 1

Ce qui correspond lorsqu’on utilise l’opérateur de concaténation :


Vect8_dec <= ‘0’ & Vect87 downto 1);

NB: même opération pour le décalage logique à gauche.

Syntaxe pour un décalage arithmétique à droite :


Cette fois-ci, le bit signe ou MSB doit être gardé lorsque l’on fait le décalage
comme suit :

Vect8_arith <= Vect87) &Vect87 downto 1);

Ou encore comme un opérateur de rotation à droite ou à gauche :


La syntaxe d’une rotation à gauche d’une position est comme suit :
Vect8_rol <=Vect86 downto 0) & Vect87);

Syntaxe pour une rotation à droite :

La rotation est possible pour plusieurs positions comme le montre la syntaxe


d’une rotation à droite de 3 positions:
Vect8_ror <= Vect82 downto 0) & Vect8 7 downto 3);

Faculté de la Technologie Module : DSP & FPGA

Vous aimerez peut-être aussi