Вы находитесь на странице: 1из 104

Conception des circuits numriques

Langage VHDL

1. Introduction

VHDL est un langage de description matriel destin reprsenter le comportement


ainsi que l'architecture dun systme lectronique numrique

VHDL a t normalis en 1987 par lIEEE, sous la norme IEEE 1076-87.


Une importante volution est parue en 1993, sous la norme IEEE 1076-93.
Cest cette version du langage qui est majoritairement supporte par les outils
du march.
Dautre rvision de la norme sont parues depuis, mais ce sont dvolutions
mineures , et pas forcement supports par les logiciels.

1. Introduction

Le VHDL est un langage de description matriel, ce nest absolument un


langage software comme le C ou le Java .

L'intrt d'une telle description rside dans son caractre excutable : une
spcification dcrite en VHDL peut tre vrifie par simulation, avant que la
conception dtaille ne soit termine.

En outre, les outils de conception assiste par ordinateur permettant de passer


directement d'une description fonctionnelle en VHDL un schma en porte
logique ont rvolutionn les mthodes de conception des circuits numriques,
ASIC ou FPGA.

1. Introduction

Ce langage permet daller dun niveau dabstraction trs leve, par une
description algorithmique, jusqu' un niveau proche du matriel, o lon
dcrit le systme par un ensemble de porte logique et dinterconnexion
( gate level ).
Entre les deux, se trouve le niveau RTL (Register Transfer Level), qui
permet de dfinir le systme par une architecture de type machine de
Moore ou Mealy.

1. Introduction

Lavantage du code RTL est quil est indpendant des technologies utilises
dans la cible programmer, alors quau niveau gate , il faut prendre en
compte la technologie du circuit cible, car tout nest pas permis.
A partir de ce langage, on peut dfinir un systme par une structure hirarchique
de fonctions, par une structure matrielle, en encore par une modlisation
temporelle (mme si elle nest pas utilisable pour faire du code synthtisable).

1. Introduction

Cest le niveau RTL que lon utilise de plus, quand on fait de la synthse.
En effet, le niveau algorithmique nest pas forcement synthtisable, il est
plutt utilis pour faire du testbench ou de la simulation.

La syntaxe du VHDL est tire du langage Ada, dont les mots clefs ont t
adapts la conception matrielle.

L'une des particularits du VHDL provient du fait qu'il est possible


d'exprimer facilement le paralllisme prsent l'intrieur d'un circuit.

1. Introduction

L'tape de synthse consiste de passer dune description matrielle pour


obtenir un composant ralisant les fonctions dsires, l'aide d'lments
logiques concrets (portes logiques, bascules ou registres).

Ceux-ci seront implments, selon la technologie utilise, soit directement


en transistors (dans le cas d'un ASIC), ou en se basant sur les lments
programmables des FPGA.

Ces deux oprations doivent prendre en compte les ressources disponibles


sur l'ASIC (surface) ou dans le FPGA (units programmables).

1. Introduction

Le VHDL ayant une double fonction (simulation et synthse), une partie


seulement du VHDL est synthtisable, l'autre existant uniquement pour faciliter
la simulation (criture de modles comportementaux et de test benches).

Selon le support matriel et le logiciel de synthse utiliss, cette partie pourra


tre plus ou moins tendue.

De manire obtenir du VHDL synthtisable et portable, il est donc ncessaire


de se limiter des constructions simples, dont la transcription en portes et
bascules est simple raliser.

La norme 1076.6 a t initie pour tenter de dfinir un sous-ensemble de


VHDL de synthse .

1. Introduction

1. Introduction
Autres langages proches
Verilog concurrent et plus ancien. La syntaxe est proche de celle
du langage C.
VHDL-AMS Langage de modlisation mixte numriqueanalogique IEEE.1076.1-1999. Il est entirement compatible
avec VHDL. Uniquement pour la modlisation.
HDL assimilable aux langages logiciels de haut niveau

1. Introduction
Historique
Fin des annes 70 : lancement du programme VHSIC par le ministre
de la dfense amricaine
1981 : Premires rflexions sur le VHDL
1987 : IEEE 1076 : Dfinition dun langage unique pour
. La description
. La modlisation
. La simulation
. La synthse
. La documentation
1993 : IEEE 1164 : Normalisation des signaux logiques multivaleurs
MVL9 (multivalued logic, nine values).
1996 : IEEE 1076.3 : Normalisation pour la synthse. Implantation
d un nombre sign

Modlisation et synthse
Limites actuelles du VHDL

12

Modlisation et synthse

Modlisation
Tout le langage:
Logique + Temporel
Un modle peut tre
comportemental, structurel ou
de type data-flow
Exemple: cre des
programmes de test

Synthse
Langage simplifi. Le style
dcriture anticipe une
primitive circuit.
La synthse demande une
bonne connaissance du circuit
et de la technologie.

13

Modlisation et synthse

Les avantages de VHDL :

indpendant du constructeur

Portabilit

indpendant de la technologie
indpendant de la dmarche
indpendant du niveau de
conception

14

Units de conception
Dfinition:
Lunit de conception (design unit) est le plus petit module
compilable sparment.

15

Units de conception

VHDL offre cinq types dunits de conception :


La dclaration dentit (entity declaration);
Le corps darchitecture (architecture body), ou plus simplement architecture;
La dclaration de configuration (configuration declaration);

La dclaration de paquetage (package declaration);


Le corps de paquetage (package body).

16

Units de conception
Entit et architecture:

En VHDL, une structure logique est dcrite l'aide d'une


entit et d'une architecture de la faon suivante :

17

Units de conception

Dclaration de lentit:

Entit=vue externe= boite noire

18

Units de conception
Exemple:

19

Units de conception

Dclaration de larchitecture:

Architecture=Vue interne= intrieur de la boite

20

Units de conception
Trois descriptions darchitectures sont possibles:

Description comportementale : ce que fait lentit

Algorithme

le temps peut intervenir

21

Units de conception
Description comportementale:

22

Units de conception

Description structurelle : comment elle le fait

dcrit la structure de la fonction ralise

dcrit un schma, des connexions entre composants

23

Units de conception
Description structurelle:

24

Units de conception
Dclaration et instanciation dun composant:

25

Units de conception
Exemple de description structurelle:

26

Units de conception

Description flot de donns: Data Flow


Exprime le flot de donnes sortant par rapport au flot entrant

27

Units de conception
Configuration

La configuration permet, comme son nom l'indique, de configurer


l'entit laquelle elle est associe.
Pour qu'une description soit portable, c'est--dire synthtisable ou
simulable sur des outils diffrents et pour des composants cibles
diffrents, il est prfrable de n'avoir qu'une seule architecture par
entit.

28

Units de conception
Configuration
Si l'entit A est utilise au sein de l'architecture arch_princ de l'entit princ, et si on
a plusieurs architectures pour cette entit A. Lors de la synthse ou de la
simulation de l'entit princ, il va tre ncessaire de spcifier quelles sont les
architectures utiliser. Cette spcification peut tre faite grce l'utilisation d'une
configuration.

Configuration conf_princ of Princ is


for arch_princ
for U1 : A use entity work.A(arch_A2)
end for;
end for;
end conf_princ;
29

Units de conception

Package:
Dans le langage VHDL, il est possible de crer des package
et package body dont les rles sont de permettre le

regroupement de donnes, variables, fonctions, procdures,


etc., que l'on souhaite pouvoir utiliser ou appeler partir
d'architectures.

30

Units de conception
Package:

Dcrit une vue externe (boite noire)


Regroupement de dclaration de type et/ou sous programme.
Construction dune bibliothque.
Possibilit de lexportation de lun de ces objets.
Le contenu de la dclaration du paquetage est visible de lextrieur.
Dclar avant lentit.

Package Body:

Dcrit une vue interne (comment de la boite noire)


Contient lcriture proprement dites des fonctions et des procdures
dclares au niveau du paquetage.
Le corps du package nest pas toujours ncessaire.

31

Units de conception
Package:
package PACK is
-- dclarations de types, sous types, signaux, composants
-- constantes, sous programmes (sans code)
-- aucune variable
end PACK;

Package Body:
Package body PACK is
-- dclarations identiques (sauf signaux)
-- corps des SP de la partie dclarative
end PACK;

32

Units de conception
Exemple:
use work.geometrie.pi;
use work.geometrie.aire_cercle;
..........
calc: process(h)
variable aire, perim :real ;
begin
.....
aire_cercle (rayon,aire);
perim := 2*pi*rayon;
.....
end process calc;
.......

33

1. Introduction
Environnement de dveloppement intgr
Les principaux fabricants de circuits logiques programmables proposent une version gratuite mais limit de leurs outils.
diteur

Produit

Licence

Synthtiseur

Simulateur

Remarques

Xilinx

ISE Webpack4

Propritaire, gratuite,
illimit

Oui

Oui

Simulateur ModelSim XE Starter gratuit

Altera

Quartus II Web
Edition5

Propritaire, gratuite, 6
mois renouvelable

Oui

Oui

Simulateur ModelSim Altera Edition gratuit

Lattice

ispLever starter6

Propritaire, gratuite, 6
mois renouvelable

Oui

Non

Actel

Libero7

Propritaire, gratuite, 1
an renouvelable

Oui

Oui

Simulateurs uniquement
Aldec

Active-HDL
Student Edition8

Propritaire, gratuite, 1
an

Tiers partie

Oui

Mentor
Graphics

ModelSim PE
Student Edition9

Propritaire, gratuite

Non

Oui

Synthtiseur : Synplify Actel Edition (gratuit),


Simulateur ModelSim Actel Edition gratuit

2. Elments de base
. Entity/Architecture : Brique de base de complexit trs variable
Fonctionnement interne
Interface externe

. Configuration : Possibilit dassocier plusieurs architectures une seule entit

Une architecture ddie la simulation et une pour la synthse

. Package :
- Pour une conception modulaire et hirarchique
- Les entits/architectures rutiliser sont places dans des packages

. Library :

- Possibilit dutiliser le concept de bibliothques


- Bibliothque work : bibliothque de travail
- Les bibliothques work et std sont implicites

2. lments de base : Entit et Architecture


In 1

Out 1

Bloc A

In 2
In 3

Out 2

Vue externe : Dfinition de l'entit


Bloc A
In 1
In 2

In 3

Bloc B

Bloc C

Out 1

Bloc D

Bloc E

Out 2

Vue interne : Dfinition de l'architecture

2.1 Entit (Entity)


. Port :

. Signal d interface entre lentit et lextrieur


. Chaque port est associ un nom, un mode et un type
. Ordre de la dclaration des diffrents signaux : aucune
importance
. Ordre conserv lors dune utilisation un plus haut niveau de

cette entit
- Instanciation d'un composant (component)

2.1 Entit (Entity)


. Mode :
. Dfinition du sens du signal
. VHDL interdit lassociation de deux ports de mode contre nature
. 4 modes sont dfinis
- in : Signal dentre monodirectionnel
- out : Signal de sortie monodirectionnel
- inout : Signal dentre/sortie bidirectionnel
- buffer : Signal de sortie/entre monodirectionnel
. Utile lorsquil y a rebouclage (sortie considre comme une
entre)
. Peu utilis (remplac par une sortie associe un signal
interne)

2.1 Entit (Entity)


.
.
.
.

. Mode : 4 modes de ports


CS

R/W
Adresse
Donnes

Mmoire

Busy
Erreur

In
Out
Inout
Buffer

2.1 Entit (Entity)


. Dclaration :
ENTITY nom_entite IS

GENERIC (parametres_generiques : type := valeur_par_defaut);


PORT ( entrees : IN type_entrees;
sorties : OUT type_sorties;
entreessorties : INOUT type_entreessorties;
entreessorties_buffer : BUFFER type_entreessorties_buffer);
END nom_entite;

2.1 Entit (Entity)

. Exemple :
ENTITY adder_pip IS
PORT(

clk : IN bit;
a,b : IN bit_vector(7 DOWNTO 0);

cin : IN bit;
s : OUT bit_vector(7 DOWNTO 0);
cout : OUT bit);
END adder_pip;

2.2. Architecture
. Spcification de la fonctionnalit.
. Plusieurs architectures peuvent tre dfinies pour le mme modle.

. Dclaration
ARCHITECTURE nomdelarchitecture OF nomdelentit IS
dclarations de procdures, de types, de constantes,
de composants, de signaux.
BEGIN
dfiniton de processus
et/ou
d'instances de composants, ...
END nomdelarchitecture;

2.2. Architecture

. Exemple

ARCHITECTURE comportementale OF adder_pip IS


BEGIN
PROCESS(clk)
VARIABLE carry : bit;
VARIABLE sum : bit_vector (7 DOWNTO 0);
BEGIN
IF (CLK = '1') THEN
carry := cin;
FOR i IN 0 TO a'length-1 LOOP
sum(i) := a(i) XOR b(i) XOR carry;
carry := (a(i) AND b(i)) OR (a(i) AND carry) OR (b(i) AND carry);
END LOOP;

cout <= carry;


s <= sum;
END IF;
END PROCESS;
END comportementale;

2.2. Architecture

.3

Types de description :

. Description comportementale
- Description purement fonctionnelle du circuit
- Portabilit, lisibilit, maintenance, volutivit

- Description flot de donnes pour traduire une table de vrit

2.2. Architecture

Description structurelle

La description structurelle d'un circuit complexe en vhdl prsente de


nombreux avantages :

Une architecture hirarchique comprhensible : il est plus simple de


sparer un circuit en un ensemble de blocs plus petits, ayant des
fonctions bien identifies. Ces blocs pourront alors tre dcrits sous
forme comportementale, ou bien leur tour tre spars en blocs
encore plus simples.
Une synthse logique efficace : la synthse est un processus lent (en
terme de temps de calcul). Plus un bloc est gros et complexe, plus sa
synthse prendra du temps. Il vaut donc mieux travailler sur des blocs
plus petits, plus simples synthtiser, et rassembler le tout la fin.

2.2. Architecture

Description mixte
Au sein dune mme architecture, il est possible d utiliser des
modules dcrits de manire comportementale ou structurelle

2.2.1 Architecture : Description comportementale


. Description

haut niveau
ARCHITECTURE haut_niveau OF adder IS
BEGIN
S <= A + B;
END haut_niveau;

. Description

niveau quations logiques


ARCHITECTURE niveau_equations_logiques OF adder IS
BEGIN
S(0) <= A(0) XOR B(0);
S(1) <= (A(0) AND B(0)) OR (A(1) AND B(1));
END niveau_equations_logiques;

. Description

bas niveau

ARCHITECTURE bas_niveau OF adder IS


BEGIN
S(0) <= '1' WHEN A(0)!= B(0) ELSE '0';
S(1) <= '1' WHEN (
A(0)!=B(0) AND A(1)!=B(1) OR
A(1)=B(1) AND A(0)=B(0)=1) OR
A(1)!=B(1) AND A(0)=B(0)=0 ) ELSE '0';
END bas_niveau;

2.2.1 Architecture : Description comportementale


. Exemple : Description

comportementale d'une bascule D sur niveaux

Q
Horloge
Q

Q-1

2.2.1 Architecture : Description comportementale


. Exemple : Description

comportementale d'une bascule D

LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_arith.all;
ENTITY basculed IS
PORT
(
d,clk : IN bit;
q: OUT bit);
END basculed;
ARCHITECTURE comportementale OF basculed IS
BEGIN
PROCESS(clk)
BEGIN
IF (clk='1') THEN q<=d;END IF;
END PROCESS;
END comportementale;

2.2.2 Architecture : Description structurelle


. Traduction d'une reprsentation schmatique
A(0)
B(0)

VHDL

S(0)

A(1)
B(1)
A(0)
B(0)

S(1)

ARCHITECTURE structurelle OF adder IS


COMPONENT xor2
port(e1,e2 : in bit;s : out bit); end COMPONENT
COMPONENT and2
port(e1,e2 : in bit;s : out bit); end COMPONENT
SIGNAL inter1,inter2 :bit;
BEGIN
u1 : xor2 PORT MAP (e1=>A(0),e2=>B(0),s=>S(0));
u2 : xor2 PORT MAP (e1=>A(1),e2=>B(1),s=>inter1);
u3 : and2 PORT MAP (e1=>A(0),e2=>B(0),s=>inter2);
u4 : xor2 PORT MAP (e1=>inter1,e2=>inter2,s=>S(1));
end structurelle;

2.2.3 Architecture : Description mixte

. Au sein d'une mme architecture, il est possible d'utiliser du comportemental


et du structurel

reset
D
b
a

Adder

S_inter

clk
s

VHDL

ENTITY integration IS PORT(


a : IN bit_vector(0 to 1);
reset,clk : IN bit;
s : OUT bit_vector(0 to 1));
END integration
ARCHITECTURE mixte OF integration IS
SIGNAL b,s_inter :bit_vector(0 to 1);
COMPONENT adder
PORT(a,b : IN bit_vector(0 to 1);
s : OUT bit_vector(0 to 1));
END COMPONENT;
BEGIN
PROCESS(clk)
IF rising_edge(clk) THEN
IF reset = 1 THEN b <= 00;
ELSE b <= s_inter;
END IF;
END IF;
END PROCESS;
u1 : PORT MAP adder (a,b,s_inter);
s <= s_inter;
END mixte;

3. Types
. Types :

.VHDL interdit lassociation de 2 signaux de type diffrent

. Types disponibles

- Scalaires (Scalar)
. Entiers (integer)
. Flottants (Real)
. Enumrs (Enumerated)
. Physiques (Physical)

- Composs (Composite)
. Tableaux (Array)
- Collection dobjets de mme type
. Enregistrements (Record)
- Collection dobjets de type diffrent
- Access et File
. Types pour la manipulation de fichiers ou sur les pointeurs

3. Types
. Sous-types :

. Association entre 2 types diffrents est interdite


. But : Faire face cette interdiction
. Restrictions :
SUBTYPE chiffre IS integer RANGE 0 TO 9;
SUBTYPE octet IS bit_vector(0 TO 7);

. 2 sous-types prdfinis
SUBTYPE natural IS integer RANGE 0 TO higher_integer;
SUBTYPE positive IS integer RANGE 1 TO higher_integer;

. Association dun sous-type au type partir duquel il a t dfini : autoris


. Association entre 2 sous-types diffrents issus du mme type : autoris

. Sous-types : Exemples

3. Types

ARCHITECTURE subtype_test OF test IS


SUBTYPE data IS bit_vector(31 DOWNTO 0);
SUBTYPE operand IS data;
TYPE x_int IS RANGE 1 to 50;
TYPE y_int IS RANGE 1 to 30;
SUBTYPE z_int IS x_int RANGE 1 TO 30;
SUBTYPE a_int IS x_int RANGE 3 TO 32;
SUBTYPE b_int IS z_int RANGE 5 TO 20;
SIGNAL x : x_int := 1;
SIGNAL y : y_int := 2;
SIGNAL z : z_int := 3;
SIGNAL a : a_int := 4;
SIGNAL b : b_int := 5;
BEGIN
z <= x; -- OK z_int est un sous_type de x_int mais erreur si x > 30
a <= z; -- OK a_int et z_int proviennent du mme type x_int
b <= a; -- OK a_int provient de x_int et b provient z_int (sous-type de x_int)

mais erreur si a>20 ou a<5

y <= x; -- ERREUR : x_int et y_int sont 2 types diffrents


END ARCHITECTURE subtype_test

3.1 Types : Scalaires


. Types

entiers :
-231 + 1 entier 231 - 1
TYPE chiffre_ascendant IS RANGE 0 TO 9;
TYPE chiffre_descendant IS RANGE 9 DOWNTO 0;
Notations de valeurs
147
-154
2#01010111# (binaire)

. Types

16#3FFF# hxadcimal

flottants :
Approximation discrte de l'ensemble des rels dans un intervalle donn
TYPE tension IS RANGE 0 TO 5;

-1E38 Flottant 1E38

3.1 Types : Scalaires


. Types

numrs :

Ensemble de valeurs dsignes par des identificateurs ou des caractres

TYPE boolean IS (false, true);


TYPE bit IS ('0','1');
TYPE std_logic IS ('U', Z', X', O', 1' W', L', H' , -');
TYPE jour IS (lundi, mardi, mercredi, jeudi, vendredi, samedi, dimanche);
Remarques :
. Chaque caractre ou chane de caractres au sein d'un mme type
doit tre distinct
. Possibilit d'utiliser le mme caractre dans 2 types distincts

3.1 Types : Scalaires


. Types

physiques :
Valeurs numriques de quantits physiques

TYPE resistance IS RANGE 0 TO 1E8;


UNITS
ohms
kohms = 1000 ohms;
Mohms = 1E6 ohms;
END UNITS;

3.2 Types : Composs


.
Types tableaux
Bornes fixes la dfinition du type
TYPE octet IS ARRAY (7 DOWNTO 0) OF bit;
TYPE memoire IS ARRAY (0 TO 255) OF octet;
Bornes fixes chaque dclaration d'un objet de type tableau
TYPE vecteur IS ARRAY (integer RANGE <>) OF real;
- dclaration : vecteur(1 TO 20)
L'indice peut-tre un type entier dfini par dclaration
TYPE adresse IS RANGE 0 TO 255;
TYPE memoire IS ARRAY (adresse) OF octet;
Tableaux prdfinis
TYPE std_logic_vector IS ARRAY (natural RANGE <>) OF std_logic;
TYPE string IS ARRAY (positive RANGE <>) OF character;

3.2 Types : Composs


. Types

enregistrements

. Ensemble d'lments nomms avec des types pouvant tre diffrents


TYPE instruction IS
RECORD
code_operatoire : operation;
addresse : octet;
operande1, operande2 : integer RANGE 0 TO 15;
END RECORD;
. Accs un champ particulier
instruction.code_operatoire := soustraction;

3.3 Types : Classes


.
Types et sous-types :
. 3 classes
- Types prdfinis
. Standard VHDL initial IEEE.1076
- Types complmentaires
. Standard VHDL initial IEEE.1164
- Types dfinis par lutilisateur

3.3 Types : Classe - les Prdfinis


Prdfinis

Integer

Natural

Positive

bit

Boolean

Bit-vector

Remarque : Synthse logique

- time : non
- real : non
- integer : Favoriser les entiers borns

Real

Time

3.3 Types : Classe - les complmentaires


. Standard IEEE 1164
- les signaux multivaleurs (package std_logic_1164)
- std_ulogic et std_ulogic_vector
. Std_ulogic se caractrise par 9 valeurs
- U : non initialis
- X : niveau inconnu (conflit fort)
- 0 : niveau bas
- 1 : niveau haut
- Z : haute impdance
- W : niveau inconnu (conflit faible)
- L : niveau bas
- H : niveau haut
- - : niveau quelconque
. Std_logic : SUBTYPE std_logic IS RESOLVED std_ulogic;
- VHDL interdit la connexion d'une entre plusieurs sorties
Possibilit d'interconnecter plusieurs sorties ensemble
. IEEE 1076.3 - la synthse logique et les traitements arithmtiques
- signed et unsigned

3.3 Types : Classe - les dfinis par l'utilisateur


. Types dfinis

une application dun type ou dun sous-type

TYPE memoire IS ARRAY (integer <RANGE> ) OF octet;


VARIABLE ma_memoire : memoire (15 DOWNTO 0);

. Types dfinis

une application dun sous-type

SUBTYPE octet IS std_logic_vector (0 TO 7);


adresse : IN octet;

4. Objets : Constantes, Variables, Signaux

. Utilisation des constantes et des variables : proche des langages traditionnels


. Utilisation des signaux : spcification au langage de description du matriel
. Constantes (Constant)
. Objets internes valeurs fixes et dfinitives
. Synthse : Mise VCC ou au GND Surface nulle
. Dclaration : constant nom : type := valeur;
. Exemple :
.

CONSTANT pi : real:=3.141592 ;

4. Objets : Constantes, Variables, Signaux

Variables (Variable)
. Objets permettant de conserver une valeur pendant un certain temps
. Utilisable qu'au sein d'un processus (dfinition dans le process)
. Peu utilis en synthse logique
. Exemple:

VARIABLE octet1 : std_logic_vector(0 TO 7) := "00000001";

4. Objets : Constantes, Variables, Signaux

. Signaux (signal)
. Utilisation en mode concurrent et squentiel
. Dclaration dans une "zone" concurrente
. Signaux internes, temporaires
. Synthse (reprsentation matrielle : un fil ou une mmoire)
. Absence de mode
. Synthse d'une VARIABLE Synthse d'un SIGNAL
. Une valeur courante et une valeur future

4. Objets : Constantes, Variables, Signaux


. Signaux

(signal)

. Synthse d'une VARIABLE Synthse d'un SIGNAL

ARCHITECTURE ex_sig OF exemple IS


BEGIN
PROCESS(a,b,c)
VARIABLE tmp : bit;
BEGIN
tmp := a and b;
y <= tmp or c;
END PROCESS;
END ex_sig;
ARCHITECTURE ex_sig OF exemple IS
SIGNAL tmp : bit;
BEGIN
PROCESS(a,b,c)
BEGIN
tmp <= a and b;
y <= tmp or c;
END PROCESS;
END ex_sig;

a
b

Tmp (fil)

a
b

Tmp (fil)

5. Attributs
. Informations supplmentaires sur les types et objets
. Utilisation : toto'att avec toto un objet ou un type et att un attribut
. Attributs d'un scalaire
T'left
T'right
T'low
T'high

-> Limite
-> Limite
-> Limite
-> Limite

gauche de T
droite de T
basse de T
haute de T

. Attributs d'un ensemble discret


T'pos(X)
T'val(N)
T'leftof(X)
T'rightof(X)
T'pred(X)
T'succ(X)

-> Numro de la position de X dans T


-> Valeur la position N dans T
-> Valeur une position gauche de X dans T
-> Valeur une position droite de X dans T
-> Valeur une position au dessous de X dans T
-> Valeur une position au dessus de X dans T

5. Attributs
. Exemples - Attributs d'un scalaire
Type adr is integer range 7 downto 0;
adr
adr
adr
adr

left = 7
right = 0
low = 0
high = 7

. Exemples - Attributs d'un ensemble discret


Type MVL4 is ( U , 0 , 1 , Z );
MVL4'pos( 1 ) = 2
MVL4'val(0) = U
MVL4 rightof( 1 ) = Z
MVL4 leftof( 1 ) = 0
MVL4 succ(2) = Z
MVL4 prec(2) = 0

5. Attributs

. Attributs d'un tableau


A'left(N)
-> Limite gauche de l'intervalle des indices de la dim. N de A
A'right(N)
-> Limite droite de l'intervalle des indices de la dim. N de A
A'low(N)
-> Limite basse de l'intervalle des indices de la dim. N de A
A'highof(N)
-> Limite haute de l'intervalle des indices de la dim. N de A
A'range(N)
-> Intervalle des indices de la dim. N de A
A'reverse_range(N)
-> Intervalle inverse des indices de la dim. N de A
A'length(N)
-> Longueur de l'intervalle des indices de la dim. N de A

5. Attributs

exemples :
type MOT is bit_vector(7 downto 0);
type TAB is array (4 downto 0) of MOT;
signal NOM : MOT;
signal TABLEAU : TAB;
MOT'LEFT renvoie 7;
MOT'LENGTH renvoie 8;
TABLEAU'RIGHT renvoie 0;
TABLEAU'RANGE renvoie 4 downto 0;

. Attributs d'un signal


S'stable(t)-> Renvoie une valeur boolenne true si S est constant depuis
au moins t
S'event -> Renvoie une valeur boolenne true si S changer depuis
le dernier cycle de simulation

5. Attributs
. Exemples : Attributs d'un tableau
type word is bit_vector(31 downto 0);
type memory is array(7 downto 0) of word;
variable mem:memory;
mem'left = 7
mem'left(3) = 31
mem'right = 0
mem'low = 0
mem'high = 7
mem high(5) = 31
mem'range = 7 downto 0
mem range(3) = 31 downto 0
mem'reverse_range = 0 to 7
mem'length = 8
memlength(3) = 32

6. Excution parallle et squentielle


. particularit

du VHDL : Excution parallle ou squentielle

. Excution parallle
. Excution par dfaut
. Les instructions au sein d'une architecture sont excutes en parallle ou de
manire concurrente
. Excution concurrente = Excution combinatoire
. Chaque opration dans une architecture est excute chaque instant
. Excution squentielle
. Ncessit d'utiliser un PROCESS
. Le process est excut chaque fois qu'un signal dclar dans sa liste de
sensibilit change de valeur.
. Les instructions sont excutes squentiellement
. Les modifications des signaux (signal) sont effectives la fin du process

6. Excution parallle et squentielle


. Excution mixte
. Possibilit d'associer dans une mme architecture des modules
excution parallle et squentielle
. Exemple : Comparateur synchrone une horloge clk
LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY comp_synch IS PORT (
a, b, clk, reset : IN std_logic;
qs : OUT std_logic);
END comp_synch;
ARCHITECTURE archi_mixte OF comp_synch IS
SIGNAL q : std_logic;
BEGIN
q<='1 WHEN a=b ELSE '0';
PROCESS(clk, reset)
BEGIN
IF reset='0' THEN qs<='0';
ELSIF (clk'event AND clk='1') THEN qs <= q;
END IF;
END PROCESS;
END archi_mixte;

a
b

Comparateur

q
clk
Reset

qs

7. Instructions
. Deux

types d'excution : Deux familles d'instructions

. Instructions rserves au mode d'excution parallle ou concurrente


- Toutes les oprations sont excutes simultanment
- L'ordre d'criture n'a aucune importance

I1

I2

I3

I1
I2

. Instructions rserves au mode d'excution squentielle


- Chaque opration est effectue l'une aprs l'autre
- L'ordre d'criture a une grande importance

I3

7.1 Instructions de type parallle

. Assignation conditionnelle

signal <= {expression WHEN condition} ELSE expression

ARCHITECTURE flot_de_donnees OF xor IS


BEGIN
c <= '0' WHEN a = '0' AND b = '0' ELSE
'1' WHEN a = '0' AND b = '1' ELSE
'1' WHEN a = '1' AND b = '0' ELSE
'0' WHEN a = '1' AND b = '1' ELSE
'0';
END flot_de_donnees;

7.1 Instructions de type parallle


. Assignation slective
WITH slecteur SELECT
signal <= {expression WHEN valeur_slecteur,
expression WHEN OTHERS};
ARCHITECTURE flot_de_donnees OF mux IS
SIGNAL selection : std_logic_vector(0 TO 1);
SIGNAL a,b,c,d,s : std_logic_vector(0 TO 7);
BEGIN
WITH selection SELECT
s <= a WHEN "00";
b WHEN "01";
c WHEN "10";
d WHEN OTHERS;
END flot_de_donnees;

7.1 Instructions de type parallle


.

Assignation d'un composant

label : nom_du_composant PORT MAP (association des ports)

ARCHITECTURE arch_full OF full_adder IS


SIGNAL inter : bit;
COMPONENT half_adder PORT (a,b,cin : IN bit;
cout,s : OUT bit);
END COMPONENT;
BEGIN
u1 : half_adder PORT MAP (a=>a(0),b=>b(0),cin=>cin,cout=>inter,s=>s(0));
u2 : half_adder PORT MAP (a(1),b(1),inter,cout,s(1));
END arch_full;

. Instruction GENERATE
label : FOR variable_boucle IN val_iniale TO val_finale GENERATE

{instructions parallles}
END GENERATE label

LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY quisuisje IS
GENERIC(N : integer := 4);
PORT(
a,b : IN std_logic_vector(N DOWNTO 1);
cin : IN std_logic;
s : OUT std_logic_vector(N DOWNTO 1);
cout : OUT std_logic);
END quisuisje
ARCHITECTURE structurel OF quisuisje IS
COMPONENT ADDER PORT(a,b,cin : IN std_logic;s,cout : OUT std_logic); END COMPONENT
SIGNAL carry : std_logic_vector(N-1 DOWNTO 1);
BEGIN
gene : FOR i IN 1 TO N GENERATE
ls_bit : IF i=1 GENERATE
ls_cell : adder PORT MAP(a(1),b(1),cin,s(1), carry(1));
END GENERATE ls_bit;
middle_bit : IF (i>1 and i<N) GENERATE
middle_cell : adder PORT MAP(a(i),b(i),carry(i-1),s(i), carry(i));
END GENERATE middle_bit;
ms_bit : IF i=N GENERATE
ms_cell : adder y MAP(a(N),b(N),carry(N-1),s(N), cout);
END GENERATE ms_bit;
END GENERATE gene;
END structurel;

Said najah___________________________________________________

7.2. Instructions de type squentiel


. Instruction

PROCESS

- Toutes les instructions comprises dans le PROCESS sont excutes


squentiellement
- Instruction concurrente : possibilit d'en utiliser plusieurs
- Tous les PROCESS sont excuts en parallle
- Activation d'un PROCESS : 2 possibilits
[label] : PROCESS(liste_signaux)

-- Partie dclarative du process

BEGIN

-- Corps du process

END PROCESS [label]

[label] : PROCESS

-- Partie dclarative du process

BEGIN
WAIT UNTIL (liste_signaux)

-- Corps du process

END PROCESS [label]

7.2. Instructions de type squentiel


. Instruction

PROCESS : Attribut event

. But : Savoir si le signal auquel il est associ a t modifi


. Trs utile dans un PROCESS dclenchable par plusieurs signaux distincts
. Exemples :
IF CLK'event THEN excution; END IF;
- Excution si CLK passe 0 ou 1
IF CLK'event AND CLK='1' THEN excution; END IF;
- Dclenchement sur front montant

. Standard IEEE 1164 : Dfinition de deux fonctions


rising_edge(CLK) et falling_edge(CLK)

7.2. Instructions de type squentiel

Exemple :
Dans l'exemple suivant, a,b,c sont des signaux et x une variable.
Enfin de processus, a et b vont prendre la valeur a+1 aprs un deltacycle
process
(a) la valeur a aprs un delta-cycle.
alors que
c prendre
variable x : std_logic;
begin
x := a+1;
a <= a+1;
b <= x;
c <= a;
end if;
end process;

7.2. Instructions de type squentiel


. Ces instructions sont uniquement utilises dans un Process
. Assignation inconditionnelle de variables et de signaux
Mme traitement que pour le mode parallle
SIGNAL sig : integer;
PROCESS(clk)
VARIABLE var : integer := 0;
BEGIN
sig <= sig + 1;
var := var + 1;
END PROCESS;

. Instruction IF

IF expresssion_booleenne THEN
END IF;

instructions_sequentielles
IF up_down = 1 THEN
s <= s + 1;
ELSE
s <= s - 1;
END IF;

7.2. Instructions de type squentiel

. Instruction CASE

CASE expresssion is
{WHEN valeur_expression => instructions_sequentielles};
{WHEN OTHERS => instructions_sequentielles};
END CASE;
CASE selection IS
WHEN '0' => s <= a;
WHEN '1' => s <= b;
WHEN OTHERS => NULL;
END CASE;

. Instruction LOOP

instruction_pour_iteration LOOP
instructions_sequentielles
END LOOP;

VARIABLE indice,resultat : INTEGER := 0;


Boucle1 : WHILE indice < 10 LOOP
indice := indice + 1;
resultat := resultat + adresse(indice);
END LOOP boucle1;

VARIABLE indice,resultat : INTEGER;


Boucle2 : FOR indice IN 0 TO 9 LOOP
resultat := resultat + adresse(indice);
END LOOP boucle2;

7.2. Instructions de type squentiel


. Instruction NEXT
NEXT label_boucle WHEN condition
VARIABLE indice, resultat : integer := 0;
Boucle1 : WHILE indice < 10 LOOP
indice := indice + 1;
NEXT Boucle1 WHEN indice = 5;
resultat := resultat + adresse(indice);
END LOOP boucle1;

VARIABLE indice, resultat : integer;


Boucle2 : FOR indice IN 0 TO 9 LOOP
NEXT Boucle2 WHEN indice = 5;
resultat := resultat + adresse(indice);
END LOOP boucle2;

. Instruction EXIT

EXIT label_boucle WHEN condition

VARIABLE indice,resultat : integer := 0;


Boucle1 : WHILE indice < 10 loop
indice := indice1 + 1;
EXIT Boucle1 WHEN indice = 5;
resultat := resultat + adresse(indice);
END LOOP boucle1;

VARIABLE indice,resultat : integer;


Boucle2 : FOR indice IN 0 to 9 LOOP
EXIT Boucle2 WHEN indice = 5;
resultat := resultat + adresse(indice);
END LOOP boucle2;

7.2. Instructions de type squentiel


. Instruction NULL
Instruction sans aucun effet
CASE commande_moteur IS
WHEN avant => marche_avant;
WHEN arriere => marche_arriere;
WHEN statuquo => NULL;
END CASE;
. Instruction ASSERT

Vrification d'une condition spcifique

Information d'une ventuelle violation de cette condition

ASSERT condition REPORT message SEVERITY {note/warning/error/Failure}

PROCESS(clk)
BEGIN IF clk='1' THEN
ASSERT d'STABLE(15 ns);
REPORT "setup non respect" SEVERITY warning;

END IF;
END PROCESS;

7.3. Instructions : Exemple


. Multiplexeur 8 bits : 4 vers 1

1re phase : dfinition des entre/sorties (ENTITY)

Multiplexeur 8 bits
4 vers 1

Entres

Entree1
Entree2
Entree3
Entree4

Sorties

8
8
8

Multiplexeur 8 bits
4 vers 1

Sel1 Sel2

Sortie

7.3. Instructions : Exemple


. Multiplexeur 8 bits : 4 vers 1
2me phase : dfinition du fonctionnement ou de la structure
(ARCHITECTURE)

- Solution 1 : Instruction IF
- Solution 2 : Instruction CASE

7.3. Instructions : Exemple


. Multiplexeur 8 bits : 4 vers 1
- Solution 1 : Instruction IF
LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY mux41 IS
PORT(entree1,entree2,entree3,entree4: IN std_logic_vector(0 TO 7);
sel: IN std_logic_vector(0 to 1);
sortie : OUT std_logic_vector(7 DOWNTO 0));
END mux41;
ARCHITECTURE comportementale OF mux41 IS
BEGIN
PROCESS(sel)
BEGIN
IF (sel="00") THEN sortie<=entree1;
ELSE IF (sel="01") THEN sortie<=entree2;END IF;
ELSE IF (sel="10") THEN sortie<=entree3;END IF;
ELSE sortie<=entree4;END IF;
END PROCESS;
END comportemental;

7.3. Instructions : Exemple


. Multiplexeur 8 bits : 4 vers 1
- Solution 2 : Instruction CASE
LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY mux41 IS
PORT(entree1,entree2,entree3,entree4: IN std_logic_vector(0 TO 7);
sel: IN std_logic_vector(0 to 1);
sortie : OUT std_logic_vector(7 DOWNTO 0));
END mux41;
ARCHITECTURE comportementale OF mux41 IS
BEGIN
PROCESS(sel)
BEGIN
CASE sel IS
WHEN "00" => sortie<=entree1;
WHEN "01" => sortie<=entree2;
WHEN "10" => sortie<=entree3;
WHEN OTHERS => sortie<=entree4;
END CASE;
END PROCESS
END comportementale;

8. Oprateurs standards
. Remarque :

Le VHDL est un langage dvelopp initialement pour la


modlisation et la simulation, par consquent certains oprateurs sont
dconseiller en synthse

. Oprateurs

logiques
Nom

Type oprandes

Signification

And

Et

Nand

Non et

Or

Ou

Nor
Xor

Boolean
Bit ou Bit_vector

Non ou
Ou exculsif

Xnor

Egal

Not

Non

8. Oprateurs standards
. Oprateurs
.

logiques

Exemple 1

SIGNAL a,b,c : bit_vector(0 TO 1);


c <= a AND b;

a(0)
b(0)
Synthse

c(0)

a(0)

c(0)

b(0)

Exemple 2

SIGNAL d, e, f, g : bit;
g <= (d AND e) AND f;

Synthse

d
e
f

8. Oprateurs standards
. Oprateurs relationnels

Nom

Type oprandes

=
/=
<
<=

Entres : Tout scalaire


Sortie : Boolean

>
>=

Exemple

SIGNAL a,b : bit_vector(1 DOWNTO 0);


SIGNAL s : bit;
IF a > b THEN s <= "1";
END IF;

Synthse

Signification
Egal
Non gal
Infrieur
Infrieur ou gal
Suprieur
Suprieur ou gal
a0
a1
!b0
a0
!b1
!b0
a1

!b1

8. Oprateurs standards
. Oprateurs
Nom

de dcalages
Type oprandes

Sll
Srl
Rol

A gauche
Bit_vector

Ror

Signification
A droite
Circulaire gauche

Circulaire droit

Exemple

SIGNAL a,b : BIT_VECTOR(0 TO 3);


...
b <= sll(a,1);
...

Synthse

a0
a1

b0

a2

b1

a3

b2

'0'

b3

clk

8. Oprateurs standards
Oprateurs

arithmtiques

Nom

Type oprandes

Signification

Incrmentation de 1 ou addition

Dcrmentaion de 1 ou soustraction

Integer, Real

Multiplication

Division

abs

Valeur absolue

**

Exponentiel
Integer

mod

Modulo

rem

Autres

Reste

oprateurs
Nom

Type oprandes

Signification

&

Bit, Bit_vector

Concatnation

8. Oprateurs standards
. Exemple

: addition

S = (A + B) + (C - 1)
T = ((A + B) + C - 1)

Synthse

B
C

-1

B
C

-1

Exemple : multiplication

. Opration de multiplication "*" permet d'utiliser le type INTEGER


. Diffrents rsultats de synthse

- Contraintes
- Nature des entres (puissance de 2)
- Bibliothques de composants disponibles (Package standard de synthse)

8. Oprateurs standards
. Oprateur

de concatnation

Nom

Type oprandes

Signification

&

Bit, Bit_vector

Concatnation

ARCHITETCURE ...
SIGNAL A : BIT_VECTOR(2 DOWNTO 0 );
SIGNAL B : BIT;
SIGNAL C : BIT_VECTOR(5 DOWNTO 0 );
BEGIN
C <= not B & "101" & not A(2 DOWNTO 1);

A(1)

C(0)

A(2)

C(1)

VDD
GND
VDD

C(2)
C(3)
C(4)

C(5)

9. Description hirarchique

. Descriptions plus simples


. Rapidit de simulation et donc rapidit de mise au point
. Fiabilit accrue
. Rutilisation de sous-ensembles
. Concepts :
COMPONENT, GENERIC, PACKAGE,
PROCEDURE ET FONCTION
LIBRARY, CONFIGURATION

. Amlioration de la modularit
. Utilisation d'un objet dcrit l'extrieur de la description utilisatrice
- 2 fichiers VHDL distincts
. Compilation distincte :
- le composant
- l'entit utilisatrice de ce composant
. Entit compile : Stockage dans la bibliothque WORK

9.1 Description hirarchique : Component


. Description structurelle
. Utilisation de composants
2 phases : - Dclaration
- Instanciation

Adder1.vhd
ENTITY half_adder IS
PORT( a,b,cin : IN bit;
cout,s : OUT bit);
END half_adder
ARCHITECTURE arch_half OF
half_adder IS
BEGIN
s <= a xor b XOR cin;
cout <= (a AND b) OR (a AND c)
OR (b AND c);
END arch_half;

Adder2.vhd
ENTITY
ENTITYfull_adder
full_adderISIS
PORT(
PORT(
a,b
a,b: IN
: INbit_vector(1
bit_vector(1DOWNTO
DOWNTO0);
0);
cin
cin: IN
: INbit;
bit;
cout
cout: OUT
: OUTbit;
bit;
s s: out
: outbit_vector(1
bit_vector(1DOWNTO
DOWNTO0));
0));
END
ENDfull_adder
full_adder
ARCHITECTURE
ARCHITECTUREarch_full
arch_fullOF
OFfull_adder
full_adderISIS
SIGNAL
SIGNALinter
inter: bit;
: bit;
COMPONENT
COMPONENThalf_adder
half_adderPORT
PORT(a,b,cin
(a,b,cin: IN
: INbit;
bit;
cout,s
cout,s: OUT
: OUTbit);
bit);
END
ENDCOMPONENT;
COMPONENT;
BEGIN
BEGIN
u1:half_adder
u1:half_adderPORT
PORTMAP
MAP
(a(0),b(0),cin,inter,s(0));
(a(0),b(0),cin,inter,s(0));
u2:half_adder
u2:half_adderPORT
PORTMAP
MAP(a(1),b(1),inter,s(1));
(a(1),b(1),inter,s(1));
END
ENDarch_full;
arch_full;

9.2 Description hirarchique : Generic


. Possibilit d'utiliser un mme objet plusieurs fois avec des tailles diffrentes
. Paramtres dfinir lors de l'instanciation
. Possibilit d'instancier des entits/architectures fonctionnellement identiques
mais de taille diffrente

ENTITY adder is

GENERIC (largeur : integer :=8); -- valeur par dfaut

Dclaration d'un
additionneur

PORT(

a,b: IN signed_vector(largeur-1 DOWNTO 0);


s : OUT signed_vector(largeur DOWNTO 0);

END adder;
ARCHITECTURE arch_adder OF adder IS
BEGIN
s <= a + b;
END arch_adder;

Instanciation avec
une largeur de 16 bits

U0 : adder GENERIC MAP (16)

PORT MAP (a,b,s);

9.3 Description hirarchique : Package


. Regroupement d'objets divers :
- types
- sous-types
- constantes
- sous-programmes
- composants,

. Accessibilit ou visibilit : le package se nomme mon_package et a t


compil et stock dans la bibliothque librairie1
LIBRARY librairie1
USE librairie1.mon_package.all

. Possibilit d'utiliser plusieurs packages dans une mme description

. Les standards IEEE 1164 et IEEE 1076.3 sont accessibles via des packages

9.3 Description hirarchique : Package


File

Package

Library Contents:

maxplus2.vhd

maxplus2

altera

megacore.vhd

megacore

altera

std1164.vhd
std1164b.vhd

std_logic_1164

ieee

Standard for describing interconnection data types for


VHDL modeling, and the STD_LOGIC and STD_LOGIC
_VECTOR types.

lpm_pack.vhd

lpm_components

lpm

LPM megafunctions supported by VHDL.

arith.vhd
arithb.vhd

std_logic_arith

ieee

SIGNED and UNSIGNED types, arithmetic and


comparison functions for use with SIGNED and
UNSIGNED types, and the conversion functions
CONV_INTEGER, CONV_SIGNED, and
CONV_UNSIGNED.

signed.vhd
signedb.vhd

std_logic_signed

ieee

Functions that allow MAX+PLUS II to use STD_LOGIC


_VECTOR types as if they are SIGNED types
types as if they are SIGNED types.

unsigned.vhd
unsignedb.vhd

std_logic_unsigned

ieee

Functions that allow MAX+PLUS II to use


STD_LOGIC_VECTOR types as if they are
UNSIGNED types.0

MAX+PLUS II primitives, macrofunctions, and selected


megafunctions supported by VHDL.
Pre-tested megafunctions consisting of several different
design files.

9.3 Description hirarchique : Package

. 2 parties :

. Partie dclarative (spcification)


- Dclarations des lments visibles l'utilisateur du package
. Corps du package (implantation)
- Chaque lment dfini dans la partie dclarative est visible du corps
PACKAGE data_types IS
SUBTYPES address is bit_vector(24 DOWNTO 0);
SUBTYPES data is bit_vector(15 DOWNTO 0);
CONSTANT vector_table_loc : address;
FUNCTION data_to_int(value : data) RETURN integer;
FUNCTION int_to_data(velue:integer) RETURN data;
END data_types;
PACKAGE BODY data_types is
CONSTANT vector_table_loc : address := X"FFFF00";
FUNCTION data_to_int(value : data) RETURN integer IS;

--body of data_to_int

END data_to_int;
FUNCTION int_to_data(velue:integer) RETURN data IS;

--body of int_to_data

END int_to_data;
end data_types;

Вам также может понравиться