VHDL
Présenté par :
LASSAAD TAYARI
Technologue en Informatique Industrielle à l’Iset de Gabès
VHDL
Introduction
Le cadre de travail
La paire ENTITY/ARCHITECTURE
Niveaux de description
Fonctionnements parallèles et séquentiels
Opérateurs et instructions
Descriptions modulaires
Attributs spécifiques
Initiation à VHDL
VHDL
Introduction
VHDL = VHSIC Hardware Description Langage
Langage de description hardware développé au titre duprogramme VHSIC (Very High Speed Integrated Circuit)du DoD (Department of Defence).
VHDL
fournir un environnement de développement hardwarecomplet et unifié (des spécifications à la réalisation enpassant par la simulation)
améliorer l'intercommunication entre(spécificateurs,concepteurs, utilisateurs, outils de développement,etc.)
rendre les réalisations indépendantes destechnologies et des systèmes-hôtes (portabilité,pérennité, etc.)
Objectif
VHDL
Caractéristiques générales
Standardisé en 1987 (IEEE1076), complété en 1993 (IEEE1076, IEEE1164)
Langage unique pour
la spécification, la documentation
la vérification (preuve formelle), la simulation
la synthèse : le langage sert d'entrée à des outils intelligents qui permettent la réalisation de circuits intégrés programmables (PALs, GALs, CPLDs, FPGAs)
Interprétable par l'homme et la machine
Indépendent des process et des technologies, indépendent des systèmes-hôtes
VHDL
Entity et Architecture
La brique de base de toute description VHDL est la paire ENTITY + ARCHITECTURE : Entity : déclaration de l'interface (Entrées/Sorties)
Architecture : description du fonctionnement
La complexité du bloc décrit par le couple Entity + Architecture est quelconque (système, carte, sous-fonction, porte, etc.)
I1
I2
I3
I4
O1
O2
entity AZERTY is
port( I1, I2, I3, I4 : in bit;
O1, O2 : out bit);
end AZERTY;
architecture XXX of AZERTY is
-- description du fonctionnement
end XXX;
VHDL
Les commentaires débutent par un double-tiret
signal CLK: bit; -- horloge systeme a 50 MHz
Identificateurs (noms, étiquettes, etc.) :
une suite de lettres ou de chiffres (et
éventuellement le caractère '_') débutant par
une lettre :
A, DATA_8, SYS_CLK_50_OUT
VHDL ne fait pas de différence, pour les
identificateurs et les mots-clés, entre
majuscules et minuscules
Commentaires Et Identificateurs
VHDL
Les littéraux sont utilisés pour la représentation de valeursLes plus fréquents en synthèse logique :
entiers : 12 , 0booléens : true ou falsebits : '0' ou '1'chaînes de bits"1111_1110" (le caractère _ est sans action) x"FE" (notation hexadécimale), o"76" (octal)
caractères : 'Z' or '-'chaînes de caractères : "CY7C372i-83JC"caractères et chaines peuvent être concaténées :'1' & "01" & '0' est équivalent à "1010""au " & "revoir" est équivalent à "au revoir""au" & "revoir" est équivalent à "aurevoir"
Littéraux
VHDL
D'autres structures existent néanmoins, d'emploi optionnel
ou implicite :
Le package et ses components permettent de simplifier
l'accès à des descriptions fréquemment utilisées
La library est le lieu de stockage des éléments compilés
Toute description VHDL simple peut être faite sans autre connaissance qu'Entity et Architecture
Entity et Architecturea
VHDL
package
Un PACKAGE permet de regrouper des Entity/Architectures destinées à être partagées
certains packages sont livrés avec les outils de développements
d'autres sont créés par les utilisateurs
VHDL
library
Les 'unités de compilation' (entity, architecture, package,...) sont conservées dans une LIBRARY
Pour accéder aux éléments d'une LIBRARY, il suffit de la nommer au préalable. Par exemple :library LCD; --déclaration d'accès à la library LCD
VHDL définit une LIBRARY par défaut (la LIBRARY work), toujours accessible, qu'il n'est pas nécessaire de nommer
La compilation d'entity, architecture, etc. s'effectue par défaut dans la library work ou, sur demande, dans une library spécifique
VHDL
PROJET
Library WORK Library X Library Y
ENTITYS
ARCHITECTURES
PACKAGES
(COMPONENTS)
VHDL
L'Entity
L'ENTITY décrit une fonction, vue de l'extérieur :
Nom
Entrées/SortiesBOITE_NOIRE
rst
d[7:0]
clk
q[7:0]
co
Les signaux d'Entrée/Sortie de l'ENTITY sont des PORTs
Chaque PORT possède un nom, un mode (sens), un type (associé éventuellement à un ensemble de valeurs)
VHDL
PORTS : Modes
Le MODE correspond au sens de transfert :
IN Entrée (monodirectionnelle)
OUT Sortie (monodirectionnelle)
INOUT Entrée/Sortie bidirectionnelle
BUFFER Sortie rebouclée
VHDL
PORTS : Types
VHDL est un langage fortement typé, interdisant l'interconnexion de signaux de types différents
Certains types sont prédéfinis par le langage :
integer, bit, bit_vector, boolean, etc.
VHDL permet d'étendre la liste des types de base
IEEE1164 (type std_logic, std_logic_vector)
Types spécifiques, définis par les outils des fournisseurs
Types définis par l'utilisateur :
type énuméré, par ex. : type jour is (lu, ma, me, je, ve, sa, di);(souvent utilisé pour les machines d'état)
sous-type : subtype octet is bit_vector(0 to 7);
VHDL
Type std_logic (IEEE1164)
Le type bit de VHDL peut prendre les valeurs '0' et '1'. Cetype est insuffisant pour décrire des signaux logiques réels(haute-impédance, forçage, etc.)
Le standard IEEE1164 définit des signaux multi-valeursrépondant aux besoins de systèmes réels, et facilitant lasimulation
Le type std_logic (et std_logic_vector) possède 9 valeurs :'0', '1', 'X', 'L', 'H', 'W', 'Z', 'U', '-'
L'emploi du type std_logic est possible via la libraryIEEE1164
(cf. déclaration d'une Library) :
library ieee;
use ieee.std_logic_1164.all;
VHDL
Déclaration d'Entity
boite_noire
rst
d[7:0]
clk
q[0:7]
coLIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY boite_noire IS PORT (
clk, rst:IN STD_LOGIC;
d: IN STD_LOGIC_VECTOR(7 DOWNTO 0);
q: OUT STD_LOGIC_VECTOR(0 TO 7);
co: OUT STD_LOGIC);
END boite_noire;
MODE TYPE RANGE
VHDL
ARCHITECTURE
L'ARCHITECTURE décrit le fonctionnement de la boîte noire déclarée dans l'ENTITY
VHDL permet différents niveaux de description : Haut niveau (comportemental) : description de la
fonctionnalité, sans référence au 'hardware' sous-jacent
Bas niveau (structurel) : description par utilisation et interconnexion de 'components' (par ex. portes logiques), comme pour un schéma
D'une manière générale les descriptions de haut niveau favorisent la portabilité, les descriptions de bas niveau l'efficacité
VHDL
Architecture : exemple d'un comparateur
1- Description comportementale
Comparateur
A
B
C
architecture ARCH1 of COMPARATEUR is
begin
C <= '1' when (A=B) else '0';
end ARCH1;
VHDL
2- Description comportementale (type data-flow)
architecture ARCH2 of COMPARATEUR is
begin
C <= not(A xor B);
end ARCH2;
Architecture : exemple d'un comparateur
Comparateur
A
B
C
VHDL
3- Description structurelle de bas niveau (interconnecte des composants élémentaires)
use work.gatespkg.all;
architecture ARCH3 of COMPARATEUR is
signal S : bit;
Begin
U0 : xor2 port map (A,B,S);
U1 : inv port map (S,C);
end ARCH3;
A
B
Cxor2 inv
SU0 U1
Les signaux internes sont déclarés
en tête de l'architecture (même déclaration
que les signaux d'entity, sans 'mode')
Architecture :exemple d'un comparateur
VHDL
Déclarations internes
Exemple de déclaration de signal :
signal VCOMP : std_logic(4 to 7);
Exemple de déclaration de constante :constant NEUF : std_logic_vector(3 downto 0) := "1011";
Exemple de déclaration de variable :variable J : integer range 0 to 15 := 0;
L'en-tête d'architecture permet de déclarer les signaux internes, variables, constantes, etc. :
VHDL
4- Description mixte
entity COMPSYNC is
port (A,B,CLK,RST : in bit;
QC : out bit);
end COMPSYNC;
use work.gatespkg.all;
architecture ARCH of COMPSYNC is
signal C : bit;
constant zero : bit := '0';
begin
C <= '1' when (A=B) else '0';
U0 : dsrff port map (C,zero,RST,CLK,QC);
end ARCH;
Comparateur
A
B
C
QC
CLK
RST
0
Architecture :exemple d'un comparateur
Conclusion : les descriptions comportementales sont recommandées, sauf raison majeure de performance ou de densité :
VHDL
ARCHITECTURE
meilleure compacité : par exemple un comparateur 4 bits :
en comportemental :aeqb <= '1' WHEN a = b ELSE '0';
en structurel bas niveau :u0: xnor2 PORT MAP (a(0), b(0), xnr(0));
u1: xnor2 PORT MAP (a(1), b(1), xnr(1));
u2: xnor2 PORT MAP (a(2), b(2), xnr(2));
u3: xnor2 PORT MAP (a(3), b(3), xnr(3));
u4: and4 PORT MAP (xnr(0), xnr(1), xnr(2), xnr(3), aeqb);
meilleure lisibilité
meilleure portabilité (indépendance vis-à-vis du composant ciblé)
VHDL
Opérateurs VHDL standard
Logiques (définis pour le type bit) and, nand or, nor xor, xnor not
Relationnels (bit, bit_vector, integer) = (equal to) /= (not equal to) < (less than) <= (less than or equal to) > (greater than) >= (greater than or equal to)
VHDL
Opérateurs VHDL standard
Arithmétique unaire (integer) - (arithmetic negate)
Arithmétique (integer)
+ (addition)
- (subtraction)
* (multiplication)
Concaténation (string, bit, bit_vector) &
VHDL
Autres opérateurs VHDL
VHDL définit d'autres opérateurs, dont l'usage est plus orienté vers le test ou la simulation :
/ (division)
mod (modulus)
rem (remainder)
** (exponentiation)
VHDL
Instructions VHDL courantes
Instructions en mode séquentiel (dans un PROCESS) Assignation (<=) Assignation conditionnelle (IF) Assignation sélective (CASE)
Instructions en mode concourant (hors d'un process) Assignation (<=) Assignation conditionnelle (WHEN) Assignation sélective (WITH)
VHDL
instruction when
Assignation conditionnelle, combinatoire : instruction when
Multiplexeur 4-->1
library ieee;
use ieee.std_logic_1164.all;
entity MUX4 is
port( a,b,c,d : in std_logic_vector(3 downto 0);
e : out std_logic_vector(3 downto 0);
s1,s0 : in std_logic );
end MUX4;
architecture ARCHMUX4 of MUX4 is
begin
e <= a when (s1 & s0) = "00" else
b when (s1 & s0) = "01" else
c when (s1 & s0) = "10" else
d;
end ARCHMUX4;
a
b
c
d
e
s1 s0
4
4
4
4
4
VHDL
instruction if
Assignation conditionnelle, séquentielle : instruction if architecture ARCHDECODR of DECODR is
begin
process begin
wait until (clk'event and clk='1');
if a="00" then s0 <= '0' else s0 <= '1' ; end if;
if a="01" then s1 <= '0' else s1 <= '1' ; end if;
if a="10" then s2 <= '0' else s2 <= '1' ; end if;
if a="11" then s3 <= '0' else s3 <= '1' ; end if;
end process;
end ARCHDECODR;
Décodeur 2-->4
(registre en sortie)
a(1)
a(0)
s0
s1
s2
s3
clk
VHDL
architecture ARCHDECODR of DECODR is
signal temp : std_logic_vector(0 to 3);
begin
process begin
wait until (clk'event and clk='1');
case (a) is
when "00" => temp <= "0111";
when "01" => temp <= "1011";
when "10" => temp <= "1101";
when others => temp <= "1110";
end case;
end process;
s0 <= temp(0); s1 <= temp(1); s2 <= temp(2); s3 <= temp(3);
end ARCHDECODR;
L'instruction CASE
Permet l'exécution d'une opération (ou d'une succession d'opérations) en fonction de la valeur prise par une expression
Décodeur 2-->4
(registre en sortie)
a(1)
a(0)
s0
s1
s2
s3
clk
temp(0)
temp(1)
temp(2)
temp(3)
x
VHDL
Conception modulaire et hiérarchique
Un niveau de description peut faire appel à des modules compilés indépendamment, et les interconnecter de manière structurelle
Les modules de niveaux inférieurs sont des COMPONENTs
Si un COMPONENT est d'utilisation fréquente, il estcommode de le placer dans un PACKAGE
COMPONENT 1COMPONENT 2
VHDL supporte et encourage la conception modulaire
VHDL
Conception modulaire et hiérarchique
Description d'un comparateur 4 bits
1- Description comportementale (pour mémoire)
entity CMP4 is port(
A,B : in bit_vector(0 to 3);
C : out bit);
end CMP4;
architecture ARCH_1 of CMP4 is
begin
C <= '1' when (A=B) else '0';
end ARCH_1;
AB
C
4
4
VHDL
Conception hiérarchique modulaire et
2 - Description structurelle 'à plat'
entity CMP4 is port(
A,B : in bit_vector(0 to 3);
C : out bit);
end CMP4;
architecture ARCH_2 of CMP4 is
signal i : bit_vector(0 to 3);
begin
c0 : XNOR port map(A(0),B(0),i(0));
c1 : XNOR port map(A(1),B(1),i(1));
c2 : XNOR port map(A(2),B(2),i(2));
c3 : XNOR port map(A(3),B(3),i(3));
c4 : AND4 port map(i(0),i(1),i(2),i(3),C);
end ARCH_2;
entity XNOR is port(x,y : in bit; xn : out bit);
end XNOR;
architecture ARCH of XNOR is
begin
xn <= not(x xor y);
end ARCH;
entity AND4 is port(a,b,c,d : in bit; e : out bit);
end AND4;
architecture ARCH of AND4 is
begin
e <= a and b and c and d ;
end ARCH;
A
B
C
4
4
VHDL
Conception modulaire et hiérarchique
3 - Description modulaire, sans package
entity XNOR is port(x,y : in bit; xn : out bit);
end XNOR;
architecture ARCH of XNOR is
begin
xn <= not(x xor y);
end ARCH;
entity AND4 is port(a,b,c,d : in bit; e : out bit);
end AND4;
architecture ARCH of AND4 is
begin
e <= a and b and c and d ;
end ARCH;
entity CMP4 is port(
A,B : in bit_vector(0 to 3);
C : out bit);
end CMP4;
architecture ARCH_2 of CMP4 is
signal i : bit_vector(0 to 3);
component XNOR port(x,y : in bit; xn : out bit);
end component;
component AND4 port(a,b,c,d : in bit; e : out bit);
end component;
begin
c0 : XNOR port map(A(0),B(0),i(0));
c1 : XNOR port map(A(1),B(1),i(1));
c2 : XNOR port map(A(2),B(2),i(2));
c3 : XNOR port map(A(3),B(3),i(3));
c4 : AND4 port map(i(0),i(1),i(2),i(3),C);
end ARCH_2;
1- Les éléments de base sont décrits à part, et ré-utilisables
2- Instanciation des éléments externes dans l'architecture principale
VHDL
Conception modulaire et hiérarchique
4 - Description modulaire avec package
package portes is
component XNOR port(x,y : in bit; xn : out bit);
end component;
component AND4 port(a,b,c,d : in bit; e : out bit);
end component;
end portes;
entity XNOR is port(x,y : in bit; xn : out bit);
end XNOR;
architecture ARCH of XNOR is
begin
xn <= not(x xor y);
end ARCH;
entity AND4 is port(a,b,c,d : in bit; e : out bit);
end AND4;
architecture ARCH of AND4 is
begin
e <= a and b and c and d ;
end ARCH;
entity CMP4 is port(
A,B : in bit_vector(0 to 3);
C : out bit);
end CMP4;
use work.portes.all;
architecture ARCH_3 of CMP4 is
signal i : bit_vector(0 to 3);
begin
c0 : XNOR port map(A(0),B(0),i(0));
c1 : XNOR port map(A(1),B(1),i(1));
c2 : XNOR port map(A(2),B(2),i(2));
c3 : XNOR port map(A(3),B(3),i(3));
c4 : AND4 port map(i(0),i(1),i(2),i(3),C);
end ARCH_3;
1- Les components sont inclus dans un package
2- Déclaration d'accès aux éléments du package
VHDL
Conception modulaire et hiérarchique
Les descriptions modulaires de haut niveau facilitent la lecture, la mise au point, la simulation, la fiabilité
La conception modulaire permet d'utiliser les composants de bas niveau eventuellement fournis avec les outils logiciels
Elle permet également d'utiliser des modules VHDL (développés par les fabricants d'outil ou par les utilisateurs) : on peut alors parler de description 'structurelle de haut niveau'.
La description structurelle est la traduction textuelle directe de la représentation schematique
Conclusions :
VHDL
Warp2
VHDL Text Galaxy
Report File
.JED
Synthèse
(Programmation)
(Config. file) Aldec
Simulation temporelle
FSM editor
(modèles pour
simulation externe)
(InSRkit)
VHDL
Warp2Warp2 s'intègre également dans des environnements CAO généralistes
: Viewlogic, Exemplar, Mentor, Cadence, Synopsys, etc.
Exemple : ViewlogicVHDL Entry
Viewdraw
Schematic Entry
SpeedWave or VCS
Source-level
Simulation
Warp
Synthesis
Warp
Fitting
Jedec/Jam
Programming FileViewSim, SpeedWave
or VCS
VHDL, Verilog
or 3rd Party
Simulation models
Viewlogic
Warp2