Vous êtes sur la page 1sur 5

I.

Langage de description de matériel

VHDL (Very high speed Hardware Description Language). Un


programme vhdl contenant trois éléments indispensables :
1. Bibliothèque (Library),
2. Interface (Entity),
3. Architecture (Architecture).
1.1. Library

Les bibliothèques offrent des définitions des types de


données et des expressions de signaux de synchronisation. Par
exemple la bibliothèque IEEE contenant plusieurs sous-
bibliothèques.

 ieee.std_logic_1164
 ieee.math_complex
 ieee.math_real
 ieee.numeric_std
 ieee.std_logic_arith
 ieee.std_logic_signed
 ieee.std_logic_unsigned

La programmation en vhdl est comme suite :


Library IEEE ;
Use ieee.std_logic_1164.all ;

1.2. ENTITY

C’est l'interface du circuit numérique. Les objets


manipulés dans cette section, ce sont les ports d’entrée/sortie
du circuit.

Entity Half_adder Is Port (


a, b : In Std_logic ;
s,c : Out Std_logic ); a in out s
End Half_adder; b in out c

Si a, b contenant plusieurs bits, on déclare comme vecteur.


a, b : In Std_logic_vector (3 downto 0) ;

1
1.3. ARCHITECTURE

C’est la description détaillée du circuit numérique. Les


objets manipulés en VHDL sont :

- les signaux (SIGNAL)


- les constantes (CONSTANT)
- les variables (VARIABLE)
- les paramètres (GENERIC)

Ces objets représentent une valeur, ils doivent être typés :


(Std_logic, Integer, Bit, Bit_vector, Boolean, Time, Array,
Enumération… etc).
a
Architecture RTL of Half_adder is s
Begin b
s <= ( a xor b) ;
c <= ( a and b) ;
End RTL ; c

Les valeurs d’un signal représenté par les états logique résumé
dans le tableau suivant :

symbole Interprétation symbole Interprétation

U Uninitialized Z High Impedance


X Forcing Unknown W Weak Unknown
0 Forcing 0 L Weak 0
1 Forcing 1 H Weak 1
- Don’t Care

2
II. Operateur VHDL

Le tableau ci-dessous résume les types arithmétiques


et logiques utilisé dans le langage de programmation vhdl.

Label désignation Label désignation

Opérateurs relationnels

= égale < inferieur

/= Non égale > supérieur

<= Inferieur ou égale >= supérieur ou égale

Opérateurs arithmétiques

+ addition * multiplication

- soustraction / division

III. L’affectation et les déclarations des types en


vhdl

3.1. Déclaration des types

 Type A is array (0 to N-1) of std_logic ; -- vecteur de N


éléments de 1 bit
 Type A is array (0 to N-1, 1 to M-1) of std_logic ; -- vecteur de (N x
M) éléments de 1 bit
3.2. Déclaration des constants

Constant A : integer := 16; -- A de type constante


Constant A : std_logic_vector(3 downto 0):= "1111";
3.3. Déclaration des signaux & variable

Signal A : std_logic_vector(3 downto 0; -- A de type sinal


variable A : std_logic_vector(3 downto 0; -- A de type variable
3.4. L’affectation des signaux

B <= '0' ; -- B signal de 1 bit

A <= "01001010" ; -- A bus de 8 bits

A <= X"4A" ; -- A bus de 8 bits, en Hexadécimal

A <= 74 ; -- A bus de 8 bits, en décimal

3.5. L’affectation des variables

A := "01001010" ; -- A variable de 8 bits

A := 74 ; -- A variable de 8 bits, en décimal

3.6. Concaténation des bits

3
A <= "100" ; -- A bus de 3 bits

S <= "10000" & A ; -- B bus de 8 bits

3.7. Décalage à droite et à gauche

S <= '0' & A(7 downto 0); -- décalage d’un bit à droite

S <= A(7 downto 0) & '0'; -- décalage d’un bit à gauche

3.8. Affectation conditionnelle

a) WHEN ... ELSE


S <= expression when condition
[else expression when condition]
[else expression];

b) WITH ... SELECT


with SELECTION select
S <= expression when valeur_de_selection ,
[expression when valeur_de_selection , ]
[expression when others ] ;

c) IF ... THEN
if condition then instructions
[elsif condition then instructions]
[else instructions]
end if ;

d) CASE ... IS
case slection is
when valeur_de_sélection => signal <= instructions ;
[when others <= instructions]
end case;

Exemple :
S <= A when (B = '0') else '1' ;

4
IV. Conversion entres les types vhdl
Le diagramme suivant présent le passage de conversion d’un
type a l’autre.

To_integer (v ) Std_logic_vector (v )
SIGNED

To_signed (v, length ) Signed( v )

INTEGER STD_LOGIC_VECTOR

To_unsigned (v, length ) Unsigned (v )

UNSIGNED
To_integer (v ) Std_logic_vector (v )

Figure 1 : Diagramme de conversion.


Exemple :
Conversion d’une valeur non signé ou non signé vers un type
entier.
TO_INTEGER( value [, Length] ) ;

TO_INTEGER('15.6789', True ) ; -- donne 15


TO_INTEGER('15.6789', False ) ; -- donne 16
TO_INTEGER(value, 5 ) ; -- donne value de 5 bits

Vous aimerez peut-être aussi