Page Personnelle de Vincent Kerhoas
Vincent Kerhoas
Enseignant du Supérieur
Professeur Agrégé
Page Personnelle de Vincent Kerhoas

Structure d’une Description VHDL

Back                  << Index >>

Entité / Architecture

Cliquer sur la figure ci-dessous:

REMARQUE : Les signaux d’E/S peuvent être :

L’affectation de base est :
signal <= valeur when condition else autre_valeur

Un Langage Parallèle

L’ordre des instructions n’a aucune importance en VHDL.
En effet il s’agit de DECRIRE un circuit numérique, avec des composants fonctionnant tous simultanément.
On peut abusivement dire que “tout s’‘exécute’ en même temps”.

Ainsi Les deux syntaxes suivantes produiront le même composant :

REMARQUE : Le signal interne doit être déclaré avant le begin de l’architecture et n’est visible que dans l’architecture.

Notion de Process

Process Synchrone

Pour décrire un composant synchrone, il faut réagir sur un moment précis qui est un front.

En VHDL un process permet d’exécuter un bout de code sur un changement d’un signal.

Caractéristiques d’un Process :

Par conséquent il ne faut pas oublier qu’un signal correspondra physiquement à un fil. On ne peut pas utiliser un signal comme une variable dont l’affectation serait immédiate.

Process Combinatoire

On peut utiliser un process pour décrire un composant combinatoire, à condition de lister toutes les entrées du composant dans la liste de sensibilité du process.

Les Types

Types de Base (définis dans le paquetage std_logic_1164) :

Pour faire un calcul, on utilise des types définis dans le packetage numeric_std :

Il s’agit de sous-types de std_logic_vector pour lesquels les opérations arithmétiques ont été définies (+,-,*,…)

On peut écrire (si a est signed ou unsigned de 4 bits) :

a <= a + “0001”

a <= a + 1 –> ici 1 est de type integer, numeric_std définit “+”(unsigned,integer)

On ne peut pas écrire :

a <= a + ‘1’ –> ‘1’ est un std_logic, l’addition doit gérer des opérandes de même taille.

La conversion est implicite (cast) :

signal a : std_logic_vector(7 downto 0);

signal b : unsigned(7 downto 0);

Affectation :

a <= std_logic_vector(b);

b <= unsigned(a);

Toutes les descriptions des labos sont réalisables avec les paquetages std_logic_1164 et numeric_std et les types évoqués ci-dessus.
Les autres bibliothèques sont à proscrire (génération de conflits et pas forcément synthétisables)

Back                  << Index >>