48
2005-2006 Introduction au VHDL - R. WEBER - Polytech'Orleans 1 Polytech'Orléans Filière ESI MODULE Processeurs du traitement du signal Introduction au VHDL FASCICULE DE COURS ANNÉE 2005-2006 SPE 3 Option “ESI” Rodolphe WEBER

Polytech'Orléans

  • Upload
    elvin

  • View
    28

  • Download
    0

Embed Size (px)

DESCRIPTION

Polytech'Orléans. Filière ESI MODULE Processeurs du traitement du signal Introduction au VHDL FASCICULE DE COURS ANNÉE 2005-2006 SPE 3 Option “ESI” Rodolphe WEBER. FORMATION VHDL. Introduction Premiers pas Les Objets VHDL Les Opérateurs VHDL Assignation concurrente - PowerPoint PPT Presentation

Citation preview

Page 1: Polytech'Orléans

2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans

1

Polytech'Orléans

Filière ESI

MODULE

Processeurs du traitement du signalIntroduction au VHDLFASCICULE DE COURSANNÉE 2005-2006SPE 3 Option “ESI”Rodolphe WEBER

Page 2: Polytech'Orléans

2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans

2

FORMATION VHDL

•Introduction•Premiers pas•Les Objets VHDL•Les Opérateurs VHDL•Assignation concurrente•Assignation séquentielle•Les Testbenchs•Les Compléments•Les machines d'états•Les règles de conception

Page 3: Polytech'Orléans

2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans

3

Source: DataquestLogic

StandardLogic

ASIC

ProgrammableLogic Devices(PLDs)

GateArrays

Cell-BasedICs

Full CustomICs

CPLDsSPLDs(PALs) FPGAs

Les circuits logiques programmables

Introduction

Page 4: Polytech'Orléans

2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans

4

Les circuits logiques programmables

•Les CPLD (complex programmable logic devices)•association de plusieurs blocs logiques•chaque bloc logique contient des macro-cellules (qq10 à qq100)•une macro-cellule réalise une fonction logique combinatoire + bascule•matrice de connexions centrale•temps de propagation prévisible•horloge rapide•technologie eeprom ou flash, ISP

Introduction

Page 5: Polytech'Orléans

2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans

5

Introduction

Les circuits logiques programmables

•Les FPGA (Field programmable gate arrays)•matrice de blocs logiques (fonctions logiques, multiplexeurs, LUT)•densité plus grande•réseau d’interconnexions•temps de propagation variable•deux technos SRAM ou antifusible

Page 6: Polytech'Orléans

2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans

6

Exemple d'une single-slice d'un CLB (Configurable Logic Block) d'un Virtex ou Spartan II

Détail extrait de l'architecture d'un FPGA Xilinx

Introduction

F5IN

CINCLKCE

COUT

D QCK

S

REC

D QCK

REC

OG4G3G2G1

Look-UpTable

Carry&

ControlLogic

O

YBY

F4F3F2F1

XBX

Look-UpTable

BYSR

S

Carry&

ControlLogic

SLICE

COUT

D QCK

S

REC

D QCK

REC

OG4G3G2G1

Look-UpTable

Carry&

ControlLogic

O

YBY

F4F3F2F1

XBX

Look-UpTable

F5INBYSR

S

Carry&

ControlLogic

CINCLKCE SLICE

+ éventuellement des fonctions spécialisées implantées en dur :+ entrees/sorties + Blockram+ DLL+ registre à décalage+ multiplieurs+ communications+ ….

Page 7: Polytech'Orléans

2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans

7

Les ASICs (Application Specific Integrated Circuit)

• Conçus pour des applications particulières :

• réduction des coûts pour les grandes productions

• meilleures performances (vitesse, consommation,…)

• confidentialité, durcissement.

• Différentes technologies :

• Pré-caractérisés (standard cells) : à partir d'un wafer nu

• Pré-diffusé (gate array) et mer de portes (sea of gates) : les transistors sont

déjà sur le wafer, il reste à déposer les interconnexions

Introduction

Page 8: Polytech'Orléans

2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans

8

Comparaison ASIC/FPGA

Introduction

Page 9: Polytech'Orléans

2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans

9

Introduction

Rappels d’électronique numérique

Système combinatoire (asynchrone) : [b2,b1,b0]=f(a3,a2,a1,a0)

or

and

xornot

mult

a0

a1

a2

a3

b0

b1

b2

a

b

[b2,

b1,

b0]

[a3,

a2,a

1,a0

]

mémoire

f(a3,a2,a1,a0)≈Fonctionnellement

Vision comportementale

Mais temporellement :

Niveaux logiques

1 2 3

si niveaux logiques alors delay

•Mauvaise performance en temps•Difficultés pour mettre au point•Difficultés pour tester tous les cas

delay

Page 10: Polytech'Orléans

2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans

10

Introduction

Design Synchrone

logiquecombinatoire

logiquecombinatoire

logiquecombinatoire

logiquecombinatoire

clk2

Feed-back combinatoire

Améliore les performances en vitesse Simplifie la vérification fonctionnelle Autorise des analyses statiques du timingAssure une parfaite testabilité Architectures des composants calquent cette vision (cf. architecture virtex)

a b c d e f g

clk1

(Registre = flip-flop = bascule D = Z-1)« Q=D au front de clk1, sinon Q=Q »

registre

registre

registre

D Q

registre

a(n-1)

b(n-1)

c(n)=b(n-1)

d(n)

e(n+1)=d(n))

f(n+1)

g(n+2))

^ ^ ^ ^

Page 11: Polytech'Orléans

2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans

11

Qu'est-ce que le VHDL ?

• VHSIC Hardware Description Language

• VHDL est un langage de modélisation et/ou de synthèse de systèmes électroniques

• C'est un langage normalisé au niveau international, il est sensé être indépendant de

tout compilateur ou simulateur (actuellement version 93, la version 2000 existe mais les

modifications sont spécifiques).

• Il peut cibler des CPLDs, des FPGAs ou des Asics.

• Conception de haut niveau d'abstraction : Modification rapide de la conception,

réduction cycle, réduction risques…

• Meilleur management du projet, développement de grosses conception (structure de

programmation hiérarchisée)

• Adéquation entre le style d'écriture et les compilateurs : les résultats en terme de vitesse

ou de compacité peuvent être notablement différents.

Introduction

Page 12: Polytech'Orléans

2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans

12

Simulation rapideSimulation rapideFaible précisionFaible précision

Flux de conception VHDL et Niveaux d'abstraction

Editeur VHDL

Synthèse VHDL

Placement/Routage

Testbench génération de stimuli

Simulation VHDL :

comportementale

rtl

logique

•fonctionnelle

•structurelle

comportementale

VHDL Synthèse

VHDL Générique

validationtiming

validation

librairies (VITAL,UNISIM…)

Simulation lente(x100)Simulation lente(x100)Grande précisionGrande précision

rtl : Register Transfert level : ensemble de registres (synchro.), interconnectés par de la logique combinatoire

Fic

hie

r d

e co

ntr

ain

te

Introduction

Page 13: Polytech'Orléans

2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans

13

Introduction

Procédure de développement d'un composantprogrammable

Introduction

Page 14: Polytech'Orléans

2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans

14

I ) Structure d’un fichier VHDL

library ieee;use ieee.std_logic_1164.all;

entity essai is port (a,b : in std_logic; c : out integer);end essai;

architecture archi1 of essai isSignal s1, s2 : std_logic;begin..end archi1;

Permet d’accéder à d’autres descriptions définies dans des diverses librairies. Rem. : Plusieurs couples entity/architecture sont possibles au sein d ’un même fichier. Les clauses library et use ne sont pas globales. Leur effet s’arrête dès la déclaration d’une nouvelle entity. D'office il y a Standard et Work

Description de l’interface

Description du comportement de l’entité. Pour une même entité plusieurs architectures sont possibles.

Premiers pas

a

b

cs1

s2

Page 15: Polytech'Orléans

2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans

15

Exemple de projet avec l’outil Xilinx et Modelsim

• Simulation :1. (Ouvrir le webpack)2. Ecrire le composant en VHDL 3. Ecrire le testbench associé en VHDL4. Ecrire le batch (*. do) qui va compiler tous les fichiers dont vous avez besoin pour la simulation5. Ouvrir Modelsim, lancer le fichier batch puis la simulation

• Synthèse :1. Ouvrir le webpack2. Ouvrir ou créer un projet (pas de chemin avec des espaces)3. Insérer tous les fichiers nécessaires dans ce projet 4. (facultatif) Définir un fichier de contraintes (*.ucf)5. Lancer les différentes étapes de la synthèse. Chaque étape peut générer un fichier VHDL pour la

simulation qu'il suffit de préciser ensuite dans le fichier batch de simulation.

D

rst

enen

a

b

rst

c

Intro.vhd

clk

Premiers pas

Page 16: Polytech'Orléans

2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans

16

library ieee;use ieee.std_logic_1164.all;entity intro isport ( rst : in std_logic;

clk : in std_logic;en : in std_logic;a : in std_logic;b : in std_logic;c : out std_logic);

end intro ;

architecture vhd of intro isbegin

process (clk, rst)begin

if rst='1' thenc <= '0';

elsif rising_edge(clk) thenif en='1' then c <= a and b;end if;

end if;end process;

end vhd;

library ieee;use ieee.std_logic_1164.all;

entity intro_tb isend intro_tb;

architecture vhd of intro_tb is

component intro port ( rst : in std_logic;

clk : in std_logic;en : in std_logic;a : in std_logic;b : in std_logic;c : out std_logic);

end component ;

signal rst : std_logic :='1';signal clk : std_logic := '0';signal en : std_logic:= '0';signal a : std_logic:= '0';signal b : std_logic:= '0';signal c : std_logic;constant periode : time := 20 ns;

beginclk <= not clk after periode/2;rst <= '1', '0' after 45 ns;

--generateur pseudoaleatoire pour a et b et du enprocessvariable m_a : std_logic_vector(6 downto 1):= "000001";variable m_b : std_logic_vector(6 downto 1):= "011001";

variable m_en : std_logic_vector(6 downto 1):= "110001";

beginwait until clk='1';a <= m_a(6) after periode/7;m_a(6 downto 2) := m_a(5 downto 1);m_a(1) := m_a(1) xor m_a(6);b <= m_b(6) after periode/5;m_b(6 downto 2) := m_b(5 downto 1);m_b(1) := m_b(1) xor m_b(6);en <= m_en(6) after periode/3;m_en(6 downto 2) := m_en(5 downto 1);m_en(1) := m_en(1) xor m_en(6);end process;

-- instantiation du composant testertest : introport map (rst => rst, en => en, a => a,

b => b, c => c );

end vhd;

intro.vhd

intro_tb.vhd

Exemple de projet avec le webpack et ModelSim

Premiers pas

Page 17: Polytech'Orléans

2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans

17

vlib workvcom -93 intro.vhdvcom -93 intro_tb.vhdvsim intro_tbview structureview signalsview wavedo wave_intro.dorun 1000 ns

intro.do

Exemple de projet avec le webpack et ModelSim

Premiers pas

Page 18: Polytech'Orléans

2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans

18

Le Design Flow Xilinx

HDL

HDL ParsingIdentification of language syntax errors

HDL SynthesisMacro recognition, FSM extraction,

resource sharing

Low Level OptimizationMacro implementation, timing optimization,

LUT mapping, register replication

.NGC .LOG

Constraints

1) SynthesisConversion VHDL => netlist

Une descriptionBien précise =Une fonction connueEt donc optimisée

Machine d’états : très éfficaces pour décrire des process

- Soft- Hard

Premiers pas

Page 19: Polytech'Orléans

2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans

19

Translate

Map

Place & Route

Implement

. . .

.

.

.

Le Design Flow Xilinx

2) Implementation includes many phases• Translate: Merge multiple design

files into a single netlist• Map: Group logical symbols from

the netlist (gates) into physical components (CLBs and IOBs)

• Place & Route: Place components onto the chip, connect them, and extract timing data into reports

3) Download

Constraints

simulation

Modèle vhdl

Fichier binaire => composants

Premiers pas

Page 20: Polytech'Orléans

2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans

20

1ères Règles d’écriture du VHDL

VHDL 87 (obsolète), VHDL 93 ( en cours) , VHDL 2000 (très peu de changement) La simulation comportementale est indépendante du style d'écriture et du compilateur utilisée et

de la cible , pas la synthèseLes commentaires commencent par deux tirets et se prolongent jusqu’à la fin de la ligne

-- ceci est un commentaire

En général, les commandes VHDL se terminent par ';' Aucune distinction entre les minuscules et les majuscules Règles de dénomination :

26 lettres de l ’alphabet + les 10 chiffres + ‘ _ ’ le premier caractère est une lettre interdit : v__hdl, vhdl_ et les noms réservés

Valeurs explicites :entiers : 123, 1_2_3, 2#11# 3, 16#0F# 15, 2#11#e3 24caractère ASCII: ‘ a ’ , ‘ @ ’bit : '0', '1', 'Z', '-',...chaîne de caractère : "composant programmable"bus : "0010", "001-", "0Z1"... X"F6" "11111100"boolean : true, false

Premiers pas

Page 21: Polytech'Orléans

2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans

21

II) Les objets VHDL

Les objets manipulés en VHDL sont :

les ports E/S (PORT)

les signaux (SIGNAL)

les constantes (CONSTANT)

les variables (VARIABLE) (cf. les PROCESS)

les paramètres (GENERIC) (cf. compléments)

Ces objets représentent une valeur

Ils doivent être typés

vhdl standard (integer, bit, bit_vector, boolean, time, array, énumération…)

librairie IEEE Standard 1164 : ieee.std_logic_1164 (std_logic, std_logic_vector,…)

librairie IEEE Numeric_std (signed, unsigned,…)

type défini par l'utilisateur

Les objets VHDL

Page 22: Polytech'Orléans

2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans

22

Les objets VHDL

Ils sont définis dans la section entity

Ils listent les signaux d'interface avec l'extérieur du composant

Il y a 4 modes possibles :

L'affection se fait avec "<=" (sauf pour le mode IN)

Exemple :

Les ports E/S

library ieee;use ieee.std_logic_1164.all;

entity essai is port (a,b : in std_logic; c : out std_logic);end essai;

architecture vhd of essai is begin c <= a and b; end vhd;

a

b

cessai

Page 23: Polytech'Orléans

2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans

23

Les objets VHDL

Les signaux

Ils représentent une équipotentielle (virtuelle ou non) Ils doivent être déclarés avant utilisation Ils peuvent être déclarés :

Dans un package, ils sont alors globaux Dans une entity, ils sont communs à toutes les architectures de l'entity Dans l'architecture, ils sont locaux

L'affectation se fait avec "<=" L'initialisation se fait avec ":=" (attention danger car OK pour la simu mais pas pour la synthèse !)

entity essai is port (a,b : in std_logic; c : out integer); signal rst : std_logic;end essai;

architecture rtl of essai issignal carry : std_logic :='0'; begin : carry <= a and b : end rtl;

package essai is signal clk : std_logic; signal rst : std_logic :='1';end essai;

Page 24: Polytech'Orléans

2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans

24

Les objets VHDL

Les ports E/S vs. les signaux

library ieee;use ieee.std_logic_1164.all;

entity essai is port (a,b : in std_logic; sigout,c : out std_logic);end essai;

architecture vhd of essai is begin sigout <= a and b; c <= sigout or a; -- ne fonctionne pas … end vhd;

a

b sigoutessai

c

sigbuf

La solution : utiliser un signal intermédiaire

architecture vhd of essai issignal sigbuf : std_logic; begin sigbuf <= a and b; sigout <= sigbuf; c <= sigbuf or a; … end vhd;

Page 25: Polytech'Orléans

2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans

25

Les objets VHDL

Les constantes

Ils doivent être déclarés avant utilisation

Ils peuvent être déclarés :

Dans un package, ils sont alors globaux Dans une entity, ils sont communs à toutes les architectures de l'entity

Dans l'architecture, ils sont locaux L'affectation se fait avec ":="

architecture rtl of essai isconstant VCC : std_logic :='1';constant GND : std_logic:='0';constant periode : time := 20 ns; begin : end rtl;

Page 26: Polytech'Orléans

2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans

26

Les objets VHDL

Le typage des objets VHDL

Types scalaires prédéfinis

integer : par défaut 32bits mais limites paramétrables.ex.: signal val integer range 0 to 15 implique que val ne peut prendre que les 16 valeurs de 0 à 15.

Il sera donc codé sur 4 bits

natural : sous-type de integer, limité aux nombres >=0 positive : sous-type de integer, limité aux nombres >0

real : (non synthétisable pour les simus seulement)

time : (non synthétisable pour les simus seulement) x := 20 ns;

Types énumérations prédéfinis

character, string : (ex: 'a', "bonjour")

bit, bit_vector : seulement 0 ou 1 (ex. : '0', '1', "0101") type peu ou pas utilisé

boolean : false ou true

Page 27: Polytech'Orléans

2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans

27

Les objets VHDL

std_logic et std_logic_vector( package std_logic_1164) : 9 états possibles dont 4 synthétisables

0 : bas 1 : haut Z : haute impédance - : indifférent

Ex.: signal s :std_logic; -- représente 1 bit

signal bus : std_logic_vector( 7 downto 0); -- représente un vecteur (un bus) de 8 bits

bus(7) représente le bit de poids fort et bus(0) le bit du poids faible

signal toto : std_logic_vector( 0 to 3); -- représente un vecteur (un bus) de 4 bits

toto(0) représente le bit de poids fort et toto(3) le bit du poids faible

s <= ‘1’; -- notez le simple cote

bus <= "01-10ZZZ" ; -- notez le double cote

bus(1) <= s and bus(2) ;

toto <= bus (7 downto 4); affectation rapide d'un vecteur : bus <= (others => '0') bus <= "00000000"

Le typage des objets VHDL (suite)

Page 28: Polytech'Orléans

2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans

28

Les objets VHDL

Le typage des objets VHDL (suite)

Type personnalisé

type montype is integer range 0 to 31;

subtype int5b is integer range 0 to 31;

signal vala : montype;

signal valb : int5b;

signal valc : integer range 0 to 31;

vala <= valc ; --erreur !!!

valb <=valc ;

type etat is (debut, fin, stop); signal x : etat; -- idéal pour une machine d'états

x<=debut;

type table is array (0 to 3, 0 downto 7) of bit;signal x :table;x(2,4)<='1';

-- voilà comment est défini std_logic_vector dans la librairie 1164type std_logic_vector is array ( natural range <>) of std_logic; signal x : std_logic_vector (5 downto 0);x<="101010";

Tableaux d'éléments

type vs. subtype

-- voilà comment est défini une ROM 16 x 8bitsType romtype is array ( 0 to 15) of std_logic_vector (7 downto 0); constant my_rom : romtype := ( X"FF", X"00",…,X"11");

Page 29: Polytech'Orléans

2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans

29

Les objets VHDL

La Librairie NUMERIC_STD

Elle permet de faire de l'arithmétique cc2 avec des vecteurs : use ieee.numeric_std.all;C'est aussi un vecteur, mais il représente un nombre signé ou non signé

possibilités d'opérations arithmétiques ou relationnelles entre eux, mais aussi avec des integer

Elle définit deux types vecteurs : SIGNED et UNSIGNED :

signal u: unsigned ( 3 downto 0); -- "1010" représentent 10

signal s: signed (3 downto 0); -- "1010" représentent -6

Changement de type :

Typestd_logic_vector

Typesigned

Typeunsigned

Typeinteger

to_signed(i,nbits)

to_integer(s)

to_integer(u)

to_unsigned(i,nbits)

signed(v)

std_logic_vector(s)

unsigned(v)

std_logic_vector(u)

Page 30: Polytech'Orléans

2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans

30

Les opérateurs VHDL

III) Les opérateurs VHDL

Opérateur Description Résultatnot Complément Logique Unaire même typeand ET logique même typeor OU logique même type

nand Non-ET même typenor Non-OU même typexor OU exclusif même typenxor NON-OU exclusif (93) même type

Opérateurs logiques (sur booléens, bits et dérivés)

Opérateurs relationnels (sur types scalaires ou dérivés (signed et unsigned) )

Opérateur Description Résultat= Égalité Booléen/= Inégalité (différent) Booléen< Inférieur Booléen

<= Inférieur ou Égal Booléen> Supérieur Booléen

>= Supérieur ou Égal Booléen

Page 31: Polytech'Orléans

2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans

31

Les opérateurs VHDL

Les opérateurs VHDL (suite)

Opérateurs bits (sur vecteurs de bits et types numériques) :Opérateur Description Résultat

& Concaténation même type, plus large

Opérateurs arithmétiques (sur les types numériques : entiers, signés, non signés, flottant) :

Opérateur Description Résultat + Addition dépend - Soustraction dépend

abs Valeur absolue Même type *, ** Multiplication, puissance dépend

/ Division dépend mod Modulo, sur entiers dépend rem Reste, sur entiers dépend

Opérateurs de décalage (sur les tableaux de bits, std_logic_vector, signed et unsigned) :sll, srl, sla, sra, rol, ror

"01" & "00" = "0100"

Page 32: Polytech'Orléans

2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans

32

Le mode concurrent

IV) Assignation concurrente

La description de la fonctionnalité se fait dans l'architecture

Toutes les déclarations sont exécutées simultanément et en permanence

L'ordre des déclarations dans le code source n'a pas d'importance

Les déclarations possibles sont :

assignation continue : "<="

instantiation d'un composant port map (déclaration préalable du composant par component)

assignation conditionnelle when…else

assignation sélective with…select…when…when

appel d'un process

instruction generate

appel d'une fonction

assert

cf. compléments 5ème année

Page 33: Polytech'Orléans

2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans

33

Assignation continue "<="

Le mode concurrent

library ieee;use ieee.std_logic_1164.all;

entity essai is port (a,b,c : in std_logic; d : out std_logic);end essai;

architecture archi1 of essai issignal e: std_logic;begind <= e and c after 5 ns;e <= a xor b after 6 ns;end archi1;

xor

and

b

a

c

e

d

en simulation uniquement pour simuler des délais

Page 34: Polytech'Orléans

2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans

34

Le mode concurrent

Instantiation d'un composant

Le composant à instantier peut être déclaré de 3 façons :

Toutes les paires entity/architecture sont déclarées dans le même fichier

La paire entity/architecture est déclarée dans un autre fichier

La structure component est déclarée dans une library via un package

architecture rtl of principal is

component mux port (sel :in std_logic; a,b : in std_logic_vector (width-1downto 0); c : out std_logic_vector (width-1 downto 0));end component;

begin . . . end rtl;

package mon_package is

component mux ...end component;end mon_package;

a

b

cessai

a

b

cessai

ina

inb

a

c

outc

outa

comp1

comp2

tutu

Page 35: Polytech'Orléans

2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans

35

Les objets VHDL

Instantiation (suite)

L'instantiation se fait avec "port map(…)"

library ieee;use ieee.std_logic_1164.all;

entity tutu is port (ina,inb,a,c : in std_logic; outc,outa : out std_logic);

end tut;

architecture vhd of tutu is

component essai isport (a,b : in std_logic; c : out std_logic);end component;

begin

comp1 : essai – instantiation par positionport map ( ina,inb,outc);

comp2 : essai – instantiation par nominationport map (b=>a, c=>outa, a=>c);

end vhd;

a

b

cessai

a

b

cessai

ina

inb

a

c

outc

outa

comp1

comp2

tutu

Page 36: Polytech'Orléans

2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans

36

Le mode concurrent

Assignation conditionnelle

Forme générale : signal <= valeur when condition else autre_valeur when autre condition…;

Une seule cible peut être assignée

Les conditions sont sous-entendues exclusives

Mémorisation implicite lorsque toutes les conditions ne sont pas listées

S<= "a" when (sel="00") else "b" when (sel="01") else "c";

A <= B when c='0' else D when e='1' else D when e='1' and c='1' else F;

S<= '1' when sel="00" else '0' when sel="01" (else S);

Page 37: Polytech'Orléans

2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans

37

Le mode concurrent

Assignation sélective

Forme générale : with selecteur select signal <= valeur when valeur_sel, valeur when valeur_sel ...;

Importance de la clause when others qui permet de préciser tous les cas non définis.

Possibilité de regrouper plusieurs valeurs du sélécteur pour une même assignation : " | ".

with selecteur select x<= a when "00", b when "01", c when "10", d when others;

with selecteur select x<= a when "00", b when "01" | "10", d when others;

Page 38: Polytech'Orléans

2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans

38

- Un buffer 3 états- un décodeur d'adresse - un latch avec reset

Le mode concurrent

1ers Exemples

Page 39: Polytech'Orléans

2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans

39

Le mode séquentiel

V) Assignation séquentielle

ATTENTION, ce mode concerne uniquement les function, procedure et les process

Les function et procedure ne manipulent que des variable (cf. complément 5ème année)

les process manipulent variable et signal

Au sein de ces descriptions, les déclarations sont exécutées de manière séquentielle

L'ordre des déclarations est donc important

Les déclarations possibles sont :

assignation continue : "<=" pour les signal et ":=" pour les variable

assignation conditionnelle if…then…elsif ... then ... else …end if;

assignation sélective case… is … when… => … when … =>… end case;

boucles for …. in … loop… end loop;

boucles while … loop … end loop;

Page 40: Polytech'Orléans

2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans

40

Le mode séquentiel

Les process

Dans un process, l'interprétation des instructions est séquentielle MAIS l'ensemble de leur

réalisation est instantanée (le temps extérieur est suspendu) :

les signal sont assignés en sortie du process : '<=' "va prendre la valeur en sortie"

les variable sont assignées immédiatement : ':=' "prend la valeur"

les variables ne sont pas visibles à l'extérieur du process

Lors d'affectation multiple, c'est la dernière qui est prise en compte.

Le process n'est activé que lorsque les signal de sa liste de sensibilité ont subi un changement

(attention à l’interprétation des listes incomplètes)

Absence de liste de sensibilité : le process se réactive en permanence

process(a,b,c, d) variable e,f,g,h : std_logic; begin a <= b; a <= c and a ; d <= a and b ; e := f ; e := g and e; h := e and f ; end process;

process(a) begin c<=b and a; end process;

Process(liste de sensibilité) --Déclaration de constantes et variables Begin --Description séquentielle End process

Règle : tout signal qui modifie un autre signal ou variable doit être dans la liste de sensibilité

Page 41: Polytech'Orléans

2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans

41

process(a,b)-- process (a,b,c) begin if (a=b) then c<='1'; else c<='0'; end if; d<=c; end process;

process(clk,rst) variable éventuelle begin if rst='1' then mise à zeros de c

elsif rising_edge(clk)

then

if en='1' then

description du bloc

combinatoire

end if end if; end process;

process(d,en) begin if en='1' then q<=d; -- else q<=q end if; end process;

assignation conditionnelle

Forme générale : if condition then ….. elsif conditons then ….else…; Mise en oeuvre de process clockés :

if clk='1' and clk'event ou if rising_edge(clk)

if clk='0' and clk'event ou if falling_edge(clk) Absence de liste de sensibilité+ wait until (clk='1') placé en tête de la partie déclarative du process

Attention aux mémorisations implicite et aux listes incomplètes:

Structure d'un process clocké

Le mode séquentiel

logiquecombinatoire b c

registrea

clk

rst, en

Page 42: Polytech'Orléans

2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans

42

Le mode séquentiel

Assignation sélective

Forme générale : case sélecteur is when val_select => instructiuons;... end case; Possibilité de grouper des valeurs de sélections

par 'val1_select | val2_select ' par val1_select to val2_select

Attention aux clauses incomplètes pouvant générer des registres ou des latches :utilisation de la clause when others

process begin wait until (clk='1'); case en is when "00" | "11" => q<='1'; c<='0'; when "10" => q<='0'; c<='1'; when others => null; -- ou when others => q<= ' - '; c <= ' - '; end case; end process;

Page 43: Polytech'Orléans

2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans

43

Le mode séquentiel

Les boucles loop

process begin for i in 0 to 3 loop y(i) <= a(3-i); end loop; end process;

Forme générale :

for i in val_deb to val_fin loop…end loop;

L'indice i de boucle n'a pas besoin d'être déclaré mais il n'est ni visible de l'extérieur ni

modifiable

Les bornes doivent être statiques

while condition loop … end loop;

Page 44: Polytech'Orléans

2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans

44

- Un buffer 3 états- un décodeur d'adresse - une rom synchrone- une bascule D avec reset- un compteur- un registre à décalage

1ers Exemples

Le mode séquentiel

Page 45: Polytech'Orléans

2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans

45

Testbench

VI) Les Testbenchs

Pour générer des stimulis et valider le design vhdl.

la durée s'exprime avec un type physique : fs, ps, ns, us, ms

Possibilité ( nécessité) d'utiliser des ressources VHDL non synthétisable

label : wait on liste_signal until condition for durée; -- dans des process

wait on : attente sur évènements

wait until : attente de conditions (s’il a eu un événement sinon la condition n’est pas testée)

wait for : attente pour un certains temps

wait for 10 ns ;

Vhdl àtester

stimuli

wait on clk until now=1ms ; --attente synchrone d’une durée de simulation

wait until now=1ms ;

wait until clk=‘1’ ; -- attente d’un front montant

constant Period: TIME := 25 NS;...Stimulus: processbeginA <= "0000";B <= "0000";wait for Period;A <= "1111";wait for Period;B <= "1111";wait for Period;wait;end process;

Page 46: Polytech'Orléans

2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans

46

Testbench

Les Testbenchs

signal <= valeur after durée absolue, valeur after durée absolue ,… ;

H <= "00", "01" after 10 NS, "10" after 20 NS;clk<= not clk after 50 ns; -- génération d’une horloge à 10 MHz

Page 47: Polytech'Orléans

2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans

47

Complément

VII) Les Compléments

Les Paramètres Génériques

Les Fonctions

Les Procédures

Les Packages

La boucle Generate

Package Textio

Les Attributs

Les assertions

Les Configurations

cf. compléments 5ème année

Page 48: Polytech'Orléans

2005-2006 Introduction au VHDL - R.WEBER - Polytech'Orleans

48

Les paramètres génériques

Ils sont déclarés dans l'entityIls permettent de paramétrer des composantsune valeur par défaut peut être définie (":=")l'instanciation se fait grâce à "generic map(…)"

entity mux is generic (width : integer :=8); port (sel :in std_logic; a,b : in std_logic_vector (width-1 downto 0); c : out std_logic_vector (width-1 downto 0));end mux;

architecture behav of mux isbeginc<=a when sel='0' else b;end behav;

comp1 : mux generic map ( 4)port map(sel=>seldata, a=> dataa, b=> datab, c=>data);comp2 : mux port map (sel=>seladr, a=>adra, b=> adrb, c=>adr);

Complément