Sie sind auf Seite 1von 30

VHDL - Logique

programmable
Circuits programmables et introduction aux langages HDL
1.Les circuits électroniques numériques
1.1. Les types de circuits
1.2. Principaux fabricants de circuits FPGA
Depuis 1982…

• XILINX
• ALTERA
• LATTICE
• ACTEL

1.3. Propriétés des circuits logiques programmables CPLD et FPGA


1.4. Architecture des FPGA
1.4.1. Généralités
Flot de conception
2. VHDL : Very High Speed Integrated Circuit
Hardware Description Language
Le langage est capable de décrire:

▪ Des comportements Concurrents (//)


▪ Des comportements séquentiels

2.1. Structure du VHDL

Il existe 5 catégories d’unité de conception

Circuit •L’entité (mot clé entity) : Décrit un système vu extérieur (boîte noire)
principal •L’architecture (mot clé architecture) : Décrit l’intérieur (le fonctionnement) d’une
boîte noire.

•La configuration (mot clé configuration)

Package •La déclaration de paquetage (mot clé package)


(librairie) •Le corps de paquetage (mot clé package body)
Données traitées par VHDL

Toute donnée traitée par VHDL doit être déclarée comme:

• Constantes:

• Variables: valeur modifiable immédiatement par une affectation (:=)

• 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.
VHDL est un langage fortement typé: 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é:
array
record
• pointeur:
acces
• I/O:
file
On peut également créer de nouveaux types, en fonction des types prédéfinis.
Par exemple:

Pour la synthèse, les types de données les plus utilisés sont:

✓ std_logic, pour les données à un bit,


✓ std_logic_vector, pour les bus

Ces types ne sont pas prédéfinis: pour les utiliser, il faut déclarer le paquet (package) std_logic_1164,
qui fait partie de la bibliothèque (library) IEEE:
Une donnée de type std_logic possède une valeur parmi neuf possibles:

• 'U' uninitialized
• 'X' forcing unknown
• '0' forcing 0
• '1' forcing 1
• 'Z' high impedance
• 'W' weak unknown
• 'L' weak 0 (pull-down)
• 'H' weak 1 (pull-up)
• '-' don't care

Pour une affectation, les valeurs utilisées sont: 'X', '0', '1', 'Z'
Opérateurs

Opérations logiques:
and or nand nor xor xnor
Opérations de comparaison:
= /= < <= > >=
Opérations de décalage :
sll srl sla sra rol ror
Opérations d'addition:
+-&
Opérations de signe:
+-
Opérations de multiplication:
* / mod rem
Opérations diverses:
not abs **
Signaux

Pour connecter les différents composants d'un système, VHDL utilise les signaux (signal),
équivalent des fils ou câbles d'interconnexion dans le monde réel.
2.2.Minimum design en VHDL
Exemple simple: entité
Entité décortiquée
Exemple simple: architecture

Il existe deux parties dans


l’architecture

- Avant begin : zone des déclarations


- Après begin : la partie "exécutable".
2.3. Principe de concurrence

Dans une architecture, toutes les


instructions sont exécutées en
parallèle : elles sont concurrentes et
non pas « séquentielles ».

La partie après "begin" dans une


architecture est une zone concurrente.
Décrire des délais

Délai dans les affectations

▪ Une affectation sera déclenchée quand un évènement arrive.


▪ Un évènement est un changement de valeur d’un signal
▪ Pour l’instruction ci-contre, cet évènement est le passage de A
de 0 à 1.
▪ Cependant, l’affectation se concrétise après 2 ns.
TRES IMPORTANT
2.4. Hiérarchie in VHDL

Un bloc conçu, testé, et fonctionnel peut être réutilisé. On l’appelle component.

Dans un design qui utilise ce component


- On déclare entité du component
- On instancie un exemplaire de ce component dans la zone concurrente
- On procède au câblage de ce component

Exemple : multiplexeur 2 voies

Déclaration du component
3.Logique combinatoire & Logique séquentielle

En VHDL, il existe :

Logique combinatoire c-à-d des Instructions concurrentes


• à écrire dans la zone concurrente de l’architecture
• elles sont exécutées simultanément
• l’ordre de l’écriture n’a pas d’importance

Logique séquentielle c-à-d des Instruction séquentielles


• à écrire dans les « process »
• elles sont exécutées dans l’ordre
3.1. Instructions concurrentes
3.1.1. Instruction concurrente conditionnelle: when – else (équivalent de if then-else dans d’autre langages)

3.1.2. Instruction concurrente sélective: La condition se fait sur un seul objet. Le mot clé others doit être utilisé pour
couvrir les cas non spécifiés

L’affectation sélective produit très souvent un circuit plus simple (par rapport à l’affectation conditionnelle) parce qu’il n’y a
pas de priorité dans différentes branches. De plus, la condition est à tester sur un seul objet.
3.2. Instructions séquentielles

3.2.1. La notion de processus

Process est une instruction concurrente :


donc à écrire dans une architecture (après begin),

Les différents process d'une architecture s'exécutent tous en parallèle

Process génère une zone séquentielle

3.2.2. Syntaxe de process

Un process s'exécute (se réveille) quand un des signaux de


la liste de sensibilité change de valeur.

Un fois on arrive à la fin du process, celui-ci rendort jusqu’à


l’arrivée d’un évènement sur un des signaux de sa liste de
sensibilité
Les instructions séquentielles s'écrivent uniquement dans une zone séquentielle: après le « begin » d’un
process.

Instructions wait Instructions conditionnelle Instruction sélective


Affectation séquentielle

Attention : affectation d’une valeur à un signal dans un process n’est pas immédiate !

L’affectation se réalise quand le process est suspendu, ou quand on arrive à la fin du process.

Dans un process tous les signaux sont constants, ils sont actualisés quand le process est suspendu (end de
process, ou wait)

Exemple: