Cours2 VHDL

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

VHDL pour la Synthèse

Plan

 Déclaration des bibliothèques


 Déclaration des entrées/sorties
 Classe d’objets et règles de déclaration
 Règles d’écriture en VHDL
 Types d’objets
 Les opérateurs utilisés en synthèse
 Les processus en VHDL
 Les instructions en mode concurrent
 Les instructions en mode séquentiel
 Simulation fonctionnelle

2
Déclaration des bibliothèques

Toute description VHDL utilisée pour la synthèse a besoin de


bibliothèques. L’IEEE (Institut of Electrical and Electronics
Engineers) les a normalisées et plus particulièrement la bibliothèque
IEEE 1164. Elles contiennent les définitions des types de signaux
électroniques, des fonctions et sous programmes permettant de
réaliser des opérations arithmétiques et logiques,...

3
Déclaration des bibliothèques
Le TYPE:
 Le TYPE utilisé pour les signaux d’entrées/sorties est :
- le std_logic pour un signal.
- le std_logic_vector pour un bus composé de plusieurs signaux.
exemple : DATA : out std_logic_vector (7 downto 0) ;

 Ces types ne sont pas prédéfinis: pour les utiliser, il faut déclarer le
package std_logic_1164, qui fait partie de la library IEEE:

library ieee;
use ieee.std_logic_1164.all; définit les types, les fonctions de conversion,
les opérateurs logiques et les fonctions de
détection de fronts.

use: directive qui permet de sélectionner les bibliothèques à utiliser.

4
Déclaration des bibliothèques

 Pour réaliser les opérations arithmétiques on peut utiliser les


paquetages dans la bibliothèque IEEE :

 Use ieee.std_logic_arith.all;
 Use ieee.std_logic_unsigned.all;
 Use ieee.std_logic_signed.all;
 Use ieee.numeric_std.all;

5
Déclaration des entrées/sorties (I/O)

 Un signal de type std_logic possède une valeur parmi neuf


possibles:
 '0' niveau 0, forçage fort;
 '1' niveau 1, forçage fort;
 'L' niveau 0, forçage faible;
 'H' niveau 1, forçage faible;
 'Z' haute impédance;
 'X' niveau inconnu, forçage fort;
 'W' niveau inconnu, forçage faible;
 '-' quelconque;
 'U' non initialiser.

6
Déclaration des entrées/sorties (I/O).

Remarques concernant les synthétiseurs:

 '0' et 'L' sont équivalents;


 '1' et 'H' sont équivalents;
 '-' est très utile pour la simplification des équations ;
 'U', 'X',' W' sont interdits.
 Les types bit, bit_vector, std_logic et std_logic_vector
sont les plus utilisés.

7
Classe d’objets et règles de déclaration

Trois classes principales d'objets:

Toute donnée traitée par VHDL doit être déclarée comme constante,
variable ou signal .
 Constantes: permettent de définir des valeurs permanentes
constant pi : real := 3.1416;
 Variables: valeur modifiable immédiatement par une affectation (:=)
variable stop : boolean;
 Signaux:
modélisation de l'entrée/sortie d'un dispositif. C'est une forme d'onde
qui change avec le temps: la modification a lieu à la prochaine itération
de la simulation (retard delta).
signal sel : bit;

8
Règles d’écriture en VHDL
Le nom d’un objet manipulé par VHDL doit être différent d’un mot
réservé du VHDL:
Abs Access After Alias
All And Architecture Array
Assert Attribute Begin Block
Body Buffer Bus Case
Component Configuration Constant Disconnect
Downto Else Elsif End
Entity Exit File For
Function Generate Generic Group
Guarded If Impure In
Inertial Inout Is Label
Library Linkage Literal Loop
Map Mod Nand New
Next Nor Not Null
Of On Open Or
Others Out Package Port
Postponed Procedure Process Pure
Range Record Register Reject
Rem Report Return Rol
Ror Select Severity Signal
Shared Sla Sll Sra
Srl Subtype Then To
Transport Type Unaffected Units
Until Use Variable Wait
When While With Xnor
Xor
9
Types d’objets

Toute donnée doit être déclaré avant utilisation, en indiquant


son type.
Les types prédéfinis sont:
 Scalaire :
integer, real, enumerated, physical
 Composé : tableau et enregistrement
array, record
 Pointeur :
Acces
 I/O : type fichier, qui permet de générer des fichiers

10
Types d’objets

 On peut également créer de nouveaux types, en fonction des


types prédéfinis. Par exemple:
 type HuitBits is range 0 to 255;
 type Etat4 is (init, E1, E2, exit);

11
Les opérateurs utilisés en synthèse

L’affectation simple : <=


Les bases numériques utilisées pour les bus peuvent être :

BINAIRE, exemple : BUS <= "1001" ; -- BUS = 9 en décimal


HEXA, exemple : BUS <= X"9" ; -- BUS = 9 en décimal
OCTAL, exemple : BUS <= O"11" ; -- BUS = 9 en décimal

12
Les opérateurs utilisés en synthèse
Exemple:

Library ieee;
Use ieee.std_logic_1164.all;
entity AFFEC is port ( E1,E2 : in std_logic;
BUS1,BUS2 : out std_logic_vector(3 downto 0);
S1,S2,S3,S4 : out std_logic);
end AFFEC;
architecture DESCRIPTION of AFFEC is
begin
S1 <= '1';
S2 <= '0';
S3 <= E1;
S4 <= '1' when (E2 ='1') else 'Z'; -- S4 = 1 si E2=1 sinon S4= Z
BUS1 <= "1000";
BUS2 <= X"A"; -- valeur en HEXA -> BUS2 = 10(déc)
end DESCRIPTION;

13
Les opérateurs utilisés en synthèse

Opérateur de concaténation : &


Cet opérateur permet de joindre des signaux entre eux .

Exemple :
Soit A et B de type 3 bits et S1 de type 8 bits:
A = "001" et B ="110"
S1 <= A & B & "01" ;

Après l’affectation :
S1 = "001110 01"

14
Les opérateurs utilisés en synthèse

Opérateurs logiques:

Opérateur VHDL
ET and
NON ET nand
OU or
NON OU nor
OU EXCLUSIF xor
NON OU EXCLUSIF xnor
NON not
DECALAGE A GAUCHE sll
DECALAGE A DROITE srl
ROTATION A GAUCHE rol
ROTATION A DROITE ror

15
Les opérateurs utilisés en synthèse
Exemples :
S1 <= A sll 2 ; -- S1 = A décalé de 2 bits à gauche.
S2 <= A rol 3 ; -- S2 = A avec une rotation de 3 bits à gauche
NB: Pour réaliser des décalages logiques en synthèse logique, il est
préférable d’utiliser les instructions suivantes :

 Décalage à droite :
-- Si A est de type std_logic_vector(7 downto 0)
S1 <= ‘0’ & A(7 downto 1); -- décalage d’un bit à droite
S1 <= "000" & A(7 downto 3); -- décalage de trois bits à droite
 Décalage à gauche :
-- Si A est de type std_logic_vector(7 downto 0)
S1 <= A(6 downto 0) & ‘0’; -- décalage d’un bit à gauche
S1 <= A(4 downto 0) & "000"; -- décalage de trois bits à gauche

16
Les opérateurs utilisés en synthèse
Opérateurs arithmétiques:
Opérateur VHDL
Addition +
Soustraction -
Multiplication *
Division /

Opérateurs relationnels:

Opérateur VHDL
Egal =
Non égal /=
Inférieur <
Inférieur ou égal <=
Supérieur >
Supérieur ou égal >=
17
Processus en VHDL

 Une architecture en VHDL est un ensemble de processus exécutés en


parallèle (en concurrence).

 L'ordre des processus à l'intérieur d'une architecture n'a pas d'importance.

 En effet la description génère des structures électroniques, c’est la grande


différence entre une description VHDL et un langage informatique
classique.

18
Processus en VHDL

Il existe deux types de processus:


 le processus implicite ou instruction concurrente
 le processus explicite : ensemble d’instructions exécutées
séquentiellement

Exemple:

19
Les instructions en mode concurrent
 Les instructions suivantes sont des processus implicites (ou instructions
concurrentes):
 l'affectation inconditionnelle d'un signal.
exemple:

 l'affectation conditionnelle d'un signal.


exemple:

 Une instruction concurrente est un processus à part entière, avec un wait


implicite sur les signaux placés à droite de l'affectation.

20
Les instructions en mode concurrent

Exercice d’application:

 Donner le code VHDL d’un décodeur 1 parmi 4.


 Donner le schéma après synthèse.

21
Les instructions en mode concurrent
Architecture du décodeur 1 parmi 4:

architecture DESCRIPTION of DECOD1_4 is


begin
D0 <= (not(IN1) and not(IN0));
D1 <= (not(IN1) and IN0);
D2 <= (IN1 and not(IN0));
D3 <= (IN1 and IN0);
end DESCRIPTION;

L’ordre dans lequel seront écrites les instructions n’a aucune importance.

architecture DESCRIPTION of DECOD1_4 is


begin
D1 <= (not(IN1) and IN0);
D2 <= (IN1 and not(IN0));
D0 <= (not(IN1) AND not(IN0));
D3 <= (IN1 AND IN0);
end DESCRIPTION;
22
Les instructions en mode concurrent

Synthèse logique du décodeur:

23
Les instructions du mode « concurrent »
Affectation conditionnelle:

Cette instruction modifie l’état d’un signal suivant le résultat d’une


condition logique entre un ou des signaux, valeurs, constantes.

SIGNAL <= expression when condition


[else expression when condition]
[else expression];

Exemple:
S <= E2 when ( E1= ‘1’ ) else ‘0’;

24
Les instructions du mode « concurrent »

Exercice d’application:

 Donner le code VHDL d’un Décodeurs 7 segments


(utiliser l’affectation conditionnelle).

25
Les instructions du mode « concurrent »
Décodeurs 7 segments:

entity DEC7SEG4 is
port (DEC : in std_logic_vector(3 downto 0);
SEG : out std_logic_vector(6 downto 0));
end ;
architecture DESCRIPTION of DEC7SEG4 is
begin
SEG <= "1111110" when DEC = "0000"
else "0110000" when DEC = "0001"
else "1101101“ when DEC = "0010"
else "1111001“ when DEC = "0011"
else "0110011“ when DEC = "0100"
else "1011011“ when DEC = "0101"
else "1011111" when DEC = "0110"
else "1110000" when DEC = "0111"
else "1111111" when DEC = "1000"
else "1111011" when DEC = "1001"
else "-------";
end DESCRIPTION;

26
Les instructions du mode « concurrent »

Affectation sélective :
Cette instruction permet d’affecter différentes valeurs à un signal, selon les
valeurs prises par un signal dit de sélection.

with SIGNAL_DE_SELECTION select


SIGNAL <= expression when valeur_de_selection,
[expression when valeur_de_selection,]
[expression when others];

Remarque: l’instruction [expression when others] n’est pas obligatoire


mais fortement conseillée pour la synthèse, elle permet de définir la valeur
du SIGNAL dans le cas où la condition n’est pas remplie.

27
Les instructions du mode « concurrent »

Exercice d’application:

 Donner le code VHDL d’un multiplexeur 4 vers 1


(utiliser l’affectation sélective)

 Donner le schéma logique après synthèse.

28
Les instructions du mode « concurrent »
Multiplexeur 4 vers 1:

with SEL select


S2 <= E1 when "00",
E2 when "01",
E3 when "10",
E4 when "11",
'0' when others ;

29
Les instructions du mode séquentiel

Définition d’un PROCESS:


Un process est une partie de la description d’un circuit dans
laquelle les instructions sont exécutées séquentiellement c’est à dire
les unes à la suite des autres.

Il permet d’effectuer des opérations sur les signaux en utilisant


les instructions standard de la programmation structurée comme
dans les systèmes à microprocesseurs.

L’exécution d’un process est déclenchée par un ou des


changements d’états de signaux logiques. Le nom de ces signaux est
défini dans la liste de sensibilité lors de la déclaration du process.

30
Les instructions du mode séquentiel

[Nom_du_process :] process(Liste_de_sensibilité_nom_des_signaux)
Begin
-- instructions du process
end process [Nom_du_process] ;

Règles de fonctionnement d’un process :


1) L’exécution d’un process a lieu à chaque changement d’état
d’un signal de la liste de sensibilité.
2) Les instructions du process s’exécutent séquentiellement.
3) Les changements d’état des signaux par les instructions du
process sont pris en compte à la fin du process.

31
Les instructions du mode séquentiel
Les deux principales structures utilisées dans un process:

L’assignation conditionnelle L’assignation sélective

if condition then instructions case signal_de_selection is


[elsif condition then instructions] when valeur_de_selection => instructions
[else instructions] [when others => instructions]
end if ; end case ;

Exemple: Exemple:
if (Reset = ‘1’) then Sortie <= ‘0’; case SEL is
else Sortie <= D; when “000“=> S1 <= E1;
end if; when “001“=> S1 <= ‘0’;
when “010“ | “011“ => S1 <= ‘1’;
when others => S1<= ‘0’;
end case;

NB: Ces instructions séquentielles (if, case) doivent toujours se trouver


à l’intérieur d’un process.

32
Les instructions du mode séquentiel
Exemples de process : bascule D.
Library ieee;
Use ieee.std_logic_1164.all;

entity BASCULE_D is
port (D,CLK, Reset : in std_logic;
Q : out std_logic);
end BASCULE_D;

architecture DESCRIPTION of BASCULE_D is


begin
process (CLK, Reset)
begin
if (Reset ='1') then Q <= '0' ;
elsif (CLK' event and CLK ='1') then
Q <= D;
end if;
end process;
end DESCRIPTION;
33
Les instructions du mode séquentiel.

Exercice:
 Ajouter l’ entrée de forçage à 1 (Set) asynchrone dans la
description de la bascule D.

34
Simulation par Test bench
Un testbench (banc de test) est une description VHDL incorporant une
instance du circuit à tester (Device Under Test) et lui fournissant les
séquences de signaux d'entrées (stimuli) afin de visualiser les sorties
avec un simulateur.

Générateur
Vérificateur
des
DUT des
vecteurs
sorties
de test

Test bench

NB: Cas particulier de la simulation : circuit "top" sans entrée ni sortie


35
Simulation par Test bench

LIBRARY ieee ;
LIBRARY work ;
USE ieee.std_logic_1164.all ;
USE work.all ;
ENTITY bascule_d_tb IS
END ;
ARCHITECTURE bascule_d_tb_arch OF bascule_d_tb IS
signal clk, Reset, d, q : std_logic ;
COMPONENT bascule_d PORT ( Reset, clk, d : in std_logic ;
q : out std_logic );
END COMPONENT ;

36
Simulation par Test bench
BEGIN
DUT : bascule_d PORT MAP ( clk => clk , Reset => Reset ,
d => d , q => q ) ;
clk_in : process
Begin
clk <='0'; wait for 20 ns;
clk <='1'; wait for 20 ns ;
end process clk_in ;
Reset_in : process
Begin
Reset <='1'; wait for 20 ns ;
Reset <='0'; wait for 180 ns ;
end process Reset_in ;
d_in : process
begin
d <='1'; wait for 30 ns;
d <='0'; wait for 60 ns;
d <='1'; wait for 90 ns;
end process d_in;
END ; 37

Vous aimerez peut-être aussi