Vous êtes sur la page 1sur 9

05/10/2023 Initiation au Langage

de Description Matériel
VHDL

Prof. Hicham STITOU


HICHAM.STITOU13@GMAIL.COM
LTS Settat matière : Electronique

Tables de matières

INITIATION AU LANGAGE DE DESCRIPTION MATERIEL VHDL ................................ 2


I- GENERALITES ET INTRODUCTION ........................................................................................ 2
1. INTRODUCTION ....................................................................................................................... 2
2. TERMINOLOGIE....................................................................................................................... 2
II- BASES DU LANGAGE VHDL .................................................................................................. 2
1. INTRODUCTION .............................................................................................................................................. 2
2. LES LIBRAIRIES.............................................................................................................................................. 2
3. L’ENTITE ......................................................................................................................................................... 3
4. ARCHITECTURE ............................................................................................................................................. 3
5. LES TYPES DE BASE ET VALEURS EXPLICITES ........................................................................................ 3
6. LES OPERATEURS .......................................................................................................................................... 4
III- LES INSTRUCTIONS CONCURRENTES .................................................................................... 4
A- DEFINITION .................................................................................................................................................... 4
B- WHEN…ELSE................................................................................................................................................. 5
C- WITH…SELECT ............................................................................................................................................. 5
D- PROCESS.......................................................................................................................................................... 5
E- SIGNAL ET VARIABLE................................................................................................................................... 5
IV- LES INSTRUCTIONS SEQUENTIELLES .................................................................................... 6
A- IF…THEN… ET IF…THEN…ELSE… ........................................................................................................ 6
B- CASE …IS …WHEN ....................................................................................................................................... 6
C- FOR… IN…LOOP ........................................................................................................................................... 6
V- CONSTRUCTION HIERARCHIQUE : « COMPONENT » ........................................................... 6
A- DESCRIPTION SCHEMATIQUE DE L'ENTITE GLOBALE COMPTEUR + DECODEUR ............................. 7
B- DESCRIPTION VHDL DES COMPOSANTS ................................................................................................. 7
C- DETERMINER LES SIGNAUX A L'INTERIEUR DE L'ENTITE GLOBALE .................................................. 8
D- DESCRIPTION DE L'ENTITE GLOBALE. ...................................................................................................... 8

BTS-SE Settat page : 1/8


LTS Settat matière : Electronique

Initiation au Langage de Description Matériel VHDL

I- Généralités et Introduction
1. Introduction
Le langage VHDL signifie :
(V : Very High Speed Integrated Circuit
H: Hardware, D:Description; L: Language)
C’est un standard de l’IEEE(Institute of Electrical and Electronics Engineers). C’est un
langage de description de haut niveau pour la simulation et la synthèse des circuits
numériques.
2. Terminologie
- HDL : langage de description matérielle, est le logiciel de programmation
permettant la description d’un ensemble ou sous-ensemble matériel.
- Description comportementale(ou fonctionnelle): le circuit est décrit
fonctionnellement sans faire appel à des structures électroniques.
- Description structurelle: le circuit est décrit par des interconnexions de
composants ou primitives de haut niveau.
II- Bases du langage VHDL
1. Introduction
Comme la majorité des langages, le VHDL :
 fait appel à des librairies (library).
 Il utilise des mots clés.
 Les lignes de commandes se terminent par « ; »
 Les commentaires sont précédés par « -- »
 Il utilise indifféremment les majuscules et minuscules.
 Les modèles peuvent être décrits en comportemental, structurel ou mixte
 Il utilise les concepts de base suivant : l’entité (entity), l’architecture
(architecture), la configuration (configuration) et le boitier(Package).
2. Les librairies
Les librairies sont déclarées au début d’un fichier VHDL. Les plus usuelles sont :
ieee.std_logic_1164.all;
ieee.std_logic_signed.all;
ieee.numeric_std.all;
ieee.std_logic_unsigned.all…
Ainsi pour une application faisant appel à de la logique combinatoire et séquentielle(le plus
fréquent) on trouve en début de fichier:

LIBRARY ieee;
Use ieee.std_logic_1164.all;

La librairie ieee.std_logic_1164.all permet de travailler sur des signaux, variables, entrées-sorties


de type BIT, BOOLEEN, ENTIER, REEL et supporte tous les opérateurs associés. Afin d’optimiser

BTS-SE Settat page : 2/8


LTS Settat matière : Electronique
les temps de développement les constructeurs de circuits programmables proposent un ensemble de
librairies de macro-fonctions.
Exemple
La librairie LPM (Librarie of Parametrized Modules) de chez ALTERA propose un ensemble de
macro-fonctions (additionneurs n bits, multiplieurs…) optimisées pour ses circuits. Pour l’appeler :

library lpm ;
Use lpm.lpm_components.all ;

3. L’entité
Elle donne un aspect extérieur du modèle VHDL à réaliser. Elle ressemble à un symbole.
Syntaxe :
entity <nom_entité> is
port ( <Nom_Entrée_1> : in <Type_Du_Signal> ;
<Nom_Entrée_2> : in <Type_Du_Signal>;
...
<Nom_Sortie_1> : out <Type_Du_Signal> ;
<Nom_E_S_1> : inout <Type_Du_Signal> );
end <nom_entité> ;

Exemple :
ENTITY comparateur_8bit IS
PORT(
a : IN std_logic_vector(7 DOWNTO 0);
b : IN std_logic _vector(7 DOWNTO 0);
egal : OUT bit);
END comparateur_8bit;

4. Architecture
- Elle a pour rôle de décrire le comportement du composant VHDL. Elle correspond au
schéma électrique interne du composant et est nécessairement associée à une entité.
- Toutes les instructions qui la constituent sont exécutées de manière concurrente (simultanée)
ou séquentielle.
- Les descriptions peuvent être comportementales, structurelles ou mixtes.
Syntaxe :
architecture <nom_arch> of <nom_entité> is
<zone declaration;>
begin
<description de ;
la structure ;
logique; >
end <nom_arch> ;

exemple d’architecture relative à l’entité précédente :

architecture arch_ comparateur_8bit of comparateur_8bit is


begin
egal <= ‘1’ when a=b else
‘0’ ;
end <nom_arch> ;

5. Les types de base et valeurs explicites

BTS-SE Settat page : 3/8


LTS Settat matière : Electronique
Le VHDL est un langage fortement typé. Chaque objet doit être déclaré et appartenir à un
type connu (ensemble de valeurs possibles).
Parmi ces types :
Bit, Boolean, Integer,
Std_logic (dans la bibliothèque std_logic_1164),
Bit_vector, Std_logic_vector,
Signed et, Unsigned,(dans la bibliothèque numeric_std),
Natural (sous type de integer limité aux nombres ≥0),
Positif ( sous type de integer limité aux nombres >0),
Character, string
Les valeurs explicites:
 Entier : 123 ou 1_2_3
 Entier basé : base#valeur# 2#11# : 16#1F#
 Valeurs physiques : toujours laisser un espace entre la valeur et l’unité 100
ps 2 ns 5 V
 Caractère : entre apostrophe ‘a’, ‘@’
 Bit, std_logic : entre apostrophe ‘0’, ‘1’, ‘Z’
 Chaîne de caractères : entre guillemets (attention là, les minuscules et
majuscules sont significatives) "Bonjour "
 Bus, std_logic_vector, bit_logic_vector : entre guillemets "01111001 "
6. Les opérateurs

a- Les opérateurs d’affectation: b- Les opérateurs arithmétiques


<= affectation à un signal + : Addition
:= affectation à une variable - : soustraction
& : concaténation
c- Les opérateurs logiques d- Les opérateurs de décalage
not Non logique Les 4 premiers ne fonctionnent que sur le type
and ET logique bit_vector
or OU logique sll : Décalage logique gauche
nand Non-ET Logique srl : Décalage logique droite
nor Non-OU logique sla : Décalage arithmétique gauche
xor OU exclusif logique sra : Décalage arithmétique droite
xnor Non-OU exclusif logique rol : rotation gauche
ror : rotation droite
syntaxe : x <= a sla 2 : avec a de type bit_vector
Autres opérateurs : shl, shr
e- Les opérateurs relationnels f- Les opérateurs de signe
= : égalité + : signe positif
/= : inégalité - :signe négatif
< : inférieur
<= : inférieur ou égal g- Les opérateurs multiplicatifs
> : supérieur * : multiplication
>= : supérieur ou égal / : Division
Mod : modulo, sur entiers
rem : reste, sur entiers
h- Les opérateurs divers
Abs : valeur absolue, pour tous les types
** : exponentiel
not : inversion logique, types scalaire et tableau

III- Les instructions concurrentes


a- Définition
Les portes logiques constituantes d’un circuit fonctionnent simultanément; donc
indépendamment de l’ordre d’apparition des instructions permettant leur création.
BTS-SE Settat page : 4/8
LTS Settat matière : Electronique

Exemple

S1<= a and b; S2<=a or b;


S2<=a or b; est équivalent à S1<= a and b;

Car les deux vont créer le même circuit logique.


Parmi les instructions concurrentes dont le VHDL dispose :
 Affectation simple <= ;
 Affectation conditionnelle : when …else… ;
 Affectation sélectionnée : with …select… ;
 Instruction process.
b- When…else
Syntaxe:
<signal_s> <= <S1> when <condition_1> else
<S2> when <condition_2> else
….
<Sn> when <condition_n> else
<Sm>;
Exemple (Codeur de priorité, voir la figure ci-contre)
S<=”00” when e0=’1’ else e0 Codeur
”01” when e1=’1’ else e1
”10” when e2=’1’ else de S
e2 2
”11” ; priorité
e3
c- With…select
<signal_s> <= <S1> when <etat_1> ,
<S2> when <etat_2>,
….
<Sn> when Others;
A Mux
Exemple (Multiplexeur 4 1, voir la figure ci-contre) 41
With ad select B Y
Y <= A when “00”, C
B when “01”, D
C when “10”,
D when “11”, 2
‘X’ when Others; ad

d- Process
Un process est utilisé lorsque l’on a besoin de faire une exécution séquentielle dans
une architecture. Il peut être défini par un label (n’est pas obligatoire). Il y a par contre toujours
une liste de sensibilité entre parenthèse (…). Lorsque l’un des signaux présents dans la liste
de sensibilité change, le contenu du process est alors exécuté.
Syntaxe
[<label> :] process(<liste des sensibilités>)
[<déclaration>]
Begin
<instructions> ;
End process [<label>];

e- Signal et variable
Dans un process, un signal n’aura sa nouvelle valeur affectée qu’à la fin du process. A

BTS-SE Settat page : 5/8


LTS Settat matière : Electronique
l’inverse, la variable aura sa nouvelle valeur affectée immédiatement; c’est pourquoi, a
l’intérieur d’un process, on préfère utiliser des variables intermédiaires plutôt que des signaux
intermédiaires. De plus l’utilisation des variables intermédiaires soulage l’écriture du process,
car étant déclarées à l’intérieur du process, on ne les déclare pas dans la liste de sensibilité.
IV- Les instructions séquentielles
Ces instructions ne peuvent apparaître qu’à l’intérieur d’un process:
a- If…then… et If…then…else…

Syntaxe
if <condition> then
<instructions>
[elsif <condition> then <instructions>]
[else <instructions>]
end if ;

Exemple:
if (RESET=’1’) then SORTIE <= ”0000”;
end if ;

b- case …is …when


Syntaxe
case <signal_de_slection> is
when <valeur_de_sélection> => <instructions>
[when others =>< instructions>]
end case;
Exemple:
case SEL is
when “000” => S1 <= E1;
when “001” => S1 <= ‘0’;
when “010” | “011” => S1 <=’1’;
-- La barre | permet de réaliser
-- un ou logique entre les deux
-- valeurs “010” et “011”
when others => S1 <= ‘0’;
end case;
c- for… in…loop
Syntaxe
For <variable> in <valeur_debut> to/downto <valeur_fin> loop
<instructions>
End loop;
Exemple
Signal op,ip: std_logic_vector(3 downto 0);
For i in 0 to 3 loop
Op(i)<=ip(3-i);
End loop;
Remarque: la déclaration de la variable de contrôle de la boucle n’est pas obligatoire.

V- Construction hiérarchique : « component »


Un « component » est une entité préalablement conçue et compilée pour être réutilisée.

BTS-SE Settat page : 6/8


LTS Settat matière : Electronique
L’instanciation correspond à la manière dont ce composant doit être connecté à l’ensemble de
la structure. Une fois qu’un composant a été déclaré, on procède à l’instanciation du composant
par « port map»
Exemple
On va faire la description d’un système constitué: d'un diviseur de fréquence + compteur BCD
+ décodeur BCD/7 segments. Les étapes à suivre:
1-Description schématique de l'entité globale du compteur BCD + décodeur BCD/7
segments.
2-Description en langage vhdl des composants.
3-Détermination des signaux à l'intérieur de l'entité globale.
4-Description en langage vhdl de l'entité globale
a- Description schématique de l'entité globale compteur + décod

b- Description VHDL des composants

Le composant compteur Le composant


composant diviseurfréquence
library ieee; decoder7segment
library IEEE; use ieee.std_logic_1164.all;
use IEEE.STD_LOGIC_1164.ALL; library ieee;
use IEEE.numeric_std;
use IEEE.numeric_std; use ieee.std_logic_1164.all;
entity compteur is
entity diviseurfrequence is entity decoder7segment is
port(H:in std_logic;
Port ( Hin : in STD_LOGIC; port(B:in std_logic_vector(3 downto
RAZ:in std_logic;
Hout : out STD_LOGIC); 0);
QS:out std_logic_vector(3 downto 0));
end diviseurfrequence; Seg: out std_logic_vector(0 to
end compteur;
architecture div of diviseurfrequence is 6));
architecture counter of compteur is
begin end decoder7segment;
variable Q:std_logic_vector(3 downto 0);
process(Hin) architecture decoder of
begin
variable cnt : integer range 0 to 12587500; decoder7segment is
QS<=compter;
begin begin
process(H)
if(Hin'event and Hin ='1') then with B select
begin
if(cnt=12587500) then Seg<=("0000001") when "0000",
if RAZ='0' then Q:="0000";
cnt:=0; ("1001111") when "0001",
elsif H’event and H=’1’ then
clkout<='1'; ("0010010") when "0010",
if Q="1001" then
else ("0000110") when "0011",
Q:="0000";
cnt := cnt+1; ("1001100") when "0100",
else Q:=Q+1;
Hout<='0'; ("0100100") when "0101",
end if;
end if; ("0100000") when "0110",
end if;
end process; ("0001111") when "0111",
QS<=Q;
end div; ("0000000") when "1000",
end process;
("0000100") when "1001",
end counter;
("1111111") when others;
end decoder;

BTS-SE Settat page : 7/8


LTS Settat matière : Electronique

c- Déterminer les signaux à l'intérieur de l'entité globale


Ce sont les signaux qui permettent d’effectuer des communications entre les composants
(components). →signal c1 de type std_logic.
→signal c2 de type std_logic_vector.
d- Description de l'entité globale.
Travail à faire
library ieee; Soit à décrire un circuit (Transcodeur Gray
use ieee.std_logic_1164.all; Binaire) de la figure 2 :
use IEEE.numeric_std; 1. Décrire en VHDL le circuit de la porte XOR,
entity compteurbcd0a9 is conformément au schéma de la figure 1
port(H :in std_logic;
RAZ reset:in std_logic;
S :out std_logic_vector(0 to 6)
);
end compteurbcd0a9;
___________________________________
2. Utiliser la description de XOR, précédente,
architecture compter of compteurbcd0a9 is
pour construire le circuit suivant.
component diviseurfrequence is
Port (Hin: in STD_LOGIC;
Hout : out STD_LOGIC);
end component;
______________________________
component compteur is
port(H:in std_logic;
RAZ:in std_logic;
QS: out std_logic_vector(3 downto 0));
end component;
___________________________________ Figure 2

component decoder7segment is
port(B:in std_logic_vector(3 downto 0);
Seg :out std_logic_vector(0 to 6));
end component;
________________________
signal c1:std_logic;
signal c2:std_logic_vector(3 downto 0);
_______________________
begin
u1:diviseurfrequence port map (Hin=>H, Hout =>c1);
u2:compteur port map (H=>c1, RAZ=>RAZ, QS=>c2);
u3:decoder7segment port map (B=>c2, Seg=>S);
end compter;

BTS-SE Settat page : 8/8

Vous aimerez peut-être aussi