Documente Academic
Documente Profesional
Documente Cultură
1/39
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
2/39
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
3/39
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
4/39
1.2.
Quelques conseils
Les compilateurs sont vraiment indulgents mais un lecteur l'est srement moins !
D.Giacona
5/39
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
6/39
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
7/39
1.3.
tempo1ms
t
Signaux externes
control rst ar a inc en clr clk clk clk sr cnt(9:0) ar cnt10_binary
Signaux internes
D.Giacona
8/39
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
9/39
1.4.
Les commentaires
1.5.
Les identificateurs
D.Giacona
10/39
1.6.
Les signaux portent les informations des liaisons dentre, des liaisons de sortie et des liaisons internes signal inc : std_logic;
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
11/39
1.7.
1.7.1.
D.Giacona
12/39
1.7.2.
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
std_logic_vector
Pour utiliser ces types il faut inclure les directives suivantes dans le code source.
D.Giacona
13/39
D.Giacona
14/39
1.7.3.
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
15/39
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
16/39
1.7.5.
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
17/39
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 caractres
a
18/39
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 :
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
19/39
1.9.2.
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
20/39
a(0) 1
a(1) 1
a(2) 1
a(3) 1
a(4) 0
a(5) 0
a(6) 0
a(7) 0
LSB
b(0) 0
21/39
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 ;
D.Giacona
22/39
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.
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
23/39
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
24/39
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
25/39
2.1.
D.Giacona
26/39
Exemple : un temporisateur
Type de signal
entity tempo1ms is
Nom du signal
: in : in : out
D.Giacona
27/39
2.2.
type_paramtre }: type_paramtre
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
28/39
2.3.
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
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)
D.Giacona
29/39
In Out
Buffer
In
Inout
In
Out
D.Giacona
30/39
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
31/39
3.2.
cnt10_binary
cnt(9:0)
count(9:0)
D.Giacona
32/39
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
33/39
3.3.2.
D.Giacona
34/39
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
35/39
36/39
3.3.3.
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
37/39
38/39
3.3.4.
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;
a) b) c) d);
D.Giacona
39/39
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