Vous êtes sur la page 1sur 34

UNIVERSITE ABD EL MALEK ESSAADI

ÉCOLE NATIONALE DES SCIENCES APPLIQUÉES


Tétouan

MODULE: ELECTRONIQUE EMBARQUEE

« Logique programmable»

A. ZAKRITI
UNIVERSITE ABD EL MALEK ESSAADI
ÉCOLE NATIONALE DES SCIENCES APPLIQUÉES
Tétouan

« Synthèse logique - VHDL- »

A. ZAKRITI 2
Note sur VHDL

VHDL n’est pas un langage de programmation comme le C, c’est un


langage de description matériel. Voici la différence:

· un langage de programmation est destiné à être traduit en


langage machine puis à être exécuté par un microprocesseur.

· un langage de description matériel comme VHDL décrit une réalité


matérielle, c’est-à dire le fonctionnement d’un système numérique. Il
va être traduit (synthétisé) en un ensemble de circuits logiques
combinatoires et séquentiels qui vont être implémentés dans un
circuit intégré. Il n’y a aucun microprocesseur pour exécuter la
description VHDL dans un circuit intégré.

A. ZAKRITI 3
UNIVERSITE ABD EL MALEK ESSAADI
ÉCOLE NATIONALE DES SCIENCES APPLIQUÉES
Tétouan

Sous programmes & Packages

A. ZAKRITI 4
Sous-programmes

A. ZAKRITI 5
Sous-programmes: Fonctions

Introduction:

• Mot clé : FUNCTION


• Les paramètres passés sont du type IN et les objets de
class SIGNAL ou CONSTANT.
• Retourne une seule valeur
• L'appel est à droite d'une affectation
• L'appel peut se faire dans la zone concurrente ou
séquentielle
• Le corps d'une fonction est une zone séquentielle

A. ZAKRITI 6
Sous-programmes: Fonctions
Syntaxe de déclaration:
function NOM_FONCTION (PARAMETRES : « type ») return
« type du paramètre retourné » is
déclaration des variables si nécessaire ;

Begin

INSTRUCTIONS_SEQUENTIELLES ;
return NOM_OU_VALEUR_DU_PARAMETRE_DE_RETOUR ;
end ;

La déclaration se fait dans l’architecture et avant le


mot clé « BEGIN »
A. ZAKRITI 7
Sous-programmes: Fonctions

L’utilisation (ou l’appel) de la fonction se fait ensuite après le


mot clé « BEGIN » de l’architecture par la syntaxe suivante :

NOM <= NOM_FONCTION (PARAMETRES_D’UTILISATION) ;

- Elle doit être de même type que le


paramètre de retour
- Il lui sera alors affecté la valeur de retour de
la fonction.

- Ces paramètres (propres au programme principal)


doivent évidemment être énumérés dans le bon ordre
pour correspondre à ceux de la fonction.

A. ZAKRITI 8
Sous-programmes: Fonctions
Exemple:
Dans le circuit suivant, on utilise la fonction logique NAND à
trois Entrées, 4 fois. On va le décrire en créant une
description VHDL comportant une fonction nommée NONET.

A. ZAKRITI 9
Sous-programmes: Fonctions
l’entité (Ports d’E/S) associé à ce circuit:

Entity montageX is
port (A1, A2, A3, B1, B2, B3, C1, C2, C3 : IN bit ;
S1, S2, S3 : INOUT bit ;
S4 : OUT bit) ;
end entity ;

A. ZAKRITI 10
Sous-programmes: Fonctions
Description de l’architecture
Architecture Behavioral of montageX is

function NONET (A, B, C : bit) return bit is


variable result : bit;
Ici il s’effectue la
begin déclaration de la
result := not (A and B and C); fonction
return result;
end;
Déclaration de l’objet « Variable »
begin et non pas « signal »

Le paramètre de sortie Instructions traduisant le


fonctionnement
A. ZAKRITI 11
Sous-programmes: Fonctions

S1 <= NONET (A1, A2, A3);


S2 <= NONET (B1, B2, B3);
S3 <= NONET (C1, C2, C3);
S4 <= NONET (S1, S2, S3); L’appel de la fonction à
chaque besoin après le
mot clé BEIGN
end Behavioral;
A. ZAKRITI 12
Sous-programmes: Fonctions
Architecture complet:

Architecture Behavioral of Func1 is


function NONET (A, B, C : bit) return bit is
variable result : bit;
begin
result := not (A and B and C);
return result;
end;
begin
S1 <= NONET (A1, A2, A3);
S2 <= NONET (B1, B2, B3);
S3 <= NONET (C1, C2, C3);
S4 <= NONET (S1, S2, S3);
end Behavioral;
A. ZAKRITI 13
Sous-programmes: Procédures
Introduction:

• Mot clé « PROCEDURE »


• Les paramètres passés sont du type IN, OUT et INOUT et
les objets de classe SIGNAL, CONSTANT ou VARIABLE.
• Peut retourner plusieurs valeurs
• L'appel d'une procédure est une instruction concurrente ou
séquentielle
• Corps d'une procédure est une zone séquentielle

A. ZAKRITI 14
Sous-programmes: Procédures
Syntaxe:
procedure NOM_PROCEDURE (PARAMETRES : « direction »
« type ») is
déclaration des variables si nécessaire

begin

INSTRUCTIONS_SEQUENTIELLES ;

end ;

L’appel de la procédure se fait par :


NOM_PROCEDURE (PARAMETRE_D’UTILISATION) ;

A. ZAKRITI 15
Sous-programmes: Procédures

Exemple: Calcul d’une valeur max. et min.

library IEEE;
use IEEE.STD_LOGIC_ARITH.ALL
- librairie nécessaire pour le « UNSIGNED »
- Utilisée avec les opérateurs arithmétiques

entity Proc is
Port (x,y : in unsigned (7 downto 0);
z : out unsigned(7 downto 0);
t : out unsigned(7 downto 0));
end Proc;
A. ZAKRITI 16
Sous-programmes: Procédures
architecture Behavioral of Proc is
procedure MinMax(signal a,b : in unsigned (7 downto 0);
signal min : out unsigned(7 downto 0);
signal max : out unsigned(7 downto 0)) is

begin Ici on spécifie l’E/S pas comme


dans le cas d’une fonction
if (a < b) then
min <= a; Ici il faut spécifier aussi classe de
max <= b; l’objet pas comme dans le cas d’une
fonction
Else min <= b;
max <= a;
end if;

end procedure MinMax;


A. ZAKRITI 17
Sous-programmes: Procédures
Begin

MinMax (x, y, z, t); -- appel de la procédure

-- MinMax (a=>x , b=>y , min=>z , max=>t); ou


MinMax (a=>x , b=>y , max=>t , min=>z ,);

end Behavioral;

Autre façon d’affectation des paramètres


Ici l’ordre d’écriture n’est pas important!

A. ZAKRITI 18
Sous-programmes
Le cas de l’utilisation de la fonction, on peut
retourner qu’un seul paramètre: on va retourner
que la valeur minimale par exemple

A. ZAKRITI 19
Sous-programmes

A. ZAKRITI 20
Sous-programmes

Autrement: On peut ne pas déclarer la variable min0

Function minimal (a,b : unsigned (7 downto 0)) return unsigned is

begin
if (a < b) then
return a ;
Else
return b;

end if;
end function minimal;

A. ZAKRITI 21
Sous-programmes

Résumé:

A. ZAKRITI 22
les paquetages ou package

BUT:

On suppose qu'un projet contenant plusieurs


entités/architectures qui utilise une même constante
de temps tps_propa = 27ns.

Cette constante doit être déclaré dans un package

Comment ?

A. ZAKRITI 23
les paquetages ou package

Par analogie à un fichier VHDL module


(Entité/Architecture), on crée un fichier source:
« VHDL package » ( package/package body)

A. ZAKRITI 24
les paquetages ou package

Entité/Architecture

Fenêtre de
création de
fichier source
sur « XILinx »

Package/Package body

A. ZAKRITI 25
les paquetages ou package

L'utilisation d'un package nommé pack_proj et d'un


package body nommé pack_bod donnerait :

Package pack_proj is
constant tps_propa : time; -- déclaration de la constante obligatoire
end pack_proj;

package body pack_bod of pack_proj is

constant tps_propa : time := 27ns;

end pack_bod;

A. ZAKRITI 26
les paquetages ou package

Après la création du fichier « VHDL Package », on aura la


possibilité d’utiliser la constante « tps_propa » dans tous
les fichiers (Entité/Architecture) en ajoutant l’instruction
suivante dans le bloc des librairies:

use work.pack_proj.all

Work: c'est la bibliothèque de travail par défaut


A. ZAKRITI 27
les paquetages ou package

Exemple:
use work.pack_proj.all;
Déclaration de la bibliothèque
« work » et le pack. utilisé
entity temps is
end temps;

architecture Behavioral of temps is


signal s: bit:= '0';
Si on utilise le type « bit » au lieu de
begin
«std_logic», on n’a pas besoin de
s<= '1' after tps_propa; déclarer la librairie:
library IEEE;
end Behavioral; use IEEE.STD_LOGIC_1164.ALL;

A. ZAKRITI 28
les paquetages ou package

Remarque sur l’instruction: after

A. ZAKRITI 29
les paquetages ou package

Récapitulation:

L'utilisation des packages est particulièrement


intéressante lorsque l'on utilise, au sein d'un
même projet contenant plusieurs entités, des
ressources (constantes, variables particulières,
fonctions...) identiques.

A. ZAKRITI 30
les paquetages ou package

Autre objectif:
- Pour rendre accessibles les fonctions ou
procédures à partir de plusieurs architectures, il
est nécessaire de les déclarer au sein de
packages.

Afin d’illustrer ceci, on reprend l'exemple de la


fonction NONET dans le circuit « Montage X » et on
l’insère au sein d’un package:

A. ZAKRITI 31
les paquetages ou package

Package pack_NONET is
function NONET (A, B, C : bit) return bit;
end pack_NONET;

Package body pack__NONET is


function NONET (A, B, C : bit) return bit
is
variable result : bit;
begin
result := not (A and B and C);
return result;
end;
end pack_NONET;

A. ZAKRITI 32
les paquetages ou package
Déclaration de la
Use work.pack_NONET.all ;
bibliothèque « work »
et le pack. utilisé Entity montage_X is
port (A1, A2, A3, B1, B2, B3, C1, C2,
C3 : IN bit ;
S1, S2, S3 : INOUT bit ; S4 : OUT bit) ;
end montage_X;
architecture Behavioral of montage_X
is
Begin
S1 <= NONET (A1, A2, A3);
S2 <= NONET (B1, B2, B3);
S3 <= NONET (C1, C2, C3);
S4 <= NONET (S1, S2, S3);
end Behavioral;
A. ZAKRITI 33
La fonction NONET pourra être utilisée dans un autre code
à condition qu’il soit dans le même projet:

Use work.pack_NONET.all ;

Entity FONC1 is
port (A1, A2, A3: IN bit ;
S : OUT bit) ;
end montage_X;

architecture Behavioral of FONC1 is


Begin
S <= NOT (NONET (A1, A2, A3)) ;
end Behavioral;
A. ZAKRITI 34

Vous aimerez peut-être aussi