Mohammed Bsiss
Langage de programmation
du matériel VHDL
Mohammed Bsiss
Le langage de description matériel
Mohammed Bsiss
Hirstorique
Mohammed Bsiss
Le matériel : Implantation des circuits numériques
Implantation des circuits numériques
Avec des éléments discrets
Avec des microprocesseurs, micro contrôleurs, DSP
Avec des circuits à architecture programmable PAL, GAL, FPGA
Avec des circuits intégrés ASIC
PLD : Programmable Logic Device,
CPLD : Complex PLD, PAL: Programmable Array Logic,
GAL : Generic Array Logic,
FPGA : Field Programmable Gate Array,
ASIC : application-specific integrated circuit
Mohammed Bsiss
Circuit avec des éléments discrets
Implantation des circuits numériques
Circuit figé
Circuit imprimé difficile à modifier
Intégration limitée
Coût élevé
Justifié pour de petits circuits
Mohammed Bsiss
Circuit à fonctionnement programmable
A base des microprocesseurs,
Microcontrôleurs, DSP
En modifiant le programme on
modifie la fonction
Plus souple que les circuits à
éléments discrets
Vitesse limitée (mais qui
augmente sans cesse)
Parallélisme compliqué (mais
faisable)
Intégration encore limitée
Adapté à des opérations séquentielles
Mohammed Bsiss
Circuit à architecture programmable
Une quantité importante de portes logiques
Des matrices d'interconnectionsProgrammables
Modification du fonctionnement sur le circuit (ISP: In-System Programming)
Souplesse assurée
Coût de fabrication faible (pour un nombre limité)
Intégration forte
Adapté à des applications gourmandes en logique
Temps de développement dépend de l'application
Compliqué pour implanter des algorithmes complexes
Mohammed Bsiss
Application Specific Integrated Circuit
Coût très bas uniquement pour de gros tirages
Temps de développement important
Pas de modifications une fois fabriqué
Nécessitant un fondeur pour la fabrication
Mohammed Bsiss
Le matériel : Implantation des circuits numériques
Mohammed Bsiss
Le langage de description matériel & Flot de conception FPGA
Mohammed Bsiss
Principales caractéristiques du langage VHDL
Le langage VHDL couvre tous les niveaux
partant des portes logiques de base
jusqu'aux systèmes complets (place et
routage)
Il s'applique tout aussi bien au niveau
structurel qu'au niveau comportemental,
en passant par le niveau transferts de
registres ou RTL (Register Transfer Logic).
Mohammed Bsiss
Description comportementale
Le circuit est décrit sans tenir compte de la réalisation
concrète sur un composant donné (par exemple, on
ne définit pas de signaux d’horloge, les I/O etc).
On utilise les fonctions de haut niveau d’abstraction
de VHDL.
Ce style de description permet en particulier de
spécifier le circuit sous forme d’un algorithme.
On parle aussi d’une description flot de données est
souvent appelé logiques à transfert de registres (RTL)
Mohammed Bsiss
Description structurelle
La description structurelle de bas niveau
Le circuit est décrit par sa structure, sous forme
d’une liste de composants instanciés et des
interconnexions les reliant. En fait, c’est l’équivalent
littéral d’un schéma représentant l’interconnexion de
portes élémentaires issues d'une bibliothèque.
La description structurelle de haut niveau
Le circuit est découpé en blocs fonctionnels de haut
niveau qui sont reliés entre eux.
Mohammed Bsiss
Description RTL et Behaviour
Description RTL Description Comportementale Behaviour
Mohammed Bsiss
Principales caractéristiques du langage VHDL / Synthèse
La synthèse logique
Transforme le code en une représentation
structurelle de bas niveau (netList) utilisant les
cellules de la bibliothèque de la technologie visée
(fondeur ou FPGA).
Ces modèles sont souvent au format VITAL pour
VHDL (VHDL Initiative Towards VHDL Libraries) pour
permettre la rétroannotation des délais (des portes).
Mohammed Bsiss
Description structurelle / Synthèse
La synthèse physique
Transforme une représentation structurelle de bas
niveau en une description physique du circuit
(layout).
Elle nécessite une étape supplémentaire de
placement et de routage des portes.
Le format d’entrée des outils diffère du VHDL.
Les formats EDIF ou XNF sont souvent utilisés.
On peut alors connaître les délais complets du aux
interconnexions, et les stockés dans un fichier au
format SDF (Standard Delay Format) pour
rétroannoté le code VHDL.
Mohammed Bsiss
Principales caractéristiques du langage VHDL
La portabilité
Le langage VHDL est un standard qui garanties une stabilité, fiabilité etc.
La portabilité signifie dans le cadre des FPGA, qu’il est possible à tout moment de
changer de technologie cible (Altera, Xilinx, etc.) ou bien de famille au sein d’un
même fabricant ;
ou même d’avoir une stratégie de conception qui consiste à réaliser un prototype sur
un circuit programmable (FPGA) avant de basculer sur des circuits spécifiques
(ASIC ou Application Specific Integrated Circuit).
Mohammed Bsiss
Principales caractéristiques du langage VHDL
La lisibilité
La représentation schématique n'est pas toujours d'une grande lisibilité. Il est
difficile de saisir rapidement le fonctionnement d'une machine d'état parmi un
enchevêtrement de registres et de portes logiques.
Une documentation écrite est très souvent nécessaire à la compréhension d'un
schéma.
VHDL apporte par son principe de modularité et d'interconnexion de composants une
grande lisibilité à la compréhension d'un système, sans pour autant supprimer l'utilité
d'un dessin fonctionnel.
Mohammed Bsiss
Principales caractéristiques du langage VHDL
La Modularité
La modularité est une des caractéristiques essentielles de VHDL. Une description
partitionnée en plusieurs sous-ensembles est dite modulaire. VHDL supporte la
conception modulaire et hiérarchique, qui offre de nombreux avantages :
Les descriptions sont plus simples,
les durées de simulation, de synthèse et de mise au point sont raccourcies,
la fiabilité est améliorée : chaque sous-ensemble peut être testé exhaustivement,
les sous-ensembles sont réutilisables
Mohammed Bsiss
Flot de conception
Mohammed Bsiss
Entité et Architecture
Un design quelconque (circuit intégré, carte électronique ou
système complet) est complètement défini par des signaux
d’entrées et de sorties et par la fonction réalisée en interne
(architecture).
Mohammed Bsiss
Entité et Architecture
L'entité définit les interfaces du module numérique avec son environnement.
L’entité est associée au moins à une description de son contenu et de son
implémentation par la partie architecture.
Entité < nom d´entité > is
(generic <Déclaration des paramètres)>;
(port <Déclaration d’entrée/sortie>]
(local Déclaration)
End <nom d´entité>
Mohammed Bsiss
L’architecture d’un module décrit le comportement intérieur. Cette
description peut être de type structurel, flot de données, comportemental
ou une combinaison des trois.
Elle est toujours associée à une entité.
Une même entité peut avoir plusieurs architecture.
, mais, ou moment de l’exécution (simulation ou synthèse), seule une
architecture est utilisée.
Entité et Architecture
Mohammed Bsiss
Entité et Architecture
Mohammed Bsiss
Entité et Architecture
Mohammed Bsiss
Structure du code VHDL La déclaration des connexions
se fait avec une déclaration de
port.
Il décrit des signaux d’entrées et
de sorties ainsi que leur types
logiques.
Chaque signal est spécifié par
un identificateur, un sens et un
type.
Le point-virgule sépare
seulement les éléments
individuels de la liste des
signaux d’une entité. Le dernier
élément n’a pas de virgule.
Mohammed Bsiss
Structure du code VHDL
Mohammed Bsiss
La déclaration d’un signal se fait par un caractère, le premier
caractère doit être une lettre. Le langage VHDL ne fait pas une
distinction entre les majuscules et les minuscules.
Le mode d’un port dans une entité indique le flux de données :
Interconnexions entre les composants instanciés
Mohammed Bsiss
Signaux (fil électrique) peuvent prendre les sens suivants :
Un signal peut être définit comme une entrée ‘IN’
Un signal peut être définit comme une en sortie ‘OUT’
Un signal peut être définit comme une entrée et une sortie `’INOUT’
Un signal peut être définit comme une sortie rétroactive ‘BUFFER’
Interconnexions entre les composants instanciés
Mohammed Bsiss
Le type utilisé pour les signaux d’entrées et de sorties est :
Le type bit pout un signal
Le type sd_logic pour un signal
Le type std_logic_vector pour un bus composé de plusieurs signaux
Example:
Signal a : bit_vector (0 to 3);
Signal b : bit_vector (3 downto 0)
A <= ‘0111’; b <= ‘0101’
Ce que signifie
B(0)=‘1’ / a(0)=‘0’
Interconnexions entre les composants instanciés
Mohammed Bsiss
Signaux et variables Toute donnée traitée par VHDL doit être déclaré comme constant, variable ou signal.
Constant : dont la valeur ne change pas pi: real:= 3.1416;
Variables sont immédiatement modifiables par une affectation (:=) variable stop : boolean; une
variable est lue avant d’être affectée
Signal représente des fils, des bus , des registres. Les signaux modélisent l’entrée et la sortie
d’un composant numérique. Les signaux changent avec le temps et leur modification en
simulation aura lieu à la prochaine itération (retard delta) . Les signaux ne sont pas affectés
quelle que soit la branche
Tout objet est typé
Mohammed Bsiss
Constants Exemple:
constant NUMBER_OF_BITS: integer :=0;
constant PIN_CODE: bit_vector(3 downto 0) :="0110";
Utilisation des constants rend la modification du programme
plus simple.
Mohammed Bsiss
Initialisation optionnelle
variable current_bit: std_logic := ‘0’;
Les variables sont utilisées uniquement dans les process.
Elles sont déclarées dans le process avant le mot clé « begin »
(c’est le begin du process).
Contrairement aux signaux, les variables sont affectées tout de
suite, on n’a pas besoin d’attendre la suspension du process.
Affectation se fait par ":=" et non pas par "<=" :
Variable
Mohammed Bsiss
Initialisation optionnelle, utile en
simulation , pas besoin en synthèse
signal carry_out : std_logic := '0';
Les signaux sont comme les câbles (fils) dans un circuit
Ils sont utilisés pour connecter les éléments concurrents d’un
circuit
L’affectation à un signal peut être retardé (uniquement en
simulation,
carry_out <= '1' after 10ns;
en synthèse le retard est imposé par le circuit !):
Les signaux sont déclarés soit dans l’entité (les ports d’entrée
sortie), soit avant « begin » d’une architecture.
Signal
Mohammed Bsiss
Les signaux interconnectent les éléments concurrents
Variables peuvent être utilisées à l’intérieur des process et ne
sont pas visibles en dehors de process.
Signaux et variables
Mohammed Bsiss
Variables:
Peuvent être utilisées dans le process où ils sont déclarées
Ne peuvent pas apparaitre dans la liste des sensibilités
Ne peuvent pas être retardées
Affectation immédiate
Signaux
Peuvent être utilisés pour relier des process
Peuvent apparaitre dans la liste des sensibilités des process
Peuvent être retardés
Signaux et variables
Mohammed Bsiss
Type de données
Par type de données on comprend le genre des données à transférer. Il est
interdit d'affecter un signal numérique à une valeur entière. Le langage VHDL
offre des types de données prédéfinis, d'une part, tels que integer, real,
enumerated, physical, bit, etc, d´autre part le langage VHDL offre aussi la
possibilité à des types de données personnalisés.
VHDL est un langage très typés.
Tout élément doit être associé à un type
Conversion des types est possible moyennant des fonctions explicites
Il est possible de définir un sous-type qui héritera les contraintes du
type d’origine
Mohammed Bsiss
Type de données
4 catégories de types
Type scalaire : integer, reals, physique, énuméré
Type composite: array, records
Type accès: comme des pointeurs
Type File
Mohammed Bsiss
Type de données : Type scalaire
Énuméré
type T_FEU is (ROUGE, ORANGE, VERT);
signal FEU : T_FEU;
Entier
signal COMPT : integer range 0 to 15;
Flottante
signal MASSE : REAL; -- de -1e38 à 1e38
Physique qui est un entier avec l'unité correspondant
type TIME is range … to … --64 bits
units fs; ps=1000 fs; ns=1000 ps; …
hr=60 min;
end units;
T <= 5 ns;
Mohammed Bsiss
Type de données : Type scalaire Exemple
type integer is range -2147483647 to 2147483647;
type real is range -1.0E308 to 1.0E308;
type time is range -2147483647 to 2147483647
units
fs;
ps = 1000 fs;
ns = 1000 ps;
us = 1000 ns;
ms = 1000 us;
sec = 1000 ms;
min = 60 sec;
hr = 60 min;
end units;
subtype natural is integer range 0 to integer’high;
subtype positive is integer range 1 to integer’high;
Mohammed Bsiss
Type de données : Type énuméré
Les types ci-dessous sont des types prédéfinis
type BOOLEAN is (FALSE, TRUE);
type BIT is ('0' , '1');
type severity_level is (note, warning, error, failure);
type character is (…,’A’,’B’,…);
On peut définir son propre type. On déclare toutes les valeurs qu'un objet de
ce type peut prendre.
type T_FEU is (ROUGE, ORANGE, VERT);
signal FEU : T_FEU;
type ETAT is (INIT, LECT, ECR, ATT);
Mohammed Bsiss
Type de données : Type entier (scalaire)
C'est un type prédéfini
type integer is range -2_147_483_648 to 2_147_483_647
On peut définir un sous type :
subtype nom_de_sous_type is type_de_base contraintes;
Le type Natural existe dans le library standard:
subtype NATURAL is INTEGER range 0 to INTEGER'high
Mohammed Bsiss
Logiques à valeurs multiples (scalaire)
Il existe des signaux logiques à plusieurs états:
0, 1, mais aussi haute impédance, don’t care, non déterminé, …
Le type std_logic définit un type plus que binaire. pour permettre
d’avoir 9 états différents
Utilisation de librairie IEEE.std_logic_1164
exemple
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
signal SORTIE, Q: std_logic;
…
SORTIE <= ‘Z’; -- haute impédance
Q <= ‘1’;
Mohammed Bsiss
Le type std_logic
Le type std_logic :
‘ U ’ non initialisé
‘ X ’ non connu
‘ 0 ’ logique 0
‘ 1 ’ logique 1
‘ Z ’ haute impédance
‘ W ’ non connu
‘ L ’ logique 0
‘ H ’ logique 1
‘ - ’ don’t care
Strong drive
weak drive
Pull up and pulldown
‚H‘
‚L‘
‚1‘
‚0‘
‚0‘
Mohammed Bsiss
Type composite
Deux types sont considérés : tableau et record
Un tableau est un ensemble d’éléments du même type
Pour un ensemble de std_logic, nous avons le type prédéfini
std_logic_vector : on définit la taille et l'ordre des éléments
signal BUS1 : std_logic_vector (7 downto 0); -- type prédéfini
signal REG : std_logic_vector (0 to 31);
Mohammed Bsiss
Accès aux éléments
Déclaration:
A,B: std_logic_vector(15 downto 0);
Accès direct :
A(3) <= ‘1’;
B(15) <= ‘0’;
Accès par tranches
A(15 downto 12) <= "1011";
B(0 to 2) <= "111" ; -- erreur
A(10 downto 2) <= B(15 downto 7);
Mohammed Bsiss
Exemples
SIGNAL a: STD_LOGIC;
SIGNAL b: STD_LOGIC_VECTOR(3 DOWNTO 0);
SIGNAL c: STD_LOGIC_VECTOR(3 DOWNTO 0);
SIGNAL d: STD_LOGIC_VECTOR(7 DOWNTO 0);
SIGNAL e: STD_LOGIC_VECTOR(15 DOWNTO 0);
SIGNAL f: STD_LOGIC_VECTOR(8 DOWNTO 0);
……….
a <= ‘1’;
b <= ”0000”; -- Base Binaire par défaut
c <= B”0000”; -- Base Binaire explicite
d <= ”0110_0111”; -- Utiliser ‘_’ pour augmenter la lisibilité
e <= X”AF67”; -- Base Hexadecimale
f <= O”723”; -- Base Octale
Mohammed Bsiss
Déclaration d’un objet de type array
On peut définir un type tableau d’éléments scalaire
type real_vect is array (natural range <>) of real;
signal temp : real_vect(0 to 4);
Remarque: le type « real_vect » a été créé par vous.
On peut aussi:
type real_vect is array (2 to 7) of real;
signal temp : real_vect;
On peut définir aussi un tableau de composites
type MEMO is array (0 to 1023) of std_logic_vector(7 downto 0);
signal A,B : MEMO;
Mohammed Bsiss
Enregistrement (record)
Ensemble d'éléments de types différents
type NAME is
record
identifier : type_indication;
:
identifier : type_indication;
end record;
type PAQUET is
record
mot_unique : std_logic_vector (7 downto 0);
data : std_logic_vector (23 downto 0);
CRC : std_logic_vector( 5 downto 0);
num : integer range 0 to 1023;
end record;
signal paq_rec : PAQUET;
paq_rec.CRC <= "111000";
Mohammed Bsiss
Opérateurs
En VHDL, les opérateurs booléens sont tels que "not", "and", "nand" "or", et
"xor". Ils n’ont pas besoin de parenthèses par contre, ils sont prises en
niveaux prioritaires. Les operateurs de haute priorité sont exécutés avant
ceux de priorité plus bas. De plus, les opérateurs booléens sont évalués de
gauche à droite.
Mohammed Bsiss
Opérateurs
Top Related