VHDL Logique programmable
1/39
Partie 2 La structure dun programme VHDL
VHDL - Logique programmable
Partie 2 La structure dun programme VHDL
Denis Giacona ENSISA cole Nationale Suprieure d'Ingnieur Sud Alsace 12, rue des frres Lumire 68 093 MULHOUSE CEDEX FRANCE Tl. 33 (0)3 89 33 69 00
D.Giacona
VHDL Logique programmable 1.
2/39
Partie 2 La structure dun programme VHDL
lments fondamentaux du langage VHDL ......................................................................................................................................................... 3 1.1. Quelques caractristiques du langage .......................................................................................................................................................... 3 1.2. Quelques conseils ........................................................................................................................................................................................... 4 1.3. Le principe du couple entit - architecture ................................................................................................................................................... 7 1.4. Les commentaires ........................................................................................................................................................................................... 9 1.5. Les identificateurs ........................................................................................................................................................................................... 9 1.6. Les objets donnes : signal, constante, variable ...................................................................................................................................... 10 1.7. Les types des objets donnes ..................................................................................................................................................................... 11 1.7.1. Les types prdfinis par tous les compilateurs ................................................................................................................................... 11 1.7.2. Les types complmentaires (inclus dans la bibliothque IEEE 1164) ............................................................................................... 12 1.7.3. Les types dfinis par lutilisateur .......................................................................................................................................................... 14 1.7.4. Conversion de type ................................................................................................................................................................................. 15 1.7.5. L'usage des objets de type integer .................................................................................................................................................... 16 1.8. Les littraux ................................................................................................................................................................................................... 17 1.9. Les oprateurs ............................................................................................................................................................................................... 18 1.9.1. Oprateurs prdfinis de construction dexpressions........................................................................................................................ 18 1.9.2. Oprateurs dassignation et dassociation........................................................................................................................................... 19 1.10. Les dclarations et les assignations des signaux vecteurs ..................................................................................................................... 20 1.11. Surcharge doprateurs ................................................................................................................................................................................ 21 1.12. Les attributs ................................................................................................................................................................................................... 23 1.12.1. Les attributs prdfinis par le langage ................................................................................................................................................. 23 2. La dclaration d'entit ......................................................................................................................................................................................... 25 2.1. Description dune entit non gnrique ...................................................................................................................................................... 25 2.2. Description dune entit gnrique ............................................................................................................................................................. 27 2.3. Les modes des ports ..................................................................................................................................................................................... 28 3. Le corps d'architecture ....................................................................................................................................................................................... 30 3.1. Syntaxe ........................................................................................................................................................................................................... 30 3.2. Dclaration des signaux internes ................................................................................................................................................................ 31 3.3. Instructions concurrentes ............................................................................................................................................................................ 32 3.3.1. Proprits ................................................................................................................................................................................................ 32 3.3.2. Classification des styles de description ............................................................................................................................................... 33 3.3.3. Exemple 1 : architecture comportant des styles diffrents ................................................................................................................ 36 3.3.4. Exemple 2 : styles diffrents pour un mme bloc logique.................................................................................................................. 38
D.Giacona
VHDL Logique programmable
3/39
Partie 2 La structure dun programme VHDL
1.Elments fondamentaux du langage VHDL
1.1. Quelques caractristiques du langage
Syntaxe complexe o mais les outils de dveloppement fournissent des modles VHDL et des convertisseurs de schmas en code VHDL Langage strict par rapport aux types et aux dimensions des donnes o gros avantage : dtection derreurs Trs bonne portabilit o condition d'crire un code indpendant de la technologie De nombreux styles de description o mais attention, les outils de synthse ne traitent pas toujours efficacement certaines descriptions
D.Giacona
VHDL Logique programmable
4/39
Partie 2 La structure dun programme VHDL
1.2.
Quelques conseils
Une bonne prsentation, c'est tout bnfice sansunpetiteffortceladonneparexemplececi
architecture arch_bcdcnt4_ar_en_comb of bcdcnt4_ar_en_comb is signal count:std_logic_vector(3 downto 0); begin process(clk,rst) begin if ar='1' then count<=(others=>'0'); elsif (clk'event and clk='1') then if en='1' then if count<x"9" then count<=count+1; else count<=x"0"; end if; end if; end if; end process; co<='1' when (count=x"9") else '0'; q<=count; end arch_bcdcnt4_ar_en_comb;
Les compilateurs sont vraiment indulgents mais un lecteur l'est srement moins !
D.Giacona
VHDL Logique programmable
5/39
Partie 2 La structure dun programme VHDL
Le mme code, en appliquant une simple rgle d'indentation (un effort minime !)
architecture arch_bcdcnt4_ar_en_comb of bcdcnt4_ar_en_comb is signal count_i : std_logic_vector(3 downto 0); begin count_proc: process (clk, rst) begin if ar = '1' then count_i <= (others => '0'); elsif (clk'event and clk = '1') then if en = '1' then if count_i < x"9" then count_i <= count_i + 1; else count_i <= x"0"; end if; end if; end if; end process; -- Elaboration du signal carry "co" hors processus(assignation combinatoire) co <= '1' when (count_i = x"9") else '0'; q <= count_i; end arch_bcdcnt4_ar_en_comb;
D.Giacona
VHDL Logique programmable
6/39
Partie 2 La structure dun programme VHDL
Appliquer une rgle de dnomination des identificateurs o Minuscules et caractre _ o Langue anglaise o Quelques exemples :
Reset synchrone : reset, rst, sr Reset asynchrone : areset, ar Reset synchrone actif l'tat bas : reset_l, rst_l, sr_l, nsr Read/write actif l'tat bas : rw_l Registre 4 bits : reg, reg4 Compteur 8 bits : count, count8, cnt, cnt8 Compteur BCD : cnt_bcd, bcdcnt Compteur (signal interne) : count_i, count_int Etiquette de processus de comptage : count_proc
D.Giacona
VHDL Logique programmable
7/39
Partie 2 La structure dun programme VHDL
1.3.
Le principe du couple entit - architecture
Tout bloc logique est dcrit par un couple (entity, architecture).
tempo1ms
t
Signaux externes
control rst ar a inc en clr clk clk clk sr cnt(9:0) ar cnt10_binary
compare count(9..0) count = max (d = max) d(9:0)
Signaux internes
D.Giacona
VHDL Logique programmable
8/39
Partie 2 La structure dun programme VHDL
Le code VHDL correspondant au temporisateur tempo1s comporte deux parties : une dclaration dentit qui dfinit les entres-sorties une architecture qui dfinit le comportement
-- dclaration des entres-sorties Dclaration des signaux externes entity tempo1ms is ... end tempo1ms;
-- description du comportement architecture tempo1ms_arch of tempo1ms is ... -- description du compteur cnt10binary: process (rst,clk) -- description du contrleur et du comparateur control: process (rst, clk) end tempo1ms_arch;
D.Giacona
Dclaration des signaux internes
VHDL Logique programmable
9/39
Partie 2 La structure dun programme VHDL
1.4.
Les commentaires
-- Un commentaire commence par deux tirets conscutifs et s'arrte la de la ligne
1.5.
Les identificateurs
Les identificateurs sont des appellations dobjets du langage (donnes et types).
Ils sont constitus de caractres alphabtiques (26 lettres), numriques (10 chiffres dcimaux) et du caractre soulign _ ; les lettres accentues sont exclues Le premier caractre doit tre une lettre Les lettres majuscules et minuscules sont quivalentes Le dernier caractre doit tre diffrent de _ Deux _ la file sont interdits Le nom ne doit pas tre un mot rserv La longueur dun mot est quelconque (mais une ligne maximum)
D.Giacona
VHDL Logique programmable
10/39
Partie 2 La structure dun programme VHDL
1.6.
Les objets donnes :
signal, constante, variable
Les signaux portent les informations des liaisons dentre, des liaisons de sortie et des liaisons internes signal inc : std_logic;
Les constantes reoivent leur valeur au moment de leur dclaration
constant max : std_logic_vector(9 downto 0) := "1111100111";
Les variables ne sont dclares et utilises que dans les processus, les fonctions et les procdures. Lassignation initiale est facultative variable temp : integer range 0 to 999 := 0 ;
D.Giacona
VHDL Logique programmable
11/39
Partie 2 La structure dun programme VHDL
1.7.
Les types des objets donnes
Les types prdfinis par tous les compilateurs
: entier ngatif ou positif : entier positif ou nul : entier positif : numr dont les deux seules valeurs possibles sont 0 et 1 : composite tableau reprsentant un vecteur de bits : numr dont les deux valeurs possibles sont false et true : flottant compris entre -1.0E38 et 1.0E38
1.7.1.
integer natural positive bit bit_vector boolean real
D.Giacona
VHDL Logique programmable
12/39
Partie 2 La structure dun programme VHDL
1.7.2.
Les types complmentaires (inclus dans la bibliothque IEEE 1164)
std_logic U X 0 1 Z W L H -
: 9 valeurs dcrivant tous les tats dun signal logique : non initialis : niveau inconnu, forage fort : niveau 0, forage fort : niveau 1, forage fort : haute impdance * : niveau inconnu, forage faible : niveau 0, forage faible : niveau 1, forage faible : quelconque (dont care) * : vecteur de std_logic
(*) Utile pour la synthse
std_logic_vector
Pour utiliser ces types il faut inclure les directives suivantes dans le code source.
library ieee; use ieee.std_logic_1164.all;
D.Giacona
VHDL Logique programmable
13/39
Partie 2 La structure dun programme VHDL
Remarques concernant les synthtiseurs
0 et L sont quivalents 1 et H sont quivalents - est trs utile pour la simplification des quations U, X, W sont interdits Les types bit, bit_vector, std_logic et std_logic_vector sont les plus utiliss.
D.Giacona
VHDL Logique programmable
14/39
Partie 2 La structure dun programme VHDL
1.7.3.
Les types dfinis par lutilisateur
Exemple : Description dune table de vrit laide dun tableau
library ieee; use ieee.std_logic_1164.all; entity hexa_to_7seg is port( hexain: in bit_vector(3 downto 0); seg: out bit_vector(0 to 6)); end hexa_to_7seg; architecture arch_hexa_to_7seg of hexa_to_7seg is type segment is (a, b, c, d, e, f, g); type truth_table_4 is array(bit, bit, bit, bit) of bit_vector(a to g); constant hexa_7seg_table : truth_table_4 :=
-- outputs abcdefg (segments) hexa inputs -------------------------------------------(((("1111110", -- 0000 "0110000"), -- 0001 ("1101101", -- 0010 "1111001")), -- 0011 (("0110011", -- 0100 "1011011"), -- 0101 ("1011111", -- 0110 "1110000"))), -- 0111 ((("1111111", -- 1000 "1111011"), -- 1001 ("1110111", -- 1010 "0011111")), -- 1011 (("1001110", -- 1100 "0111101"), -- 1101 ("1001111", -- 1110 "1000111")))); -- 1111 begin seg <= exa_7seg_table(hexain(3),hexain(2),hexain(1),hexain( 0)); end arch_hexa_to_7seg;
D.Giacona
VHDL Logique programmable
15/39
Partie 2 La structure dun programme VHDL
1.7.4.
Conversion de type
Les environnements de dveloppement fournissent en gnral des paquetages comportant des fonctions de conversion de type. Par exemple, Xilinx ISE fournit notamment les fonctions suivantes : conv_integer(a) pour convertir un std_logic_vector a en un integer conv_unsigned(x,n) pour convertir un std_logic_vector, integer, unsigned (changement de taille) ou signed x en un unsigned de n bits conv_signed(x,n) pour convertir un std_logic_vector, integer, signed (changement de taille) ou unsigned x en un signed de n bits conv_std_logic_vector(x,n) pour convertir un integer, unsigned ou signed x en un std_logic_vector de n bits Pour utiliser ces fonctions, il suffit daccder au paquetage STD_LOGIC_UNSIGNED de la bibliothque ieee library ieee ; use IEEE.STD_LOGIC_UNSIGNED.ALL;
D.Giacona
VHDL Logique programmable
16/39
Partie 2 La structure dun programme VHDL
1.7.5.
L'usage des objets de type integer
Signal servant de compteur (logique squentielle synchrone) o En synthse, la valeur courante de comptage doit tre convertie en std_logic_vector avant d'tre applique sur une sortie Variable servant d'indice pour un std_logic_vector
D.Giacona
VHDL Logique programmable
17/39
Partie 2 La structure dun programme VHDL
1.8.
Les littraux
Les littraux sont les reprsentations de valeurs attribues aux objets donnes et aux objets types. Les entiers dcimaux
1234 1_520_473 -- pour amliorer la lisibilit
Les bits
0, 1 U, X, H, L, W, Z, - -- type bit -- type std_logic
Les vecteurs de bits
1010 O12 XA -- reprsentation binaire -- reprsentation octale -- reprsentation hexadcimale
Les caractres
a
Les chanes de caractres
ERREUR ERREUR & N
D.Giacona
VHDL Logique programmable
18/39
Partie 2 La structure dun programme VHDL
1.9.
Les oprateurs
Oprateurs prdfinis de construction dexpressions
1.9.1.
Les oprateurs relationnels permettent de comparer des oprandes de mme type et dindiquer lgalit, lingalit ou leur relation dordre. Ils sont utiliss dans des instructions de test. Ils rendent une valeur boolenne (false ou true). = < <= > >= /= Les oprateurs logiques sont dfinis pour les types boolean, bit, std_logic et les vecteurs correspondants and or not nand nor xor
ATTENTION :
and nest pas prioritaire par rapport or
(utiliser des parenthses)
Les oprateurs arithmtiques sont dfinis pour les types entiers et rels + * / ** mod rem
abs
Les oprateurs de concatnation et dagrgation groupent des lments de mme type & ( , , ) Les oprateurs de dcalage et de rotation sont dfinis sur le type bit_vector sll srl sla sra ror rol
D.Giacona
VHDL Logique programmable
19/39
Partie 2 La structure dun programme VHDL
1.9.2.
Oprateurs dassignation et dassociation
Assignation de variable o lintrieur dun processus nom_variable := expression ;
Assignation de signal o dans la zone dinstructions dune architecture (dynamique) nom_signal <= expression ;
o dans la zone de dclaration dune architecture (statique) signal nom_signal_interne : type_signal := valeur_initiale ; Association o sert de connecteur de signaux dans une instanciation de composant nom_signal_formel => nom_signal_effectif ;
D.Giacona
VHDL Logique programmable
20/39
Partie 2 La structure dun programme VHDL
1.10. Les dclarations et les assignations des signaux vecteurs
signal a : std_logic_vector (0 to 7); signal b : std_logic_vector (7 downto 0); ... ... ... a <= 11110000; b <= 11110000;
MSB LSB
a(0) 1
a(1) 1
a(2) 1
a(3) 1
a(4) 0
a(5) 0
a(6) 0
a(7) 0
MSB b(7) 1 b(6) 1 b(5) 1 b(4) 1 b(3) 0 b(2) 0 b(1) 0
LSB
b(0) 0
La notation downto est la plus conventionnelle pour les applications de synthse.
D.Giacona
VHDL Logique programmable
21/39
Partie 2 La structure dun programme VHDL
1.11. Surcharge doprateurs
Les oprations ne sont pas admises sur des donnes de types diffrents sauf si lon redfinit loprateur (ce procd est appel surcharge).
function + (a: integer; b: bit) return integer is begin if (b = 1) then return a + 1 ; else return a ; end if ; end + ; signal o, t : integer range 0 to 255 ; signal b : bit ; ... t <= o + 5 + b ;
Oprateur + prdfini pour les entiers
Oprateur + dfini par le concepteur
D.Giacona
VHDL Logique programmable
22/39
Partie 2 La structure dun programme VHDL
Les environnements de programmation comportent des paquetages dans lesquels certains oprateurs sont redfinis. Dans loutil Xilinx ISE, laddition (+), la soustraction (-), la multiplication et la division de vecteurs sont dfinies dans le paquetage std_logic_unsigned de la bibliothque ieee.
library ieee ; use ieee.std_logic_unsigned.all ;
A propos de la multiplication et de la division Loprateur de multiplication * est synthtisable (c.--d. que le compilateur est capable de produire une structure matrielle RTL) Loprateur de division / nest pas synthtisable de faon gnrale xint <= conv_integer(a) / 10; x <= conv_std_logic_vector (xint,16); Parce quil sagit dune division par 10, ce code gnre, avec Xilinx ISE, lerreur suivante : Operator <DIVIDE> must have constant operands or first operand must be power of 2 On peut dcrire la division laide dun systme squentiel que lon intgre dans un composant VHDL et que lon range dans une bibliothque.
D.Giacona
VHDL Logique programmable
23/39
Partie 2 La structure dun programme VHDL
1.12. Les attributs
1.12.1. Les attributs prdfinis par le langage
Les attributs sont des proprits spcifiques que lon peut associer aux signaux et aux types. La valeur dun attribut peut tre exploite dans une expression. Attribut valeur sur des types scalaires ou des lments (signaux, constantes, variables) de type scalaire 'left, 'right, 'high, 'low, 'length Attribut fonction sur des types discrets ordonns 'pos, 'val, 'succ, 'pred, 'leftof, 'rightof Attribut fonction sur des signaux 'event Attribut intervalle sur un signal dimensionn 'range, 'reverse_range
D.Giacona
VHDL Logique programmable
24/39
Partie 2 La structure dun programme VHDL
library ieee; use ieee.std_logic_1164.all; entity attributs is port( vector_dwn : in std_logic_vector(15 downto 0); vector_up : in std_logic_vector(0 to 7); x : out std_logic_vector(7 downto 0); y : out std_logic_vector(0 to 11); z : out std_logic_vector(7 downto 0)); end attributs; architecture arch_attributs of attributs is begin x(0) <= vector_dwn(vector_dwn'left); x(1) <= vector_dwn(vector_dwn'right); x(2) <= vector_up(vector_up'left); x(3) <= vector_up(vector_up'right); x(4) <= vector_dwn(vector_dwn'high); x(5) <= vector_dwn(vector_dwn'low); x(6) <= vector_up(vector_up'high); x(7) <= vector_up(vector_up'low); y(vector_up'range) z(vector_up'reverse_range) end arch_attributs; <= "00001111"; <= "00110011";
x(0) x(1) x(2) x(3) x(4) x(5) x(6) x(7) y(0) y(1) y(2) y(3) y(4) y(5) y(6) y(7) z(0) z(1) z(2) z(3) z(4) z(5) z(6) z(7) = = = = = = = = = = = = = = = = = = = = = = = = vector_dwn(15) vector_dwn(0) vector_up(0) vector_up(7) vector_dwn(15) vector_dwn(0) vector_up(7) vector_up(0) GND GND GND GND VCC VCC VCC VCC VCC VCC GND GND VCC VCC GND GND
D.Giacona
VHDL Logique programmable
25/39
Partie 2 La structure dun programme VHDL
2.La dclaration d'entit
La dclaration dentit dcrit une interface externe, unique, la manire des entres-sorties dune bote noire Elle comprend o ventuellement, une liste de paramtres gnriques o la dfinition des ports, c.--d. une liste de signaux dentre et de signaux de sortie Chaque signal possde un nom, un mode et un type
2.1.
Description dune entit non gnrique
entity nom_entit is port ( [signal] nom_signal {,nom_signal}: [mode] type_signal {;[signal] nom_signal {,nom_signal}: [mode] type_signal} ); end [entity] nom_entit;
D.Giacona
VHDL Logique programmable
26/39
Partie 2 La structure dun programme VHDL
Exemple : un temporisateur
Mode du signal Nom de lentit
Type de signal
entity tempo1ms is
Nom du signal
port ( a rst, clk t end tempo1ms;
: in : in : out
std_logic; std_logic; std_logic);
D.Giacona
VHDL Logique programmable
27/39
Partie 2 La structure dun programme VHDL
2.2.
Description dune entit gnrique
entity nom_entit is generic ( nom_paramtre {, nom_paramtre }: [ := expression_statique] {; nom_paramtre {, nom_paramtre [ := expression_statique]} port ( [signal] nom_signal {,nom_signal}: {;[signal] nom_signal {,nom_signal}: ); end [entity] nom_entit;
type_paramtre }: type_paramtre
[mode] type_signal [mode] type_signal}
Exemple : une unit arithmtique et logique
Paramtre gnrique
entity alu_gen is Valeur par dfaut generic ( width : integer := 4); port ( op : in STD_LOGIC_VECTOR (1 downto 0); a : in STD_LOGIC_VECTOR (width-1 downto 0); b : in STD_LOGIC_VECTOR (width-1 downto 0); ...
D.Giacona
VHDL Logique programmable
28/39
Partie 2 La structure dun programme VHDL
2.3.
Les modes des ports
VHDL dfinit quatre modes qui dterminent le sens de transfert dune donne au travers du port : in out
Lentit lit un signal dentre fourni par lextrieur (ex : load, reset, clock, donnes unidirectionnelles) Lentit fournit un signal de sortie, mais ne peut pas relire ce signal
buffer Larchitecture de lentit fabrique un signal utilisable en sortie,
qui peut aussi tre relu par lentit comme un signal interne (ex : sorties dun compteur dont ltat doit tre test)
inout
Le signal est bidirectionnel : en sortie, il est fourni par lentit; en entre, il est fourni par lextrieur. Ce mode autorise aussi le bouclage interne (ex : bus de donnes)
Par dfaut, le mode dun port est in.
D.Giacona
VHDL Logique programmable
29/39
Partie 2 La structure dun programme VHDL
In Out
Buffer
In
Inout
In
Out
D.Giacona
VHDL Logique programmable
30/39
Partie 2 La structure dun programme VHDL
3.Le corps d'architecture
Le corps darchitecture dcrit le fonctionnement interne du bloc logique
3.1.
Syntaxe
architecture nom_architecture of nom_entit is { dclaration_de_signal | dclaration_de_constante | dclaration_de_composant | dclaration_de_type | dclaration_d'alias} begin { instruction_concurrente_d'assignation_de_signal | instruction_concurrente_d'instanciation_de_composant | instruction_concurrente_de_processus | instruction_de_gnration} end [architecture] [nom_architecture];
D.Giacona
VHDL Logique programmable
31/39
Partie 2 La structure dun programme VHDL
3.2.
Dclaration des signaux internes
t
control rst a ar inc clr clk clk ar en sr
cnt10_binary
cnt(9:0)
clk compare count = 999 (d = 999) d(9:0)
count(9:0)
-- dclaration internes signal inc signal clr signal count
des signaux : std_logic; : std_logic; : std_logic_vector (9 downto 0);
D.Giacona
VHDL Logique programmable
32/39
Partie 2 La structure dun programme VHDL
3.3.
Instructions concurrentes
Proprits
3.3.1.
Une instruction concurrente dcrit une opration qui porte sur des signaux (entre, interne) pour produire dautres signaux (interne, sortie) Tous les signaux mis en jeu dans larchitecture sont disponibles au mme moment Lordre dcriture des instructions na pas dimportance (cest le paralllisme)
Le corps darchitecture est dcrit dans un ou plusieurs styles choisis non pas en fonction du type de logique (combinatoire ou squentielle) ou du type de traitement des donnes (parallle ou squentiel) choisis pour apporter concision ou par prfrence personnelle Trois styles peuvent coexister au sein dune mme architecture
D.Giacona
VHDL Logique programmable
33/39
Partie 2 La structure dun programme VHDL
3.3.2.
Classification des styles de description
Description flot de donnes : instructions concurrentes dassignation de signal
Description de la manire dont les donnes circulent de signal en signal, ou dune entre vers une sortie Trois types dinstructions : tiquette : <= tiquette : <= when else tiquette : with select <= when Lordre dcriture des instructions dassignation de signaux est quelconque
D.Giacona
VHDL Logique programmable
34/39
Partie 2 La structure dun programme VHDL
Description composant
structurelle
instructions
concurrentes
dinstanciation
de
Interconnexion de composants (components), la manire dun schma, mais sous forme dune liste Dans larchitecture utilisatrice, un composant peut tre considr comme une bote noire Un composant est instanci laide dune instruction dappel de composant : tiquette : nom_composant port map ( liste_des_entres_et_sorties ); Lordre dcriture des instructions dinstanciation de composants est quelconque Par dfinition, un composant est aussi un systme logique (un sous-sytme) ; ce titre, il doit aussi tre dcrit par un couple (entity, architecture) dans lequel sont dfinis ses entres-sorties et son comportement Le corps darchitecture du composant (le comportement) est dcrit selon un ou plusieurs styles ; par exemple, un composant peut faire appel dautres composants Un composant peut tre rang dans une bibliothque
D.Giacona
VHDL Logique programmable
35/39
Partie 2 La structure dun programme VHDL
Description comportementale : instructions concurrentes dappel de processus
Certains comportements peuvent tre dcrits de faon algorithmique ; il faut alors les dfinir comme des processus Dans larchitecture utilisatrice, un processus est considr comme une instruction concurrente Instruction dappel de processus : tiquette: process dclarations begin instructons_squentielles end process; Lordre dcriture des instructions dappel de processus est quelconque Un processus regroupe des instructions squentielles qui ne servent qu traduire simplement et efficacement, sous forme dun algorithme, le comportement dun sousensemble matriel (mme sil est par exemple de nature combinatoire) ; le compilateur traduit lensemble de ces instructions squentielles en netlist Trois types dinstructions lintrieur dun processus : <= if then else case when Lordre dcriture des instructions lintrieur du processus est important
D.Giacona
VHDL Logique programmable
36/39
Partie 2 La structure dun programme VHDL
3.3.3.
Exemple 1 : architecture comportant des styles diffrents
Premire phase de conception : description schmatique Soit manuscrite, avant une transcription textuelle Soit laide dun diteur de schma (outils : Xilinx ISE, ModelSim Designer)
SYSTEME
B1 x B3
B2
Signal interne
D.Giacona
VHDL Logique programmable
37/39
Partie 2 La structure dun programme VHDL
Deuxime phase de conception : description VHDL dans trois styles diffrents
entity systeme is port( ... Fichier systeme.vhd projet device) (dans architecture arch_systeme of systeme is signal x,y ... -- liste des signaux internes ... begin -- B1 (Description par flot de donnes) -- Instructions concurrentes dassignations de -- signaux B1 : x <= a and b; ... -- B2 (Description comportementale) B2 : process (...) -- Instructions squentielles y <= ... end process; -- B3 (Description structurelle) B3 : composant_B3 port map (x, y,...); end arch_systeme; D.Giacona Lien par les noms des signaux
VHDL Logique programmable
38/39
Partie 2 La structure dun programme VHDL
3.3.4.
Exemple 2 : styles diffrents pour un mme bloc logique
architecture archmux of begin x <= a when (s = b when (s = c when (s = d; end archmux; mux4_1 is "00") else "01") else "10") else
architecture archmux of mux4_1 is begin with s select x <= a when "00", b when "01", c when "10", d when others; end archmux;
architecture archmux of mux4_1 is begin x <= (not s(1) and not s(0) or (not s(1) and s(0) or ( s(1) and not s(0) or ( s(1) and s(0) end archmux; architecture arch_mux of mux4_1 is begin process (s, a, b, c, d) begin case s is when "00" => x <= a; when "01" => x <= b; when "10" => x <= c; when others => x <= d; end case; end process; end arch_mux;
and and and and
a) b) c) d);
D.Giacona
VHDL Logique programmable
39/39
Partie 2 La structure dun programme VHDL
Rsultat de compilation Dans cet exemple, quel que soit le style de description employ, les quations gnres par le compilateur sont les mmes. x = d + c + b + a * s(0) * s(1) * /s(0) * s(1) * s(0) * /s(1) * /s(0) * /s(1)
D.Giacona