Vous êtes sur la page 1sur 25

Module: Technologie VLSI

Le langage de description
VHDL

Mohamed ATRI
Mohamed.atri@fsm.rnu.tn
VHDL pour la synthèse

27/12/21 VLSI Technologie VHDL M.ATRI 2


Avantages
 Travailler à un niveau haut d’abstraction

 Chercher un compromis entre les


architectures
 On s’approche de la spécification
 Description indépendante de la
technologie
27/12/21 VLSI Technologie VHDL M.ATRI 3
Sous ensemble synthétisable VHDL

 Pas toutes les expressions sont


synthétisables
 Restrictions sur :
 Types, Objets et expressions
 Style de synchronisation

27/12/21 VLSI Technologie VHDL M.ATRI 4


Types et sous-types
 Les types synthétisable en VHDL sont:
 Les types standards:std_logic, bit, integer, boolean
 Types énumérés:
 Type etat is (etat_0,etat_1,etat_2);
 Type lumiere is (allumé, éteint, clignotant);
 Sous-types:
 Subtype nom is nomtype début to fin
 Subtype Byte is std_logic_vector (7 downto 0);

27/12/21 VLSI Technologie VHDL M.ATRI 5


Types et sous-types
 Les types non synthétisable en VHDL
sont:
 Real
 Time
 File
 Units

27/12/21 VLSI Technologie VHDL M.ATRI 6


Types et sous-types
 Compilation checks :
 type BIT_VECTOR is array (INTEGER range <>) of BIT;
 type SIGNED is array (INTEGER range <>) of BIT; -- double
definition
 subtype WORD is BIT_VECTOR(1 to 8);
 variable BV : BIT_VECTOR(1 to 8);
 variable BS : SIGNED (1 to 8);
 variable BW : WORD;
 ...
 begin
 BV := BS; -- interdit
 BV := BIT_VECTOR(BS); -- autorisé
 BV := BW; -- recommendé

27/12/21 VLSI Technologie VHDL M.ATRI 7


Constantes
 Constante est un objet qui prend une
valeur avant que le processus de
synthèse commence
 constant K : INTEGER := 3;
 constant B : BIT_VECTOR :=
"0101";
 constant NAME : STRING := "my
name";
27/12/21 VLSI Technologie VHDL M.ATRI 8
Variables
 La déclaration se fait dans la partie
déclarative d’un process
process (A, B)
variable C : BIT;
begin
C:= A and B;
D <= C;
end process;
27/12/21 VLSI Technologie VHDL M.ATRI 9
Signal

 La déclaration se fait dans:


 Partie déclarative de l’architecture
 Partie déclarative de l’entité commun aux
différentes architectures

27/12/21 VLSI Technologie VHDL M.ATRI 10


Valeurs initiales

 L’initialisation des variables ou des


signaux au moment de la déclaration
n’est pas supporté par la synthèse

 Solution => effectuer les affectations


au moment du reset

27/12/21 VLSI Technologie VHDL M.ATRI 11


Les opérateurs
 Opérateurs logiques
 And, or, nand, nor, xor, xnor, not
 Opérateurs relationnels:
 Égalité = et /=
 Comparaison <, >, <=, >=
 Opérateurs arithmétiques
 Addition, soustraction: +,-
 Multiplication, division:*, /, mod et rem
 Autres: abs

27/12/21 VLSI Technologie VHDL M.ATRI 12


Synchronisation
 Wait on signals
 Process (liste de sensibilité)
 process
 begin
 wait on S1, S2, S3, S4
 R <= S1 and S2; --Combinatoire
 if S4 then
 R <= S3;
 end if;
 end process;

27/12/21 VLSI Technologie VHDL M.ATRI 13


Synchronisation sur le Clk

 Wait until clk’event and clk=‘1’

 If clk’event and clk=‘1’ then

27/12/21 VLSI Technologie VHDL M.ATRI 14


Expression conditionnelle

case W is
 if C1 = '0' then  when ADD => R <= X + Y;
R <= ...  when SUB => R <= X - Y ;
 elsif C2 = '1'  when RST =>
 R <= TO_UNSIGNED (O,
then R <= ... R'length);
when others => R <=
end if;


"------";
 end case ;

27/12/21 VLSI Technologie VHDL M.ATRI 15


Expression itérative
 for K in 1 to N loop ...
 while X <= N loop ... X:=
end loop; X+1; ... end loop;

 for I in TAB'range loop ...  while F(X, Y, Z) loop ...


end loop;
 for I in V'high downto
V'low + 1 loop...

 for I in ENUM_TYPE
loop...

27/12/21 VLSI Technologie VHDL M.ATRI 16


Fonctions et procédures
 Sous-programme => une déclaration (optionnelle) + un corps
 Procédure
 mot-clé « procedure »

 appel comme une instruction

 paramètres in, out et inout => peut rendre plusieurs valeurs

 peut se synchroniser (wait)

 Fonction
 mot-clé « function »
 appel dans une expression
 paramètres mode in, instruction return => rend une valeur
unique
 rend immédiatement sa valeur (pas de wait)
 Généralement définies dans les packages
27/12/21 VLSI Technologie VHDL M.ATRI 17
Exemple d’une fonction
function zero_count ( a: bit_vector) return
integer is
variable nb: integer:= 0;
begin
for i in 1 to a'length loop –length est un attribut
du signal
if a(i)=‘0' then nb:= nb+1; end if;
end loop;
return nb;
end zero_count;
27/12/21 VLSI Technologie VHDL M.ATRI 18
Processus en VHDL

 Bascule active sur


front montant

 Latch sur niveau


haut

27/12/21 VLSI Technologie VHDL M.ATRI 19


Affectation de signal

 Bascule active sur


front montant

 Latch sur niveau


haut

27/12/21 VLSI Technologie VHDL M.ATRI 20


Instanciation de composant
 architecture A of ...
 component C port (A : in BIT;
B : out BIT);
 end component;
 signal LA, LB: BIT;
 begin
 C1 : C port map (LA, LB);
 End A

27/12/21 VLSI Technologie VHDL M.ATRI 21


Instruction Generate

 Intérêt: Pour la modélisation de descriptions répétitives ou


conditionnelles.
=> macro-génération de code VHDL
Syntaxe
 Forme conditionnelle
 label : if condition_booléenne generate
Instructions concurrentes
end generate {label};
 Forme itérative
 label : for paramètre in intervalle generate
Instructions concurrentes
end generate {label};
 Remarque: Dans l'exemple suivant, l'instruction concurrente est une
instanciation de composant => cas très courant
27/12/21 VLSI Technologie VHDL M.ATRI 22
Generate: exemple

-- Dans le corps de l'architecture


L1: for I in 1 to N-2 generate
INSTANCE : INV port map (P(I), P(I+1)) ;
end generate;
L2: if N >= 2 generate
 Dans la partie déclarative INSTANCE_1: INV
-- de l'architecture port map (ENTREE, P(1)) ;
INSTANCE_N: INV
signal P : BIT_VECTOR(1 to N-
port map (P(N-1), SORTIE) ;
1) ;
end generate;
component INV port ( E : in L3: if N=1 generate
BIT ; S : out BIT) ; INSTANCE_1: INV
end component ; port map (ENTREE, SORTIE);
end generate;

27/12/21 VLSI Technologie VHDL M.ATRI 23


Généricité
 Qu'est-ce que la généricité ?
 Passer un ou plusieurs paramètres à un bloc ou à une entité.
 Ces paramètres (connus avant la simulation) sont vus comme des constantes à
l'intérieur du bloc.
 En pratique
Cela s'applique surtout aux entités
 entités paramétrables
 Ram de N mots de M bits
 Inverseur de temps de propagation TP
 compteur jusqu'à N
 etc.
 Syntaxe
 Clause de généricité (après l'en-tête de bloc ou d'entité) :
=>juste avant la clause port
generic ( parm_1, parm_2, ... : type { := valeur_par_défaut};
... parm_n, parm_i,... : type { := valeur_par_défaut});

27/12/21 VLSI Technologie VHDL M.ATRI 24


Généricité: exemple

 Cette vue externe se traduit par :


entity CHAINE_D_INVERSEURS is
generic ( N : INTEGER ; TP: TIME) ; --N: nombre d'inverseurs,
port (ENTREE : in BIT ; SORTIE : out BIT) ; -- TP: temps de propagation des inverseurs
end CHAINE_D_INVERSEUR ;
 Seront connus que lors de l'instanciation ou bien lors de la configuration du
composant
 On écrit l'architecture correspondante en utilisant N et TP comme des
constantes.

27/12/21 VLSI Technologie VHDL M.ATRI 25

Vous aimerez peut-être aussi