0% ont trouvé ce document utile (0 vote)
112 vues33 pages

Introduction au VHDL et synthèse logicielle

Transféré par

hachaniwassim10
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
112 vues33 pages

Introduction au VHDL et synthèse logicielle

Transféré par

hachaniwassim10
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

1

2
 Language de description hardware développé au titre du programme
VHSIC (Very High Speed Integrated Circuit) du DoD (Department
of Defence). VHDL = VHSIC Hardware Description Langage

 Objectif: fournir un environnement de développement hardware


complet (des spécifications à la réalisation en passant par la
simulation)
 améliorer l'intercommunication (entre spécificateurs, entre
concepteurs, entre utilisateurs, entre outils de développement,
etc.)
 rendre les réalisations indépendantes des technologies et des
systèmes-hôtes (portabilité, pérennité, etc.)

3
 Standardisé en 1987 (IEEE1076), complété en 1993 (IEEE1076,
IEEE1164)

 Langage unique pour


1. la spécification, la documentation
2. la vérification (preuve formelle), la simulation
3. la synthèse : le langage sert d'entrée à des outils intelligents
qui permettront la réalisation de circuits intégrés (customs,
ASICs) ou programmables (PALs, PLDs, CPLDs, FPGAs)
 Interprétable par l'homme et la machine
 Indépendent des process et des technologies, indépendent des
systèmes-hôtes

4
 Assemblage intelligent de plusieurs

 Opérateurs arithmétiques, logiques, registres,


multiplexeurs , bus…

 Un Pentium (X) n’est qu’un simple


assemblage de composants électroniques élémentaires

 L'efficacité du circuit dépend du choix des


ressources et de leur l’interconnexion

Transistor Switches
5
Programmable logic blocks (Logic Element “LE”)

Programmable I/O blocks


Logic Interconnection switches
Programmable interconnect
Wires to connect inputs , outputs and logic block
blocks. I/O

y
a

b N Input
LUT
SET
c MUX D Q q

I/O

I/O
d
CLR Q
clk

rst

I/O

6
Tableau
a b c y LUT programmable
Fonction 0 0 0 1
LUT
0 0 1 0 1
a 0
0 1 0 1
b 1
y
0 1 1 1 1
c MUX y
1
1 0 0 1
y  a b  c
0
1 0 1 0 1
1
1 1 0 1 a,b,c
1 1 1 1

7
Entrée
Diagrammes
schématique
Entrée syntaxique d’états
langages:
- VHDL

8
Entrée syntaxique
Entrée Diagrammes
langages:
schématique d’états
- VHDL
VHDL VHDL VHDL

TESTBENCH
Vérification des erreurs Simulation
de schéma et de syntaxe comportementale

SYNTHETISEURS CONNUS:
SYNTHETISEUR
- FPGA Expres (Synosys). Il convertit en fonction du ciruit cible (CPLD ou
FPGA: suivant le modèle choisit) le projet en
- EXEMPLAR (Exemplar).
- SYNPLICITY (Synplicity). portes logiques et bascules de bases.
Simulation après
De plus on peut lui spécifier des contraintes de ou synthèse
technologies, par exemple la vitesse de
TESTBENCH
fonctionnement

Outils de placement et Optimisation


routage interne au circuit. Cet
outil est propre à chaque Placement / routage Simulation
fabriquant dans le circuit choisi temporelle
TESTBENCH

La programmation du circuit
peut se faire soit:
- En utilisant un
9
programmateur.
Description
comportementale

Synthèse de haut
Comment faire?
niveau
Description RTL

Synthèse
RTL
Fonctions booléennes

Synthèse logique
Description en portes logiques

Placement
routage

10
Une description VHDL est composée de 2 parties indissociables à
savoir :

- L’Entité (ENTITY), elle définit les entrées et sorties.


- L’Architecture (ARCHITECTURE), elle contient les instructions
VHDL permettant de réaliser le fonctionnement attendu.
Exemple : Un décodeur 1 parmi 4. library ieee; Déclaration des
Use ieee.std_logic_1164.all; bibliothèques

Déclaration de l’entité entity DECOD1_4 is


du décodeur
Port (IN0, IN1: in std_logic;
Correspondance
schématique D0, D1, D2, D3: out std_logic);
end DECOD1_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);
Déclaration de
end DESCRIPTION; l’architecture du
décodeur
Correspondance
schématique
11
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 IEEE1164. 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,...

Library ieee;
Use ieee.std_logic_1164.all;
Use ieee.numeric_std.all;
Use ieee.std_logic_unsigned.all;
-- cette dernière bibliothèque est souvent utilisée pour l’écriture
de compteurs

12
Elle permet de définir le NOM de la description VHDL ainsi que les
entrées et sorties utilisées, l’instruction qui les définit c’est port :
Syntaxe:
entity NOM_DE_L_ENTITE is
port ( Description des signaux d’entrées /sorties …);
end NOM_DE_L_ENTITE;

Exemple :
entity SEQUENCEMENT is
port (
CLOCK : in std_logic;
RESET : in std_logic;
Q : out std_logic_vector(1 downto 0) );
end SEQUENCEMENT;

L’instruction port .
Syntaxe: NOM_DU_SIGNAL : sens type;
Exemple: CLOCK: in std_logic;
BUS : out std_logic_vector (7 downto 0);
On doit définir pour chaque signal : le NOM_DU_SIGNAL, le sens et le type.

13
Il est composé de caractères, le premier caractère doit être une
lettre, sa longueur est quelconque, mais elle ne doit pas dépasser
une ligne de code. VHDL n’est pas sensible à la « casse », c’est à
dire qu’il ne fait pas la distinction entre les majuscules
et les minuscules.

14
- in : pour un signal en entrée.
- out : pour un signal en sortie.
- inout : pour un signal en entrée sortie
- buffer : pour un signal en sortie mais utilisé comme entrée dans
la description

Out
In
Entrée Inout
schématique
Buffer

15
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.

Par exemple un bus bidirectionnel de 5 bits s’écrira :

LATCH : inout std_logic_vector (4 downto 0) ;



LATCH(4) correspond au MSB et
LATCH(0) correspond au LSB.
Les valeurs que peuvent prendre un signal de type std_logic sont :
- ‘0’ ou ‘L’ : pour un niveau bas.
- ‘1’ ou ‘H’ : pour un niveau haut.
- ‘Z’ : pour état haute impédance.
- ‘-‘ : Quelconque, c’est à dire n’importe quelle valeur.

16
L’architecture décrit le fonctionnement souhaité pour un circuit
ou une partie du circuit.
En effet le fonctionnement d’un circuit est généralement décrit
par plusieurs modules VHDL. Il faut comprendre par module
le couple ENTITE/ARCHITECTURE. Dans le cas de simples
PLDs on trouve souvent un seul module.
L’architecture établit à travers les instructions les relations
entre les entrées et les sorties. On peut avoir un
fonctionnement purement combinatoire, séquentiel voire les
deux séquentiel et combinatoire.

17
Exemple 1 Synthèse LUT
A
B
-- Opérateurs logiques de base Y1
entity PORTES is
port (A,B :in std_logic;
Y1,Y2,Y3,Y4,Y5,Y6,Y7:out std_logic); Y2
end PORTES;
architecture DESCRIPTION of PORTES is
begin Y3
Y1 <= A and B;
Y2 <= A or B;
Y3 <= A xor B; Y4
Y4 <= not A;
Y5 <= A nand B; Y5
Y6 <= A nor B;
Y7 <= not(A xor B);
end DESCRIPTION;
Y6

Y7

18
Exemple 2

entity DEC7SEG4 is
port (DEC :in std_logic_vector(3 downto 0); DEC(3:0) LUT SEG(6:0)
SEG :out std_logic_vector(6 downto 0));
end DEC7SEG4;
architecture DESCRIPTION of DEC7SEG4 is
begin Synthèse
SEG <= "1111110“ when DEC = 0
else "0110000" when DEC = 1
else "1101101" when DEC = 2
else "1111001“ when DEC = 3
else "0110011“ when DEC = 4
else "1011011" when DEC = 5
else "1011111" when DEC = 6
else "1110000“ when DEC = 7
else "1111111" when DEC = 8
else "1111011" when DEC = 9
else "-------";
end DESCRIPTION;

19
Qu’est ce que le mode « concurrent » ? Pour une description VHDL toutes les instructions sont
évaluées et affectent les signaux de sortie en même temps. L’ordre dans lequel elles sont écrites n’a
aucune 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.
Dans un système à microprocesseur, les instructions sont exécutées les unes à la suite des autres.
Avec VHDL il faut essayer de penser à la structure qui va être générée par le synthétiseur pour
écrire une bonne description, cela n’est pas toujours évident

Exemple : Pour le décodeur 1 parmi 4, l’ordre dans lequel seront écrites


les instructions n’a aucune importance.
L’architecture ci dessous est équivalente :
architecture DESCRIPTION of DECOD1_4 is architecture DESCRIPTION of DECOD1_4 is
begin begin
D0 <= (not(IN1) and not(IN0)); -- première instruction D1 <= (not(IN1) and IN0); -- deuxième instruction
D1 <= (not(IN1) and IN0); -- deuxième instruction D2 <= (IN1 and not(IN0)); -- troisième instruction
D2 <= (IN1 and not(IN0)); -- troisième instruction D0 <= (not(IN1) AND not(IN0)); -- première instruction
D3 <= (IN1 and IN0); -- quatrième instruction D3 <= (IN1 AND IN0); -- quatrième instruction
end DESCRIPTION; end DESCRIPTION;

20
4.1.1) L’affectation simple : <=

Dans une description VHDL, c’est certainement l’opérateur le plus utilisé. En effet il
permet de modifier l’état d’un signal en fonction d’autres signaux et/ou d’autres opérateurs.

Exemple avec des portes logiques :

S1 <= E2 and E1 ;

Les valeurs numériques que l’on peut affecter à un signal sont les suivantes :
- ‘1’ ou ‘H’ pour un niveau haut avec un signal de 1 bit.
- ‘0’ ou ‘L’ pour un niveau bas avec un signal de 1 bit.
- ‘Z’ pour un état haute impédance avec un signal de 1 bit.
- ‘-’ pour un état quelconque, c’est à dire ‘0’ ou ‘1’. Cette valeur est très utilisée
avec les instructions : when … else et with …. Select ….
- Pour les signaux composés de plusieurs bits on utilise les guillemets
" … " , voir les exemples ci dessous :
- 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

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

22
4.1.2) Opérateur de concaténation : &.

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

Opérateur VHDL
Exemple 1:
ET AND
-- Soit A et B de type 3 bits et S1 de type 8 bits
-- A = "001" et B ="110" NON ET NAND
S1 <= A & B & "01" ;
-- S1 prendra la valeur suivante après cette affectation OU OR
-- S1 = "001110 01"
NON OU NOR

OU EXCLUSIF XOR
Valeur de A Valeur de B
"001" "110" NON OU EXCLUSIF XNOR

NON NO
4.1.3) Opérateurs logiques :
DECALAGE A GAUCHE SLL
Exemple 2:
DECALAGE A DROITE SRL
S1 <= A sll 2 ; -- S1 = A décalé de 2 bits à gauche.
S2 <= A rol 3 ; -- S2 = A avec une rotation de 3 bits à ROTATION A GAUCHE ROL
-- gauche ROTATION A DROITE ROR
S3 <= not (R);

23
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 Remarque N°1 : Pour pouvoir utiliser les
S1 <= A(4 downto 0) & "000"; -- décalage de trois bits à gauche opérateurs arithmétiques il faut rajouter les
bibliothèques suivantes au début du fichier VHDL:

4.1.4) Opérateurs arithmétiques. Use ieee.numeric_std.all ;


Use ieee.std_logic_arith.all ;

Opérateur VHDL
S1 <= A – 3 ; -- S1 = A – 3
ADDITION + -- On soustrait 3 à la valeur de l’entrée / signal A
SOUSTRACTION - S1 <= S1 + 1 ; -- On incrémente de 1 le signal S1

MULTIPLICATION * S1 <= A – 3 ; -- S1 = A – 3
-- On soustrait 3 à la valeur de l’entrée / signal A
S1 <= S1 + 1 ; -- On incrémente de 1 le signal S1
DIVISION /
Remarque N°2 : Attention l’utilisation de ces
opérateurs avec des signaux comportant un nombre
de bits important peut générer de grandes
structures électroniques.

S1 <= A * B ;-- S1 = A multiplié par B : A et B sont codés sur 4 bits


S2 <= A / B ;-- S2 = A divisé par B : A et B sont codés sur 4 bits

24
4.1.5) Opérateurs relationnels

Ils permettent de modifier l’état d’un signal ou de signaux suivant le résultat d’un test ou
d’une condition. En logique combinatoire ils sont souvent utilisés avec les instructions :
- when … else …
- with …. Select ….

Opérateur VHDL

Egal =

Non égal /=

Inférieur <

Inférieur ou égal <=

Supérieur >

Supérieur ou égal >=

25
4.2.1) 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 1: Exemple 2:
-- S1 prend la valeur de E2 quand E1=’1’ sinon S1 prend la -- Structure évoluée d’un multiplexeur 4 vers 1
-- valeur ‘0’ S2 <= E1 when (SEL="00" ) else
S1 <= E2 when ( E1= ‘1’) else ‘0’; E2 when (SEL="01" ) else
E3 when (SEL="10" ) else
E4 when (SEL="11" )
Schéma correspondant : else ‘0’;

26
4.2.2) 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, elle permet de définir la valeur du SIGNAL dans le cas où la condition n’est pas
remplie.
Exemple 1:
-- Multiplexeur 4 vers 1
with SEL select
S2 <= E1 when "00",
E2 when "01",
E3 when "10",
E4 when "11",
‘0' when others;

Remarque: when others est nécessaire car il faut toujours définir les autres
cas du signal de sélection pour prendre en compte toutes les valeurs possibles
de celui-ci. Schéma correspondant après synthèse:

27
Exemple 2: Affectation sélective avec
les autres cas forcés à ‘0’.
Library ieee;
Use ieee.std_logic_1164.all;
entity TABLE1 is
port (
E1,E2 : in std_logic; Schéma correspondant après synthèse:
SEL : in std_logic_vector(1 downto 0);
S2 : out std_logic);
end TABLE1;
architecture DESCRIPTION of TABLE1 is
begin
with SEL select
S2 <= E1 when "00",
E2 when "01",
'0' when others;
-- Pour les autres cas de SEL S2
-- prendra la valeur 0 logique
end DESCRIPTION;

28
Exemple 3: Affectation sélective avec
les autres cas forcés à ‘1’.
Library ieee;
Use ieee.std_logic_1164.all;
entity TABLE1 is
port (
E1,E2 : in std_logic; Schéma correspondant après synthèse:
SEL : in std_logic_vector(1 downto 0);
S2 : out std_logic);
end TABLE1;
architecture DESCRIPTION of TABLE1 is
begin
with SEL select
S2 <= E1 when "00",
E2 when "01",
‘1' when others;
-- Pour les autres cas de SEL S2
-- prendra la valeur 1 logique
end DESCRIPTION;

29
Exemple 4: Affectation sélective avec
les autres cas forcés à ‘-’.
Library ieee;
Use ieee.std_logic_1164.all;
entity TABLE1 is
port (
E1,E2 : in std_logic; Schéma correspondant après synthèse:
SEL : in std_logic_vector(1 downto 0);
S2 : out std_logic);
end TABLE1;
architecture DESCRIPTION of TABLE1 is
begin
with SEL select
S2 <= E1 when "00",
E2 when "01",
‘-' when others;
-- Pour les autres cas de SEL S2
-- prendra la valeur quelconque
end DESCRIPTION;

30
5.1) 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.

[Nom_du_process :] process (Liste_de_sensibilité_nom_des_signaux)


Begin
-- instructions du process
end process [Nom_du_process] ;

Remarque: Le nom du process entre crochet est facultatif, mais il peut être très utile
pour repérer un process parmi d’autres lors de phases de mise au point ou de simulations.

31
5.3) Exemples de process :
Schéma correspondant après synthèse:
Exemple N°1 :
Déclaration d’une bascule D.

Library ieee;
Use ieee.std_logic_1164.all;
entity BASCULED is
port (
D,CLK : in std_logic;
S : out std_logic);
Commentaires
end BASCULED;
- Seul le signal CLK fait partie de la liste de
architecture DESCRIPTION of BASCULED is
sensibilité. D’après les règles de fonctionnement
begin
énoncées précédemment, seul un changement d’état du
PRO_BASCULED : process (CLK)
signal CLK va déclencher le process et par conséquent
begin
évaluer les instructions de celui-ci.
if (CLK'event and CLK ='1') then
- L’instruction if (CLK'event and CLK='1') then permet
S <= D;
de détecter un front montant du signal CLK. La
end if;
détection de front est réalisée par l’attribut event
end process PRO_BASCULED;
appliqué à l’horloge CLK. Si on veut un déclenchement
end DESCRIPTION;
sur un front descendant, il faut écrire l’instruction
suivante : if (CLK'event and CLK='0').
- Les bibliothèques IEEE possèdent deux instructions
permettant de détecter les fronts montants )
rising_edge(CLK) ou descendants falling_edge(CLK).
- Si la condition est remplie alors le signal de sortie S
sera affecté avec la valeur du signal d’entrée D.

32
Exemple N°2 :
compteur avec retenue (fonctionnement incorrect).
Library ieee;
Use ieee.std_logic_1164.all;
Use ieee.numeric_std.all;
Use ieee.std_logic_unsigned.all;
entity CMP4BITSRET is Schéma correspondant après synthèse:
PORT (
RESET, CLOCK : in std_logic;
RET : out std_logic;
Q : out std_logic_vector (3 downto 0));
end CMP4BITSRET;
architecture DESCRIPTION of CMP4BITSRET is
signal CMP: std_logic_vector (3 downto 0);
begin
process (RESET,CLOCK)
begin
if RESET ='1' then
CMP <= "0000";
elsif (CLOCK ='1' and CLOCK'event) then
CMP <= CMP + 1;
if (CMP = "1111") then
RET <= '1';
else
RET <= '0';
end if;
end if;
end process;
Q <= CMP;
end DESCRIPTION;

33

Vous aimerez peut-être aussi