Académique Documents
Professionnel Documents
Culture Documents
Plan
S Introduction
1
09/11/2021
Introduction
Objectif premier :
• Permettre/simplifier la saisie de logigrammes
en vue de l’implémentation sur CPLD/FPGA
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
Le langage VHDL
Very High Speed Integrated Circuit
Hardware
Description
Language
2
09/11/2021
Facilité de lecture
Universalité
3
09/11/2021
Schéma ➔description
VHDL
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
4
09/11/2021
2. L’entité
entity CTR8_Raz is port
entity CTR8 is port
(
L’entité
(
H : in std _logic; H : in std_ logic; -- commentaire
Ns : out integer range 0 to 255 R : in std _ logic;
); TC : out std _ logic;
end CTR8; Ns : buffer std _logic_vector(7 downto 0)
);
end CTR8_Raz;
• L’entité porte un nom qui doit être unique dans un projet
• On y trouve la déclaration des signaux d’entrée et de sortie du composant
• Pas de ; à la fin de la déclaration du dernier signal de l’entité
• Chaque signal est associé à un type et à un mode (direction)
Les différents modes possibles
Mode description Commentaires
(Direction)
in Entrée On ne peut qu’en lire la valeur
out Sortie On ne peut pas lire: on ne peut qu’écrire
Sortie avec possibilité On peut lire et écrire (utile pour les rebouclages internes)
buffer de lecture Seul le composant peut écrire une valeur
Entrée/Sortie 3 états On peut lire et écrire et l’écriture peut être faite par plus d’un
inout
composant (ou 0)
Entrée/Sortie 3 états Idem inout mais ne peut être lié qu’à d’autres signaux de mode
linkage 9
linkage (à oublier)
2. L’entité
• Un signal peut aussi être déclaré en interne au composant (ni entrée, ni sortie)
Dans ce cas il doit être déclaré entre les mot-clé architecture et begin
On ne précise alors pas de mode(direction)
Exemple : Architecture A of Composant is
-- declaration de trois signaux internes de type std_logic
signal A,B,C : std_logic;
Begin
…
5
09/11/2021
3. L’architecture combinatoire
VHDL type « flot de données »
3.1 Assignation inconditionnelle: exemple n°1
A B Som Ret
architecture A_addi of Additionneur is
begin 0 0 0 0
Som <= A xor B ; 0 1 1 0
Ret <= A and B ; 1 0 1 0
end A_addi;
1 1 0 1
XOR
Opérateurs logiques A
Som
opérateur action Type opérande B
et résultat 1
NOT NON Booléen,
AND2
AND ET bits, A
NAND ET NON bit_vecteur, Ret
OR OU Std_logic,
B
2
NOR OU NON Std_logic_vector
XOR OU exclusif Ainsi on impose au synthétiseur
XNOR OU exclusif des portes logiques
NON
11
3. L’architecture combinatoire
VHDL type « flot de données »
3.1 Assignation inconditionnelle: exemple n°2
library ieee;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_1164.all; architecture A_op_Num of op_Num is
begin
entity op_Num is port Somme <= A +B ;
(
Produit<= A * B ;
A,B: in integer range 0 to 255;
Somme: out integer range 0 to 511; end A_op_Num;
Produit: out integer range 0 to 65535
);
end op_Num ;
Opérateurs arithmétiques
Opérateur action Type opérande et résultat
+ Somme Bit_vector
- Soustraction
Std_logic_vector
* Multiplication
/ Division euclidienne Integer
12
6
09/11/2021
3. L’architecture combinatoire
VHDL type « flot de données » A B Som Ret
3. L’architecture combinatoire
VHDL type « flot de données »
3.2- Assignation conditionnelle
Exemple de fichier complet avec utilisation de l’instruction « generate »
--Demultiplexeur 4 vers 16
library ieee;
use ieee.std_logic_1164.ALL;
use ieee.std_logic_unsigned.all;
14
7
09/11/2021
3. L’architecture combinatoire
VHDL type « flot de données »
3. L’architecture combinatoire
VHDL type « flot de données »
3.3- Assignation sélective
Assignation sélective. Exemple de fichier complet
16
8
09/11/2021
1
);
end CONCAT2; 1 , Ne[3..0] , 0 , 0 WIRE
Ns[6..0]
architecture a_CONCAT2 of CONCAT2 is inst4
0
begin
Ns <= '1' & Ne & "00"; GND OUTPUT
Ns[6..0]
end a_CONCAT2;
17
5. L’architecture séquentielle
VHDL type « comportemental »
5.1- Processus (Process)
Un process est un groupe délimité d’instructions, doté de trois caractéristiques
essentielles:
3. les modifications apportées aux valeurs de signaux par les instructions prennent
effet à la fin du processus.
9
09/11/2021
5. L’architecture séquentielle
VHDL type « comportemental »
5. L’architecture séquentielle
VHDL type « comportemental »
5.4- L’assignation sélective: Case … is … when … =>
Exemple: multiplexeur synchrone 4 vers 1
architecture a_MUX of MUX_Syn is
begin Traduction
process (H)
begin Au front montant de H
if (H'event and H='1') then
case A is ➢si l’adresse A est 0 alors S = Y0
when "00" => S<=Y(0); ➢si l’adresse A est 1 alors S = Y1
when "01" => S<=Y(1); ➢si l’adresse A est 2 alors S = Y2
when "10" => S<=Y(2); ➢si l’adresse A est 3 alors S = Y3
when others => S<=Y(3);
end case;
end if;
end process;
end a_MUX;
NB: L’instruction Case … is … when … => ne peut s’utiliser que dans un process!
20
10
09/11/2021
11
09/11/2021
7. Process en combinatoire
Il faudra alors veiller à ce que tous les signaux
d’entrée soient déclarés comme signaux sensibles.
12
09/11/2021
9. Utilisation de « alias »
--Compteur binaire en 9 bits sortie 8bits
--avec RAZ et CE:validation de comptage
library ieee;
use ieee.std_logic_1164.all;
Permet de donner un autre nom
use ieee.std_logic_unsigned.all; au même objet
entity ctr9_8_raz_ce2 is port
(
H : in std_logic;
R,CE : in std_logic;
Ns : buffer std_logic_vector(7 downto 0)
);
end ctr9_8_raz_ce2;
library ieee;
use ieee.std_logic_1164.all;
Exemple : Buffer 8bits bidirectionnel use ieee.std_logic_unsigned.all;
26
13
09/11/2021
28
14
09/11/2021
La déclaration du type et la déclaration du tableau doivent être fait avant le « begin » de l’achitecture
Architecture a of composant is
Type …. …
Constant … …
begin
….
29
15
09/11/2021
Utilisation
process(H)
begin
case etat is
when repos => etc.. ;
when decision => etc.. ;
……..
when others => etc.. ;
end case;
end process; 31
Pour avoir plus amples informations, voir le livre:VHDL Langage, Modélisation, Synthèse de R.
AIRIAU –J.-M. BERGÉ - V. OLIVE – J. ROUILLARD: Presses Polytechniques et Universitaires. 32
16
09/11/2021
USE ieee.std_logic_1164.all;
composant
); downto 0);
composant
17
09/11/2021
On pourra ainsi décrire facilement les stimuli à appliquer au composant et analyser les résultats. On parle
alors de bancs tests ou « test bench ».
Principe de la simulation
Test_Bench
35
18
09/11/2021
37
WAIT ON signals
(équivalent à une liste de sensibilité).
WAIT FOR period
process process (a,b) Spécifie la durée maximale d’attente
begin begin
-- sequential statements -- sequential statements process
wait on a,b; end process; begin
end process; EN_1 <= '0';
EN_2 <= '1';
wait for 10 ns; -- attente de 10ns
WAIT UNTIL expression
wait; -- attente infinie
l'expression booléenne doit parvenir end process;
à TRUE avant de continuer
l'exécution.
19