Вы находитесь на странице: 1из 34

INITIATION VHDL

Olivier BOURRION

BIBLIOGRAPHIE
1. Jacques WEBER, Maurice MEAUDRE
VHDL du langage au circuit, du circuit au langage Chez MASSON

2.

Philippe LARCHER
VHDL, Introduction la synthse logique Chez Eyrolles

3. http://www.acc-eda.com/vhdlref/

initiation VHDL

PLAN
Prsentation du langage Entits / architectures Exemples Prsentation des packages, fonctions et procdures Simulation et synthse

initiation VHDL

INTRODUCTION
VHDL = VHSIC Hardware description language. VHSIC = Very High Scale Integrated Circuit. Langage standardis par IEEE suivant les normes : 1076.1(vhdl87) et 1076.2(vhdl93) Intrt :
Description textuelle; Portabilit (normalis); Indpendance technologique (de la description); Description modulaire et hirarchique;
4

initiation VHDL

Utilisation du VHDL
Modlisation Simulation Synthse Spcification (netlist)

initiation VHDL

Vue physique
library
ST

component

signal

TI

Instance de composant

entity
initiation VHDL

architecture
6

Rgles dcriture (1)


Commentaires: - - mettre devant chaque ligne commenter. -- premire ligne de commentaire -- deuxime ligne de commentaire Pas de diffrences entre minuscules et majuscules.
bonJOUr=BONJOUR=bonjour

Identificateurs :
composition alphanumrique (pas daccents!), caractre _ 1er caractre doit tre une lettre _ ne doit pas terminer le nom et figurer 2 fois conscutives Ne doit pas tre un mot rserv 1 ligne max

Une instruction peut stendre sur plusieurs lignes et doit se terminer par ;
initiation VHDL 7

Rgles dcriture (2)


Les entiers : 120 ; (ex : sig_int<=120;) Les caractres : A, a, ; (ex : sig_char<=A;) Les chanes de caractres : Acds; (ex : sig_str<=AA;) Les bits : 0, 1; (ex : sig_bit<=0;) Les vecteurs de bit 00011010 (ex : sig_vect<=00;)
Si le nombre de bit du vecteur est divisible par 4 : XAB Si le nombre de bit est divisible par 3 : O37

initiation VHDL

Libraries (1)
Peut contenir :
Entity; Architecture; Configuration; Package; Fonction; Procdure; Types;

Par dfaut la bibliothque work est toujours prsente


initiation VHDL 9

Libraries(2)
Utilisation (avant chaque entit)
Library nom_de_la_librairie; use nom_de_la_librairie.nom_du_package.nom_de_lobjet; use nom_de_la_librairie.nom_du_package.all; use nom_de_la_librairie.entit(architecture); Exemple: library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; use work.pack_VME.all; use ieee.std_logic_textio.all; use std.textio.all;

initiation VHDL

10

PLAN
Prsentation du langage Entits / architectures Exemples Prsentation des packages, fonctions et procdures Simulation et synthse

initiation VHDL

11

Entit(1)
Vue externe, interface, donne uniquement :
les entres-sorties; Les paramtres de modularit;
Entity demonstration is Generic(taille : integer :=8); port( clk : in std_logic; nrst : in bit; entree : in bit_vector(1 to 5); sortie : out std_logic_vector ( taille-1 downto 0) ); End demonstration;

initiation VHDL

12

Entit(2)
Mode : in, inout, out, buffer;
Types (non exhaustif) :
integer (-5,0,1,5), natural (0,1,5), positive (1,5); Bit, bit_vector : (0,1); Std_ulogic, std_ulogic_vector : (U,X,0,1,Z,W,L,H,-); Std_logic, std_logic_vector : idem, mais avec rsolution; Boolean (true,false); Real; Time; Dfinis par lutilisateur (numr, tableau, record, subtype, );

initiation VHDL

13

Architecture
Partie dcrivant ce que contient lentit, une entit peut avoir plusieurs architectures. La description peut tre comportementale ou structurelle. Les 2 sont non exclusives.
Architecture comportementale of demonstrationbis is --partie dclarative Begin C<=1 when (A=B) else 0; End comportementale ; Architecture structurelle of demonstrationbis is --partie dclarative Begin C<=not(A xor B); End structurelle ;
initiation VHDL 14

Architecture, Partie dclarative(1)


Signaux (pas de mode)
Signal s_clk : std_logic:=0; -- attention Signal bus : std_logic_vector(15 downto 0);

Constantes
constant pipo : std_logic:=0;

Alias
Alias bus0 : std_logic is bus(0);

Dclaration de nouveau types


type enumere is (bleu,blanc,rouge); Type tableau is array(0 to 5) of std_logic_vector(15 downto 0);
initiation VHDL 15

Architecture, Partie dclarative(2) Composants


component fair74AC521 generic(alim_3V3 : boolean); port( nI_AeqB : in std_logic; A : in std_logic_vector(7 downto 0); B : in std_logic_vector(7 downto 0); nO_AeqB : out std_logic:='1' ); end component;

Fonctions et procdures
initiation VHDL 16

Configuration
Sert indiquer lassociation explicite entre entit et architecture (dans le cas o il y a plusieurs architectures)
configuration cfg_simul of test_max_epp is for simu_RTL for DUT : max_epp use configuration work.cfg_simul_max_epp; end for; for all : EPP_interf use entity end for; end for; end cfg_simul; work.EPP(RTL);

Peut aussi servir configurer les ports dentre sortie, fixer les generics.

initiation VHDL

17

Vue physique
library
ST

component

signal

TI

Instance de composant

entity
initiation VHDL

architecture
18

Oprateurs
Logiques
and, or, nand, nor, xor, xnor (1993), not

Relationnels
=, /=, <, <=, >, >=

Arithmtiques +, -, *, /, mod, rem Divers


&, abs
initiation VHDL 19

Attributs
Servent obtenir des informations sur les objets. Il en existe des prdfinis:

signalevent, signalstable
Voir ref1 page 46

Lutilisateur peut aussi en dfinir.

initiation VHDL

20

10

Corps darchitecture (concurrent)


Sexcutent indpendamment de lordre dcriture (cycle delta). Un signal concurrent saffecte un seul endroit. Affectation simple a<= b or c; a<= b or c after 10 ns; Affection conditionnelle a<= b when (etat=plus) else 0;

Affectation slective With sel select sortie<= e0 when un, e1 when deux, 0 when others; -- others couvre tous les cas restant
initiation VHDL 21

Corps darchitecture (concurrent)


Instanciation de composant
Le composant est dclar dans la partie dclarative de larchitecture, o dans un package.
U0 : pipo generic map (taille=>3) port map ( clk => clk, nrst=>1, sortie=> open ); U1 : pipo generic map (3) port map(clk,1,open); La premire instanciation est de type explicite, la deuxime est implicite!
initiation VHDL 22

11

Corps darchitecture (concurrent)


Le processus, tout le process est execut concurrentiellement aux autres instructions.
[Process_label :] process [(liste_de_sensibilit)] [is] Process_declarative_part -- pas de signaux ici Begin [process_statement_part] End process [process_label];

Boucles (doit contenir des instruction concurrentes)


Boucle : For i in 0 to 7 generate if i>0 then a(i)<=b or c(i-1); else a(i)<=0; End generate boucle;

initiation VHDL

23

Corps darchitecture (concurrent)


Tests
test : if test_is_true generate a<=b or c; End generate test;

initiation VHDL

24

12

Corps darchitecture (squentiel)


Les descriptions squentielles sont faites ncessairement dans un processus. Un processus ressemble une boucle sans fin, qui est priodiquement mise en sommeil (wait). Un processus doit contenir une liste de sensibilit ou une instruction du type wait (sinon bouclage temps nul). Les affectations squentielles prennent effet lorsque le processus se remet en attente. Entre 2 activations dun processus qui affecte une valeur un signal, cette valeur est mmorise. (attention la mmorisation implicite).

initiation VHDL

25

Corps darchitecture (squentiel)


Linstruction wait
wait [on sensitivity_list] [until condition] [for time_expression]; exemples : wait for 10 ns; wait until horl=1; -- quivalent wait on horl until horl=1; wait; -- attente infinie

Liste de sensibilit
quivalente une instruction du type wait on place en fin de processus process process(a) begin begin s<=a; s<=a; wait on a; end process; end process; Il y a cependant une diffrence linitialisation
initiation VHDL 26

13

Corps darchitecture (squentiel)


Signaux et variables
Raction immdiate : les variables (affectation :=)
Process Variable a : integer; Begin a:=expression Normalement non ddie la mmorisation, sert faire des actions combinatoires.

Raction diffre : Les signaux (affectation <=)


!!Laffectation prend effet la fin du processus!! Lors de plusieurs affectations (lgal dans un process, illgal en dehors) la dernire remporte.

initiation VHDL

27

Corps darchitecture (squentiel)


Tests :
If
If condition then instructions {Elsif condition then instructions} {Else instructions} End if;

Case (tous les cas doivent tre couvert, others) case expression is when choices => instructions {when choices => instructions} end case; Instruction NULL, signifie pas dopration, donc mmorisation.
28

initiation VHDL

14

Corps darchitecture (squentiel)


Boucle : loop
Tant que : while condition loop instructions end loop; - Pour : For i in range loop - - range = 0 to 5 ou range = 5 downto 0 instructions end loop; On peut modifier le droulement dune boucle avec next ou exit.

initiation VHDL

29

Comparaison concurrent squentiel


With,select Generate <= when,else <= after x ns Case Loop If then else Wait for x ns, <=

initiation VHDL

30

15

PLAN
Prsentation du langage Entits / architectures Exemples Prsentation des packages, fonctions et procdures Simulation et synthse

initiation VHDL

31

Exemple concurrent (dcodeur1)


library ieee; use ieee.std_logic_1164.all; entity decodeur is port( adresse : in natural range 0 to 7; CS : out std_logic_vector(7 downto 0) ); end decodeur; architecture formation1 of decodeur is Begin with adresse select CS <= "00000001" when 0, X"02" when 1, X"04" when 2, X"08" when 3, X"10" when 4, X"20" when 5, X"40" when 6, X"80" when 7; -- pour le dernier on pouvait ecrire X"80" when others; end formation1;

initiation VHDL

32

16

Exemple concurrent (dcodeur2)


Mme entit is '0'; '0'; '0'; '0'; '0'; '0'; '0'; '0'; architecture formation2 of decodeur begin CS(0)<='1' when adresse=0 else CS(1)<='1' when adresse=1 else CS(2)<='1' when adresse=2 else CS(3)<='1' when adresse=3 else CS(4)<='1' when adresse=4 else CS(5)<='1' when adresse=5 else CS(6)<='1' when adresse=6 else CS(7)<='1' when adresse=7 else end formation2;

initiation VHDL

33

Exemple concurrent (dcodeur3) Mme entit


architecture formation3 of decodeur is type def_table is array (0 to 7) of std_logic_vector(7 downto 0); constant table : def_table :=( "00000001", --adresse 0 "00000010", --adresse 1 "00000100", --adresse 2 X"08", --adresse 3 X"10", --adresse 4 X"20", --adresse 5 X"40", --adresse 6 X"80"); --adresse 7 begin CS<=table(adresse); end formation3;

initiation VHDL

34

17

Exemple concurrent (composant)


library ieee; use ieee.std_logic_1164.all; entity porte_ET is port( input_A : in std_logic; input_B : in std_logic; output : out std_logic ); end porte_ET; architecture structurelle of porte_ET is begin output<=input_A and input_B; end structurelle; architecture comportementale of porte_ET is begin output<='0' when (input_A='0' or input_B='0') else '1'; end comportementale;
initiation VHDL 35

Exemple concurrent (instanciation)


library ieee; use ieee.std_logic_1164. all; entity porte_ET_4 is port( Begin inputs : in std_logic_vector(3 downto 0); -- premiere methode d'instanciation, -- explicite (ordre sans importance) output : out std_logic porte_num_1 : porte_ET port map( ); output=>s_output_intermediaire_A, end porte_ET_4; input_A=>inputs(0), input_B=>inputs(1) architecture structurelle of ); porte_ET_4 is -- declaration du composant, -- deuxieme methode d'instanciation -- ici ou dans un package (deconseillee!!!) component porte_ET porte_num_2 : porte_ET port map(inputs(2), port( inputs(3),s_output_intermediaire_B); input_A : std_logic; input_B : std_logic; -- derniere porte derniere_porte : porte_ET port map( output : std_logic input_A=>s_output_intermediaire_A, ); input_B=>s_output_intermediaire_B, end component; output=>output ); end structurelle; --signaux intermediaires signal s_output_intermediaire_A : std_logic ; signal s_output_intermediaire_B : std_logic ;

initiation VHDL

36

18

Exemple concurrent (instanciation)


architecture structurelle2 of porte_ET_4 is component porte_ET port( input_A : in std_logic; input_B : in std_logic; output : out std_logic ); end component; --signal intermediaire signal s_output_intermediaire : std_logic_vector(1 downto 0); Begin boucle : for i in 0 to 1 generate instance : porte_ET port map( input_A=>inputs(i*2), input_B=>inputs(i*2+1), output=>s_output_intermediaire(i) ); end generate boucle; derniere_porte : porte_ET port map( input_A=>s_output_intermediaire(0), input_B=>s_output_intermediaire(1), output=>output); end structurelle2; initiation VHDL 37

Exemple squentiel (compteur)


library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity compteur_16b is port( clk : in std_logic; nrst : in std_logic; en_count : in std_logic; cpt_value : out std_logic_vector(15 downto 0) ); end compteur_16b; architecture RTL of compteur_16b is signal s_cpt : std_logic_vector(15 downto 0); begin -- process avec liste de sensibilite compteur_proc : process(nrst,clk) begin if nrst='0' then -- reset asynchrone s_cpt<=(others=>'0'); elsif rising_edge(clk) then -- detecte le front montant elsif clk'event and clk='1' then -- detecte aussi le front montant if en_count='0' then if s_cpt<X"FFFF" then s_cpt<=s_cpt + 1; -- std + integer else -- qd cpt= FFFF, on affecte 0 s_cpt<=(others=>'0'); end if; -- memorisation implicite (pas de else) end if; end if; end process compteur_proc; -cpt_value<=s_cpt; --comme on ne peut relire une sortie end RTL;

initiation VHDL

38

19

Exemple squentiel (dcalage, gnrique)


library ieee; use ieee.std_logic_1164. all; entity decalage is generic(profondeur : positive :=3;largeur : positive ); port( clk : in std_logic; nrst : in std_logic; input_vect : in std_logic_vector(largeur-1 downto 0); output_vect : out std_logic_vector(largeur- 1 downto 0)); end decalage; architecture RTL of decalage is type def_decalage is array (1 to profondeur) of std_logic_vector(largeur-1 downto 0); signal s_decaleur : def_decalage; Begin process(nrst,clk) Begin if nrst='0' then boucle_rst : for i in 1 to profondeur loop s_decaleur(i)<=(others=> '0'); end loop boucle_rst; elsif rising_edge(clk) then boucle_trf : for i in 1 to profondeur loop if i=1 then s_decaleur(i)<=input_vect; else s_decaleur(i)<=s_decaleur(i-1); end if; end loop boucle_trf; output_vect<=s_decaleur(profondeur); end if; end process; end decalage;

initiation VHDL

39

Exemple squentiel (FSM)


Exemple du wagonnet :
On attend le wagonnet qui est amen par un moyen quelconque, puis on le charge, une fois charg on lvacue, grce un actionneur.

library ieee; use ieee.std_logic_1164.all; entity controleur_chargement is port( clk : in std_logic; nrst : in std_logic; W_present : in boolean; W_plein : in std_logic; charge : out boolean; evacue : out boolean ); end controleur_chargement;

attente
W_present

charge chargement
W_plein

pousse vacuation
Not(W_present)

initiation VHDL

40

20

Architecture 1 (FSM)
architecture sortie_synchrone of controleur_chargement is type def_state is (attente,chargement,evacuation); signal state : def_state; Begin process(clk,nrst) begin if nrst='0' then state<=attente; charge<=false; evacue<=false; elsif rising_edge(clk) then case state is when attente => if W_present then state<=chargement; end if; when chargement => if W_plein then state<=evacuation; charge<=false; else charge<=true; end if; when evacuation => if W_present then evacue<=true; else state<= attente; evacue<=false; end if; end case; end if; end process; end sortie_synchrone;

initiation VHDL

41

Architecture 2 (FSM)
architecture sortie_asynchrone of controleur_chargement is type def_state is (attente,chargement,evacuation); signal state : def_state; Begin evacue<=true when (state=evacuation) else false; charge<=true when (state=chargement) else false; process(clk,nrst) begin if nrst='0' then state<=attente; elsif rising_edge(clk) then case state is when attente => if W_present then state<=chargement; end if; when chargement => if W_plein then state<=evacuation; end if; when evacuation => if not(W_present) then state<=evacuation; end if; end case; end if; end process; end sortie_asynchrone;

initiation VHDL

42

21

PLAN
Prsentation du langage Entits / architectures Exemples Prsentation des packages, fonctions et procdures Simulation et synthse

initiation VHDL

43

Programmation modulaire
Librairies, package, fonction, procdures

22

Fonction
Na quune seule sortie, mais peut avoir plusieurs entres. Ses paramtres peuvent tre exclusivement :
Signaux; Constantes; Fichiers;

Procdure
Peut avoir plusieurs sorties et plusieurs entres. Ses paramtres peuvent tre exclusivement :
Signaux; Variables; Constantes; Fichiers;

Et toujours de mode in. Se termine par linstruction return.


a b in in out c

a b c

in out inout

initiation VHDL

45

Fonction
Function nom[(liste de paramtre)] return type is zone declarative (comme dans process) Begin zone dinstruction squentielles End nom; Exemple: function to_unsigned (a: std_ulogic_vector) return integer is alias av: std_ulogic_vector (1 to a'length) is a; variable ret,d: integer; begin d := 1; ret := 0; for i in a'length downto 1 loop if (av(i) = '1') then ret := ret + d; end if; d := d * 2; end loop; return ret; end to_unsigned;
initiation VHDL 46

23

Procdure
procedure nom[(liste de paramtre)] is zone declarative (comme dans process) Begin zone dinstruction squentielles End nom; Exemple : procedure dff (signal Clk,Rst,D: in std_ulogic; signal Q: out std_ulogic) is begin if Rst <= 1 then Q <= 0; elsif rising_edge(Clk) then Q <= D; end if; end dff;

initiation VHDL

47

Utilisation
3 mthodes (comme pour les composants)
Dclare et dcrite la zone dclarative dune architecture; Dclare et dcrite dans un package, on appelle le package; Dcrite dans un fichier (dans une librairie quelconque), on la dclare dans la zone dclarative de larchitecture;

Peuvent tre utiliss dans le monde concurrent ou squentiel.

initiation VHDL

48

24

Paquetage (package)
Cest une boite outil. Permet de dcrire et dclarer une fois pour tous les outils couramment utiliss. Syntaxe : Package identificateur is dclaration de type, fonction, procdure, composants, attributs End identificateur; Package body identificateur is - - nexiste pas forcement corps des sous programmes dclars End identificateur;
initiation VHDL 49

Paquetage, exemple
package conversions is function to_unsigned (a: std_ulogic_vector) return integer; function to_vector (size: integer; num: integer) return std_ulogic_vector end conversions; package body conversions is function to_unsigned (a: std_ulogic_vector) return integer is ... Begin ... end to_unsigned; function to_vector (size: integer; num: integer) return std_ulogic_vector is ... begin ... end to_vector; end conversions;
initiation VHDL 50

25

PLAN
Prsentation du langage Entits / architectures Exemples Prsentation des packages, fonctions et procdures Simulation et synthse

initiation VHDL

51

Simulation et synthse
Ce qui est synthtisable est simulable Ce qui est simulable nest pas ncessairement synthtisable

26

Vue simplifie dune cellule PLD


Chargs par configuration

Nud dinterconnexion

LUT D

Vers nud

initiation VHDL

53

Description RTL du hard criture ou rcupration modles annexes criture testbenches *.vhd simulation non oui

Codewright Nedit, Visual hdl Ncsim Modelsim

OK *.vhd

synthse non oui Placement routage *.vhd rtro non


initiation VHDL

Synplify Leonardo Synopsis ambit

OK *.vqm *.edf

Quartus,maxplus Xilinx alliance Cell ensemble

OK

non
54

oui

Fichier de prog ou masque

27

simulation
Un testbench contient
La gnration des stimulis; Linstanciation du circuit simuler; (si possible) la vrification des sorties;

Un testbench ne contient pas forcement dentre sortie (dclaration dentit vide). On peut par exemple simuler le RTL, puis le modle aprs synthse, puis le modle aprs PAR. Dans un soucis de vrification fonctionnelle haut niveau, il a t introduit la notion de testbench en C++ (plutt pour tlcoms et processeurs) Difficile : attention la rsistance psychologique, se placer au plus haut niveau possible
initiation VHDL 55

Gnration de stimulis
Affectation de signaux
R<='0','1' after 20 ns, '0' after 30 ns;

process begin R<='0'; wait for 20 ns; R<='1'; wait for 10 ns; R<='0'; wait; end process;

On peut aussi lors de la dclaration des signaux faire des initialisations (fortement dconseille si lobjectif est la synthse)
signal send_data : boolean :=false;

initiation VHDL

56

28

Manipulation de fichiers (1)


Intrts :
Peut tre intressant lorsque lon veut mettre en place des simulations rcursives (comparaison de fichiers avec une rfrence). Peut permettre de changer des stimulis sans recompiler des fichiers source.

Packages :
textio (STD) (use std.textio.all;) std_logic_textio (IEEE), manipulation des std_logic
(use ieee.std_logic_textio.all;)

initiation VHDL

57

Manipulation de fichiers (2)


Ouverture de fichier :
(vhdl87), dans zone dclarative architecture
file true_output : text open write_mode is file_name_true; file output : text open write_mode is file_name_int;

(vhdl93), dclar dans zone dclarative process


process file vector_file: text; Begin FILE_OPEN(vector_file,"file_name",READ_MODE); FILE_CLOSE(vector_file); -- attention a la fermeture End process;

initiation VHDL

58

29

Manipulation de fichiers (3)


Lecture et criture idem (87 et 93), prototypage des fonctions selon leur arguments. Line et string sont des tableaux. Pour lire, on lit la ligne, puis chaque champ (on utilise des variables) :
Fonction readline(identifieur_fichier,variable_ligne); Fonction read(variable_ligne,variable_quelconque{,good});

Pour crire, on crit chaque champ, puis la ligne


Fonction write(variable_ligne,variable_quelconque{,good}); Fonction writeline(identifieur _fichier,variable_ligne);

Outils
Endfile(identifieur_fichier), retourne un boolean et indique la fin de fichier; String(kjhkhkj) , pour convertir en string une suite de caractres.

initiation VHDL

59

Manipulation de fichiers (exemple1)


data_write : process(clk) variable ligne : line; variable pic_ligne : line; begin if rising_edge(clk) then if WEN_raff='0' then write(ligne,To_FIFO_raffinee(17 downto 16)); write(ligne,string'(" ")); Hwrite(ligne,To_FIFO_raffinee(15 downto 0)); writeline(output,ligne); if (To_FIFO_raffinee(17 downto 16)="00") then Hwrite(pic_ligne,To_FIFO_raffinee(11 downto 0)); writeline(pic_output,pic_ligne); end if; end if; end if; end process data_write;

initiation VHDL

60

30

Manipulation de fichiers (exemple2)


data_gen : process(clk100,nrst) variable ligne : line; variable current_data : std_logic_vector(11 downto 0); begin if epld_vme_sysreset='0' then ADC_DATA(0)<=(others=>'0'); ADC_DATA(1)<=(others=>'0'); ADC_DATA(2)<=(others=>'0'); ADC_DATA(3)<=(others=>'0'); elsif rising_edge(clk100) then if file_OK and send_data then if endfile(fichier_spectre) then report "fin de fichier spectre" severity warning; file_OK<=false; else readline(fichier_spectre,ligne); hread(ligne,current_data); ADC_DATA(0)<=current_data; ADC_DATA(1)<=current_data; ADC_DATA(2)<=current_data; ADC_DATA(3)<=current_data; end if; end if; end if;

initiation VHDL

61

Le temps
Le temps peut tre manipul par des objets de type time. Le temps simulateur peut accd grce la fonction now.
variable vector_time : time; vector_time:=now; --le temps courant est sauvegarde

On peut grce la manipulation de fichier et du temps, lire les vecteurs de stimulation partir dun fichier (utile si lon veut utiliser des fichiers issus de mesures) :

initiation VHDL

#temps(ns) DIN 0 10 100 25 .

62

31

Messages
Au cours de la simulation, on peut faire des vrifications en direct avec :
assert condition {report message} {severity niveau};

O :
Condition : un test qui retourne un boolean; Message : une chane de caractres; Niveau : il en existe 4 (note,warning,error,failure);

Le message est affich si la condition est fausse (retourne false). Exemple :


report "test de setup" severity note; assert data'stable(tsetup) report "erreur de setup" severity error;

initiation VHDL

63

Les paquetages VITAL


Pour faire des modlisations, il est conseill dutiliser les fonctions des paquetages IEEE.vital_timing. Celles-ci contiennent dj des fonctions de vrification
De setup; De periode; De dure de signal;

De plus les outils sont plus rapides lors de lutilisation (built in) de ces fonctions. Le modle peut ainsi tre crit en 2 parties totalement distinctes :
Vrifications des timings; Partie fonctionnelle (sans vrification des timings, on part du principe que tout est bon);

initiation VHDL

64

32

Synthse
Cette tape consiste interprter le langage VHDL et convertir la description en une netlist utilisant les cellules de base de la technologie utilise (logic Element, standart cells). Etape critique, car on a pas toujours dcrit ce que lon croit. Toujours rflchir larchitecture avant de coder, on manipule des cellules, pas des cases mmoires. Penser au pipelining.
initiation VHDL 65

Exemple
process(A,B,C,S) begin if(S='1') then X<=A+B; else X<=A+C; end if; end process; B A C

Au sens synthse

process(A,B,C,S) variable OPb : integer; begin if(S='1') then OPb:=B; else OPb:=C; end if; X<=A+Opb; end process; B C

+
S

S A

+
X
initiation VHDL

66

33

FSM
Lors de la description, bien faire le choix entre :
Sorties synchrones; Sorties asynchrones;

Lors de la synthse, suivant la performance de loutil les tats peuvent tre cods en :
Squentiel; ( 00 , 01 , 10 , 11 ) Gray; ( 00 , 01 , 11 , 10 ) One hot; ( 0001 , 0010 , 0100 , 1000 ) Suivant le mode de codage, les ressources de dcodage sont plus ou moins importantes, par exemple pour un epld, le codage squentiel est prfrable.

initiation VHDL

67

34

Вам также может понравиться