Telechargé par user.natch

Cours VHDL 2018

publicité
Université Abdelmalek Essaadi
Faculté des Sciences et Techniques – Al Hoceima
Matser SER – S3
Master Systèmes Embarqués & Robotique
VHDL
Élaboré par: M. Nabil BENAYA
2018-2019
Introduction – Qu’est ce que VHDL
Vhsic Hardware Description
Language
Vhsic : Very High Speed Integrated Circuit
Langage de description de systèmes matériels
2
Introduction – Qu’est ce que VHDL
Système matériel:
Il s’agit d’un schéma mettant en oeuvre :
– un certain nombre de composants
– des connexions entre composants
3
Introduction – Qu’est ce que VHDL
• Langage pour décrire la structure et le comportement de
systèmes électroniques, en particulier des circuits digitaux (ASIC, FPGA,
. . . ).
• Langage puissant
(Il supporte plusieurs niveaux d’abstraction et autorise des
descriptions
hiérarchiques: descriptions comportementales (fonctionnelles) aussi
bien
que structurelles.
VHDL favorise une approche hiérarchique pour la description d’un
circuit complexe)
• Standard IEEE.
(Standardisation afin d’assurer une portabilité des programmes tant en
synthèse qu’en simulation)
4
Introduction – Qu’est ce que VHDL
• Indépendant de la technologie cible.
(même langage peut servir à programmer un circuit de quelques
centaines de portes, et à concevoir un circuit intégré qui en contient des
é
li it millions)
P
b
ta
r
o
• Indépendant de la méthodologie de conception.
• Indépendant des outils de conception.
(le même programme est accepté par des logiciels de CAO divers)
• VHDL n’est pas un langage de programmation
(c’est un langage de description (spécification) de système)
5
VHDL - Historique et évolution..
• 1980: 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.
• 1983: trois compagnies (Intermetics, IBM, Texas Instruments)
commencent le développement.
• 1985: première version officielle de VHDL (version 7.2).
• 1986: VHDL est donné à IEEE pour en faire un standard.
• 1987: Standard IEEE 1076-1987.
• 1993: Standard IEEE 1076-1993.
• 1999: Standard IEEE 1076.6-1999
• 2002: Standard IEEE 1076-2002 ( dernière version qui fournit une
présentation complète de VHDL).
6
VHDL – Niveaux d’abstraction
L’ensemble des modèles considérés ici est celui des systèmes
matériels (hardware systems), c’est-àdire des systèmes réalisés sous la
forme de circuits intégrés. Ces modèles peuvent être classés en termes
de niveaux d’abstraction (abstraction levels)
plus abstrait
Niveau système
(systm level)
Niveau TR
(register transfer level, RTL)
Niveau algorithmique
(algorithmic level)
Niveau logique
(gate level)
Niveau circuit
(circuit level)
moins abstrait
Niveau le plus abstrait (le moins détaillé).
Le système à concevoir est vu comme un
ensemble
de processus
communicants,
Niveau
architecture
Partitionnement
matériel-logiciel
mais
représentant co-design).
des fonctionnalités de
(hardware/software
Partie matérielle
très
haut niveau
comme
des processeurs,
La partie
matérielle
est décrite
au niveau
des
mémoires,
de
RTL sous
la forme des
d’une canaux
représentation
communication.
Partie logicielle
synchrone
du système décomposé en une
partie de
contrôle
et une (le
partie
opérative;
Niveau
le
moins
abstrait
plus
détaillé).
Basé
sur logicielle
l’algèbre de
Boole
avec
quelques
La
partie
est
décrite
à
un
niveau
Les
composants
de
base
sont
les
éléments
extensions
pour
introduire
les
aspects
algorithmique traditionnels
sous la forme
d’un
électriques
(transistors,
temporels
(délais).
La
correspondance
programme
constituésources..)
d’une dont
séquence
capacité,
résistance,
les
entre
équations
booléennes
et
portes
d’opérations.
comportements
sont représentés par des
logiques est immédiate.
équations mathématiques impliquant des
fonctions du temps ou de la fréquence. Le
temps et la fréquence sont des variables
7
réelles.
VHDL
– Simulation et synthèse
Simulation logique:
La simulation logique a pour but la vérification de circuits intégrés
de (très) grande taille (V)LSI ((Very) Large Scale Integration, 50’000 à
1’000’000 de transistors). Il s’agit de circuits fonctionnant en mode
logique qu’il n’est pas possible de vérifier au niveau électrique vu
l’énorme quantité d’information qu’il faudrait stocker et gérer au
niveau du transistor.
La simulation logique est une technique de simulation rapide basée
sur l’évaluation de fonctions logiques et la propagation d’événements
dans le modèle
8
VHDL
– Simulation et synthèse
Algorithme de la simulation logique
L’élément de base d’un calculateur est constitué par l’unité centrale de
traitement (UCT, CPU : Central Processing Unit).
9
VHDL
– Simulation et synthèse
Synthèse logique
La synthèse logique détermine une architecture au niveau logique en
identifiant les portes logiques nécessaires à la réalisation des blocs
définis au niveau RTL et en déterminant une interconnexion optimale de
ces portes.
Cherche à réécrire les équations
logiques
(pour
un
circuit
combinatoire) ou à minimiser le
nombre d’états (pour un circuit
séquentiel)
représentant
la
fonction d’un bloc décrit au
niveau RTL.
Détermine la meilleure structure à
base de cellules standard dans
une technologie donnée ou la
meilleure programmation d’un
circuit FPGA.
Flot de synthèse logique
10
VHDL – Simulation et synthèse
Synthèse logique
11
VHDL
– Simulation et synthèse
Synthèse architecturale
La synthèse architecturale détermine une architecture au niveau RTL
en identifiant les ressources matérielles nécessaires à la réalisation des
opérations utilisées dans un algorithme. Deux tâches principales sont
effectuées:
• Un séquencement (scheduling) détermine l’ordre d’exécution
des opérations dans le temps sur un certain nombre de pas de
contrôle. Le séquencement détermine la partie contrôle (control
part) du système.
• Une allocation de ressources (resource sharing and binding)
assigne les opérations à un nombre limité de ressources
matérielles disponibles. L’allocation détermine la partie
opérative (datapath) du système (p. ex. ALUs, additionneurs,
multiplieurs, registres, mémoires..) et les ressources nécessaires
au transfert de données (steering logic) (p. ex. bus,
multiplexeurs).
12
VHDL – Simulation et synthèse
Synthèse architecturale
13
VHDL – Simulation et synthèse
Synthèse physique
La synthèse physique a pour but de produire une description
géométrique du circuit. Au niveau le plus détaillé, cette description
géométrique consiste en plusieurs couches de polygones, chaque couche
correspondant à un masque utilisé pour la fabrication. Les positions
relatives des polygones définissent des composants électroniques
(transistors) et des interconnexions (wires).
14
VHDL – Simulation et synthèse
Synthèse physique
La synthèse physique effectue deux tâches principales: le placement
(placement) et le routage(routing).
• Le placement à pour fonction d’assigner des positions aux cellules
faisant partie du circuit. Ces cellules peuvent être de complexités
variables allant du simple transistor, en passant par une porte
logique, jusqu’à une macro cellule (mémoire, ALU).
• Le routage a pour fonction de tirer les fils d’interconnexion entre
les cellules sans générer de croisements. L’objectif du routage est de
minimiser la longueur des interconnexions, ainsi que le nombre de
contacts et de vias.
15
VHDL – Simulation et synthèse
Synthèse physique
16
VHDL – Structure du langage
Bibliothèques
La compilation d’une unité de conception génère un fichier dont le
format n’est pas standard et donc dépend de l’outil VHDL utilisé.
Le résultat de la compilation est stocké dans une bibliothèque de
conception (design library) qui est physiquement, p. ex., un répertoire Unix
ou un dossier Windows.
Un modèle VHDL ne considère que des bibliothèques logiques et
l’association à des emplacement physiques doit être faite dans
l’environnement VHDL utilisé.
17
VHDL – Structure du langage
Bibliothèques
VHDL possède deux bibliothèques logiques prédéfinies:
• La bibliothèque de nom logique WORK est le dépositaire de toutes les
unités de conception compilées.
C’est en fait la seule bibliothèque dans laquelle il est possible d’ajouter et
de modifier des éléments.
• La bibliothèque de nom logique STD est prédéfinie et contient deux
unités: le paquetage STANDARD, qui inclut les définitions des types,
opérateurs et sous-programmes prédéfinis, et le paquetage TEXTIO, qui
inclut les définitions et les sous-programmes relatifs au traitement de
fichiers textes.
18
VHDL – Structure du langage
Bibliothèques
• Les bibliothèques sont déclarée avec le mot clé library, elle dépendent
des outils utilisés.
• Elle contiennent des paquetages que l’on déclare vouloir utiliser avec le
mot clé use:
use BIBLIOTHEQUE.PAQUETAGE.all;
• La bibliothèque par défaut est WORK. WORK est aussi le nom
symbolique de la bibliothèque dans laquelle sont stockés les résultats.
• La bibliothèque STD est une bibliothèque standard fournie avec le
langage , elle contient des définitions des types et des fonctions de base
(integer, bit,...).
19
VHDL – Structure du langage
Bibliothèques
• Par défaut, les outils considère que l’on utilise les bibliothèques STD et
WORK, il y a donc implicitement:
library STD;
library WORK;
• En général, on utilise la librairie suivante IEEE qui définit le type
std_logic:
library ieee;
20
VHDL – Structure du langage
Bibliothèques
Déclaration de bibliothèque pour accès aux éléments du paquetage IEEE
STD_LOGIC_1164.
library ieee;
entity ... is
port (...
p: in ieee.std_logic_1164.std_logic);
end entity;
library ieee;
use ieee.std_logic_1164.all;
entity ... is
port (...
p: in std_logic);
end entity;
-- sans clause use
-- avec clause use
Toute unité de conception possède une clause de contexte (déclaration de bibliothèque + clause
use) implicite.
library std, work;
use std.standard.all;
21
VHDL – Structure du langage
Unités de conception
Il existe cinq unités de conception permettant de décrire les
composants:
• L’entité: description de l’interface du composant (le nom et ses ports
d’entrée/sortie)
• L’architecture décrit l’intérieur du composant. Il peut y avoir plusieurs
architectures pour le même composant (ex: une pour la simulation, une
pour la synthèse).
L’architecture contient des processus.
• La configuration indiquant quelle architecture utiliser pour chaque
entité.
• La déclaration de paquetage. Un paquetage est une collection d’objets
réutilisables (constantes, types, composants, procédures)
• Le corps de paquetage
22
VHDL – Structure du langage
Entité (Entity)
L’entité est la description de l’interface du circuit (boite noire) . Elle
correspond au symbole dans les représentations schématiques.
library ieee;
use ieee.std_logic_1164.all;
A
B
ENTITY Add IS
port(A, B, Cin: in STD_LOGIC;
S, COut: out STD_LOGIC);
END ENTITY Add;
Cin
S
Add
Cout
23
VHDL – Structure du langage
Architecture
L’architecture décrit le fonctionnement souhaité pour un circuit ou
une partie du circuit (description interne du circuit).
En effet le fonctionnement d’un circuit est généralement décrit par
plusieurs modules VHDL. Il faut comprendre par module le couple
ENTITE/ARCHITECTURE. 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.
24
VHDL – Structure du langage
Modèle comportementale
• Description du fonctionnement du système : algorithmes, machine
d’états
• Algorithme proche de ceux des langages de programmation
• Le temps peut intervenir : permet de coller à la réalité par le respect des
temps de traversée
• Une description haut niveau est d’abord comportementale : elle sert de
référence pour la suite de la conception
25
VHDL – Structure du langage
Architecture comportementale
Nom de l’architecture
architecture comportemental1 of Add is
begin
process (A, B, Cin)
begin
if (A = '0' AND
Modification
des
valeurs des signaux de S <= '0 ’ after
end if;
sortie
if (A = '0' AND
S <= '1 ’ after
end if;
if (A = '0' AND
S <= '1 ’ after
...
end if;
wait on A,B,Cin;
end process;
end comportementale1 ;
fait référence à la déclaration
d’entité
B = '0' AND Cin = '0') then
5 ns; Cout <= '0 ’ after 5 ns;
B = '0' AND Cin = '1') then
5 ns; Cout <= '0 ’ after 5 ns;
B = '1' AND Cin = '0') then
5 ns; Cout <= '0 ’ after 5 ns;
-- Attente du prochain événement
26
VHDL – Structure du langage
Architecture structurelle
• description par structure : liste d’éléments et interconnexions.
• ne fait pas intervenir le temps : connexions permanentes.
La Figure ci-dessous représente une vue structurelle d’un additionneur
27
VHDL – Structure du langage
Architecture structurelle
architecture structurelle1 of Add is
component porteOU -- Déclaration de composant
port ( e1 : in STD_LOGIC;
e2 : in STD_LOGIC;
s : out STD_LOGIC );
end component;
component porteET
port ( e1 : in STD_LOGIC;
e2 : in STD_LOGIC;
s : out STD_LOGIC );
end component;
component porteXOR
port ( e1 : in STD_LOGIC;
e2 : in STD_LOGIC;
s : out STD_LOGIC );
end component;
signal S1, S2, S3 : STD_LOGIC; --Déclaration des
-- signaux d’interface
28
VHDL – Structure du langage
Architecture structurelle
begin
u0 : porteET
port map ( A, B, S2);
u1 : porteXOR
port map ( A, B, S1);
Chaque instance de composant
définit les associations entre
ses ports formels et ses ports
effectifs
u2 : porteET
port map ( S1, Cin, S3);
Etiquette (label):
u3 : porteXOR
port map ( S1, Cin, S);
u4 : porteOU
port map ( S2, S1, Cout);
obligatoire pour nommer
chaque instance de manière
unique.
end structurelle1;
29
VHDL – Structure du langage
Environnement de test
L’environnement de test (testbench) d’un modèle VHDL peut être
lui-même décrit comme un modèle VHDL.
Le modèle à tester est instancié comme un composant d’un
modèle qui ne possède pas d’interactions avec le monde extérieur.
Le reste du modèle définit les stimulis à appliquer au composant
testé et un traitement éventuel des résultats obtenus aux sorties du
composant.
DUT : Design Under Test
B_tb
Add_1
A0
S0
B0
Cin_tb
Cin0
A_tb
Add_tb
Cout0
S_tb
Cout_tb
30
VHDL – Structure du langage
Environnement de test
Un environnement de test VHDL est usuellement un mélange de
structure et de comportement.
Testbench de l’aditionneur:
-- Bibliothèques
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
--Entity
ENTITY Add_tb IS
END Add_tb;
--Architecture
ARCHITECTURE test OF Add_tb IS
31
VHDL – Structure du langage
Environnement de test
Testbench de l’aditionneur:
COMPONENT Add_1
PORT(A0 : in std_logic;
B0 : in std_logic;
Cin0 : in std_logic;
S0 : out std_logic;
Cout0 : out std_logic);
END COMPONENT;
-- Déclaration des signaux de test -signal A_tb, B_tb,Cin_tb, S_tb, Cout_tb: std_logic;
BEGIN
-- Instanciation du composant à tester -- DUT : Design
Under Test
DUT: Add_1 PORT MAP (A0=>A_tb,B0=>B_tb,Cin0=>Cin_tb,
S0=>S_tb,Cout0=>Cout_tb);
32
VHDL – Structure du langage
Environnement de test
Testbench de l’aditionneur:
-- Création des signaux de test (Stimulis) -process
BEGIN
A_tb <='0'; B_tb <='0'; Cin_tb <='0'; -- 000
wait for 20 ns;
A_tb <='1'; -- 100
wait for 20 ns;
A_tb <='0'; B_tb <='1'; -- 010
wait for 20 ns;
-- …
END PROCESS;
END test;
33
VHDL – Structure du langage
Configuration
La déclaration de configuration définit la vue de plus haut niveau
d’un modèle. Elle définit les associations globales entre les instances de
composants d’une architecture et les entités de conception disponibles
dans une bibliothèque (WORK ou autre).
Déclaration de configuration pour le test du modèle comportemental:
configuration add_tb_cfg_bhv of add_tb is
for bench
for DUT: add_1 use entity WORK.add(bhv)
port map (A => A0, B => B0, Cin => C0,
S <= S0, Cout <= Cout0);
end for; -- DUT
end for; -- bench
end configuration add_tb_cfg_bhv;
34
VHDL – Structure du langage
Configuration
Le test de l’architecture structurelle de l’additionneur requiert la définition d’une autre
configuration sans qu’il soit nécessaire de modifier le modèle de l’environnement de test.
Déclaration de configuration pour le test du modèle structurel:
library GATES;
configuration add_tb_cfg_str of add_tb is
for bench
for DUT: add_1 use entity WORK.add(str)
port map (A0, B0, Cin0, S0, Cout0);
for str
for all:
port
end for;
for all:
port
end for;
U0 use entity GATES.AND(bhv);
map (A => i1, B => i2, S2 <= z);
U1 use entity GATES.XOR(bhv)
map (S1 => i1, Cin => i2, S3 <= z);
-- XOR U1
……
end for; -- str
end for; -- DUT
end for; -- bench
end configuration add_tb_cfg_str;
35
VHDL – Structure du langage
Exemple
Réalisez un registre 4bits avec VHDL?
36
VHDL – Structure du langage
Exemple : Registre 4bits
Déclaration d’entité du registre 4 bits.
entity reg4 is
port (
d0, d1, d2, d3: in bit; -- données d’entrée
en, clk: in bit; -- signal de contrôle et
horloge
q0, q1, q2, q3: out bit -- données de sortie
);
end entity reg4;
37
VHDL – Structure du langage
Exemple : Registre 4bits
Architecture comportementale du registre 4 bits.
architecture bhv of reg4 is
begin
process is
variable d0_reg, d1_reg, d2_reg, d3_reg: bit;
begin
if en = ’1’ and clk = ’1’ then
-- mémorisation des entrées
d0_reg := d0;
d1_reg := d1;
d2_reg := d2;
d3_reg := d3;
end if;
-q0
q1
q2
q3
modification des signaux de sortie
<= d0_reg after 5 ns;
<= d1_reg after 5 ns;
<= d2_reg after 5 ns;
<= d3_reg after 5 ns;
-- attente du prochain événement sur l’un des
signaux d’entrée
wait on d0, d1, d2, d3, en, clk;
end process;
end architecture bhv;
38
VHDL – Structure du langage
Exemple : Registre 4bits
Architecture structurelle du registre 4 bits.
architecture str of reg4 is
-- déclaration des composants utilisés
component and2 is
port (i1, i2: in bit; z: out bit);
end component and2;
component dlatch is
port (d, clk: in bit; q: out bit);
end component dlatch;
signal int_clk: bit; -- horloge interne
39
VHDL – Structure du langage
Exemple : Registre 4bits
Architecture structurelle du registre 4 bits.
begin
-- instances de latches
bit0: dlatch port map (d => d0, clk => int_clk,
bit1: dlatch port map (d => d1, clk => int_clk,
bit2: dlatch port map (d => d2, clk => int_clk,
bit3: dlatch port map (d => d3, clk => int_clk,
-- génération de l’horloge interne
gate: and2 port map (en, clk, int_clk);
q
q
q
q
=>
=>
=>
=>
q0);
q1);
q2);
q3);
end architecture str;
40
VHDL – Structure du langage
Exemple : Registre 4bits
Environnement de test du registre 4 bits.
entity reg4_tb is
end entity reg4_tb;
architecture bench of reg4_tb is
component c_reg4 is
port (p_d0, p_d1, p_d2, p_d3, p_en, p_clk: in bit;
p_q0, p_q1, p_q2, p_q3: out bit);
end component c_reg4;
signal s_d0, s_d1, s_d2, s_d3, s_en, s_clk, s_q0, s_q1,
s_q2, s_q3: bit;
41
VHDL – Structure du langage
Exemple : Registre 4bits
Environnement de test du registre 4 bits.
begin
-- composant à tester
UUT: c_reg4 port map (p_d0 => s_d0, p_d1 => s_d1, p_d2 =>
s_d2, p_d3 => s_d3,
p_en => s_en, p_clk => s_clk,
p_q0 => s_q0, p_q1 => s_q1, p_q2 => s_q2, p_q3 => s_q3);
-- stimulis
s_clk <= not s_clk after 20 ns; -- période de 40 ns
process
begin
s_en <= ’0’;
s_d0 <= ’1’; s_d1 <= ’1’; s_d2 <= ’1’; s_d3 <= ’1’;
wait for 40 ns;
s_en <= ’1’;
wait for 40 ns;
42
VHDL – Structure du langage
Exemple : Registre 4bits
Environnement de test du registre 4 bits.
-- Suite du composant à tester
s_d0 <= ’0’; s_d2 <= ’0’;
wait for 40 ns;
s_en <= ’0’; s_d1 <= ’0’; s_d3 <= ’0’;
wait for 40 ns;
s_en <= ’1’;
wait; -- stop définitif
end process;
end architecture bench;
43
VHDL – Structure du langage
Exemple : Registre 4bits
Déclaration de configuration du registre 4 bits.
On suppose que l’entité de conception reg4(bhv) a déjà été compilée
sans erreur dans la bibliothèque WORK.
--Déclaration de configuration pour le test du modèle
comportemental du registre 4 bits.
configuration reg4_tb_cfg_bhv of reg4_tb is
for bench
for UUT: c_reg4 use entity WORK.reg4(bhv)
port map (d0 => p_d0, d1 => p_d1, d2 => p_d2, d3 => p_d3,
en => p_en, clk => p_clk,
q0 => p_q0, q1 => p_q1, q2 => p_q2, q3 => p_q3);
end for; -- UUT
end for; -- bench
end configuration reg4_tb_cfg_bhv;
44
VHDL – Structure du langage
Exemple : Registre 4bits
Déclaration de configuration du registre 4 bits.
--Déclaration de configuration pour le test du modèle
structurel du registre 4 bits.
library GATES;
configuration reg4_tb_cfg_str of reg4_tb is
for bench
for UUT: c_reg4 use entity WORK.reg4(str)
port map (p_d0, p_d1, p_d2, p_d3, p_en, p_clk,
p_q0, p_q1, p_q2, p_q3);
for str
for all: dlatch use entity GATES.dlatch(bhv);
end for;
for all: and2 use entity GATES.and2(bhv)
port map (a => i1, b => i2, z => z);
end for; -- and2
end for; -- str
end for; -- UUT
end for; -- bench
end configuration reg4_tb_cfg_str;
45
VHDL – Structure du langage
Instanciation directe
L’instanciation directe a été introduite en VHDL-93 pour offrir une
version simplifiée du mécanisme de configuration. Il n’est plus nécessaire
de déclarer de composants et de configuration. Chaque instance est
directement associée à une entité de conception.
Chaque instance doit être associée indépendamment à une entité de
conception. Il n’est pas possible d’utiliser de spécification for all dans ce
cas.
46
VHDL – Structure du langage
Instanciation directe
--Configuration du registre 4bits par instanciation directe.
library GATES;
architecture str2 of reg4 is
signal int_clk: bit; -- signal interne
begin
-- instanciations directes des latches
bit0: entity GATES.dlatch(bhv)
port map (d => d0, clk => int_clk,
bit1: entity GATES.dlatch(bhv)
port map (d => d1, clk => int_clk,
bit2: entity GATES.dlatch(bhv)
port map (d => d2, clk => int_clk,
bit3: entity GATES.dlatch(bhv)
port map (d => d3, clk => int_clk,
-- instanciation directe de la porte and2
gate: entity GATES.and2(bhv)
port map (en, clk, int_clk);
end architecture str2;
q => q0);
q => q1);
q => q2);
q => q3);
47
VHDL – Structure du langage
Spécification de configuration
La spécification de configuration (configuration specification) est une
autre forme de configuration qui ne définit pas une nouvelle unité de
conception. Elle revient à définir l’association d’une instance de
composant avec son entité de conception correspondante directement dans
le corps d’architecture, en nécessitant toutefois toujours une déclaration de
composant préalable.
Dans ce cas, la déclaration de configuration de l’environnement de test
(Code du slide 45) s’en trouve simplifiée puisqu’il n’est plus nécessaire de
spécifier la configuration de l’architecture str (la partie for str ... end for;
n’est plus nécessaire).
48
VHDL – Structure du langage
Spécification de configuration
-- Utilisation de spécifications de configurations pour
l’architecture structurelle du registre 4 bits;
library GATES;
architecture str2 of reg4 is
component and2 is
port (i1, i2: in bit; z: out BIT);
end component and2;
for all: and2 use entity GATES.and2(bhv) port map (i1, i2, z);
component dlatch is
port (d, clk: in BIT; q: out BIT);
end component dlatch;
for all: dlatch use entity GATES.dlatch(bhv);
...
begin
...
end architecture str2;
49
VHDL – Structure du langage
Processus
L’instruction concurrente de base en VHDL est le processus (process).
Tout modèle VHDL peut se décrire de manière équivalente comme un
ensemble de processus communiquant par l’intermédiaire de signaux .
VHDL définit deux classes d’objets particulières pour représenter des
données sur lesquelles un processus peut agir:
• Les signaux (signal) ont une visibilité (scope) globale dans un
modèle et permettent de partager des données entre processus.
• Les variables (variable) ont une visibilité locale dans un
processus et permettent de stocker des valeurs intermédiaires lors de
l’exécution des instructions séquentielles d’un processus.
50
VHDL – Structure du langage
Processus
entity demi_add is
port (A, B: in bit; S, CO: bit);
end entity demi_add;
architecture bhv of demi_add is
begin
Sum: process
begin
S <= A xor B;
wait on A, B;
end process Sum;
Carry: process
begin
CO <= A and B;
wait on A, B;
end process Carry;
end architecture bhv;
Demi additionneur 1bit
51
VHDL – Structure du langage
Synchronisation de processus
L’instruction wait permet de définir la (les) condition(s) d’activation
d’un processus. Elle peut prendre plusieurs formes.
La forme:
wait on liste-de-signaux;
-- p. ex.
wait on S1, S2, S3;
active un processus dès qu’un événement survient sur l’un des signaux de
la liste. La liste des signaux forme une liste de sensibilité (sensitivity list).
52
VHDL – Structure du langage
Synchronisation de processus
L’instruction wait permet de définir la (les) condition(s) d’activation
d’un processus. Elle peut prendre plusieurs formes.
La forme:
wait until condition;
-- p. ex.
wait until CLK = ’1’; -- activation sur le flanc montant du signal CLK
wait on CLK until CLK = ’1’; -- forme équivalente
active un processus dès que la condition est vraie. Les signaux impliqués
dans la condition forment une liste de sensibilité. Si la liste est vide,
l’instruction wait stoppe le processus de manière définitive.
53
VHDL – Structure du langage
Synchronisation de processus
L’instruction wait permet de définir la (les) condition(s) d’activation
d’un processus. Elle peut prendre plusieurs formes.
La forme:
wait for délai;
-- p. ex.
wait for 10 ns;
active un processus après un temps de suspension spécifié par le délai.
La forme générale:
wait on liste-de-signaux until condition for délai;
est possible. Le processus est activé dès la première condition d’activation
(événement sur un signal et condition vraie) ou après le temps écoulé.
54
VHDL – Généricité
Utilisée pour passer des informations au modèle. C'est le cas lorsqu'on
veut avoir un modèle générique réutilisable (exemple: Registre de taille N
bits, additionneur à N entrées... La valeur de N est passée en paramètre
générique).
C’est un moyen de transmettre une information à un bloc :
- Vu de l’extérieur du bloc, la généricité == paramètre
- Vu de l’intérieur du bloc, paramètres == constantes
Dont les intérêts sont :
- description de composants généraux
- permettre la réutilisation des composants ( description des
bibliothèques par des modèles génériques).
55
VHDL – Généricité
VHDL permet le développement de modèles dont le comportement ou
la structure peuvent être paramétrés au moyen de trois mécanismes
complémentaires:
• Les paramètres génériques.
• Les objets d’interface non contraints.
• L’instruction concurrente generate.
56
VHDL – Généricité
Paramètres génériques :
Un exemple typique d’utilisation de paramètres génériques est la
spécification de paramètres temporels permettant de caractériser le même
comportement dans des conditions différentes.
Modèle d’un flip-flop D avec ses caractéristiques temporelles: temps de
propagation, temps de prépositionnement (setup time) et temps de
maintien (hold time)
Temps de maintien
Temps de
prépositionnement
Temps de propagation
57
VHDL – Généricité
Modèle de flip-flop D pour lequel les caractéristiques temporelles
(temps de propagation Tpd_clk_q, temps de prépositionnement (setup
time) Tsu_d_clk et temps de maintien (hold time) Th_d_clk) sont définis
comme des paramètres génériques.
entity dff is
generic (
Tpd_clk_q, -- temps de propagation
Tsu_d_clk, -- temps de pré-positionnement
Th_d_clk: delay_length -- temps de
maintien
);
port (clk, d: in bit; q: out bit);
end entity dff;
58
VHDL – Généricité
Le corps d’architecture est composé de trois processus concurrents.
• processus behavior : définit le comportement du composant en tenant
compte du temps de propagation.
• processus check_setup : vérifie le temps de pré-positionnement.
• processus check_hold : vérifie le temps de maintien.
59
VHDL – Généricité
Le corps d’architecture est composé de trois processus concurrents.
architecture bhv of dff is
begin
behavior:
q <= d after Tpd_clk_q when clk = ’1’ and
clk’event;
check_setup: process is
begin
wait until clk = ’1’;
assert d’last_event => Tsu_d_clk report "Setup violation";
end process check_setup;
check_hold: process is
begin
wait until clk’delayed(Th_d_clk) = ’1’;
assert d’delayed’last_event => Th_d_clk report "Hold
violation";
end process check_hold;
end architecture bhv;
60
VHDL – Généricité
L’instanciation du composant flip-flop D avec paramètres génériques.
FF1: entity WORK.dff(bhv)
generic map (Tpd_clk_q => 4 ns, Tsu_d_clk => 3 ns, Th_d_clk => 1 ns)
port map (clk => master_clk, d => data, q => data_reg);
61
VHDL – Généricité
Objets d’interface non contraints :
entity reg is
port (clk, rst: in bit;
d: in bit_vector;
q: out bit_vector);
begin
assert d’length = q’length;
end entity reg;
architecture bhv of reg is
begin
process (clk, rst) is
constant zero: bit_vector(q’range) := (others => ’0’);
-- ou: constant zero: bit_vector(q’length-1 downto 0) :=
(others => ’0’);
begin
if rst = ’1’ then
q <= zero;
elsif clk’event and clk = ’1’ then
q <= d; -- erreur si d’length /= q’length!
end if;
end process;
end architecture bhv;
62
VHDL – Généricité
Instruction generate :
L’instruction concurrente generate permet de dupliquer des
instructions concurrentes de manière itérative ou conditionnelle.
La Figure ci-dessous illustre la structure d’un registre à décalage
générique de N bits.
63
VHDL – Généricité
Instruction generate :
entity shiftreg is
generic (nbits: positive := 8);
port (clk, rst, d: in bit; q: out bit);
end entity shiftreg;
architecture str of shiftreg is
component dff is
port (clk, rst, d: in bit; q: out bit);
end component dff;
signal qint: bit_vector(1 to nbits-1);
64
VHDL – Généricité
Instruction generate :
architecture str of shiftreg is
..
begin
cell_array: for i in 1 to nbits generate
first_cell: if i = 1 generate -- première cellule
dff1: dff port map (clk, rst, d, qint(1));
end generate first_cell;
int_cell: if i > 1 and i < nbits generate --cellules
dffi: dff port map (clk, rst, qint(i-1), qint(i));
end generate int_cell;
internes
last_cell: if i = nbits generate -- dernière cellule
dffn: dff port map (clk, rst, qint(nbits-1), q);
end generate last_cell;
end generate cell_array;
end architecture str;
65
VHDL – Généricité
Exemple : ET n bits
entity Et_N is
generic ( N : Natural )
port ( Entrees : in std_logic_vector ( 1 to N ) ;
sortie : out std_logic );
end Et_N ;
architecture comportement of Et_N is
begin
process
variable V : std_logic := ‘1’ ;
begin
for i in 1 to N loop
V := V and Entrees (i) ;
end loop ;
Sortie <= V after 10 ns ;
end process ;
end comportement;
66
VHDL – Généricité
Exemple : ET n bits
entity AdditionneurN is
generic (N : Natural);
port (
X, Y : in std_logic_vector ( N-1 downto 0) ;
Cin : in std_logic;
S : out std_logic_vector (N-1 downto 0);
Cout : out std_logic);
end AdditionneurN ;
architecture structurelle of AdditionneurN is
component Add
port (
A, B, Cin : in std_logic;
S, Cout : out std_logic);
end component;
signal C : std_logic_vector(0 to N);
67
VHDL – Généricité
Exemple : ET n bits
entity AdditionneurN is
..
end AdditionneurN ;
architecture structurelle of AdditionneurN is
..
begin
for I in 0 to N-1 generate
Instance : Add
port map (X(I), Y(I), C(I), S(I), C(i+1));
end generate;
C(0) <= Cin;
Cout <= C(N);
end structurelle ;
68
69
Téléchargement