Vous êtes sur la page 1sur 38

La Programmation VHDL

L’abréviation VHDL signifie VHSIC Hardware Description Language (VHSIC :

Very High Speed Integrated Circuit).

• Historiquement commencé  en 1980 ou le département de défense américain lance un appel d’offre

pour un langage qui permettrait de décrire tous les systèmes électroniques utilisés.

• Motivation affichée: réutilisabilité et réduction des coûts de conception.

• En 1983 trois compagnies (Intermetics, IBM, Texas Instruments) commencent le développement.

• Enfin en 1985 une première version officielle de VHDL (version 7.2) a vu le jour. Puis pour son

standardisation a été  confié  à ieee en 1986.

• Le deuxième langage similaire c’est le Verilog qui a  été  inventé  par Gateway Design Automation

Inc. aux alentours de 1984.


La Programmation VHDL

ü Ces deux langages font abstraction des contraintes technologies des circuits PLDs.

ü Ils permettent au code  écrit d’être portable, c’est à dire qu’une description écrite pour un circuit peut  être

facilement utilisée pour un autre circuit.

ü Ces langages dits de haut niveau permettent de matérialiser les structures  électroniques d’un circuit.

ü En effet les instructions  écrites dans ces langages se traduisent par une configuration logique de portes et de

bascules qui est intégrée l’intérieur des circuits PLDs.

ü C’est pour cela que en parle de description VHDL ou VERILOG que de langage.
La Programmation VHDL
q Schéma fonctionnel d’implantation de descriptions VHDL dans un circuit logique
programmable.

Blocs fonctions implémentés dans un PLD


La Programmation VHDL

• Ci-dessus le schéma représente un exemple d’implantation de descriptions VHDL ou de blocs fonctionnels

implantés dans un PLD.

• Lors de la phase de synthèse chaque bloc sera matérialisé  par des portes et/ou, des bascules ou des LUT et des

multiplexeurs. On peut remarquer sur le schéma la fonction particulière du bloc VHDL N°1.

• En effet dans la description fonctionnelle d’un PLD on a souvent besoin d’une fonction qui sert à cadencer le

fonctionnement de l’ensemble, celle-ci est très souvent réalisée par une machine d’états synchronisée par une

horloge.
La Programmation VHDL
q Organisation fonctionnelle de développement d’un PLD.

Généralement on peut utiliser trois méthode de programmation schématique

VHDL/VERILOG et diagramme d’états .

La figure suivante illustre les différentes  étapes de développement d’un PLD.


La Programmation VHDL

Organisation fonctionnelle de développement d’un PLD.


La Programmation VHDL
q Structure d’une description VHDL simple

Une description VHDL est composée de 3 parties indissociables à savoir


• déclaration des bibliothèques
• L’entité  (ENTITY), elle définit les entrées et sorties.
• L’architecture (ARCHITECTURE), elle contient les instructions

Exemple : Un multiplexeur 2 vers 1 sur un FPGA


La Programmation VHDL
q La première partie d’une description VHDL c’est la déclaration
des Bibliothèques. L’IEEE (Institut of Electrical and Electronics
Engineers) les a normalisées et plus particulièrement la
bibliothèque IEEE1164. Elles contiennent les définitions des
types de signaux  électroniques, des fonctions et sous
programmes Permettant de réaliser des opérations arithmétiques
et logiques, et autres.
Library ieee;
Use ieee.std_logic_1164.all;
Use ieee.numeric_std.all;
Use ieee.std_logic_unsigned.all;

La directive Use permet de sélectionner les bibliothèques utiliser.

q Elle permet de définir le NOM de la description VHDL ainsi que les


entrées et sorties utilisées, l’instruction qui les définit c’est port :

entity NOM_DE_L_ENTITE is
port ( Description des signaux d’entrées
/sorties …);
end NOM_DE_L_ENTITE;
La Programmation VHDL
Exemples:
Pour chaque signal on doit définir: le NOM_DU_SIGNAL, le sens et le type.
CLK: in std_logic;
v Le NOM_DU_SIGNAL.
BUS : out std_logic_vector (31 downto 0);
Il est composé de caractères, le premier caractère doit  être une lettre.
entity COUNT is VHDL n’est pas sensible   la   <<casse>>  ,
port(CLK, RST:in std_logic; v Le SENS du signal.
CNT: inout std_logic_vector(2downto 0)); - in : signal en entrée.

end COUNT; - out : signal en sortie.


- inout : signal en entrée sortie
entity 7SEG is
- buffer : signal en sortie mais utilisé  comme entrée dans la description.
port (BCD : in std_logic_vector(3 downto 0);
a,b,c,d,e,f,g :OUT std_logic);
end 7SEG;
La Programmation VHDL
v Le TYPE.
v TYPE DES DONNEES
Le TYPE utilisé pour les signaux d’entrées / sorties est :
Le package standard IEEE fourni un ensemble de type de données
- le std_logic pour un signal.
prédéfinis, quelque types sont synthétisable tant que le reste est juste
- le std_logic_vector pour un bus composé de
pour la modélisation de comportement abstrait .les types de données les
plusieurs signaux.
plus utilisés sont :
Par exemple un bus bidirectionnel de 8 bits s’écrira :
LATCH : inout std_logic_vector (7 downto 0) ;
v Types  numérés:
bit {0, 1}
LATCH(7) correspond au MSB et LATCH(0) correspond boolean {false, true}
au LSB. character {“any of the 256 ASCII characters defined in ISO 8859-1”}

Les valeurs possibles d’ un signal de type std_logic sont : f) TYPES INTERVALLE :


Integer tout les nombre entiers comprises entre -2.147.483.648 et +2.14.483.647
- ‘0’ ou ‘L’ : pour un niveau bas.
Real nombres fractionel entre comprises _1.7e38 et +1.7e38
- ‘1’ ou ‘H’ : pour un niveau haut.
v TYPES TABLEAU :
- ‘Z’ : pour  tat haute imp dance.
Les types TABLEAU ou array sont des collections d'objets de même type, indexés
- ‘-‘ : Quelconque, c’est   dire n’importe quelle par des entiers ou des  numérés.
valeur.
La Programmation VHDL
Exemple

type bus is array (0 to 31) of bit;


type RAM is array (0 to 1024, 0 to 31) of bit;
type PRIX is ranger 0 to 1000;
type COULEURS is (BLANC, BLEU, VERT, ROUGE, JAUNE, NOIR,
ARC_EN_CIEL);
type PRIX_PEINTURES is array (COULEUR range BLANC to NOIR) of
PRIX;
La Programmation VHDL

TYPE PHYSIQUE :
• Un type physique est la combinaison d'un type entier et d'un système d'unité .
Le type TIME, est le seul type physique prédéfini :
type time is range $- to $+ -- l'intervalle dépend de la machine
units
fs;
ps = 1000 fs;
ns = 1000 ps;
us = 1000 ns;
Ms = 1000 us;
sec = 1000 ms;
min = 60 sec;
hr = 60 min;
end units;
• Les simulateurs VHDL utilsent la fonction now, de la bibliothèque STD , qui retourne le temps physique de type
TIMETYPES FICHIERS :
• Les types fichiers FILE permet l’échange de données entre l’extérieur et le simulateur VHDL.
• Il est utilisé  principalement pour créer des fichiers de test ou TESTBENCH de modèles.
• Le paquetage TEXTIO de la bibliothèque STD définit un type fichier texte TEXT et des procédures pour accéder aux
lignes du fichier et aux chaînes dans la ligne.
• Pour l'utiliser il est nécessaire de le déclarer en début de fichier (USE
STD.TEXTIO.ALL;
La Programmation VHDL
q Déclaration de l’architecture correspondante à l’entité:

L’architecture décrit le fonctionnement souhaité  pour un circuit ou une partie du circuit.


En effet le fonctionnement d’un circuit est généralement décrit par plusieurs modules VHDL.
L’architecture  établit  à travers les instructions les relations entre les entrées et les sorties.
On peut avoir un fonctionnement purement combinatoire, séquentiel voire les deux (séquentiel et
combinatoire).
La Programmation VHDL
Exemples :

Opérateurs logiques de base

entity PORTES is
port (A,B :in std_logic;
Y1,Y2,Y3,Y4,Y5,Y6,Y7:out std_logic);
end PORTES;
architecture DESCRIPTION of PORTES is
begin
Y1 <= A and B;
Y2 <= A or B;
Y3 <= A xor B;
Y4 <= not A;
Y5 <= A nand B;
Y6 <= A nor B;
Y7 <= not(A xor B);
end DESCRIPTION;
La Programmation VHDL
Exemples :
Décodeurs 7 segments

entity DEC7SEG4 is
port (DEC :in std_logic_vector(3 downto 0);
SEG:out std_logic_vector(0 downto 6));
end DEC7SEG4;
architecture DESCRIPTION of DEC7SEG4 is
begin
SEG <= "1111110" when DEC = 0
else "0110000" when DEC = 1
else "1101101" when DEC = 2
else "1111001" when DEC = 3
else "0110011" when DEC = 4
else "1011011" when DEC = 5
else "1011111" when DEC = 6
else "1110000" when DEC = 7
else "1111111" when DEC = 8
else "1111011" when DEC = 9
else "-------";
end DESCRIPTION;
La Programmation VHDL
Décodage d’adresses
Library ieee;
Use ieee.std_logic_1164.all;
Use ieee.numeric_std.all;
entity DECODAGE is
port (
A15, A14, A13, A12, A11, A10 : in std_logic;
RAM0 : out std_logic;
RAM1 : out std_logic;
RAM2 : out std_logic;
RAM3 : out std_logic;
ROM : out std_logic;
INTER1 : out std_logic;
INTER2 : out std_logic;
INTER3 : out std_logic);
end DECODAGE;
architecture DESCRIPTION of DECODAGE is
signal ADRESSE: std_logic_vector(15 downto 0);
begin
ADRESSE <= A15 & A14 & A13 & A12 & A11 & A10 & "----------";
-- definition du bus d’adresses
ROM <= '0' when (ADRESSE >= x"E000") and (ADRESSE <= x"FFFF") else '1';
RAM0 <= '0' when (ADRESSE >= x"0000") and (ADRESSE <= x"03FF") else '1’;
RAM1 <= '0' when (ADRESSE >= x"0400") and (ADRESSE <= x"07FF") else '1';
RAM2 <= '0' when (ADRESSE >= x"0800") and (ADRESSE <= x"0BFF") else '1';
RAM3 <= '0' when (ADRESSE >= x"0C00") and (ADRESSE <= x"0FFF") else '1';
INTER1 <= '0' when (ADRESSE >= x"8000") and (ADRESSE <= x"8001") else '1';
INTER2 <= '0' when (ADRESSE >= x"A000") and (ADRESSE <= x"A001") else '1';
INTER3 <= '0' when (ADRESSE >= x"C000") and (ADRESSE <= x"C00F") else '1';
end DESCRIPTION;
La Programmation VHDL
q Les instructions concurrent pour circuit combinatoire.

ü Dans le mode concurent pour une description VHDL toutes les instructions sont évaluées et affectent les
signaux de sortie en même temps.
ü L’ordre dans lequel elles sont écrites n’a aucune importance. En effet la description génère des structures
électroniques, c’est la grande différence entre une description VHDL et un langage informatique
classique.
ü Dans un système à microprocesseur, les instructions sont exécutées les unes à la suite des autres.
ü Avec VHDL une structure sous forme d’un schéma logique va être générée par le synthétiseur.

Exemple : Pour le décodeur 1 parmi 4, l’ordre dans lequel seront écrites les instructions n’a aucune importance.
La Programmation VHDL
q Les instructions concurrent pour circuit combinatoire.

L’instruction définissant l’état de D0 à été


architecture DESCRIPTION of DECOD1_4 is
begin déplacée à la troisième ligne, la synthèse de
D0 <= (not(IN1) and not(IN0)); -- première instruction
D1 <= (not(IN1) and IN0); -- deuxième instruction cette architecture est équivalente à la première.
D2 <= (IN1 and not(IN0)); -- troisième instruction
D3 <= (IN1 and IN0); -- quatrième instruction
end DESCRIPTION;
L’architecture ci dessous est équivalente :
architecture DESCRIPTION of DECOD1_4 is
begin
D1 <= (not(IN1) and IN0); -- deuxième instruction
D2 <= (IN1 and not(IN0)); -- troisième instruction
D0 <= (not(IN1) AND not(IN0)); -- première instruction
D3 <= (IN1 AND IN0); -- quatrième instruction
end DESCRIPTION;
La Programmation VHDL
q Les instructions concurrent pour circuit combinatoire.
• Les opérateurs.
§ L’affectation simple
Dans une description VHDL, c’est certainement l’opérateur le plus utilisé. En Effet il permet de modifier l’état d’un signal
en fonction d’autres signaux et/ou d’autres opérateurs.

Exemple avec des portes logiques : S1 <= E2 and E1 ;


Les valeurs numériques que l’on peut affecter à un signal sont les suivantes :
• ‘1’ ou ‘H’ pour un niveau haut avec un signal de 1 bit.
• ‘0’ ou ‘L’ pour un niveau bas avec un signal de 1 bit.
• ‘Z’ pour un état haute impédance avec un signal de 1 bit.
• ‘-’ pour un état quelconque, c’est à dire ‘0’ ou ‘1’. Cette valeur est très utilisée avec les instructions : when … else et with ….
Select ….
Pour les signaux composés de plusieurs bits on utilise les guillemets
• " … " , voir les exemples ci dessous :
ü Les bases numériques utilisées pour les bus peuvent être :
§ BINAIRE, exemple : BUS <= "1001" ; -- BUS = 9 en décimal
§ HEXA, exemple : BUS <= X"9" ; -- BUS = 9 en décimal
§ OCTAL, exemple : BUS <= O"11" ; -- BUS = 9 en décimal
Remarque : La base décimale ne peut pas être utilisée lors de l’affectation de signaux. On peut seulement l’utiliser avec certains
opérateurs, comme + et – pour réaliser des compteurs.
La Programmation VHDL
q Les instructions concurrent pour circuit combinatoire.
• Opérateurs
§ Opérateur de concaténation : &.
Cet opérateur permet de joindre des signaux entre eux
Exemple : -- Soit A et B de type 3 bits et S1 de type 8 bits
-- A = "001" et B ="110"
S1 <= A & B & "01" ;
-- S1 prendra la valeur suivante après cette affectation
-- S1 = "001110 01"
Library ieee;
Use ieee.std_logic_1164.all;
entity AFFEC is
port (
E1,E2 : in std_logic;
BUS1,BUS2,BUS3 : out std_logic_vector(3 downto 0);
S1,S2,S3,S4 : out std_logic);
end AFFEC;
architecture DESCRIPTION of AFFEC is
begin
S1 <= '1'; -- S1 = 1
S2 <= '0'; -- S2 = 0
S3 <= E1; -- S3 = E1
S4 <= '1' when (E2 ='1') else 'Z'; -- S4 = 1 si E1=1 sinon S4
-- prend la valeur haute impédance
BUS1 <= "1000"; -- BUS1 = "1000"
BUS2 <= E1 & E2 & "10"; -- BUS2 = E1 & E2 & 10
BUS3 <= x"A"; -- valeur en HEXA -> BUS3 = 10(déc)
end DESCRIPTION;
La Programmation VHDL
q Les instructions concurrent pour circuit combinatoire.

• Les opérateurs.
§ Opérateurs logiques.
La Programmation VHDL
q Les instructions concurrent pour circuit combinatoire.
• Les opérateurs.
§ Opérateurs logiques.
Exemple S1 <= A sll 2 ; -- S1 = A décalé de 2 bits à gauche.
S2 <= A rol 3 ; -- S2 = A avec une rotation de 3 bits à gauche
S3 <= not (R); -- S3 = /R

Remarque : Pour réaliser des décalages logiques en synthèse logique, il est préférable d’utiliser les instructions suivantes :
Décalage à droite :
-- Si A est de type std_logic_vector(7 downto 0)
S1 <= ‘0’ & A(7 downto 1); -- décalage d’un bit à droite
S1 <= "000" & A(7 downto 3); -- décalage de trois bits à droite
Décalage à gauche :
-- Si A est de type std_logic_vector(7 downto 0)
S1 <= A(6 downto 0) & ‘0’; -- décalage d’un bit à gauche
S1 <= A(4 downto 0) & "000"; -- décalage de trois bits à gauche
La Programmation VHDL
q Les instructions concurrent pour circuit combinatoire.
• Les opérateurs.
§ Opérateurs arithmétiques.

Remarque N°1 : Pour pouvoir utiliser les opérateurs ci-dessus il faut rajouter les
Bibliothèques suivantes au début du fichier VHDL:
Use ieee.numeric_std.all ;
Use ieee.std_logic_arith.all ;
La Programmation VHDL
q Les instructions concurrent pour circuit combinatoire.
• Les opérateurs.
§ Opérateurs arithmétiques.

Exemples :
S1 <= A – 3 ; -- S1 = A – 3
-- On soustrait 3 à la valeur de l’entrée / signal A
S1 <= S1 + 1 ; -- On incrémente de 1 le signal S1
Remarque N°2 : Attention l’utilisation de ces opérateurs avec des signaux comportant un
nombre de bits important peut générer de grandes structures électroniques.
Exemples :
S1 <= A * B ;-- S1 = A multiplié par B : A et B sont codés sur 4 bits
S2 <= A / B ;-- S2 = A divisé par B : A et B sont codés sur 4 bits
La Programmation VHDL
q Les instructions concurrent pour circuit combinatoire.
• Les opérateurs.
§ Opérateurs relationnels.

Ils permettent de modifier l’état d’un signal ou de signaux suivant le résultat d’un test
ou d’une condition. En logique combinatoire ils sont souvent utilisés avec les
instructions :
- when … else …
- with …. Select ….
Affectation conditionnelle :
Cette instruction modifie l’état d’un signal suivant le résultat d’une condition logique entre un ou des signaux, valeurs, constantes.
SIGNAL <= expression when condition
[else expression when condition]
[else expression];
Remarque : l’instruction [else expression] n’est pas obligatoire mais elle fortement
conseillée, elle permet de définir la valeur du SIGNAL dans le cas où la
condition n’est pas remplie.
La Programmation VHDL
q Les instructions concurrent pour circuit combinatoire.
• Les opérateurs.
§ Opérateurs relationnels.

Exemple :
-- S1 prend la valeur de E2 quand E1=’1’ sinon S1 prend la --
valeur ‘0’
S1 <= E2 when ( E1= ‘1’) else ‘0’;
Schéma correspondant :

Exemple N°2 :
-- Structure évoluée d’un multiplexeur 4 vers 1
S2 <= E1 when (SEL="00" ) else
E2 when (SEL="01" ) else
E3 when (SEL="10" ) else
E4 when (SEL="11" )
else ‘0’;
La Programmation VHDL
q Les instructions concurrent pour circuit combinatoire.
• Les opérateurs.
§ Opérateurs relationnels.

Affectation sélective :
Cette instruction permet d’affecter différentes valeurs à un signal, selon les valeurs prises par un
signal dit de sélection.
with SIGNAL_DE_SELECTION select
SIGNAL <= expression when valeur_de_selection,
[expression when valeur_de_selection,]
[expression when others];
Remarque: l’instruction [expression when others] n’est pas obligatoire mais
fortement conseillée, elle permet de définir la valeur du SIGNAL dans le cas où la
condition n’est pas remplie.
La Programmation VHDL
q Les instructions concurrent pour circuit combinatoire.
• Les opérateurs.
§ Opérateurs relationnels.

Exemple :
-- Multiplexeur 4 vers 1
with SEL select
S2 <= E1 when "00",
E2 when "01",
E3 when "10",
E4 when "11",
'0' when others;
Remarque: when others est nécessaire car il faut toujours définir les autres cas du
signal de sélection pour prendre en compte toutes les valeurs possibles de celui-ci.
La Programmation VHDL
q Les instructions concurrent pour circuit combinatoire.
• Les opérateurs.
§ Opérateurs relationnels.

En conclusion, les descriptions précédentes donnent le même schéma, ce qui est rassurant. L’étude des deux

instructions montre toute la puissance du langage VHDL pour décrire un circuit électronique, en effet si on avait

été obligé d’écrire les équations avec des opérateurs de base pour chaque sortie, on aurait eu les instructions

suivantes :

S2 <= (E1 and not(SEL(1)) and not(SEL(0))) or (E2 and not SEL(1) and

(SEL(0)) or (E3 and SEL(1) and not(SEL(0))) or (E4 and SEL(1) and SEL(0));

L’équation logique ci-dessus donne aussi le même schéma, mais elle est peu compréhensible, c’est pourquoi on

préfère des descriptions de plus haut niveau en utilisant les instructions VHDL évoluées.
La Programmation VHDL
q Les instructions concurrent pour circuit combinatoire.
• Les opérateurs.
§ Opérateurs relationnels.

Exemple N : Affectation sélective avec les autres cas forcés à ‘0’.

Library ieee;
Use ieee.std_logic_1164.all;
Use ieee.numeric_std.all;
Use ieee.std_logic_unsigned.all;
entity TABLE1 is
port (
E1,E2 : in std_logic;
SEL : in std_logic_vector(1 downto 0);
S2 : out std_logic);
end TABLE1;
architecture DESCRIPTION of TABLE1 is
begin
with SEL select
S2 <= E1 when "00",
E2 when "01",
'0' when others; -- Pour les autres cas de SEL S2
-- prendra la valeur 0 logique
end DESCRIPTION;
La Programmation VHDL
q Les instructions concurrent pour circuit combinatoire.
• Les opérateurs.
§ Opérateurs relationnels.
Exemple : Affectation sélective avec les autres cas forcés à un ‘1’.
Library ieee;
Use ieee.std_logic_1164.all;
Use ieee.numeric_std.all;
Use ieee.std_logic_unsigned.all;
entity TABLE2 is
port (
E1,E2 : in std_logic;
SEL : in std_logic_vector(1 downto 0);
S2 : out std_logic);
end TABLE2;
architecture DESCRIPTION of TABLE2 is
begin
with SEL select
S2 <= E1 when "00",
E2 when "01",
'1' when others; -- Pour les autres cas de SEL
S2
-- prendra la valeur 1 logique
end DESCRIPTION;
La Programmation VHDL
q Les instructions concurrent pour circuit combinatoire.
• Les opérateurs.
§ Opérateurs relationnels.   Affectation simple
L’affectation simple traduit une simple interconnexion entre deux équipotentielles.
L’opérateur d’affectation de signaux (<=) :
nom_de_signal <= expression_du_bon_type ;
  Affectation conditionnelle
cible <= source_1 when condition_booléenne_1 else

Résumé des Instructions concurrentes source_2 when condition_booléenne_2 else


...
source_n ;
  Affectation sélective
with expression select
cible <= source_1 when valeur_11 | valeur_12 ... ,
source_2 when valeur_21 | valeur_22 ... ,
...
source_n when others ;
La Programmation VHDL
q Les instructions concurrent pour circuit combinatoire.
• Les opérateurs.
§ Opérateurs relationnels.

Exemple :
L’implémentation d’un additionneur 4 bits avec en utilisant 4 additionneurs complet 1 bit le schéma :

Remarque :

C1, C2 et C3 sont déclarés comme signaux binaire (std_logic), servent à connecter les différents blocs.
La Programmation VHDL
q Les instructions concurrent pour circuit combinatoire.
• Les opérateurs.

Le programme VHDL
library IEEE;
begin
use IEEE.std_logic_1164.all;
entity adder4 is stage0:fulladd port
port (cin : in std_logic; x3,x2,x1,x0 : in
std_logic; map(cin,x0,y0,s0,c1);
y3,y2,y1,y0:in std_logic;s3,s2,s1,s0 : out
std_logic; stage1:fulladd port
cout : out std_logic); map(c1,x1,y1,s1,c2);
end adder4;
architecture structural of adder4 is stage2:fulladd port
signal c1,c2,c3: std_logic;
component fulladd --déclaration d instance de map(c2,x2,y2,s2,c3);
add 1 bit stage3:fulladd port
port(cin : in std_logic; x:in std_logic; y: in
std_logic; s : out std_logic; cout : out map(c3,x3,y3,s3,cout);
std_logic);
end component; end structural;
La Programmation VHDL
q Les instructions concurrent pour circuit combinatoire.
• Les opérateurs.

Pour le programme de l’additionneur complet 1 bit

library IEEE;
use IEEE.std_logic_1164.all;
entity fulladd is
port (cin : in std_logic; x:in std_logic;
y: in std_logic;
s : out std_logic; cout : out std_logic);
end fulladd;
-- description concurrente ---
Architecture logic_func of fulladd is
begin
s <= (x xor y) xor cin ;
cout <= (x and y) or (cin and x) or (cin
and y);
end logic_func;
La Programmation VHDL
q Les instructions concurrent pour circuit combinatoire.
• Les opérateurs.

Le TESTBENCH :

• Comme le langage VHDL est à la fois un langage de synthèse, et de simulation,

• Un testbench (banc d’essai) VHDL est un code VHDL destiné à la vérification, par

simulation, du bon fonctionnement d’un système, lui-même décrit en langage

VHDL.

• Le testbench est basé sur la programmation structurelle.

Exemple :

Testbench de l’additionneur complet 1 bit


La Programmation VHDL
q Les instructions concurrent pour circuit combinatoire.
• Les opérateurs.
Le TESTBENCH :

Programme vhd: --Inputs


signal sig_x : std_logic := '0';
signal sig_y : std_logic := '0';
LIBRARY ieee; signal sig_Cin : std_logic := '0';
USE ieee.std_logic_1164.ALL; --Outputs
ENTITY Testbench_fulladder IS signal sig_S : std_logic;
END Testbench_fulladder; signal sig_Cout : std_logic;
ARCHITECTURE behavior OF Testbench_fulladder IS BEGIN
-- Component Declaration for the Unit Under Test -- Instantiate the Unit Under Test (UUT)
(UUT) uut: fulladd PORT MAP (
COMPONENT fulladd x=>sig_x,
port (cin : in std_logic; x : in std_logic; y : y=>sig_y,
in Cin =>sig_Cin,
std_logic; S => sig_S,
s : out std_logic; cout : out std_logic); Cout => sig_Cout
END COMPONENT; );
-- Stimulus process
stim_proc: process
La Programmation VHDL
q Les instructions concurrent pour circuit combinatoire.
• Les opérateurs.
Le TESTBENCH :
begin wait for 10 ns;
Programme vhd:
wait for 100 ns; sig_x <= '1';
sig_x <= '1'; sig_x<= '0';
sig_y <= '0'; sig_Cin <= '1';
sig_Cin <= '0'; wait for 10 ns;
wait for 10 ns; sig_x <= '0';
sig_x<= '0'; sig_y <= '1';
sig_y <= '1'; sig_Cin <= '1';
Simulation avec ModelSim : Temps de sig_Cin <= '0'; wait for 10 ns;
simulation =300 ns wait for 10 ns; sig_x <= '1';
sig_x <= '1'; sig_y <= '1';
sig_y <= '1'; sig_Cin <= '1';
sig_Cin <= '0'; wait for 10 ns;
wait for 10 ns; end process;
sig_x <= '0'; END;
sig_y <= '0';
sig_Cin <= '1';

Vous aimerez peut-être aussi