Supp VHDL

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 7

ENSET

ECOLE NORMALE SUPÉRIEURE DE L'ENSEIGNEMENT


TECHNIQUE DE MOHAMMEDIA
UNIVERSITÉ HASSAN II DE CASABLANCA

Structure d’un Programme VHDL


La structure d’un programme VHDL (VHSIC Hardware Description Language) suit généralement une
organisation claire et est divisée en plusieurs sections. Voici une structure typique d’un programme VHDL :

- Déclaration des bibliothèques


Cette section est utilisée pour spécifier les bibliothèques nécessaires au programme VHDL. Les bibliothèques
contiennent des ensembles de modules et de fonctions prédéfinis que vous pouvez utiliser dans votre code.
library IEEE ;
use IEEE . STD_LOGIC_1164 . ALL ;
use IEEE . MATH_REAL . ALL ;

- Déclaration de l’entité (Entity)


En VHDL, une ”entité” est une abstraction de haut niveau utilisée pour décrire la partie externe d’un
circuit numérique. Elle définit l’interface du circuit en spécifiant ses entrées et sorties, ainsi que les modes de
fonctionnement attendus.
Une entité en VHDL est généralement constituée des éléments suivants :
ˆ Nom de l’entité : C’est le nom donné à l’entité, qui est utilisé pour identifier cette partie du circuit.

ˆ Liste des ports : Les ports représentent les connexions entre l’entité et le reste du circuit. Il existe
différents types de ports, tels que les ports d’entrée (in), les ports de sortie (out), les ports bidirectionnels
(inout), etc.
syntaxe :
entity Nom_Entite is
Port (
Port1 : in Type1 ;
Port2 : out Type2
);
end Nom_Entite ;

- Déclaration de l’architecture
En VHDL, une ”architecture” est une partie essentielle de la description d’un circuit numérique. L’architecture
définit comment une entité donnée doit être mise en œuvre ou réalisée. C’est dans l’architecture que vous
décrivez le comportement ou la structure interne du circuit que vous souhaitez concevoir.
Il y a trois types principaux d’architectures en VHDL, chacun utilisé dans des contextes spécifiques :

ˆ Architecture Dataflow
Cette architecture décrit le comportement du circuit en termes de flux de données. Elle spécifie comment les
données circulent à travers le circuit en réponse aux changements d’entrée. L’architecture Dataflow utilise
souvent des équations logiques pour décrire les relations entre les signaux.
Exemple :
architecture Data_f of Nom_Entite is
begin
Y <= A AND B ;
end Data_f ;

1
ENSET
ECOLE NORMALE SUPÉRIEURE DE L'ENSEIGNEMENT
TECHNIQUE DE MOHAMMEDIA
UNIVERSITÉ HASSAN II DE CASABLANCA

ˆ Architecture Structurelle
L’architecture structurelle décrit le circuit en termes de composants interconnectés. Elle utilise des com-
posants (généralement entités préalablement définies) et des liaisons pour définir la structure du circuit.
Exemple :
architecture structure of Nom_Entite is
component port_AND
Port (
A : in STD_LOGIC ;
B : in STD_LOGIC ;
Y : out STD_LOGIC
);
end component ;

signal s1 : STD_LOGIC ;
begin
inst_1 : port_AND port map (A , B , s1 ) ;
Y <= s1 ;
end structure ;

ˆ Architecture Comportementale
L’architecture comportementale décrit le comportement du circuit en utilisant des processus. C’est sou-
vent une approche basée sur la programmation séquentielle, où le comportement est spécifié en termes
d’instructions exécutées séquentiellement en réponse à des événements ou à des conditions.
Exemple :
architecture Comportement of Nom_Entite is
begin
process (A , B )
begin
if A = ’1 ’ and B = ’1 ’ then
Y <= ’1 ’;
else
Y <= ’0 ’;
end if ;
end process ;
end Comportement ;

Description des Types de Variables en VHDL


std logic : Unsigned:
Le type std logic représente un bit logique. Il peut Le type unsigned est utilisé pour représenter des en-
prendre les valeurs ’0’, ’1’, ’Z’ (haute impédance) tiers non signés. Il est souvent utilisé dans le contexte
de l’arithmétique modulaire.
signal mon_signal : std_logic := ’0 ’;
signal unsigned_number : unsigned (3
downto 0) := " 0101 " ;
std logic vector :
Le type std logic vector représente un vecteur de signed :
bits logiques. Il est souvent utilisé pour représenter Le type signed est utilisé pour représenter des entiers
des bus de données. signés.
signal mon_vecteur : std_logic_vector (7 signal signed_number : signed (7 downto
downto 0) ; 0) := ( others = > ’0 ’) ;

2
ENSET
ECOLE NORMALE SUPÉRIEURE DE L'ENSEIGNEMENT
TECHNIQUE DE MOHAMMEDIA
UNIVERSITÉ HASSAN II DE CASABLANCA

Integer : real :

Le type integer représente un entier signé. Le type real représente des nombres réels en virgule
flottante.
variable count : integer := 0;
variable pi_value : real := 3.14159;

generic :
boolean :
Le type generic est utilisé pour définir des
Le type boolean représente des valeurs de vérité paramètres génériques dans une entité ou une archi-
(true ou false). tecture.
signal flag : boolean := false ; generic (
data_width : integer := 8;
clock_period : time := 10 ns
);

3
ENSET
ECOLE NORMALE SUPÉRIEURE DE L'ENSEIGNEMENT
TECHNIQUE DE MOHAMMEDIA
UNIVERSITÉ HASSAN II DE CASABLANCA

Affectations sélectives
Les affectations sélectives, également appelées affectations conditionnelles, sont des instructions en VHDL
qui permettent de définir la valeur d’un signal en fonction de certaines conditions ou d’une sélection spécifiée.
Elles offrent une manière concise et élégante de décrire le comportement d’un circuit en fonction de diverses
situations.
Considérons l’entité suivante :
entity dec2_4 is
port (
e : in std_logic_vector (1 downto 0) ;
s : out std_logic_vector (3 downto 0)
);
end dec2_4 ;

Affectations sélectives concurrentes


Se sont des instructions concurrentes à utiliser exclusivement en mode combinatoire à l’extérieur d’un process.

with-Select when-else

architecture Arch1 of dec2_4 is


architecture Arch2 of dec2_4 is
begin
begin
with e select
s <= " 0001 " when e = " 00 " else
s <= " 0001 " when " 00 " ,
" 0010 " when e = " 01 " else
" 0010 " when " 01 " ,
" 0100 " when e = " 10 " else
" 0100 " when " 10 " ,
" 1000 " ;
" 1000 " when others ;
end Arch2
end Arch1

Affectations sélectives séquentielle


Ces instructions doivent existées à l’intérieur d’un process, une function ou une procedure.

Case if-elseif-else

architecture Arch3 of dec2_4 is architecture Arch4 of dec2_4 is


begin begin
process ( e ) process ( e )
begin begin
case e is if e = " 00 " then
when " 00 " = > s <= " 0001 " ; s <= " 0001 " ;
when " 01 " = > s <= " 0010 " ; elsif e = " 01 " then
when " 10 " = > s <= " 0100 " ; s <= " 0001 " ;
when others = > s <= " 1000 " ; elsif e = " 10 " then
end case ; s <= " 0100 " ;
end process ; else
end Arch3 ; s <= " 1000 " ;
end if ;
end process ;
end Arch4 ;

4
ENSET
ECOLE NORMALE SUPÉRIEURE DE L'ENSEIGNEMENT
TECHNIQUE DE MOHAMMEDIA
UNIVERSITÉ HASSAN II DE CASABLANCA

Les boucles
En VHDL, il existe deux types de boucles principaux : la boucle for et la boucle while. Ces boucles sont
utilisées pour répéter un ensemble d’instructions un certain nombre de fois ou tant qu’une condition spécifiée
est vraie. Vous pouvez utiliser les instructions loop, next et exit pour contrôler le flux d’exécution à l’intérieur
d’une boucle ou d’un processus. Voici comment elles fonctionnent :

for-loop while-loop
La boucle while est utilisée pour répéter un ensem-
La boucle for est utilisée pour répéter un ensemble ble d’instructions tant qu’une condition spécifiée est
d’instructions un nombre prédéfini de fois. vraie.
i :=0;
for i in 0 to 3 loop while i < 4 loop
s ( i ) <= a ( i ) and b ( i ) ; s ( i ) <= a ( i ) and b ( i ) ;
end loop ; i := i + 1;
end loop ;

next exit
L’instruction next est utilisée pour passer à L’instruction exit est utilisée pour quitter
l’itération suivante d’une boucle. Elle permet de immédiatement une boucle. Elle permet de sortir
sauter une itération et de passer à la suivante. de la boucle avant qu’elle ne soit terminée.
for i in 0 to 9 loop for i in 0 to 9 loop
if i = 5 then if s = 10 then
next ; -- passer a l ’ iteration exit ; -- quitter la boucle
-- suivante si i est egal a 5 -- si s est egal a 10
end if ; end if ;
s <= s + 1; s <= s + 1;
end loop ; end loop ;

loop
L’instruction loop est utilisée pour créer une boucle infinie. Les instructions à l’intérieur de la boucle loop
sont répétées indéfiniment jusqu’à ce qu’une condition de sortie soit rencontrée.
loop
s <= s + 1;
if s = 10 then
exit ; -- sortir de la boucle si s est egal a 10
end if ;
end loop ;

5
ENSET
ECOLE NORMALE SUPÉRIEURE DE L'ENSEIGNEMENT
TECHNIQUE DE MOHAMMEDIA
UNIVERSITÉ HASSAN II DE CASABLANCA

Les Processus
Un processus (process) est une séquence d’instructions séquentielles, c’est-à-dire exécutées dans l’ordre
spécifié. La déclaration de processus délimite un domaine séquentiel de l’architecture dans laquelle la
déclaration apparaı̂t. Il y a deux types de processus

Processus Implicite
Toute phrase concurrente est un processus implicite avec un wait en implicite sur les signaux placés à droite
de l’affectation.
Exemples :
S <= A + B ;
-- ************
S <= A when select = 1 else
B when select = 2 else
" 0000 " ;

Processus Explicite
Un process explicite est un bloc séquentiel qui prend place obligatoirement dans le corps d’une architecture.
Un process, comme l’architecture, comporte une zone déclarative et un corps. Trois syntaxes peuvent être
utilisées pour la création d’un processus :

process (a , b ) process process


-- declaration des -- declaration des -- declaration des
variables variables variables
begin begin begin
if (a < b ) then if (a < b ) then wait on a , b
s <= a ; s <= a ; if (a < b ) then
else else s <= a ;
s <= b ; s <= b ; else
endif ; endif ; s <= b ;
end process ; wait on a , b endif ;
end process ; end process ;

Comportement d’un process


L’exécution d’un process n’a lieu qu’en cas de changement d’état de l’un (ou de plusieurs) signal(aux) compris
dans sa liste de sensibilité.
ˆ Lorsque la liste de sensibilité est manquante, le processus sera exécuté en continu. Dans ce cas, le
process doit contenir une déclaration d’attente wait pour le suspendre et l’activer lorsque survient un
événement ou une condition devient vraie.

ˆ Lorsque la liste de sensibilité est présente, le processus ne peut pas contenir d’instruction
d’attente wait
Bien que les instructions au seins d’un process s’exécutent de façon séquentielle, le comportement d’assignement
est bien différent entre les signaux et les variables. Les variables sont instantanément assignées de leurs
nouvelles valeurs alors que les signaux change de valeur à la fin du process ou à la rencontre
d’une instruction wait.

6
ENSET
ECOLE NORMALE SUPÉRIEURE DE L'ENSEIGNEMENT
TECHNIQUE DE MOHAMMEDIA
UNIVERSITÉ HASSAN II DE CASABLANCA

L’instruction wait
Au lieu d’une liste de sensibilité, un processus peut contenir une instruction wait. L’utilisation de cette
instruction a deux raisons:
ˆ Suspendre l’exécution d’un process;

ˆ Spécifier une condition qui déterminera l’activation du process suspendu.

Il existe trois syntaxes différentes autour de wait :

ˆ wait on : équivalente à une ˆ wait until : suspend le pro- ˆ wait for : relance le pro-
liste de sensibilité cess jusqu’à ce que une con- cess après un abs de temps
process
dition vraie. spécifié dans l’instruction.
begin process process
x <= a and b ; begin begin
wait on a , b ; wait until clk = ’1 ’; Q1 <= D1 ;
end process ; Q1 <= D1 ; wait for 10 ns ;
end process ; end process ;

Vous aimerez peut-être aussi