Académique Documents
Professionnel Documents
Culture Documents
Rappel Circuits VHDL
Rappel Circuits VHDL
l’utilisation de VHDL
Serge Weber
Institut Jean Lamour
(Serge.Weber@univ-lorraine.fr)
1
Introduction
Objectif
• Rappeler les notions essentielles de la conception de circuits
numériques en particulier les méthodes de synthèse et de
modélisation des combinatoires et séquentiels.
• Concevoir des circuits à partir d'une description en VHDL
Prérequis
Connaissance de l’algèbre de boole
2
Plan de la présentation
3
Histoire des circuits
Logiques
– 1950-1961 : DL / RTL
(composants discrets )
– 1961 FET « industriel »
– 1961-70 : RTL intégrée
– 1962 : ECL / CML
(1968 MECL III)
– 1962 : SUHL/9000/TTL (Texas)
– 1963 : CMOS (labo - 10m)
– 1967 : PMOS,NMOS puis CMOS
Création en 1968
5
Premier microprocesseur
1972 HP 65
100 pas de programme
$ 800
utilisé lors de la mission
Apollo – Soyouz en 1975
La micro-informatique
1975 Altaïr commercialisé par MITS (Ed. Roberts)
Intel 8080 à 2 Mhz
256 octets de mémoire
$395 ($498 assemblé)
pas de clavier : on entre les programmes à l’aide
d’interrupteurs
affichage avec des LEDs
1976 Steve Jobs et Steve Wozniak
fondent Apple Computer
MOS 6502 à 1 Mhz Motorola
256 octets de ROM
8 ko de RAM
clavier, sortie écran, k7
$666,66
Apple I, 1976
Création du BASIC, 1977
automobile Instrumentation
bijouterie Four
Grille pain
éclairage
Technologie de communication
23
Classification des circuits
25/10/2017 24
Classification en fonction de la
destination finale
CIRCUIT
Standard spécifique à
Conçus et réalisés l’application
ASIC par le fabricant
PLD
Full-custom Semi-custom
• La porte NAND :
VDD
A
S
B
PA PB
VA VB PA PB NA NB VS
25/10/2017 27
Les circuits programmables
25/10/2017 28
L’Ancêtre : Les PALs
25/10/2017 29
Exemple de programmation
25/10/2017 30
Sorties avec registres
25/10/2017 31
Les PLD effaçables et
programmables
La grille isolée du MOS double
grille permet de piéger des
charges électriques. Une fois
piégées les charges
maintiennent l’état du transistor
même en l’absence
d’alimentation.
• Les premières générations
étaient effaçables par UV.
• Les générations suivantes
par tension
25/10/2017 32
PLD à technologie SRAM
25/10/2017 33
Circuits programmables CPLD (1/3)
25/10/2017 34
Circuits programmables CPLD (2/3):
Exemple du MAX7000 (Altera)
• Schéma global:
6 6
6 6
25/10/2017 35
Circuits programmables FPGA
Architecture générale :
Très nombreux petits
blocs logiques
interconnectés entre
eux (LUT ou MUX).
Pas de matrice
d’interconnexion
centralisée
25/10/2017 36
FPGA exemple XILINX famille 4000 (1993)
Exemple de routage
CLB CLB
M. I.
CLB CLB
37
Circuits programmables, FPGA :
parties combinatoires
f = x1.x2 + x3.x2!
25/10/2017 39
Configurations
25/10/2017 40
Rappels circuits combinatoires
41
Logique Combinatoire
• Représentations des fonctions combinatoires
– Algébrique :
• opérateurs et, ou, non, . , +, A , AND, OR, NOT
• Table de vérité : utilisée pour la résolution des
problèmes
• Tableau de Karnaugh : utilisé pour la simplification
des fonctions
• Schématique AND &
OR 1
NOT 1
XOR
=1
Nombres et codes
– Entiers
• positifs : 10112 = 1110
• négatifs :
– complément à 2 (complément à 1 + 1)
– binaire décalé : codage par excédent pour un nombre N sur
n bits Nc = N10 + 2n-1 (n bits excédent 2n-1 )
– Nombres décimaux à virgule fixe
• 6,2510 = 110,012
– Nombres à virgule flottante
• standard IEEE 754-1985 sur 32 bits :
– SmE
– (-1)Sx1,mx2E ; S sur 1er bit, m mantisse sur 23
bits, E exposant sur 8 bits excédent 127
– Caractères alphanumériques : code ASCII , autres
43
Modèles de description
• Fonctions combinatoires
– Equations logiques
– Tables de vérité
– Schémas logiques (logigrammes)
– Tableaux de Karnaugh
– description HDL (Verilog, VHDL)
• Limitations
– Par le nombre de variables
• Remède : utilisation de fonctions génériques
– Multiplexeurs, comparateurs, codeurs, fonctions
arithmétiques
Combinatoire et VHDL
45
Historique de VHDL
• VHDL : VHSIC Hardware Description Language (VHSIC :
Very High Speed Integrated Circuit)
• 1981 Etude de l'armée américaine sur un moyen de réaliser
des documentations techniques sans ambiguïtés et
facilement interprétables.
• 1987 Standard IEEE 1076-1987
• 1993 révision IEEE 1134-1993 révision la plus courante
• 2008 révision IEEE 1076-2008 introduction de PSL
(Property Specification Language)
• Utilisé pour :
– décrire le comportement de fonctions
– synthétiser un circuit
– modéliser un circuit (modèle logique et technologique)
– simuler une description ( description des signaux
d'entrée)
46
Etape de la synthèse de circuits
• Description comportementale puis RTL du
Description en circuit
VHDL
• Le synthétiseur traduit en équation logiques la
description VHDL
Synthèse logique
47
La vérification (par simulation)
Synthèse logique
• Comportementale
Netlist • Fonctionnelle
Liste des interconnexions Simulateur
• Temporelle
Placement routage
Extraction des
délais (fichier SDF)
Fichiers de configuration-
programmation
48
Exemple simple
a
s1
b
s2
c
ENTITY ex1 IS -- commentaires
PORT ( -- déclaration des entrées/sorties physiques
a, b, c : IN BIT ;
s1, s2 : OUT BIT -- pas de point virgule
);
END ex1 ;
ARCHITECTURE struct OF ex1 IS -- description de l’application
BEGIN
s1 <= a AND b ;
s2 <= (NOT a) OR (a AND b AND c) ;
END struct;
49
Description VHDL
• Trame principale
-- Library Clause
LIBRARY ieee;
-- Use Clause
Nom du USE ieee.std_logic_1164.all;
répertoire dans
lequel se trouve
std_logic_1164
-- Package Declaration (optional)
50
Entité
Description des entrées et des sorties de la structure en
explicitant pour chacune d'entre elles le nom, la direction
(IN, OUT et INOUT) et le type.
ENTITY _entity_name IS
GENERIC( _parameter_name : string := _default_value ;
_parameter_name : integer:= _default_value );
PORT(
_input_name, _input_name : IN STD_LOGIC;
_input_vector_name : IN STD_LOGIC_VECTOR(high downto low);
_bidir_name, __bidir_name : IN OUT STD_LOGIC;
_output_name, __output_name : OUT STD_LOGIC );
END __entity_name ;
E1
Exemple : entity XOU is
S
port (E1, E2 : in bit; XOU
S : out bit); E2
end XOU;
Description VHDL
51
Architecture
L'architecture décrit le comportement de l'entité. Il est possible
de créer plusieurs architectures pour une même entité. Chacune de
ces architectures décrira l'entité de façon différente.
52
Description comportementale
ENTITY ex2 IS
Quelles sont les équations logiques ?
PORT (
Non données
e0, e1, c : IN BIT ;
description comportementale
s: OUT BIT
Quelle est la fonction ?
);
Multiplexeur
END ex2 ;
Table de vérité ?
ARCHITECTURE comport OF ex2 IS
Equations ?
BEGIN
s <= (NOTc AND e0) OR (c AND e1)
s <= e0 WHEN c = ‘0’ ELSE e1;
END comport ;
53
Nouvelle fonction
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY fonction4 is
PORT( e : IN std_logic_VECTOR (3 DOWNTO 0);
sel : IN std_logic_VECTOR (1 DOWNTO 0);
s : OUT std_logic);
END fonction4;
ARCHITECTURE comporte OF fonction4 IS
BEGIN
s <= e(0) WHEN sel = "00" ELSE
e(1) WHEN sel = "01" ELSE
e(2) WHEN sel = "10" ELSE
e(3) ;
END;
54
Types
• Types utilisés en électronique numérique
Les signaux, variables et constantes ont obligatoirement un
type qui définit l ’ensemble auquel ils appartiennent.
Description VHDL
55
Types std_logic et std_ulogic
Le type bit est insuffisant à définir des états haute impédance
ou indéfinis!
Le standard IEEE de 1993 ( std_logic_1164) remédie à ce
problème en définissant les types std_ulogic et std_logic le
standard std_logic est résolu (des affectations multiples
sont prévues)
'U' = Non initialisé, ’W’ = inconnu forçage faible,
’X ' = inconnu forçage fort, ’L’ = forçage faible, (bas)
’0’ = forçage fort, (bas) ’H’ = forçage faible, (haut)
’1’ = forçage fort, (haut) ’-’ = quelconque.
’Z ' = haute impédance,
std_logic_vector et std_ulogic_vector sont des bus de type
std.
Description VHDL
56
Types std_logic et std_ulogic
Le type bit est insuffisant à définir des états haute impédance
ou indéfinis!
Le standard IEEE de 1993 ( std_logic_1164) remédie à ce
problème en définissant les types std_ulogic et std_logic le
standard std_logic est résolu (des affectations multiples
sont prévues)
Seuls ces quatre états ont une signification pour la
synthèse
’1’ = forçage fort, (haut) ’0’ = forçage fort, (bas)
’Z ' = haute impédance, ’-’ = quelconque.
Description VHDL
57
Le package numeric_std
Le package numeric_std définit :
• Deux types supplémentaires : signed et unsigned ce sont des
entiers définis comme des vecteurs de bits.
• Définit de nombreux opérateurs arithmétiques sur les entiers
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
…..
signal s1, s2, s3, s4, s5, s6 : std_logic_vector(3 downto 0);
signal u1, u2, u3, u4, u6, u7: unsigned(3downto 0);
signal sg: signed(3 downto 0);
• u3 <= u2 + u1; --- ok, operandes non-signés
• u5 <= sg; u6 <= 5; -- type mismatch
• --Solution
• u5 <= unsigned(sg); -- type casting
• u6 <= to_unsigned(5,4); -- fonction de conversion
Description VHDL
58
Opérateurs de numeric_std
59
Conversion de types
Numbers Bit_vectors
60
Vecteurs
• Assigner une valeur à un des éléments d'un bus: B(3) <= '1 ’
Description VHDL
61
Vecteurs
2. S <= (7 => '1', 6 => '1', 5 downto 4 => '0', 3 => '1', 2 => '0', 1
=> '1', 0 => '0') ;
assigne la valeur 11001010 aux éléments S(7), S(6), ..., S(0).
62
Simulation multiplexeur4
• Entité : multiplexeur4
• Fichier sdf : multiplexeur4_vhd.sdo
63
Application
à l’implémentation de tables de vérité
• Exercice : proposer une description pour la table
de vérité ci-dessous
Entrées Sortie
000 100
001 010
010 111
011 110
100 001
101 000
110 011
111 101
64
Assignation conditionnelle
65
Description structurelle
Entity add is
port (A, B : in bit; Som, Ret : out bit);
end add;
architecture Arch_structurelle of add is
Déclaration du component XOU
composant XOU
port (E1, E2 : in bit; S : out bit);
end component;
Déclaration du
composant ET. component ET
port (E1, E2 : in bit; S : out bit);
Spécification de l'entité end component;
et de l'architecture à for U1 : XOU use entity work.XOU(Ar_XOU);
utiliser pour les for U2 : ET use entity work.ET(Ar_ET);
composants ET et XOU. begin
Câblage (instanciation) U1 : XOU port map (A=>E1, B=>E2, Som=>S);
des composants XOU et U2 : ET port map (A=>E1, B=>E2, Ret=>S);
ET appelés U1 et U2. end arch_structurelle;
Description VHDL
66
Autre forme de description
structurelles
LIBRARY ieee;
Déclaration du USE ieee.std_logic_1164.ALL;
répertoire de USE work.all;
travail comme
bibliothèque Entity add is
port (A, B : in bit; Som, Ret : out bit);
end add;
IF condition1 THEN
instructions séquentielles;
ELSIF condition2 THEN
instructions séquentielles;
ELSIF condition3 THEN
ELSIF
instructions séquentielles;
ELSE
instructions séquentielles;
END IF;
ELSIF
70
Description comportementale
71
Description comportementale
LIBRARY ieee; USE ieee.std_logic_1164.all;
ENTITY combi4 IS
PORT (c :IN INTEGER RANGE 0 TO 3;
e : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
S : OUT STD_LOGIC );
END combi4;
ARCHITECTURE archi OF combi4 IS La liste est-elle
BEGIN complète ?
PROCESS(c)
BEGIN c
CASE c IS e(0)
WHEN 0 => s<= e(0);
WHEN 1 => s<= e(1); e(1) mux
WHEN 2 => s<= e(2); S
e(2)
WHEN 3 => s<= e(3);
END CASE;
END PROCESS; e(3)
END archi;
72
Description comportementale
• Concurrence dans un process
architecture Arch of Ent is
begin
Process (A, B)
begin
if (A = ’1’ and B = ’1’) then S1 <= ’1’;
architecture Arch of Ent is
else S1 <= ’0’; end if;
begin
end process;
S1 <= A and B;
Process (B, C)
S2 <= A when B = ’0’ else
begin
notA when C = ’1’ else
if (B = ’0’) then S2 <= A;
D;
elsif (C = ’1’) then S2 <= not(A);
end Arch;
else S2 <= D; end if;
end process;
end ;
Description VHDL
73
Description comportementale
Description VHDL
74
Description comportementale
Exemple d'application de l'instruction for loop
LIBRARY ieee;USE ieee.std_logic_1164.all;
ENTITY adder4 IS
PORT (a,b : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
cin : IN STD_LOGIC; cout : OUT STD_LOGIC;
sum : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) );
END adder4 ;
ARCHITECTURE compor OF adder4 IS
signal c : STD_LOGIC_VECTOR(4 DOWNTO 0);
BEGIN
PROCESS (a,b,cin,c)
BEGIN
c(0) <= cin;
FOR i IN 0 TO 3 LOOP
sum(i) <= a(i) xor b(i) xor c(i);
c(i+1) <= (a(i) and b(i)) or (c(i) and (a(i) or b(i)));
END LOOP;
cout <= c(4);
END PROCESS;
END compor; Description VHDL
75
Description comportementale
• Signaux, variables et constantes
Ce sont les trois objets manipulés dans une description
VHDL. Les trois objets sont nécessairement typés.
Le signal est connu dans toute l'architecture où il est déclaré.
Les ports sont des signaux. Les signaux ne sont pas mis à
jour immédiatement dans un process. Dans un process la
dernière assignation détermine la valeur attribuée au signal.
(assignation : s <= a) (initialisation par s := '0')
La variable ne peut être utilisé que dans un process où elle est
locale. Elle est mise à jour instantanément.
(assignation : i := '1')
La constante peut être utilisée partout mais aucune assignation
n'est possible. Seule l'initialisation est prévue exemple :
CONSTANT PI : real := 3.1414
Description VHDL
76
Description comportementale
Description VHDL
77
Description comportementale
library IEEE;
use IEEE.std_logic_arith.all ;
use IEEE.std_logic_1164.ALL;
ENTITY dec3vers8 IS
PORT ( sel : IN BIT_VECTOR (2 DOWNTO 0);
en : IN STD_LOGIC;
Y : OUT STD_LOGIC_VECTOR (7 DOWNTO 0));
END dec3vers8;
ARCHITECTURE numero1 OF dec3vers8 IS
BEGIN
80
Erreur fréquente dans les processus
PROCESS(sel, en)
BEGIN
L'erreur fréquente
IF (en='1') THEN
CASE sel IS dans les processus
WHEN "000" => Y(0)<= '1'; est d'oublier
WHEN "001" => Y(1)<= '1'; d'attribuer une
WHEN "010" => Y(2)<= '1' ; valeur par défaut.
WHEN "011" => Y(3)<= '1' ; Dans l'exemple
WHEN "100" => Y(4)<= '1' ; lorsque en=‘0’, alors
WHEN "101" => Y(5)<= '1' ; Y n'est pas
WHEN "110" => Y(6)<= '1' ; attribuée.
WHEN "111" => Y(7)<= '1' ;
Le synthétiseur
END CASE;
END IF; affecte dans ce cas
END PROCESS; un latch à chaque
END numero1; sortie Y
81
Erreur fréquente dans les processus
PROCESS(sel, en)
BEGIN
Y <= "0000 0000"; -- valeur par défaut
IF (en='1') THEN
CASE sel IS
WHEN "000" => Y(0)<= '1';
WHEN "001" => Y(1)<= '1';
WHEN "010" => Y(2)<= '1' ;
WHEN "011" => Y(3)<= '1' ;
WHEN "100" => Y(4)<= '1' ;
WHEN "101" => Y(5)<= '1' ;
WHEN "110" => Y(6)<= '1' ;
WHEN "111" => Y(7)<= '1' ;
END CASE;
END IF;
END PROCESS;
END numero1;
82
Systèmes séquentiels
• Principes fondamentaux
Pour des raisons de reproductibilité et de robustesse par
rapport aux aléas des fonctions combinatoires, seules les
fonctions séquentielles synchrones sont recommandées!
• Bascule D
Process (clk) Attribut 'event
vrai lorsque le signal
Begin
associé subit une
IF clk'event AND clk='1' THEN variation d'état
Q <= D;
END IF;
END Process;
Systèmes Séquentiels
83
Bascule D avec reset
Systèmes Séquentiels
84
Bascule D avec reset
Systèmes Séquentiels
85
Bascule D avec Enable
Systèmes Séquentiels
86
Compteurs
Systèmes Séquentiels
87
Compteurs
ENTITY adder IS
PORT (op1, op2 : IN UNSIGNED(7 DOWNTO 0);
result : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)
);
END adder;
ARCHITECTURE archi OF adder IS
BEGIN
result <= STD_LOGIC_VECTOR(op1 + op2, 8 );
END archi;
Systèmes Séquentiels
88
Compteurs
ENTITY cpt3 IS
PORT(e: IN INTEGER RANGE 255 DOWNTO 0;
h, prepn, razn : IN STD_LOGIC;
S: OUT INTEGER RANGE 0 TO 255 );
END cpt3;
ARCHITECTURE archi OF cpt3 IS
SIGNAL test : INTEGER RANGE 0 TO 255;
BEGIN
PROCESS(razn,h,prepn) Solution au
BEGIN problème de port :
IF razn = '0' THEN test<= 0; Utiliser un signal ou
ELSIF (h'EVENT AND h ='1') THEN une variable pour
IF prepn='0' THEN test<=e; effectuer les
ELSE test<=test+1; END IF;
opérations puis mettre
ELSE test <= test; END IF;
END PROCESS; la sortie à jour à la
S <= test; fin.
END archi;
Systèmes Séquentiels
89
Machines d'état (FSM)
• Machine de Moore
Horloge c
S(t) = F(X(t))
X(t + 1) = G[E(t), X(t)]
Systèmes Séquentiels
90
Machines d'état (FSM)
• Machine de Mealy
Systèmes Séquentiels
91
Type énuméré
• Énumération
Création personnalisée d ’un type correspondant à une
énumération d ’éléments explicites.
Très utile pour identifier les états d'une machine d'états.
Exemple :
TYPE libelle_instruction IS (MOVE, ADD, JNE, BRS, RTS) ;
SIGNAL Instruction : libelle_instruction ;
Description VHDL
92
Machines d'état (FSM)
• Description VHDL
Les FSM sont composées
– de trois parties,
– deux fonctions combinatoires et un registre.
Chacune de ces parties peut être décrite séparément ou de
manière composée avec une autre .
– Les états peuvent être identifiés explicitement à l'aide
d'un type énuméré approprié !
Exemple :
TYPE state IS (lecture, incrément, décode, exécute) ;
Systèmes Séquentiels
93
Machines d'état (FSM)
• Description à trois parties
ARCHITECTURE FSM3p of exemple IS
TYPE state IS (lecture, incrément, décode, exécute) ;
signal etat, etat_futur : state ;
BEGIN
Pr : process(horloge)
..... IF horloge'event .... Horloge c
E
...... etat <= etat_futur ; etat_futur
ps : process(etat) Pe Pr
etat
Ps
S
..... S <= ....
pe : process(E, etat)
...... etat_futur <= ...
Systèmes Séquentiels
94
Exemple de machine d'état
Systèmes Séquentiels
95
Exemple de machine d'état
• Commande d'essuie glace
!E
repos
F !M, !P
E
E
cyc_2 lavage
! F M , !P M, P E
E
F !E
cyc_1
M, !P
!F
Systèmes Séquentiels
96
Exemple de machine d'état
Type state is (repos, lavage, cyc_1, cyc_2)
signal etat, etat_f : state;
P1 : process(clk)
begin
if clk'event and clk='1' then
etat <= etat_f;
Registre
end if;
end process P1;
P2 : process(etat)
begin
if etat= repos then
M <= '0'; P <= '0';
elsif etat = lavage then Description
M <= '1'; P <= '1'; des sorties
else
M <= '1'; P <= '0';
end if;
end process P2;
Systèmes Séquentiels
97
Exemple de machine d'état
P3 : process(F, E, etat)
begin Circuit
case etat is d'excitation
when repos => if E='1' then
etat_f <= lavage ;
else etat_f <= etat; end if;
when lavage => if E = '0' then
etat_f <= cyc_1 ;
else etat_f <= etat; end if;
when cyc_1 => if E ='1' then
etat_f <= lavage ;
elsif F= '1' then etat_f <= cyc_2 ;
else etat_f <= cyc_1; end if;
when cyc_2 => if E = '1' then
etat_f <= lavage ;
elsif F= '1' then etat_f <= repos ;
else etat_f <= etat; end if;
end case ;
end process P3;
Systèmes Séquentiels
98
Machine d'état
• Simplification de l'écriture
Il est possible de regrouper les parties
combinatoires dans un processus, ce qui
allège l'écriture au détriment de la
lisibilité.
Systèmes Séquentiels
99
Machine d'état
Systèmes Séquentiels
100
Machine d'état
P3 : process(F, E, etat)
begin
case etat is
when repos => M <= '0'; P <= '0' Etats de sorties
if E='1' then etat_f <= lavage ;
else etat_f <= etat; end if;
when lavage => M <= '1'; P <= '1';
if E = '0' then etat_f <= cyc_1 ; Etat futur
else etat_f <= etat; end if;
when cyc_1 => M <= '1'; P <= '0';
if E ='1' then etat_f <= lavage ;
elsif F= '1' then etat_f <= cyc_2 ;
else etat_f <= etat; end if;
when cyc_2 => M <= '1'; P <= '0';
if E = '1' then etat_f <= lavage ;
elsif F= '1' then etat_f <= repos ;
else etat_f <= etat; end if;
end case ;
end process P3;
Systèmes Séquentiels
101
Machine d'état autre simplification
• Flot de conception
• VHDL-RTL
104
Flot de Conception
Spécification
Vérification
manuelle
Analyse du Description
problème comportementale
Conception
Vérification
Simulation comport.
Raffinement Description VHDL-
architectural
RTL
Synthèse
Netlist logique
indépendante
Synthèse
technologique
Netlist logique
technologique
Placement Simulation logique
routage
Layout
105
Instructions avancées
• Generate
Generate est une instruction qui simplifie de manière très
sensible l'écriture de descriptions structurelles complexes.
L'instruction permet de répliquer automatiquement des
composants en incrémentation les indices de bus.
__generate_label :
FOR __index_variable IN _plage GENERATE
instruction;
_instruction;
END GENERATE;
Description VHDL
106
Generate : exemple
• réalisation d'un registre à décalage
Use work.std_logic_1164.all;
Entity decalage is
port (a, clk : in std_logic;
b : out std_logic);
end decalage;
Description VHDL
107
Generate : exemple suite
Begin (d, clk : In std_logic;
z(0) <= a ; q : out std_logic);
instance : For i In 0 to 3 generate
Dx : D_basc port MAP( z(i), clk, z(i+1));
End Generate;
b <= z(4) ;
End gen_decal;
D_basc(0) D_basc(1) D_basc(2) D_basc(3)
Z(0) Z(1) Z(2) Z(3) Z(4)
D Q D Q D Q D Q
a b
clk clk clk clk
clk
Description VHDL
108
Instructions avancées
• Generic
Il est possible de rajouter une déclaration de GENERIC
correspondant à des paramètres. Ces paramètres pourront,
par la suite, être modifiés lors de l'utilisation de la
description en temps que composant.
Generic est utilisé pour deux applications principales :
• définition de paramètres de délai
• Paramétrage de la taille des bus
Description VHDL
109
Generic : exemple
Dans ces premiers exemples TP est une constante
de type time. L'attribut after modélise le délai
pour la fonction réalisée.
Entity ET is Entity OU is
GENERIC (TP : time := 0 ns); GENERIC (TP : time := 20 ns);
port (E1, E2 : in bit; S1 : out bit); port (E1, E2 : in bit; S1 : out bit);
end ET; end OU;
architecture ET of ET is architecture OU of OU is
begin begin
S1 <= E1 and E2 after TP; S1 <= E1 or E2 after TP;
end ET; end OU;
Description VHDL
110
Generic suite de l'exemple
Entity ET_OU is begin
port (A, B : in bit; X, Y : out bit); U1 : OU generic map ( TP => 5 ns )
port map (A, B, X);
end ET_OU;
U2 : ET generic map ( TP => 15 ns )
architecture ET_OU of ET_OU is port map (A, B, Y);
component OU end ET_OU;
generic (TP : time);
port (E1, E2 : in bit; S1 : out bit);
end component;
component ET
generic (TP : time);
port (E1, E2 : in bit; S1 : out bit);
end component;
for U1 : OU use entity work.OU(OU);
for U2 : ET use entity work.ET(ET);
Description VHDL
111
Packages
• regroupement de données, variables, fonctions, procédures,
etc., que l'on souhaite pouvoir utiliser ou appeler à partir
d'architectures. Au sein d'un projet contenant plusieurs
entités, les packages permettent d ’utiliser des ressources
(constantes, variables particulières, fonctions...) identiques.
• Deux unités pour les paquetages :
– La déclaration de paquetage (PACKAGE nom IS)
– Le corps de paquetage (PACKAGE BODY nom IS)qui contient les
valeurs déclarées et la description des sous-programmes
(procedure et fonction)
PACKAGE __package_name IS
-- Type Subtype Declaration Non supporté par
-- Constant Declaration certains
-- Signal Declaration compilateurs
-- Component Declaration
-- procedure, fonction Declaration
END __package_name;
Description VHDL
112
Exemple d ’application du
paquetage
Package exemple is
Déclaration de la constant delai : time;
constante de type time end exemple ;
package body ex_bod of exemple is
Initialisation de la
constant delai : time := 27ns;
constante à 27ns
end ex_bod;
Description VHDL
114
Conception avancée
Exemple 1 :
Description VHDL
115
Conception avancée
• Procédure
Les procédures diffèrent des fonctions par le fait qu'elles
acceptent des paramètres dont la direction peut être IN,
INOUT et OUT. Une procédure ne possède donc pas un
ensemble de paramètres d'entrées et un paramètre de
sortie mais un ensemble de paramètres d'entrées-sorties
Exemple :
PROCEDURE RS (signal A, B : IN bit; signal Q, Qb : INOUT bit) IS
BEGIN
Q <= not (A or Qb);
Qb <= not (B or Q);
END;
Description VHDL
117
• Conversion de type
118
Macrofonctions combinatoires
• Décodeur binaire
– Fonction qui convertit des données codées en binaire en
bits pondérés décimal. Ainsi toutes les valeurs sur n bits
d'entrée sont représentées sur 2n sorties.
Exercice : réaliser la description VHDL d'un décodeur 2
vers 4. LIBRARY ieee; USE ieee.std_logic_1164.all;
ENTITY decodeur IS
PORT ( a :IN STD_LOGIC_VECTOR(1 DOWNTO 0);
S : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) );
END decodeur;
• Exercice
Réaliser un décodeur BCD-7segments
• library IEEE;
• use IEEE.std_logic_arith.all;
• use IEEE.std_logic_1164.ALL;
• ENTITY dec7seg IS
• PORT ( n : IN INTEGER RANGE 0 TO 15;
• segments : OUT STD_LOGIC_VECTOR (6
DOWNTO 0));
• END dec7seg;
Macrofonctions combinatoires
120
Macrofonctions
ARCHITECTURE numero1 OF dec7seg IS
BEGIN
PROCESS(n)
BEGIN
CASE n IS
WHEN 0 =>segments <= "1111110";
WHEN 1 =>segments <= "0110000" ;
WHEN 2 =>segments <= "1101101" ;
WHEN 3 =>segments <= "1111001" ;
WHEN 4 =>segments <= "0110011" ;
WHEN 5 =>segments <= "1011011" ;
WHEN 6 =>segments <= "1011111" ;
WHEN 7 =>segments <= "1110000" ;
WHEN 8 =>segments <= "1111111";
WHEN 9 =>segments <= "1111011" ;
WHEN others =>segments <= "0000001" ;
END CASE;
END PROCESS;
END numero1; Macrofonctions combinatoires
121
Encodeur
L'encodeur binaire réalise la fonction inverse du décodeur. Les
2n entrées sont pondérées décimal. L'entrée active de plus
fort poids est codée en binaire sur n bits.
Réaliser un encodeur à 4 entrées en utilisant when else
122
Encodeur
Réaliser un encodeur à 4 entrées en utilisant If then else
LIBRARY ieee; USE ieee.std_logic_1164.all;
ENTITY encodeur2 IS
PORT (a :IN STD_LOGIC_VECTOR(3 DOWNTO 0);
S : OUT STD_LOGIC_VECTOR(1 DOWNTO 0));
END encodeur2;
ARCHITECTURE archi OF encodeur2 IS
BEGIN
PROCESS (a)
BEGIN
IF a(3) = '1' THEN s<= "11" ;
ELSIF a(2) = '1' THEN s<= "10";
ELSIF a(1) = '1' THEN s<= "01";
ELSE s<= "00";
END IF;
END PROCESS ;
END archi;
Macrofonctions combinatoires
123
Encodeur
124
Multiplexeur
Un multiplexeur permet d'aiguiller une donnée parmi N
entrées vers une seule sortie. (cf exemple ch. assignation
conditionnelle).
S <= e(sel)
Macrofonctions combinatoires
125
Multiplexeur
Macrofonctions combinatoires
126
Macrofonction de la bibliothèque
Systèmes Séquentiels
127
Macrofonction de la bibliothèque
ARCHITECTURE archi OF cpt2 IS
SIGNAL raz, prep : STD_LOGIC;
Instanciation de
BEGIN la macrofonction
mon_compteur : lpm_counter
GENERIC MAP ( LPM_WIDTH => 4, Déclaration
LPM_DIRECTION => "UP") des
PORT MAP (data => e(3 DOWNTO 0), clock => h, paramètres
sload => prep, aclr => raz, q => s(3 DOWNTO 0)); Connexion des
razn <= NOT raz; ports
prepn <= NOT prep;
END archi;
Systèmes Séquentiels
128
ANNEXE
129
Types
• Types utilisés en électronique numérique
Les signaux, variables et constantes ont obligatoirement un
type qui définit l ’ensemble auquel ils appartiennent.
Description VHDL
130
Vecteurs
• Assigner une valeur à un des éléments d'un bus: B(3) <= '1 ’
• Assigner une valeur à l'ensemble du bus, plusieurs méthodes
Description VHDL
131
Type énuméré et tableau
• Énumération
Création personnalisée d ’un type correspondant à une
énumération d ’éléments explicites.
Exemple :
TYPE libelle_instruction IS (MOVE, ADD, JNE, BRS, RTS) ;
SIGNAL Instruction : libelle_instruction ;
• Tableau
définition de tableau de valeurs de type quelconque.
Exemple :
TYPE Tableau_4x8xbit IS ARRAY (3 downto 0, 7 downto 0) OF bit ;
ou bien encore
TYPE Tableau_8xbit IS ARRAY (7 downto 0) OF bit ;
TYPE Tableau_4x8xbit IS ARRAY (3 downto 0) OF Tableau_8xbit ;
Description VHDL
132
Type Record
Type composé de plusieurs éléments différents et juxtaposés .
L ’utilisation du ‘ . ’ permet ensuite d ’accéder à l ’élément
souhaité.
Exemple de type :
TYPE Bus_micro IS RECORD
Nbr_bit_adresse : integer ;
Nbr_bit_donnee : integer ;
Vitesse : time ;
END RECORD ;
Exemple d ’assignation sur ce type :
Bus_micro.Nbr_bit_adresse <= 24 ;
Bus_micro.Nbr_bit_donnee <= 16 ;
Bus_micro.vitesse <= 10us ;
Description VHDL
133
Conversion de type
• Nécessité
– Certains opérateurs peuvent être prévus uniquement sur
un type fixé (ex : integer). L'utilisation de cet opérateur
sur d'autres types (ex : std_logic_vector) nécessite une
conversion de type.
– Ces convertisseurs sont parfois spécifiques au package
utilisé. LIBRARY ieee;
USE ieee.std_logic_1164.all; USE ieee.std_logic_arith.all;
ENTITY adder IS
PORT (op1, op2 : IN UNSIGNED(7 DOWNTO 0);
result : OUT INTEGER);
END adder;
ARCHITECTURE maxpld OF adder IS
BEGIN
result <= to_INTEGER(op1 + op2);
Description VHDL
END maxpld;
134
Conversion de type
S
signed
I V
integer std_logic_vector
U
unsigne
d
135
Bibliothèques standard
Description VHDL
136
Opérateurs
Description VHDL
137
138
139
140
141
142
143
Compteur reset synchrone
library IEEE; use
IEEE.std_logic_1164.all; architecture behav of counter8 is
use IEEE.std_logic_unsigned.all; signal cnt: std_logic_vector (7 downto 0);
use IEEE.std_logic_arith.all; begin
entity counter8 is process (clk, cnt, rst)
port (clk, rst : in std_logic; begin
count : out std_logic_vector (7 if (clk'event and clk = '1') then
downto 0)); if (rst = '0') then
end counter8; cnt <= (others => '0');
else
cnt <= cnt + '1';
end if;
end if;
end process;
count <= cnt;
end behav;
144
Counter
library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all;
entity counter is
port ( clk : in std_logic; reset : in std_logic; count : out std_logic_vector (3 downto 0));
end counter;
architecture behavioral of counter is
signal q : std_logic_vector (3 downto 0);
begin
process(clk, reset)
begin
if(reset = '1') then q <= (others=>'0');
elsif(clk'event and clk = '1') then
q <= q + 1;
end if;
end process;
count <= q;
end behavioral;
145
Test bench
library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use
ieee.std_logic_unsigned.all;
entity count_tb is
end count_tb;
architecture testbench_arch of count_tb is
component counter
port ( clk : in std_logic;
reset : in std_logic;
count : out std_logic_vector (3 downto 0));
end component;
signal clk : std_logic := '0';
signal reset : std_logic := '0';
signal count : std_logic_vector (3 downto 0) := "0000";
constant period : time := 100 ns;
constant duty_cycle : real := 0.5;
constant offset : time := 100 ns;
begin uut : counter
port map ( clk => clk, reset => reset, count => count);
process -- clock generation
146
Testbench suite
begin wait for offset;
clock_loop : loop
clk <= '0';
wait for (period - (period * duty_cycle));
clk <= '1'; wait for (period * duty_cycle);
end loop clock_loop;
end process;
process -- reset generation
begin
reset <= '0';
-- ------------- temps courant : 0ns
wait for 100 ns;
reset <= '1';
-- ------------- temps courant : 100ns
wait for 35 ns;
reset <= '0';
-- ------------- temps courant : 135ns
wait for 1865 ns;
-- ------------- temps courant : 2000ns
end process; end testbench_arch;
147
148
Bibliographie
• « Electronique : Tout le cours en fiches » Y. Granjon,
B. Estibals, S. Weber (Dunod)
• "Circuits numériques et synthèse logique " J. WEBER,
M. MEAUDRE, 1995 (MASSON)
• "Logique programmable" Laurent Dutrieux, Didier
DEMIGNY 1997(Eyrolles)
• "Digital System Design with VHDL" M. Zwolinski,
2000 (Prentice Hall)
• "Spécification et conception des ASICS" J.-P. Calvez,
1993 (MASSON)
• "VHDL du langage à la modélisation" R. AIRIAU, J. M.
BERGE, V. OLIVE, J. ROUILLARD, 1990 (Presse
Polytechniques et Universitaires Romandes)
• "Arithmétique des ordinateurs" MULLER, (MASSON)
149