introduction au langage vhdl pour la synthese - Subatech

166 downloads 139 Views 246KB Size Report
Le VHDL est un langage de description matériel, ce n'est absolument un langage .... A la suite de la déclaration de l'architecture, on définira les déclarations ...
INTRODUCTION AU LANGAGE VHDL POUR LA SYNTHESE I.

CE QU’EST LE VHDL....................................................................................................................... 2 1.

PRESENTATION .................................................................................................................................. 2

2.

LE FLOT DE CONCEPTION.................................................................................................................... 3

II.

INTRODUCTION AU LANGAGE ................................................................................................... 4 1.

LES EN-TETES DE FICHIER ................................................................................................................... 4

2.

L’ENTITE (ENTITY) ............................................................................................................................. 5

3.

L’ARCHITECTURE............................................................................................................................... 5

4.

LE PROCESS ....................................................................................................................................... 6

5.

LES SIGNAUX LES PLUS UTILISEES ...................................................................................................... 7 5.1

Librairie standard : ...................................................................................................................... 7

5.2

Librairie std_logic_1164 .............................................................................................................. 7

5.3

Librairie std_logic_arith............................................................................................................... 8

5.4

Agrégats et concaténation sur les vecteurs................................................................................... 8

5.5

Attributs des signaux et vecteurs................................................................................................... 9

6. III.

REGLES D’ECRITURE ........................................................................................................................ 10 L’ECRITURE SEQUENTIELLE ET PARALLELE .................................................................... 11

1.

L’ECRITURE SEQUENTIELLE ............................................................................................................. 11 1.1

If.................................................................................................................................................. 11

1.2

Case ............................................................................................................................................ 12

1.3

For Loop ..................................................................................................................................... 12

2.

ASSIGNATION CONCURRENTE .......................................................................................................... 12 2.1

Ecriture équivalente a un if hors process ................................................................................... 12

2.2

Ecriture équivalente a un case hors process............................................................................... 13

3. IV.

VARIABLES VS SIGNAUX .................................................................................................................. 13 PROCESS CLOCKE ........................................................................................................................ 14

1.

ECRITURE D’UN PROCESS CLOCKE .................................................................................................... 14

1.1

Reset synchrone .......................................................................................................................... 14

1.2

Reset asynchrone ........................................................................................................................ 17

TP CAO Electronique Numérique - 2005

Romain Berny

I. Ce qu’est le VHDL 1. Présentation Le Vhic Hardware Description Language (VHIC = Very High Speed Integrated Circuit) a été normalisé en 1987 par l’IEEE, sous la norme IEEE 1076-87. Une importante évolution est parue en 1993, sous la norme IEEE 1076-93. C’est cette version du langage qui est majoritairement supportée par les outils du marché. D’autre révision de la norme sont parues depuis, mais ce sont des évolutions « mineures », et pas forcement supportés par les logiciels. Le VHDL est un langage de description matériel, ce n’est absolument un langage « software » comme le C ou le Java. A partir de ce langage, on peut définir un système par une structure hiérarchique de fonctions, par une structure matérielle, en encore par une modélisation temporelle (même si elle n’est pas utilisable pour faire du code synthétisable). Ce langage permet d’aller d’un niveau d’abstraction très élevée, par une description algorithmique, jusqu' à un niveau proche du matériel, où l’on décrit le système par un ensemble de porte logique et d’interconnexion (« gate level »). Entre les deux, se trouve le niveau RTL (Register Transfer Level), qui permet de définir le système par une architecture de type machine de Moore ou Mealy. C’est le niveau RTL que l’on utilise le plus quand on fait de la synthèse. En effet, le niveau algorithmique n’est pas forcement synthétisable, il est plutôt utilisé pour faire du testbench ou de la simulation. Le niveau « gate level » est souvent lourd à décrire quand le système devient un tant soit peu complexe. L’avantage du code RTL est qu’il est indépendant des technologies utilisées dans la cible à programmer, alors qu’au niveau « gate », il faut prendre en compte la techno du circuit cible, car tout n’est pas permis.

TP CAO Electronique Numérique - 2005

Romain Berny

2. Le flot de conception

fig 1 :

Flot de conception

Le code à synthétiser sera généralement écrit dans un niveau RTL. Parallèlement, un banc de test doit être écrit. Ce banc de test, écrit sous la forme d’une modélisation de l’environnement, servira à appliquer les stimuli d’entrée et à extraire les résultats, pour ensuite permettre la validation du système. Une fois le code validée, on le synthétise grâce aux librairies du fabriquant, afin de générer la « netlist » et le code de type « porte ». Ensuite, on fait le Placement/routage du circuit (ou le layout s’il s’agit d’un ASIC). Une fois le circuit routé, on en extrait les temps de propagation et l’on re-simule le système, pour vérifier que le placement routage est suffisamment optimisé pour respecter les contraintes de temps. Si les contraintes de temps ne sont pas respectées, on relance un placement routage pour tenter une optimisation. Ce processus est itératif, et sera renouvelé un nombre de fois suffisant pour atteindre les contraintes. Dans le cas où les contraintes ne sont pas atteintes, le synthétiseur déclare alors qu’il ne peut router le circuit de façon a tenir les contraintes, et donne les chemins critiques.

TP CAO Electronique Numérique - 2005

Romain Berny

II. Introduction au langage 1. les en-têtes de fichier La première chose à faire est de définir les librairies qui seront utilisées dans le code. Library IEEE ; use IEEE.std_logic_1164.all; use IEEE.std_logic_arith.all;

Cela se fait de la manière suivante :

Tout d’abord, la librairie principale (en générale, IEEE). ensuite, le mot clé « use », qui indique quelle package de la librairie nous allons utiliser. Après cela, le nom du package. Enfin, le .all signifie que l’on souhaite utiliser tout ce qui se trouve dans ce package. Lorsque le nom de la librairie est précédé de IEEE., cela signifie que c’est une librairie qui est définie dans la norme IEEE, et que l’on retrouvera donc normalement dans tout logiciel. A l’inverse, il faut se méfier des librairies qui ne sont pas IEEE, car elles sont en générale spécifiques à un logiciel. Les librairies IEEE principales sont : •

IEEE.standard



IEEE.std_logic_1164



IEEE.numeric_std



IEEE.std_logic_arith

Attention, il ne faut pas utiliser les librairies numeric_std et std_logic_arith en même temps : la librairie std_logic_arith est en fait une version améliorée de la numeric_std, développé par synopsys, et qui a été ensuite incorporé dans la norme IEEE. Le fait d’utiliser les 2 librairies en même temps causera un conflit lors de l’utilisation de certaines fonctions.

TP CAO Electronique Numérique - 2005

Romain Berny

2. l’entité (entity) Un design est tout d’abord défini par une déclaration d’entité. Cette entité permet de décrire l’interface avec l’environnement extérieur. On y retrouve donc un nom d’entité, et la liste des signaux, avec leurs caractéristiques (nom, mode, type). Elle est définie de la manière suivante : Entity HALFADD is Port ( A, B : in std_logic ; SUM, CARRY : out std_logic ); End HALFADD;

Un signal d’entrée/sortie est donc défini par : -

son nom

-

son mode : in, out, inout

-

son type : std_logic, std_logic_vector(x downto x) (on verra les différents types par la suite)

3. L’architecture Une fois l’entité définie, il faut décrire son fonctionnement, c’est ce que l’on fait avec l’architecture. Architecture RTL of HALFADD is -- Déclarations préalables Begin SUM