slide1 n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Polytech'Orléans PowerPoint Presentation
Download Presentation
Polytech'Orléans

Loading in 2 Seconds...

play fullscreen
1 / 48

Polytech'Orléans - PowerPoint PPT Presentation


  • 158 Views
  • Uploaded on

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

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Polytech'Orléans' - elvin


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
slide1

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

Introduction au VHDL - R.WEBER - Polytech'Orleans

slide2

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

Introduction au VHDL - R.WEBER - Polytech'Orleans

slide3

Introduction

Logic

Standard

Logic

ASIC

CPLDs

Les circuits logiques programmables

Source: Dataquest

Programmable

Logic Devices

(PLDs)

Gate

Arrays

Cell-Based

ICs

Full Custom

ICs

SPLDs

(PALs)

FPGAs

Introduction au VHDL - R.WEBER - Polytech'Orleans

slide4

Introduction

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 au VHDL - R.WEBER - Polytech'Orleans

slide5

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

Introduction au VHDL - R.WEBER - Polytech'Orleans

slide6

Introduction

COUT

COUT

YB

YB

Carry

&

Control

Logic

Carry

&

Control

Logic

Look-Up

Table

Look-Up

Table

Y

Y

G4

G3

G2

G1

G4

G3

G2

G1

S

S

D

D

Q

Q

O

O

CK

CK

EC

EC

R

R

F5IN

F5IN

BY

SR

BY

SR

XB

XB

Look-Up

Table

Carry

&

Control

Logic

Look-Up

Table

Carry

&

Control

Logic

X

X

S

S

F4

F3

F2

F1

F4

F3

F2

F1

D

D

Q

Q

O

O

CK

CK

EC

EC

R

R

CIN

CLK

CE

CIN

CLK

CE

SLICE

SLICE

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

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

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

Introduction au VHDL - R.WEBER - Polytech'Orleans

slide7

Introduction

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 au VHDL - R.WEBER - Polytech'Orleans

slide8

Introduction

Comparaison ASIC/FPGA

Introduction au VHDL - R.WEBER - Polytech'Orleans

slide9

Introduction

mémoire

a

Fonctionnellement

Vision comportementale

f(a3,a2,a1,a0)

b

[b2,b1,b0]

[a3,a2,a1,a0]

Niveaux

logiques

1

2

3

delay

Rappels d’électronique numérique

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

a0

b0

and

a1

or

b1

mult

a2

xor

b2

a3

not

Mais temporellement :

si niveaux logiques 

alors delay

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

Introduction au VHDL - R.WEBER - Polytech'Orleans

slide10

Introduction

(Registre = flip-flop = bascule D = Z-1)

« Q=D au front de clk1, sinon Q=Q »

Feed-back combinatoire

D

Q

registre

registre

registre

registre

clk1

logique

combinatoire

a(n-1)

b(n-1)

clk2

c(n)=b(n-1)

d(n)

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

f(n+1)

^

^

^

^

g(n+2))

Design Synchrone

logique

combinatoire

logique

combinatoire

logique

combinatoire

a

b

c

d

e

f

g

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

Introduction au VHDL - R.WEBER - Polytech'Orleans

slide11

Introduction

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 estsensé ê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 au VHDL - R.WEBER - Polytech'Orleans

slide12

Introduction

Flux de conception VHDL et Niveaux d'abstraction

Simulation rapide

Faible précision

Simulation VHDL :

VHDL Synthèse

comportementale

validation

  • fonctionnelle

Editeur VHDL

rtl

Synthèse VHDL

  • structurelle

validation

timing

logique

Fichier de contrainte

Placement/Routage

Simulation lente(x100)

Grande précision

librairies (VITAL,UNISIM…)

VHDL Générique

Testbench

génération de stimuli

comportementale

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

Introduction au VHDL - R.WEBER - Polytech'Orleans

slide13

Introduction

Introduction

Procédure de développement d'un composant

programmable

Introduction au VHDL - R.WEBER - Polytech'Orleans

slide14

Premiers pas

I ) Structure d’un fichier VHDL

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

library ieee;

use ieee.std_logic_1164.all;

entity essai is

port (a,b : instd_logic;

c : out integer);

end essai;

architecture archi1 of essai is

Signal s1, s2 : std_logic;

begin

.

.

end archi1;

Description de l’interface

a

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

c

s1

s2

b

Introduction au VHDL - R.WEBER - Polytech'Orleans

slide15

Premiers pas

Exemple de projet avec l’outil Xilinx et Modelsim

  • Simulation :
  • (Ouvrir le webpack)
  • Ecrire le composant en VHDL
  • Ecrire le testbench associé en VHDL
  • Ecrire le batch (*. do) qui va compiler tous les fichiers dont vous avez besoin pour la simulation
  • Ouvrir Modelsim, lancer le fichier batch puis la simulation
  • Synthèse :
  • Ouvrir le webpack
  • Ouvrir ou créer un projet (pas de chemin avec des espaces)
  • Insérer tous les fichiers nécessaires dans ce projet
  • (facultatif) Définir un fichier de contraintes (*.ucf)
  • 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.

rst

a

c

rst

D

b

clk

en

en

Intro.vhd

Introduction au VHDL - R.WEBER - Polytech'Orleans

slide16

Premiers pas

Exemple de projet avec le webpack et ModelSim

intro_tb.vhd

intro.vhd

library ieee;

use ieee.std_logic_1164.all;

entity intro_tb is

end 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;

begin

clk <= not clk after periode/2;

rst <= '1', '0' after 45 ns;

--generateur pseudoaleatoire pour a et b et du en

process

variable 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";

begin

wait 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 tester

test : intro

port map (rst => rst, en => en, a => a,

b => b, c => c );

end vhd;

library ieee;

use ieee.std_logic_1164.all;

entity intro is

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 intro ;

architecture vhd of intro is

begin

process (clk, rst)

begin

if rst='1' then

c <= '0';

elsif rising_edge(clk) then

if en='1' then

c <= a and b;

end if;

end if;

end process;

end vhd;

Introduction au VHDL - R.WEBER - Polytech'Orleans

slide17

Premiers pas

Exemple de projet avec le webpack et ModelSim

intro.do

vlib work

vcom -93 intro.vhd

vcom -93 intro_tb.vhd

vsim intro_tb

view structure

view signals

view wave

do wave_intro.do

run 1000 ns

Introduction au VHDL - R.WEBER - Polytech'Orleans

slide18

Premiers pas

Le Design Flow Xilinx

1) Synthesis

Conversion VHDL => netlist

HDL

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

HDL ParsingIdentification of language syntax errors

Une description

Bien précise =

Une fonction connue

Et donc optimisée

HDL SynthesisMacro recognition, FSM extraction,resource sharing

  • Soft
  • Hard

Low Level OptimizationMacro implementation, timing optimization,LUT mapping, register replication

Constraints

.NGC

.LOG

Introduction au VHDL - R.WEBER - Polytech'Orleans

slide19

Premiers pas

Le Design Flow Xilinx

Implement

  • 2) Implementationincludes 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

. . .

Constraints

Translate

Map

simulation

Place & Route

Modèle vhdl

.

.

.

3)Download

Fichier binaire => composants

Introduction au VHDL - R.WEBER - Polytech'Orleans

slide20

Premiers pas

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èse
  • Les 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  24
    • caractère ASCII: ‘ a ’ , ‘ @ ’
    • bit : '0', '1', 'Z', '-',...
    • chaîne de caractère : "composant programmable"
    • bus : "0010", "001-", "0Z1"... X"F6"  "11111100"
    • boolean : true, false

Introduction au VHDL - R.WEBER - Polytech'Orleans

slide21

Les objets VHDL

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

Introduction au VHDL - R.WEBER - Polytech'Orleans

slide22

Les objets VHDL

Les ports E/S

Exemple :

  • 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)

library ieee;

use ieee.std_logic_1164.all;

entity essai is

port (a,b : instd_logic;

c : out std_logic);

end essai;

architecture vhd of essai is

begin

c <= a and b;

end vhd;

essai

a

c

b

Introduction au VHDL - R.WEBER - Polytech'Orleans

slide23

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 !)

architecture rtl of essai is

signal carry : std_logic :='0';

begin

:

carry <= a and b

:

end rtl;

entity essai is

port (a,b : instd_logic;

c : out integer);

signal rst : std_logic;

end essai;

package essai is

signal clk : std_logic;

signal rst : std_logic :='1';

end essai;

Introduction au VHDL - R.WEBER - Polytech'Orleans

slide24

Les objets VHDL

architecture vhd of essai is

signal sigbuf : std_logic;

begin

sigbuf <= a and b;

sigout <= sigbuf;

c <= sigbuf or a;

end vhd;

La solution : utiliser un signal intermédiaire

Les ports E/S vs. les signaux

essai

b

sigout

library ieee;

use ieee.std_logic_1164.all;

entity essai is

port (a,b : instd_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

sigbuf

c

Introduction au VHDL - R.WEBER - Polytech'Orleans

slide25

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 is

constant VCC : std_logic :='1';

constant GND : std_logic:='0';

constant periode : time := 20 ns;

begin

:

end rtl;

Introduction au VHDL - R.WEBER - Polytech'Orleans

slide26

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

Introduction au VHDL - R.WEBER - Polytech'Orleans

slide27

Les objets VHDL

Le typage des objets VHDL (suite)

  • 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"

Introduction au VHDL - R.WEBER - Polytech'Orleans

slide28

Les objets VHDL

Le typage des objets VHDL (suite)

  • Type personnalisé
  • Tableaux d'éléments

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 1164

type std_logic_vector isarray ( natural range <>) of std_logic; signal x : std_logic_vector (5 downto 0);

x<="101010";

  • type vs. subtype

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 ;

-- voilà comment est défini une ROM 16 x 8bits

Type romtype isarray ( 0 to 15) of std_logic_vector (7 downto 0); constant my_rom : romtype := ( X"FF", X"00",…,X"11");

Introduction au VHDL - R.WEBER - Polytech'Orleans

slide29

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 :

to_integer(s)

Type

signed

std_logic_vector(s)

to_signed(i,nbits)

signed(v)

Type

std_logic_vector

Type

integer

unsigned(v)

to_unsigned(i,nbits)

Type

unsigned

std_logic_vector(u)

to_integer(u)

Introduction au VHDL - R.WEBER - Polytech'Orleans

slide30

Les opérateurs VHDL

III) Les opérateurs VHDL

  • Opérateurs logiques (sur booléens, bits et dérivés)
  • Opérateurs relationnels (sur types scalaires ou dérivés (signed et unsigned) )

Introduction au VHDL - R.WEBER - Polytech'Orleans

slide31

Les opérateurs VHDL

Les opérateurs VHDL (suite)

  • Opérateurs bits (sur vecteurs de bits et types numériques) :

"01" & "00" = "0100"

  • Opérateurs arithmétiques (sur les types numériques : entiers, signés, non signés, flottant) :
  • Opérateurs de décalage (sur les tableaux de bits, std_logic_vector, signed et unsigned) :

sll, srl, sla, sra, rol, ror

Introduction au VHDL - R.WEBER - Polytech'Orleans

slide32

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

Introduction au VHDL - R.WEBER - Polytech'Orleans

slide33

Le mode concurrent

c

and

d

e

b

xor

a

Assignation continue "<="

library ieee;

use ieee.std_logic_1164.all;

entity essai is

port (a,b,c : instd_logic;

d : out std_logic);

end essai;

architecture archi1 of essai is

signal e: std_logic;

begin

d <= e and c after 5 ns;

e <= a xor b after 6 ns;

end archi1;

en simulation uniquement pour simuler des délais

Introduction au VHDL - R.WEBER - Polytech'Orleans

slide34

Le mode concurrent

Instantiation d'un composant

tutu

essai

ina

a

c

outc

inb

b

  • 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

comp1

essai

c

a

c

outa

a

b

architecture rtl of principal is

component mux

port (sel :in std_logic; a,b : instd_logic_vector (width-1downto 0);

c : out std_logic_vector (width-1 downto 0));

end component;

begin . . . end rtl;

comp2

package mon_package is

component mux ...end component;

end mon_package;

Introduction au VHDL - R.WEBER - Polytech'Orleans

slide35

Les objets VHDL

Instantiation (suite)

  • library ieee;
  • use ieee.std_logic_1164.all;
  • entity tutu is
    • port (ina,inb,a,c : instd_logic;
    • outc,outa : out std_logic);
  • end tut;
  • architecture vhd of tutu is
    • component essai is
    • port (a,b : instd_logic;
    • c : out std_logic);
    • end component;
  • begin
    • comp1 : essai– instantiation par position
    • port map ( ina,inb,outc);
    • comp2 : essai – instantiation par nomination
    • port map (b=>a, c=>outa, a=>c);
  • end vhd;
  • L'instantiation se fait avec "port map(…)"

tutu

essai

ina

a

c

outc

inb

b

comp1

essai

c

a

c

outa

a

b

comp2

Introduction au VHDL - R.WEBER - Polytech'Orleans

slide36

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);

Introduction au VHDL - R.WEBER - Polytech'Orleans

slide37

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;

Introduction au VHDL - R.WEBER - Polytech'Orleans

slide38

Le mode concurrent

1ers Exemples

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

Introduction au VHDL - R.WEBER - Polytech'Orleans

slide39

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;

Introduction au VHDL - R.WEBER - Polytech'Orleans

slide40

Le mode séquentiel

Process(liste de sensibilité)

--Déclaration de constantes et variables

Begin

--Description séquentielle

End process

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;

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

Introduction au VHDL - R.WEBER - Polytech'Orleans

slide41

Le mode séquentiel

registre

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é

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(a,b)

-- process (a,b,c)

begin

if (a=b) then

c<='1';

else

c<='0';

end if;

d<=c;

end process;

process(d,en)

begin

if en='1' then q<=d;

-- else q<=q

end if;

end process;

rst, en

logique

combinatoire

b

c

a

Introduction au VHDL - R.WEBER - Polytech'Orleans

clk

slide42

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;

Introduction au VHDL - R.WEBER - Polytech'Orleans

slide43

Le mode séquentiel

Les boucles loop

  • 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;

process

begin

for i in 0 to 3 loop

y(i) <= a(3-i);

end loop;

end process;

Introduction au VHDL - R.WEBER - Polytech'Orleans

slide44

Le mode séquentiel

1ers Exemples

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

Introduction au VHDL - R.WEBER - Polytech'Orleans

slide45

Testbench

VI) Les Testbenchs

stimuli

Vhdl à

tester

  • 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

constant Period: TIME := 25 NS;

...

Stimulus: process

begin

A <= "0000";

B <= "0000";

wait for Period;

A <= "1111";

wait for Period;

B <= "1111";

wait for Period;

wait;

end process;

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

wait until now=1ms ;

wait for 10 ns ;

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

Introduction au VHDL - R.WEBER - Polytech'Orleans

slide46

Testbench

Les Testbenchs

  • signal <= valeurafterdurée absolue, valeurafterduré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

Introduction au VHDL - R.WEBER - Polytech'Orleans

slide47

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

Introduction au VHDL - R.WEBER - Polytech'Orleans

slide48

Complément

Les paramètres génériques

  • Ils sont déclarés dans l'entity
  • Ils permettent de paramétrer des composants
  • une 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 : instd_logic_vector (width-1 downto 0);

c : out std_logic_vector (width-1 downto 0));

end mux;

architecture behav of mux is

begin

c<=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);

Introduction au VHDL - R.WEBER - Polytech'Orleans