Vous êtes sur la page 1sur 149

Rappel sur les circuits logiques par

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

• Historique des circuits numériques


• Quelques définitions élémentaires
• Eléments de technologies numériques
• Rappels circuits combinatoires
• Combinatoire et VHDL
• Suite à venir

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 - 10m)
– 1967 : PMOS,NMOS puis CMOS
Création en 1968

Gordon MOORE Robert NOYCE


– Ils quittent Fairchild pour créer une startup : Intel
Serge.Weber@univ-lorraine.fr - IJL

5
Premier microprocesseur

– 1968 : mémoire SRAM


intégrée
– 1970 : DRAM 1Kbit
(1103 d’INTEL)
– 1971 : Processeur
4004 d’INTEL :
(2250 Transistors NMOS
108 KHz, 4bits, adresse 640 mots)
– 1972 : PROM à fusibles
– 1973 : Internet (25 machines)
– 1975 : PLD (1er circuit
programmable) Signetics
Début de la micro-informatique

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

Paul Allen et Bill Gates


Evolution des microprocesseurs
Doublement tous les 18mois de la densité : loi de Moore
Evolution de la microélectronique
Comparaison des complexités
Quelques définitions

L’électronique est une science de l’ingénieur qui


étudie et conçoit les structures effectuant des
traitements de signaux électriques porteurs
d’information ou d’énergie.
1. Les signaux porteurs de puissance constituent le
domaine de l’électronique de puissance. (P=u.i >
qques W)
2. Les signaux porteurs d’information sont de deux
natures :
• Continus ou monotones -> analogiques
• Discontinus ou non monotones -> numériques
Signaux analogiques

• Les signaux analogiques : sont des courant ou


tension monotones dans le temps.
• La plupart des systèmes physiques le sont, car les
grandeurs physiques évoluent le plus souvent d’une
façon continue (par exemple, la température)
Exemple d’un signal sinusoïdal : Exemple d’un signal audio
Zoom sur un signal analogique

Il est impossible de trouver ou produire un signal parfaitement pur :


• Il subira des perturbations d’amplitude de toutes
origines(électromagnétiques, électrostatiques, thermiques, etc..)
• On appelle bruit les variations subies par le signal signal = signal utile
+ bruit
Domaines d’application de l’électronique
analogique

• L'instrumentation (mesures, conditionnement de


capteurs)
• Les fréquences audio (en lien avec l'électroacoustique)
• Les fréquences radio (modulations et récepteurs)
• Les hyperfréquences (encore appelées fréquences
radar ou hautes fréquences)
• La production et la propagation des ondes
électromagnétiques
• La vidéo (coté capteur ; la télévision numérique qui a
quasiment remplacé la TV analogique)
• Le traitement du signal analogique (opérations simples)
Méthodes de conception et outils pour
l’électronique analogique
• Les lois générales de calcul et de modélisation d’un
circuit électrique :
– Les lois de Kirchoff (nœuds, mailles)
– Les sources de tension de courant
– nombres complexes,
– transformées de Laplace
• Les lois de l’électromagnétisme
• Les modèles de fonctionnement des composants à
semi-conducteurs
• Les outils mathématiques pour le traitement du
signal (transformée de Fourier, décomposition …)
• Les outils pour la propagation (équations de
Maxwell)
Signaux numériques
• L’électronique numérique : s’intéresse au
traitement des signaux dont l’espace de valeurs est
discret et à des instants discrets. On ne prend en
compte qu'un nombre fini d'états
• Signal numérique simple

• Cela implique un codage de l’information temporelle et


donc une perte d’information
• Cela apporte robustesse face aux variabilités des
composants et une immunité aux sources de bruit
(perturbations)
Passer de l’analogique au numérique
• Découpage de l’information en temporel
(échantillonnage) et en amplitude..

• Codage en base 2 de chaque échantillon


– Fréquence d’échantillonnage détermine la fréquence
max du signal d’entrée
– Le nombres de bits de chaque échantillon détermine
la résolution et donc la perte d’information
Electronique Analogique versus
numérique
Electronique numérique ? : Il y en a partout

automobile Instrumentation
bijouterie Four
Grille pain
éclairage

Technologie de communication

télévision Machine à coudre


Chauffage
Eléments de technologies

23
Classification des circuits

• Les SSI (1960) sont des circuits contenant quelques


portes logiques
• Les MSI contiennent une fonction plus complexe comme le
multiplexeur ou le comparateur.
• Les LSI (1970) peuvent être de petites mémoires de
quelques koctets ou les premières générations de
microprocesseurs.
• Les VLSI (1980) sont les processeurs de seconde
génération, les mémoires de plusieurs Mbits.
• Les ULSI (>1 million de transistors) : processeurs de
dernière génération ou les FPGA.

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

Circuit à la Circuit à base de Circuit Circuit


demande cellules prédiffusé programmable
précaractérisées
Taillé sur
mesure au FPGA PAL
niveau EPLD
transistor CPLD
25/10/2017 25
Cellule numérique de base
Cellules combinatoires en technologie CMOS

• La porte NAND :
VDD
A
S
B
PA PB
VA VB PA PB NA NB VS

0 0 on on off off VDD


VB
NB
0 VDD on off off on VDD
VS
VDD 0 off on on off VDD VA
NA
VDD VDD off off on on 0

25/10/2017 Conception de circuits intégrés


numériques en CMOS
26
Circuits Configurables
ou programmables
• Alternative aux circuits ASIC
– PLD ou FPGA
– Fonctions numériques configurées par l’utilisateur
– Principaux fournisseurs
• XILINX
• ALTERA->Intel
• LATTICE
• ATMEL
• ACTEL
• QuickLogic

25/10/2017 27
Les circuits programmables

• Circuit standard dont les fonctions sont


programmées par le concepteur
• Histoire : les PLA et PAL
• Puis EPLD (Erasable Programmable Logique
Device)
• Actuellement CPLD et FPGA (Field
Programmable Gate Array) pré-diffusés
programmables

25/10/2017 28
L’Ancêtre : Les PALs

F1 à F8 sont des fusibles dont certains sont


détruits à la programmation

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)

• CPLD: Complex PLD Architecture générale:


 Plusieurs PLD simples (PAL) interconnectés entre eux.
 Matrice d’interconnexion programmable centralisée.

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

FPGA : Field Programmable Gate Array

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

• Look Up Table : LUT


ROM
a b c F 0 1
0 0 0 1 1 1
0 0 1 1 2 0
0 1 0 0 3 1
0 1 1 1 1 F
4
1 0 0 1 5 1
1 0 1 1 6 1
1 1 0 1 7 1
1 1 1 1 Adresses
25/10/2017 38
a b c
Circuits programmables FPGA
Exemple de programmation

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

• Le synthétiseur fournit une liste


Netlist d’interconnexion de primitives (Netlist)
Liste des interconnexions dépendant de la technologie

• Le placeur routeur place chaque fonction dans


Placement routage la cible technologique choisie et détermine le
chemin électrique des connexions entre
fonctions (routage).
Fichiers de • Les données de programmation (bitstream)
permettent avec l’outil et le programmateur
fabrication/ adéquat de configurer la technologie FPGA ou
configuration CPLD

47
La vérification (par simulation)

Description en Fichiers de simulation


VHDL A écrire Testbench en VHDL

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)

-- Package Body (optional)

Entité et -- Entity Declaration


Architecture sont
les parties -- Architecture Body
principales d'une
description Description VHDL

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.

ARCHITECTURE _architecture_name OF _entity_name IS


SIGNAL __signal_name : STD_LOGIC;
BEGIN
-- Process Statement
-- Concurrent Signal Assignment
-- Conditional Signal Assignment
-- Selected Signal Assignment
-- Component Instantiation Statement
-- Generate Statement
-- Concurrent Procedure Call
END _architecture_name ; Description VHDL

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 ;

Intérêt de la description comportementale ?


 Plus besoin de trouver les équations
Inconvénient de la description comportementale ?
 On ne maîtrise plus la réalisation logique

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.

Nom du type Définition de l'ensemble


BIT Deux valeurs possibles ’0’ ou ’1’
INTEGER Entiers (nombre positif ou négatif sur 32 bits)
REAL Réels +ou- nombre.nombre[E +ou- nombre] 1.3E34
BOOLEAN Deux valeurs possibles True ou False
CHARACTER Caractères a, b, c ..., 1, 2 ...
TIME Nombre réel de temps fs, ps, ns, us, ms, sec, min, hr
Définition d'un type entier pour le signal A :
A INTEGER RANGE 255 DOWNTO 0 (0to255)

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.

std_logic_vector et std_ulogic_vector sont des bus de type


std.

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

• Vecteurs pour la manipulation de bus


Déclaration de trois signaux correspondant à des bus (un vecteur
de signaux) comportant 8 signaux A(0), A(1) ,..., A(7) et B(0), B(1) ,
..., B(7) ainsi que S(0), S(1) , ..., S(7).

rangement descendant A : in bit_vector (7 downto 0);


rangement ascendant B : in bit_vector (0 to 7);
S : out bit_vector (7 downto 0);

• Assigner une valeur à un des éléments d'un bus: B(3) <= '1 ’

Différence entre rangement ascendant et descendant :


si A <= "11110000" alors A(7) = '1'
si B <= "11110000" alors B(7) = '0'

Description VHDL
61
Vecteurs

• Assigner une valeur à l'ensemble du bus, plusieurs


méthodes
1. S <= "11001010";
assigne 11001010 aux éléments S(7), S(6), ..., S(0).

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).

3. S <= (7 | 6 | 3 | 1 => '1' , 5 | 4 | 2 | 0 => '0');


assigne la valeur 11001010 au vecteur S

4. S <= (7 => '1', others => '0');


assigne la valeur 10000000 au vecteur S.

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

AUTRE Instruction conditionnelle : WITH … SELECT


Contrairement à l’instruction conditionnelle when-else, with-
select n’a pas de priorité
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY multiplexeur4 is
PORT( entree : IN std_logic_VECTOR (3 DOWNTO 0);
adresse : IN std_logic_VECTOR (1 DOWNTO 0);
s : OUT std_logic);
END;
ARCHITECTURE with OF multiplexeur4 IS adresse
BEGIN entree(0)
WITH adresse SELECT mux
s <= entree(0) WHEN "00", entree(1) s
entree(1) WHEN "01",
entree(2) WHEN "10", entree(2)
entree(3) WHEN OTHERS; entree(3)
END; Description VHDL

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;

instanciation des architecture Arch_structurelle of add is


composants XOU et ET begin
appelés U1 et U2. en U1 : entity XOU(Ar_XOU) port map (A, B,
utilisant les Som);
architectures U2 : entity ET(Ar_ET) port map (A, B, Ret);
correspondantes end arch_structurelle;
Description VHDL
67
Description structurelle
Entity add is
port (A, B : in bit; Som, Ret : out bit);
end add;
architecture Arch_structurelle of add is
A
E1 U1 Som component XOU
XOU port (E1, E2 : in bit; S : out bit);
B
E2 end component;
E1
component ET
U2 Ret port (E1, E2 : in bit; S : out bit);
ET end component;
for U1 : XOU use entity work.XOU(Ar_XOU);
E2

for U2 : ET use entity work.ET(Ar_ET);


begin connexion
Câblage (instanciation) U1 : XOU port map (A, B, Som); par
des composants XOU et U2 : ET port map (A, B, Ret); position
ET appelés U1 et U2. end arch_structurelle;
Description VHDL
68
Description comportementale
Le process
Le processus est une instruction concurrente définie à l ’aide
d ’instructions séquentielles architecture Arch_comport of add is
begin
Il est activé si un des process (A, B)
signaux de la liste de begin
sensibilité change d ’état if (A = '0' and B = '0') then
Som <= '0'; Ret <= '0'; end if;
Description du if (A = '0' and B = '1') then
Som <= '1'; Ret <= '0'; end if;
comportement de la fonction
if (A = '1' and B = '0') then
Som <= '1'; Ret <= '0'; end if;
L'examen séquentiel des if (A = '1' and B = '1') then
instructions a pour Som <= '1'; Ret <= '1';
conséquence de rendre le end if;
dernier if prioritaire end process;
end Arch_comport;
Description VHDL
69
Description comportementale

• Interprétation de If, then, elsif,

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

• Instruction CASE s'utilise dans un process


CASE signal IS
WHEN valeur1 => instructions séquentielles ;
WHEN valeur2 => instructions séquentielles ;
WHEN valeur3 => instructions séquentielles ;
WHEN OTHERS => instructions séquentielles ;
END CASE;

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

• Instruction for loop


Comme son nom l'indique l'instruction loop permet de
répéter une opération de manière itérative en fonction d'un
paramètre.

FOR paramètre IN intervalle LOOP


instructions séquentielles;
END LOOP;

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

•Mauvaise utilisation d'un signal

LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_arith.all;


ENTITY mux_faux IS
PORT (a, b :IN STD_LOGIC;
e : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
S : OUT STD_LOGIC);
END mux_faux;
ARCHITECTURE archi OF mux_faux IS
signal muxval : integer;
BEGIN
PROCESS(a, b, e)

Description VHDL
77
Description comportementale

•Mauvaise utilisation d'un signal


BEGIN
muxval <= 0;
if (a= '1') then
muxval <= muxval + 1; end if;
if (b= '1') then Pour muxval, il s'agit
muxval <= muxval + 2; end if; d'une assignation multiple
CASE muxval IS dans un process. En
WHEN 0 => s<= e(0); conséquence, c'est la
WHEN 1 => s<= e(1);
dernière ligne qui définit
WHEN 2 => s<= e(2);
WHEN 3 => s<= e(3); la valeur de muxval
WHEN OTHERS => null ;
END CASE;
END PROCESS;
END archi;
Description VHDL
78
Description comportementale
PROCESS(a, b, e)
variable muxval : integer;
BEGIN
Correction : muxval := 0;
La variable étant if (a= '1') then
muxval := muxval + 1; end if ;
mise à jour if (b= '1') then
instantanément, muxval := muxval + 2; end if ;
la description est CASE muxval IS
correctement WHEN 0 => s<= e(0);
interprétée WHEN 1 => s<= e(1);
WHEN 2 => s<= e(2);
WHEN 3 => s<= e(3);
WHEN others => null;
END CASE;
END PROCESS; END archi;
Description VHDL
79
Erreur fréquente dans les processus

Exemple : conception d'un décodeur 3 vers 8 binaire

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

• Avec Reset asynchrone

Process (clk, reset) La condition


Begin sur le reset
IF reset = '0' THEN est prioritaire
Q <= '0';
ELSIF clk'event AND clk='1' THEN
Q <= D;
END IF;
END Process;

Systèmes Séquentiels
84
Bascule D avec reset

• Avec Reset synchrone


Process (clk)
Begin
IF clk'event AND clk='1' THEN
IF reset = '0' then
Q <= '0';
ELSE
Q <= D;
END IF;
END IF;
END Process;

Systèmes Séquentiels
85
Bascule D avec Enable

Process (clk, EN)


BEGIN
IF EN = '0' THEN
NULL ; -- Q <= Q ;
ELSIF clk'event AND clk='1' THEN
Q <= D;
END IF;
END Process;

Question : La commande Enable est-elle synchrone ou


asynchrone ?

Systèmes Séquentiels
86
Compteurs

• Problèmes posés par les compteurs


Les compteurs sont des machines d'état soit de MOORE soit
de MEALY. Réaliser un compteur ou tout circuit
d'incrémentation se traduit par une opération d'addition du
type : Q <= Q + 1 ;
Cette expression révèle deux problèmes :
- Le port de sortie Q est utilisé comme entrée, ce qui
n'est pas compatible avec son mode "out".
- L'incrémentation de la valeur Q du type bit_vector,
n'est pas possible avec l'opérateur arithmétique " + ".

Systèmes Séquentiels
87
Compteurs

Solution pour le problème de type :


Utiliser un convertisseur de type
exemple : STD_LOGIC_VECTOR

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

Entrées Circuit d'excitation X(t+1) X(t) Circuit S(t)


Calcul combinatoire D Q de sortie
E(t) des états FUTURS F
du système : G

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

Horloge c Circuit S(t)


de sortie
Circuit d'excitation X(t+1) X(t) F
Calcul combinatoire D Q
E(t) des états FUTURS
du système : G
Entrées

S(t) = F[X(t), E(t)]


X(t + 1) = G[E(t), X(t)]

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

• Commande d'essuie glace


On considère un essuie glace avec pompe de lavage. Le
maintien de la commande E active le moteur M de balayage
simultanément au moteur de pompe P. La libération de E
arrête la pompe P. Le moteur M reste activé pendant deux
cycles complet de balayage. Le système est équipé d'un
contact de fin de course f.

Représenter le graphe de la machine d'état du dispositif.


Décrire la machine en VHDL.

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

Pour l'exemple cela donne :

Type state is (repos, lavage, cyc_1, cyc_2)


signal etat, etat_f : state;
reg : process(clk)
begin
if clk'event and clk='1' then
etat <= etat_f;
end if;
end process reg ;

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

Créer un registre à la fin du circuit d’excitation


Pour l'exemple cela donne :

Type state is (repos, lavage, cyc_1, cyc_2)


signal etat : state;
-- pas de process registre
P2 : process(etat) Etats de sorties
begin
if etat= repos then
M <= '0'; P <= '0';
elsif etat = lavage then
M <= '1'; P <= '1';
else
M <= '1'; P <= '0';
end if;
end process P2;
Systèmes Séquentiels
102
Machine d'état autre simplification
P3 : process(F, E, etat)
Begin
if clk'event and clk='1' then
case etat is Description du
when repos => registre d’état
if E='1' then etat <= lavage ;
else etat <= etat; end if;
when lavage =>
if E = '0' then etat <= cyc_1 ;
else etat <= etat; end if;
when cyc_1 =>
if E ='1' then etat <= lavage ;
elsif F= '1' then etat <= cyc_2 ;
else etat <= etat; end if;
when cyc_2 =>
if E = '1' then etat <= lavage ;
elsif F= '1' then etat <= repos ;
else etat <= etat; end if;
end case; end if;
end process P3;
Systèmes Séquentiels
103
Méthodes de conception

• 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;

Architecture gen_decal of decalage is


component D_basc
port (d, clk : In std_logic;
q : out std_logic);
end component;
signal z : std_logic_vector(0 to 4)

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

GENERIC(_parameter_name : string := __default_value;


_parameter_name : integer:= __default_value);

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;

Use work.exemple.all Use work.exemple.all


entity A is Utilisation entity B is
.......; de la même .......;
end A; constante end B;
architecture arch_X of A is de temps architecture arch_X of B is
begin dans deux begin
......; entités ......;
S <= E after delai ; A et B Sb <= Ex after delai ;
......; ......;
end arch_X; end arch_X;
Description VHDL
113
Conception avancée
• Fonction
Le langage VHDL permet l'utilisation et la création de
fonctions ou de procédures que l'on peut appeler à partir
d'une architecture. A la différence de la procédure la
fonction renvoie une valeur unique.

FUNCTION nom de la fonction ( liste des paramètres de la


fonction avec leur type ) RETURN type du paramètre de retour IS
zone de déclaration des variables ;
BEGIN
...........;
instructions séquentielles ;
...........;
RETURN nom de la variable de retour ou valeur de retour;
END;

Description VHDL

114
Conception avancée

Exemple 1 :

FUNCTION bool_vers_bit (X : boolean) RETURN bit IS


BEGIN
if X then
RETURN '1';
else
RETURN '0';
end if;
END;

Description VHDL

115
Conception avancée

Exemple 2 : fonction au sein d'un package


Package outil is
function xor3 (a,b,c : bit) return bit ;
end outil;
package body outil is
function xor3 (a,b,c : bit) return bit is
begin
return (a xor b xor c) ;
end xor3 ; end outil;
library work ; use work.outil.all ;
entity exemple2 is port (a,b,c : in bit; sum : out bit);
end exemple2
architecture RTL of exemple2 is
begin
sum <= xor3(a, b, c) ;
Description VHDL
end RTL;
116
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;

ARCHITECTURE archi OF decodeur IS


BEGIN
s <= "0001" when a = "00" else
"0010" when a = "01" else
"0100" when a = "10" else
"1000" when a = "11" ;
Macrofonctions combinatoires
END archi;
119
Macrofonctions

• 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

LIBRARY ieee; USE ieee.std_logic_1164.all;


ENTITY encodeur1 IS
PORT ( a :IN STD_LOGIC_VECTOR(3 DOWNTO 0);
S : OUT STD_LOGIC_VECTOR(1 DOWNTO 0));
END encodeur1;
ARCHITECTURE archi OF encodeur1 IS
BEGIN
s <= "11" when a(3) = '1' else
"10" when a(2) = '1' else
"01" when a(1) = '1' else
"00" when a(0) = '1' ;
END archi;
Macrofonctions combinatoires

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

Variante de l'encodeur utilisant trois instructions IF


LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_arith.all;
ENTITY encodeur3 IS
PORT (a :IN STD_LOGIC_VECTOR(3 DOWNTO 0);
S : OUT STD_LOGIC_VECTOR(1 DOWNTO 0));
END encodeur3;
ARCHITECTURE archi OF encodeur3 IS
BEGIN
PROCESS (a) Assignation multiple
BEGIN
qui n'est possible
S<= "00";
IF a(1) = '1' THEN s<= "01"; END IF; que parce qu'elle
IF a(2) = '1' THEN s<= "10"; END IF; est faite dans un
IF a(3) = '1' THEN s<= "11"; END IF; process : la dernière
END PROCESS ; est conservée
END archi;
Macrofonctions combinatoires

124
Multiplexeur
Un multiplexeur permet d'aiguiller une donnée parmi N
entrées vers une seule sortie. (cf exemple ch. assignation
conditionnelle).

Exercice : décrire un mux à n bits d'entrée en utilisant une


affectation de type :

S <= e(sel)

Macrofonctions combinatoires

125
Multiplexeur

LIBRARY ieee; USE ieee.std_logic_1164.all;


ENTITY mux_n IS
GENERIC(n : integer:= 4);
PORT (e: IN bit_vector((2**n-1) downto 0) ;
sel : IN integer range (2**n-1) downto 0 ;
S : OUT bit);
END mux_n;
ARCHITECTURE RTL OF mux_n IS
BEGIN
S <= e(sel);
END RTL;

Macrofonctions combinatoires

126
Macrofonction de la bibliothèque

• Utilisation des macrofonctions LPM (Altera)


LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_arith.all; Déclaration des
LIBRARY lpm; bibliothèques
USE lpm.lpm_components.ALL;
ENTITY cpt2 IS
PORT(
e : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
h, prepn, razn : IN STD_LOGIC;
s : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
END cpt2;

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.

Nom du type Définition de l'ensemble


BIT Deux valeurs possibles ’0’ ou ’1’
INTEGER Entiers (nombre positif ou négatif sur 32 bits)
REAL Réels
BOOLEAN Deux valeurs possibles True ou False
CHARACTER Caractères a, b, c ..., 1, 2 ...
TIME Nombre réel de temps fs, ps ..., min, hr
Définition d'un type entier pour le signal A :
A INTEGER RANGE 255 DOWNTO 0 (0to255)

Description VHDL

130
Vecteurs

• Vecteurs pour la manipulation de bus


Déclaration de trois signaux correspondant à des bus (un vecteur
de signaux) comportant 8 signaux A(0), A(1) ,..., A(7) et B(0), B(1) ,
..., B(7) ainsi que S(0), S(1) , ..., S(7).

rangement descendant A : in bit_vector (7 downto 0);


rangement ascendant B : in bit_vector (0 to 7);
S : out bit_vector (7 downto 0);

• Assigner une valeur à un des éléments d'un bus: B(3) <= '1 ’
• Assigner une valeur à l'ensemble du bus, plusieurs méthodes

Différence entre rangement ascendant et descendant :


si A <= "11110000" alors A(7) = '1'
si B <= "11110000" alors B(7) = '0'

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

• Bibliothèques du standard IEEE


– IEEE.std_logic_1164 : contient les types STD_logic et
std_logic_vector ainsi que les opérateurs logiques :
and, nand, or, nor, xor, xnor, not
– IEEE.numeric.std : contient un groupe d'opérateurs
arithmétiques : "+", "-", "abs", "*", "<", ">", "<=", ">=", "/=",
"=", sll, srl, integer() etc..
– std_logic_signed : contient des opérateurs sur
std_logic_vector avec prise en compte du signe.
– std_logic_unsigned : contient des opérateurs sur
std_logic_vector en non signé.

Description VHDL

136
Opérateurs

• + , - , *, **, / valides sur entiers et flottants


• & : concaténation ex : a et b sur 2bits
c<=a&b : sur 4 bits
• notation des bases :
Pour exprimer des entiers :
base#nombre# (la base est écrite en décimal)
exemple : 16#A8# = 10#24# = 2#11000#
Pour exprimer des chaînes de bits :
On fait précéder la chaine de bits entre guillemets par X pour
hexadécimal, O pour octal et B pour binaire.
Exemple : a <= x’’0A’’  a <= ‘’00001010’’

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

Vous aimerez peut-être aussi