23
2006-2007 Compléments VHDL - R.WEBE R - Polytech'Orleans 1 Polytech'Orléans Filière ESI MODULE Conception Numérique avancée Complements VHDL FASCICULE DE COURS ANNÉE 2006-2007 SPE 4 Option “SE” Dr. Rodolphe WEBER

Polytech'Orléans

  • Upload
    vince

  • View
    54

  • Download
    0

Embed Size (px)

DESCRIPTION

Polytech'Orléans. Filière ESI MODULE Conception Numérique avancée Complements VHDL FASCICULE DE COURS ANNÉE 2006-2007 SPE 4 Option “SE” Dr. Rodolphe WEBER. Compléments VHDL. Faire du code générique Compilation conditionnelle Les testbenchs Les règles de conception - PowerPoint PPT Presentation

Citation preview

Page 1: Polytech'Orléans

2006-2007 Compléments VHDL - R.WEBER - Polytech'Orleans

1

Polytech'Orléans

Filière ESI

MODULE

Conception Numérique avancéeComplements VHDLFASCICULE DE COURSANNÉE 2006-2007SPE 4 Option “SE”Dr. Rodolphe WEBER

Page 2: Polytech'Orléans

2006-2007 Compléments VHDL - R.WEBER - Polytech'Orleans

2

Compléments VHDL

• Faire du code générique• Compilation conditionnelle• Les testbenchs• Les règles de conception • Les machines d'états

Page 3: Polytech'Orléans

2006-2007 Compléments VHDL - R.WEBER - Polytech'Orleans

3

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.

Rappel

a

b

cs1

s2

Page 4: Polytech'Orléans

2006-2007 Compléments VHDL - R.WEBER - Polytech'Orleans

4

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

Code Générique

Page 5: Polytech'Orléans

2006-2007 Compléments VHDL - R.WEBER - Polytech'Orleans

5

Utilistation d’attributs Ils permettent de récupérer de l'information sur la nature des objets

type etat is (lundi, mardi, mercredi, jeudi, vendredi);signal indice : integer range 0 to 255;signal tab : std_logic_vector (3 downto 0);signal clk : std_logic;

Objet etat indice tab Objet'left lundi 0 3

Objet'right vendredi 255 0 Objet'high vendredi 255 3 Objet'low lundi 0 0

Objet’pos(mardi) 1 - - Objet’succ(mardi) mercredi - - Objet’pred(mardi) lundi - -

Objet'length - 256 4 Objet'range - - 3 downto 0

Objet'reverse_range - - 0 to 3

à éviter

Code Générique

Page 6: Polytech'Orléans

2006-2007 Compléments VHDL - R.WEBER - Polytech'Orleans

6

Appel d'une fonction x <= fonction(a,b) ou x:=fonction(a,b)

Elle doit être spécifiée au préalable dans un package, une entity ou une architecture.

Elle peut ne rien générer, comme générer de la logique.

Une fonction dont le nom est entre " devient un opérateur. La surcharge est possible.

Il existe des fonctions toutes faites :

exemple : la librairie ieee.std_logic_1164 :

9 états possibles (1,0,Z,'-',…)

fonctions logiques (and,nand, or,nor…)

détection de front : rising_edge,falling_edge

function maxval (in1,in2 :signed) return signed is variable resultat : signed (in1'range) ; begin…return resultat;end maxval;

Les fonctions

Code Générique

Page 7: Polytech'Orléans

2006-2007 Compléments VHDL - R.WEBER - Polytech'Orleans

7

Les Procédures

Appel d'une procédure procedure(a,b,c,d)

Elle doit être spécifiée au préalable dans un package, une entity ou une architecture.

procedure Nom_proc ({<class> Nom_para: <mode> <type_spec>}) is --<class>: signal | variable | constant --<mode>: in | inout | outbegin -- description de la procédure end;

-- example: adder

procedure ADD (signal A0, A1, B0, B1: in STD_LOGIC; signal C0, C1: out STD_LOGIC) is

variable X, Y: STD_LOGIC;

begin

x := B0 and A0;

Y := B1 xor A1;

C0 <= (B0 and not A0) or ( not B0 and A0);

C1 <= (Y and not X) or (not Y and X);

end;

Code Générique

Page 8: Polytech'Orléans

2006-2007 Compléments VHDL - R.WEBER - Polytech'Orleans

8

Les Packages

package unité de compilation permettant de regrouper constant, type, signal, component, function et

procedurepackage nom_du_package is-- description du package-- vue externeend package nom_du package;

package body nom_du_package is-- description interneend package body nom_du_package;

Le package est compilé à part soit dans une librairie spécifique soit dans la librairie courante work.

On peut l'utiliser par la clause use :

use work.nom_du_package.all;

library tutu;

use tutu.nom_du_package.all;

Code Générique

Page 9: Polytech'Orléans

2006-2007 Compléments VHDL - R.WEBER - Polytech'Orleans

9

architecture archi of essai is signal temp : std_logic_vector( 0 to 31); signal vcc : std_logic ; beginvcc <= '1';boucle : for i in 0 to 31 generate premier : if i=0 generate dffa: DFF port map ( SI,CLK,reset,vcc,temp(0)); end generate; autres : if i>0 generate dffb: DFF port map ( temp(i-1),CLK,reset,vcc,temp(i)); end generate;end generate;po<=temp;end archi;

Duplication de composants ou d'équations

Forme générale : label : for indice in val_debut to val_fin generate … end generate label; Possibilité d'insérer des conditions dans la boucle : if condition then generate … end

generate; pas de else ni de elsif.

-- constant vcc : std_logic :='1';

Compilation conditionnelle

Page 10: Polytech'Orléans

2006-2007 Compléments VHDL - R.WEBER - Polytech'Orleans

10

Configuration

configuration permet d'établir la correspondance avec un composant existant :

Pour cibler un composant seul

for label: composant_cible use entity librairie.composant_source(nom_architecture); end for;

Pour cibler une famille de composant

for all composant_cible use entity librairie.composant_source(nom_architecture); end for;

Pour cibler le reste

for others composant_cible use entity librairie.composant_source(nom_architecture); end for;

Mis en œuvre :

directe dans la partie déclarative de l'architecture

par le biais d'un bloc configuration : configuration tutu of composant_cible is -- description des configurationsend;

Possibilité de hiérarchiser les configurations :

for label: composant_cible use configuration librairie.nom_configuration end for;

Compilation conditionnelle

Page 11: Polytech'Orléans

2006-2007 Compléments VHDL - R.WEBER - Polytech'Orleans

11

Les Testbenchs

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

Possibilité ( nécessité) d'utiliser des ressources VHDL non synthétisable, description uniquement fonctionnelle

Vhdl àtester

stimuli

Vérification manuelle sur chronogramme :- fastidieux, voire impossible si design complexe- taux de couverture ?

Modèle comportementale

Vhdl àtester

stimuli

ComparaisonDes

résultats

Vérification automatique :- Efficace mais- validité du modèle comportementale ?- Vitesse ?

Modèle C, Matlab, Scilab….

Fichierstimuli

FichierRésultat

Vhdl àtester

lecturestimuli

EcritureRésultat

ComparaisonDes

résultats

Vérification automatique :- Très efficace

Page 12: Polytech'Orléans

2006-2007 Compléments VHDL - R.WEBER - Polytech'Orleans

12

Les Testbenchs

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 ;

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

-- méthode simple mais lourdeconstant 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;

Génération d’un chronogrammela durée s'exprime avec un type physique : fs, ps, ns, us, ms

now représente le temps courant (sous modelsim)

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, attention initialiser clk à la déclaration

Page 13: Polytech'Orléans

2006-2007 Compléments VHDL - R.WEBER - Polytech'Orleans

13

Les assertions

Les assertions permettent d'avoir des informations dynamiques sur la simulation :assert test report message severity action

si le test est négatif on affiche le message avec arrêt ou non de la simulation

Action Effets

NOTE poursuite néant

WARNING poursuite écriture sur fichier .log

ERROR poursuite écriture sur écran

FAILURE arrêt écriture sur fichier

Arrêter le simulateur :assert false severity failure ;

Afficher un message :assert false report " Fin OK" severity note;oureport "Fin Ok" severity note

Testbench

exemple : assert (now< 10 ms) report " Fin de simu" severity failure

Page 14: Polytech'Orléans

2006-2007 Compléments VHDL - R.WEBER - Polytech'Orleans

14

Le Package TEXTIO (VHDL 93)

process file F : TEXT open WRITE_MODE is "testout.txt"; variable L: line; begin while true loop -- on peut tester une durée NOW < finsimu write(L,NOW,LEFT,10); -- NOW = temps de simulation write(L,to_integer(a)); writeline(F,L); wait until clk='1'; end loop;end process;

process file G : TEXT open READ_MODE is "test.txt"; variable L: line; variable bvar,cvar : integer range 0 to 7;variable dvar : real; begin while not ENDFILE(G) loop wait until clk='1'; readline(G,L); read(L,bvar); -- on ne lit que des variables read(L,cvar); read(L,dvar); b <= bvar; c <= cvar; d <= dvar; end loop; wait; -- finend process;

use std.textio.all;Les modes peuvent être :

READ_MODE, WRITE_MODE, APPEND_MODE

Cadrage possible avec WRITE : LEFT, + taille minimum du chanp RIGHT,+ taille minimum du chanp

les types standards sont utilisés : TIME, INTEGER CHARACTER STRING BIT et BIT_VECTOR REAL

avec use ieee.std_logic_textio.all, on peut utiliser STD_LOGIC et STD_LOGIC_VECTOR lire et écrire de l'hexa ou octal :

HREAD et HWRITEOREAD et OWRITE

0 ns 025 ns 075 ns 1125 ns 2

2 5 1.17 3 5e31 4 4.2e-14 2 2.3

Les Testbenchs

Page 15: Polytech'Orléans

2006-2007 Compléments VHDL - R.WEBER - Polytech'Orleans

15

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

Règles de Conception

Page 16: Polytech'Orléans

2006-2007 Compléments VHDL - R.WEBER - Polytech'Orleans

16

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

^ ^ ^ ^

Règles de Conception

Page 17: Polytech'Orléans

2006-2007 Compléments VHDL - R.WEBER - Polytech'Orleans

17

Règles de Conception

Règles de conception

Systèmes synchrones(simu fonctionnelle simplifiée et puissante, analyse temporelle statique possible,) :

1 SEULE horloge (broche globale du composant)

Si plusieurs domaines d horloges, il faut des FIFOs tampons

resynchroniser tous les signaux asynchrones pour éviter la métastabilité

D Q D Qreset_Nreset_1_N reset_2_N

s_reset_N

horloge

GlobalClear

GlobalClock

EPLD

Resynchronisation de la remontée du RESET

exemple :Synchronisation du reset, actif de manière asynchrone et inactif de manière synchrone :

Page 18: Polytech'Orléans

2006-2007 Compléments VHDL - R.WEBER - Polytech'Orleans

18

Règles de Conception

Règles de conception

Adopter une démarche qualité (dénomination, hierarchisation, testbench…)

Attention aux assignations incomplètes (mémorisation implicite)

Attention à l’utilisation des variables

Penser implantation (orienter le compilateur) : il faut connaître l’architecture

du composant

Ecrire un registre à décalage 32 bits à partir de l’architecture ci-contre

Proposer un schéma pour la fonction suivante : sortie= (a+b) ou (c+d)

Trouver le bon compromis entre ressources et vitesses en choisissant le bon

degré de parallélisation (pas compact mais rapide) ou de sérialisation (compact

mais lent) : cf. transparent suivant

Four-input LUT•Any 4-input logic function•Or 16-bit x 1 sync RAM•Or 16-bit shift register

Page 19: Polytech'Orléans

2006-2007 Compléments VHDL - R.WEBER - Polytech'Orleans

19

Règles de Conception

Exemple : implantation d’un filtre d’ordre 2

Page 20: Polytech'Orléans

2006-2007 Compléments VHDL - R.WEBER - Polytech'Orleans

20

Les machines d’états

Machines d’états

s(2) s(1) s(0)

E0 0 0 1

E1 1 1 0

E2 0 0 1

E3 0 1 0

E4 1 0 1

Autre concept

Page 21: Polytech'Orléans

2006-2007 Compléments VHDL - R.WEBER - Polytech'Orleans

21

ENTITY machine IS PORT (clk, rst : in bit ;cond : in bit-vector(2 DOWNTO O) ;sortie: out bit-vector(2 DOWNTO 0)) ;END machine ;

ARCHITECTURE arch OF machine ISTYPE etats is (etatO, etatl, etat2, etat3, etat4) ;SIGNAL etat: etats ;BEGIN

PROCESS(clk, rst)BEGINIF rst='l' THEN

etat <= etat0 ;ELSIF ( clk ' EVENT and clk= ' l' ) then

CASE etat ISWHEN etat0 => etat <= etatl ;WHEN etatl => IF cond = "OOO" THEN etat <= etat0 ;

ELSIF cond = "001" THEN etat <= etat4 ;ELSIF cond = "010" THEN etat <= etat3 ;ELSIF cond = "011" THEN etat <= etat2 ;ELSE etat <= etatl ;

END IF ;WHEN etat2 => etat <= etat3 ;WHEN etat3 => IF cond = "110" THEN etat <= etat0 ;

ELSE etat <= etat4 ; END IF ;

WHEN OTHERS => etat <= etat0 ;END CASE;

END IF;END PROCESS;

sortie <= "001" WHEN (etat=etat0) ELSE"110" WHEN (etat=etat1) ELSE"001" WHEN (etat=etat2) ELSE"010" WHEN (etat=etat3) ELSE"101" ;

END ARCH;

Ges

tion

des

éta

tsG

esti

ond

es s

orti

es

version synchronisée

Machine à états codés

Les machines d’états

Page 22: Polytech'Orléans

2006-2007 Compléments VHDL - R.WEBER - Polytech'Orleans

22

ENTITY machine IS PORT (clk, rst : in std_logic ;cond : in std_logic_vector(2 DOWNTO O) ;sortie: out std_logic_vector(2 DOWNTO 0)) ;END machine ;ARCHITECTURE arch OF machine ISCONSTANT etat0 : std_logic_vector(4 DOWNTO 0) := "00001";CONSTANT etat1 : std_logic_vector(4 DOWNTO 0) := "00010";CONSTANT etat2 : std_logic_vector(4 DOWNTO 0) := "00100";CONSTANT etat3 : std_logic_vector(4 DOWNTO 0) := "01000";CONSTANT etat4 : std_logic_vector(4 DOWNTO 0) := "10000";SIGNAL etat: std_logic_vector(4 DOWNTO 0) ;BEGIN

PROCESS(clk, rst)BEGINIF rst='l' THEN

etat <= etat0 ;ELSIF ( clk ' EVENT and clk= ' l' ) then

CASE etat ISWHEN etat0 => etat <= etatl ;WHEN etatl => IF cond = "OOO" THEN etat <= etat0 ;

ELSIF cond = "001" THEN etat <= etat4 ;ELSIF cond = "010" THEN etat <= etat3 ;ELSIF cond = "011" THEN etat <= etat2 ;ELSE etat <= etatl ;

END IF ;WHEN etat2 => etat <= etat3 ;WHEN etat3 => IF cond = "110" THEN etat <= etat0 ;

ELSE etat <= etat4 ; END IF ;

WHEN OTHERS => etat <= "-----" ;END CASE;

END IF;END PROCESS;sortie <= "001" WHEN (etat=etat0) ELSE

"110" WHEN (etat=etat1) ELSE"001" WHEN (etat=etat2) ELSE"010" WHEN (etat=etat3) ELSE"101" ;

END ARCH;

Ges

tion

des

éta

tsG

esti

ond

es s

orti

es

Machine à états décodés

2 versions du One-Hot Encoding :•One-Hot-One : chaque état correspond à un bit•One-Hot-Zero : idem sauf pour l’état de repos qui correspond à tous les bits à 0 (gain de 1 bit)

Les machines d’états

Page 23: Polytech'Orléans

2006-2007 Compléments VHDL - R.WEBER - Polytech'Orleans

23

ENTITY machine IS PORT (clk, rst : in std_logic ;cond : in std_logic_vector(2 DOWNTO O) ;sortie: out std_logic_vector(2 DOWNTO 0)) ;END machine ;ARCHITECTURE arch OF machine ISCONSTANT etat0 : std_logic_vector(3 DOWNTO 0) := "0001";CONSTANT etat1 : std_logic_vector(3 DOWNTO 0) := "0110";CONSTANT etat2 : std_logic_vector(3 DOWNTO 0) := "1001";CONSTANT etat3 : std_logic_vector(3 DOWNTO 0) := "0010";CONSTANT etat4 : std_logic_vector(3 DOWNTO 0) := "0101";SIGNAL etat: std_logic_vector(4 DOWNTO 0) ;BEGIN

PROCESS(clk, rst)BEGINIF rst='l' THEN

etat <= etat0 ;ELSIF ( clk ' EVENT and clk= ' l' ) then

CASE etat ISWHEN etat0 => etat <= etatl ;WHEN etatl => IF cond = "OOO" THEN etat <= etat0 ;

ELSIF cond = "001" THEN etat <= etat4 ;ELSIF cond = "010" THEN etat <= etat3 ;ELSIF cond = "011" THEN etat <= etat2 ;ELSE etat <= etatl ;

END IF ;WHEN etat2 => etat <= etat3 ;WHEN etat3 => IF cond = "110" THEN etat <= etat0 ;

ELSE etat <= etat4 ; END IF ;

WHEN OTHERS => etat <= etat0;END CASE;

END IF;END PROCESS;sortie <= etat(2 downto 0);

END ARCH;

Ges

tion

des

éta

ts

Machine à états codés avec les sorties

Les machines d’états