Vous êtes sur la page 1sur 116

1-Vue d’ensemble des systèmes

numériques
Sujets de ce thème
• Survol des systèmes numériques
• Systèmes et phénomènes discrets
et continus
• Quatre niveaux d’abstraction d’un
système numérique
• Quatre considérations pour
l’implémentation d’un système
numérique
• Le problème du partitionnement
logiciel et matériel

2
Un monde de systèmes numériques
• santé
• domotique
• automobile
• aérospatiale
• divertissement
• photocopieuses
• consoles de jeux
• postes de pilotage
• routeurs de réseau
• téléphones cellulaires
• guichets automatiques
• contrôleurs de freins antiblocage

3
Systèmes numériques vs systèmes analogiques
• Par « numérique », on veut dire « discret ».
• Par « analogique » on veut dire « continu ».
• Un système numérique traite de l’information
sous forme discrète:
– nombre fini de valeurs ou d’états différents;
– moments d’échantillonnage périodiques.
• Dans la nature, l’information est continue:
– en grandeur;
– dans le temps; et,
– dans l’espace.

4
Phénomènes numériques (discrets) et analogiques
(continus)
• Exemples de phénomènes discrets :
– le nombre de personnes dans une salle;
– le solde d’un compte bancaire; et,
– l’ensemble des cours d’un programme universitaire.
• Exemples de phénomènes continus :
– les phénomènes naturels : la température de l’air, la pression
atmosphérique, la vitesse et la direction du vent, le débit d’une rivière;
– la voix, la musique, les impulsions d’un sonar et autres sons, qui sont en
fait des variations de pression dans un matériel solide, liquide ou gazeux;
– les signaux électriques provenant du cerveau;
– les signaux de communication et de radar (signaux en radiofréquences).

5
Numériser un signal analogique
• Numériser un signal analogique Exemple: numérisation d’un signal continu à 2 dimensions.
correspond à le discrétiser en amplitude
à des moments précis.
• Pour numériser un signal naturel, on doit: 3
– l’échantillonner, c’est-à-dire le mesurer en 2
un instant ou un lieu précis; et, 1
– en quantifier l’amplitude, c’est-à-dire lui 0
associer une valeur discrète parmi un -1
ensemble de valeurs.
-2
• Par exemple, pour numériser la musique -3
à une qualité de CD audio, on a: -4
– 44100 échantillons par seconde; et,
– 65536 niveaux d’intensité (= 16 bits de
résolutions). Ici on prend 8 échantillons par seconde.
On quantifie l’information sur 8 niveaux, avec 3 bits.
La représentation numérique de ce signal serait:
{0, -2, 0, 1, 2, 2, -1, 0, 0}
6
Un système numérique et son environnement

Le traitement effectué sur l’information numérisée peut inclure :


• la compression d’une image;
• la reconnaissance ou la synthèse de la parole;
• la transmission d’information dans un réseau; ou,
7 • la confirmation de l’identité d’une personne selon des caractéristiques biométriques.
Avantages des systèmes numériques
• Les systèmes numériques présentent
d’importants avantages par rapport
aux systèmes analogiques.
• On note entre autres:
– la fiabilité accrue due à l’indépendance
aux variations de température, de
tension d’alimentation et de temps;
– la possibilité de transmettre et reproduire
l’information de façon exacte;
– la flexibilité de conception et la facilité de
fabrication; et,
– la baisse des coûts et de la taille, et
l’augmentation de la fréquence
d’opération.

8
Quatre niveaux d’abstraction des systèmes
numériques
• On peut identifier quatre niveaux d’abstraction
pour les systèmes numériques :
– le niveau des circuits: transistors, diodes,
résistances, condensateurs et inductances;
– le niveau des portes logiques: les portes de
base (ET, OU, NON, etc.); et,
– le niveau des modules (multiplexeurs,
encodeurs, additionneurs, multiplicateurs,
bascules):
– le niveau du système: microprocesseur,
mémoire, unités d’entrée-sortie, bus.

9
Quatre considérations pour l’implémentation d’un
système numérique
• La précision des calculs:
– Ex. téléphonie 8 bits, CD audio 16 bits
• La puissance consommée:
– Durée des piles.
– Dissipation de la chaleur.
• La taille du système:
– Intégration de plus de fonctionnalités dans
une même puce.
• Le taux de traitement et la latence (la
« vitesse »):
– Nombre d’opérations effectuées par unité de
temps.
– Directement proportionnel …
• à la fréquence d’horloge du système; et,
• au nombre d’unités parallèles de traitement.

10
Partitionnement matériel et logiciel d’un système numérique
embarqué
• Le partitionnement consiste à déterminer
comment chaque module et sous-module
sera implémenté:
– ‘en logiciel’ sur un processeur à usage général;
– ‘en matériel’ sur un processeur spécialisé.
• Une implémentation logicielle offre plus de
flexibilité, alors qu’une implémentation
matérielle offre plus de performance.
• Choisir où placer un module est difficile et
nécessite de faire des compromis en termes
de
– précision des calculs;
– puissance consommée;
– taille du système; et
– taux de traitement.

11
2-Flot de conception de circuits
numériques
Sujets de ce thème
• Le flot de conception:
– Description
– Vérification fonctionnelle
– Synthèse
– Implémentation
– Extraction de métriques
– Programmation

2
Le flot de conception – vue d’ensemble
vérification de la puce

annotation
vérification par simulation
des délais

code HDL

génération du
schéma synthèse implémentation fichier de puce
génération configuration
de code
diagramme HDL
d’états

contraintes
(temps et
espace)

Extraction statique des métriques d’implémentation


(ressources, délai, puissance)

3
1. Description du circuit
• La description du circuit combine:
– Du code HDL (VHDL, Verilog, SystemC, etc.) vérification de la puce

– Des schémas d’interconnexions de composantes


– Des diagrammes d’états vérification par simulation
annotation
des délais

– Des fichiers de contraintes


• Famille et type de puce utilisée code HDL

• Fréquence d’horloge cible


Emphase sur la latence de calcul ou l’espace utilisé
génération du
• schéma synthèse implémentation fichier de puce

• Choix de pattes de la puce pour les ports du circuit génération


de code
configuration

Les schémas et les diagrammes d’états sont


HDL
• diagramme
d’états

convertis en code HDL par un outil. contraintes

On utilise un environnement de
(temps et
• espace)

développement comme Active-HDL de Aldec Extraction statique des métriques d’implémentation

ou bien Project Navigator de Xilinx.


(ressources, délai, puissance)

4
2. Vérification fonctionnelle par simulation
• La vérification par simulation
consiste à stimuler le modèle du
vérification de la puce

circuit, à observer ses réponses et vérification par simulation


annotation
des délais

à en vérifier l’exactitude. code HDL

• On fait une vérification génération du

fonctionnelle du modèle. Si des


schéma synthèse implémentation fichier de puce
génération configuration
de code

erreurs sont trouvées, on corrige le


diagramme HDL
d’états

modèle.
contraintes
(temps et
espace)

• Une simulation correct ne garantit Extraction statique des métriques d’implémentation


(ressources, délai, puissance)

(hélas) pas que les autres étapes


du flot vont fonctionner.

5
3. Synthèse
• Un outil appelé synthétiseur prend en
entrée du code HDL et des contraintes: vérification de la puce

– Famille et type de puce utilisée annotation


– Fréquence d’horloge cible
vérification par simulation
des délais

– Emphase sur la latence de calcul ou l’espace


utilisé code HDL

• Il convertit le code en modules schéma synthèse implémentation


génération du
fichier de puce

disponibles sur la puce utilisée.


génération configuration
de code
diagramme HDL

• Le processus de synthèse repose sur la d’états

reconnaissance de certains patrons de contraintes


(temps et

code. Par exemple, la norme IEEE Std


espace)

1076.6-2004 IEEE Standard for VHDL


Extraction statique des métriques d’implémentation
(ressources, délai, puissance)

Register Transfer Level (RTL) Synthesis


spécifie la portion synthétisable du
langage VHDL.

6
4. Implémentation
• L’implémentation se fait en deux étapes:
– Le placement vérification de la puce

– Le routage annotation

• Le placement consiste à choisir des


vérification par simulation
des délais

structures spécifiques sur un modèle de


la puce et à y fixer des modules produits
code HDL

par la synthèse. schéma


génération
synthèse implémentation
génération du
fichier de
configuration
puce

• Le routage consiste à établir des diagramme


de code
HDL

connexions entre les structures. d’états

• Les outils d’implémentation utilisent les


contraintes
(temps et
espace)

contraintes de Extraction statique des métriques d’implémentation

– Fréquence d’horloge cible


(ressources, délai, puissance)

– Choix de pattes de la puce pour les ports du


circuit

7
5. Vérification par simulation
• On peut simuler la description vérification de la puce

produite par l’outil de synthèse annotation

et la description produite par les


vérification par simulation
des délais

outils d’implémentation, code HDL

annotée des délais estimatifs de


génération du
schéma synthèse implémentation fichier de puce
génération configuration
de code

la puce une fois programmée


diagramme HDL
d’états

contraintes
(temps et
espace)

Extraction statique des métriques d’implémentation


(ressources, délai, puissance)

8
6. Extraction des métriques d’implémentation
• On peut extraire les métriques vérification de la puce

d’implémentation suite à la
synthèse ou l’implémentation:
annotation
vérification par simulation
des délais

– Le nombre de blocs logiques et autres code HDL

ressources utilisés schéma synthèse implémentation


génération du
fichier de puce
génération configuration

– Le délai et la fréquence maximale diagramme


de code
HDL

d’horloge estimés
d’états

contraintes

– La puissance consommée estimée


(temps et
espace)

Extraction statique des métriques d’implémentation

• Si ces métriques ne rencontrent


(ressources, délai, puissance)

pas les spécifications, il faut


modifier la description du circuit.

9
7. Programmation et vérification de la puce
• La dernière étape consiste à vérification de la puce

– Générer un fichier de annotation

configuration pour la puce utilisée


vérification par simulation
des délais

– Programmer la puce en la code HDL

chargeant avec le fichier de


génération du
schéma synthèse implémentation fichier de puce
génération configuration

configuration
de code
diagramme HDL
d’états

– Vérifier le fonctionnement de la contraintes


(temps et

puce programmée
espace)

Extraction statique des métriques d’implémentation


(ressources, délai, puissance)

10
3-Introduction à VHDL
Sujets de ce thème
• VHDL: origines et avantages
• Modéliser un circuit numérique
simple en VHDL
• Casse, espaces, commentaires
et littéraux
• Identificateurs
• Types et opérateurs

2
Langages de description matérielle
• Les langages de description matérielle • Les HDL peuvent servir à trois choses :
(Hardware Description Language – HDL) ont – la modélisation de circuits (surtout numériques);
vu le jour au début des années 1980 lorsque – la description de circuits en vue de leur synthèse
la complexité des circuits à concevoir a rendu (i.e. leur réalisation matérielle); et,
impossible l’utilisation exclusive de schémas. – la documentation de circuits.
• Les schémas sont peu adéquats pour décrire • Avantages des HDL par rapport aux schémas :
un circuit logique. – les HDL permettent de décrire des systèmes
– Ils sont limités aux circuits les plus simples. complexes complets;
– Il est difficile de dessiner et modifier un circuit – les HDL favorisent la décomposition en modules
complexe avec un schéma de portes logiques. paramétrables;
– Un simple changement dans une équation – les HDL facilitent l’établissement de
booléenne du circuit peut se répercuter par une spécifications et d’interfaces clairement définies;
grande quantité de connexions à corriger. – les HDL normalisent l’échange d’informations.
– Il est difficile d’utiliser des variables en guise de
paramètres d’un circuit représenté par un
schéma.

3
VHDL, Verilog, SystemC
• Les deux HDL les plus populaires sont Verilog et VHDL.
• Verilog ressemble un peu à C, et VHDL ressemble à ADA.
• Les deux langages sont relativement faciles à apprendre, mais
difficiles à maîtriser.
• VHDL est plus vaste, bien que plusieurs des particularités pour
lesquelles Verilog n’a pas d’équivalent soient rarement utilisées.
• Quand on connaît l’un des deux langages, il est relativement
aisé de passer à l’autre.
• Un troisième langage, SystemC, est populaire pour la
modélisation à plus haut niveau.

4
VHDL (Very high speed integrated circuit Hardware
Description Language)
• VHDL est un langage de programmation
complet. Le langage a été développé vérification de la puce

pour le compte du gouvernement


américain pour documenter la vérification par simulation
annotation

conception d’ASIC. Il est fortement


des délais

inspiré du langage ADA. code HDL

• Rapidement, des simulateurs de VHDL génération du

sont apparus, puis des synthétiseurs


schéma synthèse implémentation fichier de puce
génération configuration

capables de traduire un programme


de code
diagramme HDL

VHDL en une liste d’interconnexions


d’états

entre des portes logiques (netlist)


contraintes
(temps et

pouvant être réalisée sur un ASIC.


espace)

Extraction statique des métriques d’implémentation

• Le langage VHDL est normalisé par l’IEEE.


(ressources, délai, puissance)

La première norme remonte à 1987. Des


mises à jour ont eu lieu en 1993, 2000,
2002 et 2008.

5
Modèle VHDL d’un circuit combinatoire simple
library IEEE;
• Librarie: définition de types, fonctions, etc. use IEEE.STD_LOGIC_1164.ALL;

• Entité: interface avec le monde extérieur entity add3bits is

– Définit les ports, leur type et leur direction port (


Cin : in std_logic;
• Architecture: partie déclarative et corps X : in std_logic;
Y : in std_logic;
– Définit le comportement du module Cout : out std_logic;
S : out std_logic
• Principe de la concurrence );

– L’ordre est sans importance dans le corps de end add3bits;

l’architecture. architecture flotDeDonnees of add3bits is

signal T1 : std_logic;
Cin signal T2 : std_logic;
S signal T3 : std_logic;

begin
T3
X T1
Y S <= T1 xor Cin;
Cout <= T3 or T2;
T2 Cout T1 <= X xor Y;
T2 <= X and Y;
T3 <= Cin and T1;

end flotDeDonnees;
6
VHDL: casse, espaces, commentaires et littéraux
• VHDL n’est pas sensible à la casse. Littéraux:
• Il n’y a pas de différence entre les espaces, • Un littéral composé d’un caractère unique est
tabulations et retours de chariot, présents placé entre apostrophes : ‘a’, ‘5’.
seuls ou en groupe. • Un littéral composé d’une chaîne de
• Tout texte placé après deux tirets et jusqu’à la caractères est placé entre guillemets :
fin d’une ligne est un commentaire, ce qui est "bonjour", "123ABC".
semblable au ‘//’ de C. • Un littéral numérique peut être spécifié avec
Il n’y a pas de commentaires en bloc (/* … */) sa base (de 2 à 16), avec le format
en VHDL. base#chiffres[.chiffres]#[exposant]. Par
exemple, les nombres suivants ont tous la
même valeur : 10#33# = 10#3.3#E1 = 2#10001# = 16#21# =
7#45#.
• Un littéral composé de bits peut être exprimé
en base 2, 8 ou 16, avec les spécificateurs de
base B, O et X, respectivement :
B"11111111", O"377", X"FF".

7
VHDL: identificateurs
• Un identificateur de base légal est Les mots réservés de VHDL (selon la norme
composé de lettres, chiffres et/ou du 1076-2002) sont :
soulignement. abs, access, after, alias, all, and,
architecture, array, assert, attribute, begin,

• Le premier caractère doit être une


block, body, buffer, bus, case, component,
configuration, constant, disconnect, downto,

lettre, le dernier ne peut pas être le


else, elsif, end, entity, exit, file, for,
function, generate, generic, group, guarded, if,

soulignement, et on ne peut pas


impure, in, inertial, inout, is, label, library,
linkage, literal, loop, map, mod, nand, new,

utiliser deux soulignements de suite.


next, nor, not, null, of, on, open, or, others,
out, package, port, postponed, procedural,
procedure, process, protected, pure, range,
• Un identificateur ne peut pas être l’un record, reference, register, reject, rem,
report, return, rol, ror, select, severity,
des mots réservés du langage. signal, shared, sla, sll, sra, srl, subtype,
then, to, transport, type, unaffected, units,
until, use, variable, wait, when, while, with,
xnor, xor

8
VHDL: types prédéfinis et de base
type source
catégorie valeurs
ou sous-type de la définition
boolean type prédéfini FALSE et TRUE
bit type prédéfini ‘0’ et ‘1’
256 caractères de la norme ISO 8859-1, avec des
abréviations reconnues et certaines qui sont
character type prédéfini propres à VHDL
Les 128 premiers sont les caractères ASCII.
integer type prédéfini plage minimale de –231 + 1 à 231 – 1
natural sous-type prédéfini 0 à 231 – 1
positive sous-type prédéfini 1 à 231 – 1
typiquement
real type prédéfini
–1.7014111E±308 à 1.7014111E±308
scalaires
‘U’ : valeur inconnue, pas initialisée
‘X’ : valeur inconnue forcée
‘0’ : 0 forcé
‘1’ : 1 forcé
Package
std_logic ‘Z’ : haute impédance (pas connecté)
std_logic_1164
‘W’ : inconnu faible
‘L’ : 0 faible
‘H’ : 1 faible
‘-‘ : peu importe (don’t care)
bit_vector type prédéfini tableau de bit
string type prédéfini tableau de character
Package
std_logic_vector tableau de std_logic
std_logic_1164
composés Package tableau de std_logic, interprété comme un
unsigned
numeric_std nombre binaire non signé
Package tableau de std_logic, interprété comme un
signed nombre binaire signé
9 numeric_std en complément à deux
VHDL: opérateurs
type de
type de l’opérande
catégorie opérateurs l’opérande de type de l’expression
de gauche
droite

logique and, or, nand, nor, xor, xnor, not bit, boolean

relation =, /=, <, <=, >, >= scalaire ou tableau boolean

sll (déc. logique gauche),


srl (déc. logique droite),
sla (déc. arithmétique gauche), tableau de bit ou comme l’opérande
décalage integer
sra (déc. arithmétique droit), boolean de gauche
rol (rotation gauche),
ror (rotation droite)

+, -, *, /,
abs (valeur absolue), type
mod (modulo), type numérique type
arithmétique rem (reste) numérique numérique

** (exponentiation) integer

concaténation & tableau ou type énuméré tableau


10
Retour: le problème du vote
Un comité composé de quatre
personnes a besoin d’un mécanisme
de vote secret pour les amendements
sur la constitution du comité.
Un amendement est approuvé si au
moins 3 personnes votent pour.
Concevoir un circuit logique qui
accepte 4 entrées représentant les
votes. La sortie du circuit doit
indiquer si l’amendement est
accepté.

11
Retour: le problème du vote – modèle VHDL,
version 1
A B C D F
0 0 0 0 0 library IEEE;
0 0 0 1 0 use IEEE.STD_LOGIC_1164.all;

0 0 1 0 0 entity vote is
0 0 1 1 0 port (
lesvotes: in std_logic_vector(3 downto 0);
0 1 0 0 0 approbation : out std_logic
0 1 0 1 0 );
end vote;
0 1 1 0 0

0 1 1 1 1 -- table de vérité réduite


architecture flotdonnees1 of vote is
1 0 0 0 0
begin
1 0 0 1 0 with lesvotes select
approbation <=
1 0 1 0 0
'1' when "0111",
1 0 1 1 1 '1' when "1011",
'1' when "1101",
1 1 0 0 0
'1' when "1110",
1 1 0 1 1 '1' when "1111",
'0' when others;
1 1 1 0 1
end flotdonnees1;
1 1 1 1 1

12
Retour: le problème du vote – modèle VHDL, versions 2 et 3
-- équation non réduite
architecture flotdonnees2 of vote is

F = A' BCD + AB' CD + ABC ' D + ABCD'+ ABCD signal A, B, C, D : std_logic;

= BCD + ACD + ABD + ABC begin


(A, B, C, D) <= lesvotes; -- pour simplifier l'écriture
approbation <=
(not(A) and B and C and D)
or (A and not(B) and C and D)
or (A and B and not(C) and D)
or (A and B and C and not(D))
or (A and B and C and D);
end flotdonnees2;
library IEEE;
use IEEE.STD_LOGIC_1164.all;
-- équation réduite
entity vote is architecture flotdonnees3 of vote is
port (
lesvotes: in std_logic_vector(3 downto signal A, B, C, D : std_logic;
0);
approbation : out std_logic begin
); (A, B, C, D) <= lesvotes; -- pour simplifier l'écriture
end vote; approbation <=
(B and C and D)
or (A and C and D)
or (A and B and D)
or (A and B and C);
13
end flotdonnees3;
4-Composantes séquentielles
pour circuits numériques
Sujets de ce thème
• Structure générale d’un circuit
séquentiel.
• Modèles de Moore et de Mealy.
• La bascule.
• Le loquet.
• Chronogramme d’un circuit séquentiel.

2
La notion de l’état d’un système

http://store.garagedoors.net/

http://www.directron.com/
Système de contrôle avec état.
Système de contrôle sans état.

3
Circuits séquentiels synchrones
• Un circuit séquentiel comporte:
– une partie combinatoire; et
– des éléments à mémoire.
• Les éléments à mémoire
entreposent l’état présent du circuit.
• La partie combinatoire calcule le
prochain état du système ainsi que
ses sorties.
• Un circuit séquentiel a normalement
des entrées et des sorties.
• Un circuit séquentiel est mené par
un signal d’horloge et devrait avoir
un signal de réinitialisation (reset).
Ces signaux sont des entrées
‘spéciales’.

4
Circuits séquentiels synchrones
• Il y a deux types de circuits
séquentiels : les circuits de Moore et
de Mealy.
– Dans une machine de Moore, les
sorties ne sont fonctions que de
l’état présent.
– Dans une machine de Mealy, les
sorties sont fonctions de l’état
présent ainsi que des entrées.

5
Élément à mémoire #1 – loquet SR
• Le loquet SR (S-R latch) est un S(t) R(t) Q(t) Q(t + 1) Q’(t + 1) mode
élément à mémoire simple mais 0 0 0 0 1
mémoire
0 0 1 1 0
fondamental. 0 1 0 0 1
reset
• Il peut rester dans un état tant qu’on 0 1 1 0 1
1 0 0 1 0
l’alimente, et sa sortie dépend non 1 0 1 1 0
set
seulement des entrées présentes, 1 1 0 0 0 interdit
mais aussi des entrées passées.
Il peut être construit de deux portes

NON-OU.
S Q'

R Q
6
Élément à mémoire #1 – loquet SR
• Le loquet SR (S-R latch) est un S(t) R(t) Q(t) Q(t + 1) Q’(t + 1) mode
élément à mémoire simple mais 0 0 0 0 1
mémoire
fondamental. 0 0 1 1 0
0 1 0 0 1
• Il peut rester dans un état tant qu’on reset
0 1 1 0 1
l’alimente, et sa sortie dépend non 1 0 0 1 0
set
1 0 1 1 0
seulement des entrées présentes, 1 1 0 0 0 interdit
mais aussi des entrées passées.
• Il peut être construit de deux portes
NON-OU.
S

S Q' S Q
R

Q R Q' Q’
R
7
Élément à mémoire #2 – loquet D
• Le loquet D (D latch) a deux entrées : G(t) D(t) Q(t) Q(t + 1) mode
– un signal de données D; et, 0 0 0 0
– un signal de contrôle G (Gate). 0 0 1 1
mémoire
0 1 0 0
• Il a deux états : 0 1 1 1
– transparent (quand G = 1); et, 1 0 0 0
1 0 1 0 transparent
– mémoire (quand G = 0). 1 1 0 1
1 1 1 1

D S Q
G

R Q' 8
Élément à mémoire #2 – loquet D
• Le loquet D (D latch) a deux entrées : G(t) D(t) Q(t) Q(t + 1) mode
– un signal de données D; et, 0 - Q Q mémoire
– un signal de contrôle G (Gate). 1 D
- D transparen
t
• Il a deux états :
– transparent (quand G = 1); et,
– mémoire (quand G = 0).

D
D S Q D Q
S
G
R
R Q' G

9
Élément à mémoire #3 – bascule D
• La bascule D (D flip-flop) est l’élément à mémoire le plus commun.
• Elle a deux entrées au minimum :
– un signal de données D; et,
– une horloge CLK (clock). D Q
• L’entrée D est saisie sur une transition de l’horloge:
– soit de 0 à 1 (le cas par défaut)
– ou bien de 1 à 0 (indiqué par une bulle sur le signal CLK)
CLK
• Les changements sur D entre les transitions d’horloge sont sans effet.

CLK

10
Exemple: compléter le chronogramme
du circuit suivant

A CLK
D Q

reset
CLK
reset X

B Z A
D Q
X
B
CLK
reset Z

11
5-Synthèse et implémentation
d’un circuit combinatoire
Sujets de ce thème
• La synthèse et
l’implémentation, c’est
quoi
• Étapes de la synthèse et
de l’implémentation
• Codes synthétisables et
non synthétisables

2
La synthèse et l’implémentation d’un
modèle VHDL
• La synthèse du code VHDL est
effectuée par un synthétiseur.
• Le produit du synthétiseur est
communément appelé «liste des vérification de la puce

interconnexions» (netlist), qui inclut:


– la liste des composantes de base vérification par simulation
annotation

utilisées; et,
des délais

– les liens qui les relient.


Après le processus de synthèse, il est
code HDL

possible d’obtenir un estimé de la génération du

performance et des ressources


schéma synthèse implémentation fichier de puce
génération configuration

utilisées par le circuit. diagramme


de code
HDL

• L’implémentation consiste à choisir d’états

des ressources spécifiques sur le contraintes

FPGA où instancier les composantes


(temps et
espace)

et les interconnexions identifiées par Extraction statique des métriques d’implémentation

le synthétiseur. (ressources, délai, puissance)

3
Défis de la synthèse à partir d’un
modèle VHDL
• Le défi du synthétiseur est d’inférer
un circuit conforme au code.
• Le défi du concepteur de circuits
numériques est de décrire ses
intentions d’une façon non ambigüe
pour le synthétiseur.
• La norme 1076.6-2004 de l’IEEE
définit le sous-ensemble de VHDL qui
est (devrait être …) supporté par les
outils de synthèse commerciaux.
• La documentation accompagnant le
synthétiseur utilisé est pratique pour
connaître exactement les parties du
langage qui sont supportées ou non,
les formulations préférées pour
représenter une structure donnée,
ainsi que les directives particulières
supportées par le synthétiseur.

4
Étapes de la synthèse d’un modèle
combinatoire décrit en VHDL
1. Identifier les entrées et sorties
du circuit.
2. Pour chaque sortie, trouver
l’équation booléenne ou la table
de vérité correspondante.
Réduire l’équation si nécessaire.
3. Si la cible est un FPGA, découper
les équations de sortie selon la
taille des tables de
correspondance disponibles.
4. Implémentation: choisir des
ressources spécifiques sur la
puce pour les ports et les
fonctions logiques.

5
Rappel: ressources d’un FPGA
G4
YQ
G3 D Q
IOB IOB IOB IOB IOB IOB Table de
conversion
G2 G CLK
16 X 1 S0
G1

Y
CLB CLB CLB CLB CLB

H1 S1

CLB CLB CLB CLB CLB


F4
XQ
F3 D Q
Table de
conversion
F2 F CLK
CLB CLB CLB CLB CLB 16 X 1 S2
F1

IOB IOB IOB IOB IOB IOB

S3
CLK

6
Code synthétisable – exemple 1
library ieee;
use ieee.std_logic_1164.all; 1. Identifier les entrées et sorties
entity porteET4 is
du circuit.
port ( 2. Pour chaque sortie, trouver
I : in std_logic_vector(3 downto
l’équation booléenne ou la table
de vérité correspondante.
0);
F : out std_logic
); Réduire l’équation si nécessaire.
3. Si la cible est un FPGA, découper
end porteET4;

architecture comportementale1 of les équations de sortie selon la


porteET4 is
taille des tables de
correspondance disponibles.
begin
process (I)
begin
4. Implémentation: choisir des
ressources spécifiques sur la
F <= I(3) and I(2) and I(1) and
I(0);
end process; puce pour les ports et les
end comportementale1;
fonctions logiques.

7
Code synthétisable – exemple 1 –
porte ET à 4 entrées
G4
G4 G3 G2 G1
YQ G (F)
G3
Table de
D Q (I(3)) (I(2)) (I(1)) (I(0))
0 0 0 0
conversion
G2 G CLK
S0
0 0 0 1
16 X 1
G1

Y 0 0 1 0
H
0 0 1 1
0 1 0 0
0 1 0 1
H1 S1

F4
0 1 1 0
XQ 0 1 1 1
1 0 0 0
F3 D Q
Table de

1 0 0 1
conversion
F2 F CLK
16 X 1 S2
F1 1 0 1 0
X 1 0 1 1
1 1 0 0
1 1 0 1
1 1 1 0
S3
CLK

1 1 1 1

8
Code synthétisable – exemple 2
library IEEE;
use IEEE.STD_LOGIC_1164.all;
1. Identifier les entrées et sorties du
entity vote is circuit.
port (
lesvotes: in std_logic_vector(3 2. Pour chaque sortie, trouver
l’équation booléenne ou la table de
downto 0);
approbation : out std_logic
);
end vote;
vérité correspondante. Réduire
l’équation si nécessaire.
architecture flotdonnees1 of vote is
begin 3. Si la cible est un FPGA, découper
les équations de sortie selon la
with lesvotes select
approbation <=
'1' when "0111",
'1' when "1011",
taille des tables de correspondance
'1' when "1101", disponibles.
'1' when "1110",
'1' when "1111", 4. Implémentation: choisir des
ressources spécifiques sur la puce
'0' when others;
end flotdonnees1;
pour les ports et les fonctions
logiques.

9
Code synthétisable – exemple 2 –
problème du vote
G4 F4 F3 F2 F1 F
YQ (lesvotes( (lesvotes( (lesvotes( (lesvotes( (approbat
G3 D Q 3)) 2)) 1)) 0)) ion)
Table de

0 0 0 0
conversion
G2 G CLK
S0
0 0 0 1
16 X 1
G1

Y 0 0 1 0
H
0 0 1 1
0 1 0 0
0 1 0 1
H1 S1

F4
0 1 1 0
XQ 0 1 1 1
1 0 0 0
F3 D Q
Table de

1 0 0 1
conversion
F2 F CLK
16 X 1 S2
F1 1 0 1 0
X 1 0 1 1
1 1 0 0
1 1 0 1
1 1 1 0
S3
CLK

1 1 1 1

10
Synthèse de boucles et de conditions
• À l’intérieur d’un processus, on • Pour les circuits combinatoires,
peut utiliser des boucles et des les conditions permettent
conditions pour modéliser le d’effectuer un choix.
comportement d’un circuit. – L’énoncé case a l’avantage de
• Les boucles sont une manière représenter des choix qui sont
mutuellement exclusifs et qui ont
compacte de représenter la même préséance. Il correspond
plusieurs énoncés reliés assez exactement à l’action d’un
logiquement entre eux. multiplexeur.
• Les paramètres d’exécution de la – L’énoncé if, est plus général avec
boucle doivent prendre des les clauses elsif ainsi qu’une
valeurs statiques au moment de clause else. Il est possible de
l’utiliser pour donner préséance à
la synthèse. certaines conditions par rapport à
• Les boucles sont implémentées d’autres. Cela peut résulter en un
en les déroulant: les énoncés circuit plus complexe que
d’assignation qu’elles contiennent nécessaire, parce que le
comportement décrit peut être
sont répliqués, un pour chaque plus restrictif que ce que le
itération de la boucle. concepteur a en tête.
Case est un meilleur choix quand on n’a pas
11 besoin de priorité!
Code synthétisable
library ieee; architecture comportementale1 of
use ieee.std_logic_1164.all; porteET4 is
begin
entity porteET4 is process (I)
port ( begin
I : in std_logic_vector(3 downto F <= I(3) and I(2) and I(1) and
0); I(0);
F : out std_logic end process;
); end comportementale1;
end porteET4;

architecture comportementale2 of
porteET4 is
begin
process (I)
variable sortie : std_logic;
begin
sortie := '1';
for k in 3 downto 0 loop
sortie := sortie and I(k);
end loop;
F <= sortie;
end process;
end comportementale2;

12
Code synthétisable et non-
synthétisable
library IEEE; architecture comportementale1 of
use IEEE.STD_LOGIC_1164.ALL; porteET is
begin
entity porteET is process (I)
generic ( variable sortie : std_logic;
W : positive := 8 -- le nombre begin
d'entrées sortie := '1';
); for k in W - 1 downto 0 loop
port ( sortie := sortie and I(k);
W2 : in positive; end loop;
I : in std_logic_vector(W - 1 F <= sortie;
downto 0); end process;
F : out std_logic end comportementale1;
);
end porteET;
architecture comportementale2 of
La valeur de W est connue au moment de porteET is
begin
l’instanciation du module. process (I)
variable sortie : std_logic;
begin
La valeur de W2 n’est pas connue au moment de sortie := '1';
l’instanciation du module. for k in W2 - 1 downto 0 loop
sortie := sortie and I(k);
end loop;
F <= sortie;
end process;
13 end comportementale2;
Fils modélisés par les catégories
signal et variable library ieee;
use IEEE.STD_LOGIC_1164.ALL;
• En général, l’utilisation de la
catégorie signal résulte en un
entity demoSignalVariable is
port (
fil concret dans un module. A, B, C, D: in std_logic;
F1, F2 : out std_logic
• Une équivalence directe est plus );
end demoSignalVariable;
difficile à faire pour la catégorie
variable. architecture demo of
demoSignalVariable is
signal S1, S2 : std_logic;
D begin
F1
C
B S2 S1 <= A and B;
S2 <= S1 or C;
A S1 F1 <= S2 nand D;

D process(A, B, C, D)
F2 variable V : std_logic;
C (V?) begin
B V? V := A and B;
V := V or C;
A V?
V := V nand D;
F2 <= V;
end process;

14 end demo;
Synthétiser un banc d’essai?
• Les bancs d’essai ne ...

sont pas synthétisables function estPremier(n: integer) return boolean

en général:
is
variable reponse : boolean := false;

– Énoncé wait begin


if (n <= 1) then

– Clause after
reponse := false; -- 0 et 1 ne sont pas
premiers
elsif (n <= 3) then
– Énoncé assert – reponse := true; -- 2 et 3 sont premiers
else
report reponse := true;
for k in 2 to

– Modèles de haut niveau integer(ceil(sqrt(real(n)))) loop


if (n mod k = 0) then

de spécifications reponse := false;


exit;

– Utilisation de types
end if;
end loop;

comme real.
end if;
return reponse;
end estPremier;

...

15
6-VHDL pour circuits séquentiels
Sujets de ce thème
• Code VHDL du loquet.
• Code VHDL de la bascule: fronts d’horloge et initialisation.
• Code VHDL correspondant à un circuit séquentiel.

2
Loquet D: code VHDL
• Un loquet D peut-être modélisé en VHDL par un library ieee;
use ieee.std_logic_1164.all; D Q
énoncé if-then à l’intérieur d’un processus. entity loquetD is
• Le processus doit avoir dans sa liste de sensitivité port (
G : in STD_LOGIC; -- contrôle
le signal de contrôle G et le signal de donnée D. D : in STD_LOGIC; -- donnée
Q : out STD_LOGIC G
• Le signal D est assigné à la sortie Q quand le );
end loquetD;
signal de contrôle G est actif (mode transparent) architecture loquetD of loquetD is
Begin

process(G, D) is
begin
if (G = '1') then
G Q <= D;
-- else -- implicite, infère élément à mémoire
D -- -- ne pas changer Q
end if;

Q
end process;
end loquetD;

Patron de code spécial reconnu par les


synthétiseurs pour signifier un loquet. 3
Exemple: un loquet ou pas?
library ieee; library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_1164.all;

entity mystere1 is entity mystere2 is


port (a, b, c: in std_logic; port (a, b, c: in std_logic;
s : in std_logic_vector (1 downto 0); s : in std_logic_vector (1 downto 0);
o : out std_logic); o : out std_logic);
end mystere1; end mystere2;

architecture archi of mystere1 is architecture archi of mystere2 is


begin begin

process (a, b, c, s) process (a, b, c, s)


begin begin

if (s = "00") then o <= a; if (s = "00") then o <= a;


elsif (s = "01") then o <= b; elsif (s = "01") then o <= b;
elsif (s = "10") then o <= c; elsif (s = "10") then o <= c;
end if; else o <= c;
end if;
end process;
end process;
end archi;
end archi;

4
Bascule D: code VHDL
• Pour modéliser une bascule, il est nécessaire de library ieee;
use ieee.std_logic_1164.all;
pouvoir décrire le fait que le changement d’état entity basculeD is
port (
se produit sur une transition d’un signal CLK : in STD_LOGIC; -- horloge
D : in STD_LOGIC; -- entrée
d’horloge et non sur sa valeur. Q : out STD_LOGIC -- sortie
);
• Pour ce faire, on peut utiliser les attributs end basculeD;

d’événement (event attribute) définis en VHDL. architecture basculeD of basculeD is


begin
• L’exemple démontre l’utilisation de l’attribut
event sur le signal CLK, dénoté par
process(CLK) is
begin

CLK’event. La condition CLK = ‘1’ dénote alors if (CLK = '1' and CLK'event) then
Q <= D;
un front montant. end if;

end process;
CLK
end basculeD;

D
Patron de code spécial reconnu par les synthétiseurs
Q pour signifier une bascule

5
Bascule D: code VHDL - spécification du front
d’horloge désiré
• Le package std_logic_1164 contient aussi
deux fonctions qui combinent ces conditions,
rising_edge() et falling_edge(). Ces
deux fonctions retournent des valeurs
booléennes.
comportement
option 1 option 2
désiré
CLK’event and CLK =
front montant rising_edge(CLK)
‘1’
CLK’event and CLK =
front descendant falling_edge(CLK)
‘0’

6
Bascule D: code VHDL - deux types de signaux
d’initialisation
library IEEE; library IEEE;
use IEEE.std_logic_1164.all; use IEEE.std_logic_1164.all;

entity basculeDRA is entity basculeDRS is


port ( port (
reset : in STD_LOGIC; reset : in STD_LOGIC;
CLK : in STD_LOGIC; CLK : in STD_LOGIC;
D : in STD_LOGIC; D : in STD_LOGIC;
Q : out STD_LOGIC Q : out STD_LOGIC
); );
end basculeDRA; end basculeDRS;

architecture basculeDRasynch of basculeDRA is architecture basculeDRsynch of basculeDRS is


begin begin

process(CLK, reset) is process(CLK, reset) is


begin begin
if (reset = '0') then
Q <= '0'; Initialisation if (rising_edge(CLK)) then
if (reset = '0') then
elsif (rising_edge(CLK)) then asynchrone – Q <= '0'; Initialisation
Q <= D; else
end if; indépendante Q <= D; synchrone avec
end process;
de l’horloge end if;
end if; l’horloge
end basculeDRasynchA; end process;

end basculeDRsynch;

7
Exemple: décrire le circuit en VHDL
A
D Q

CLK
reset

B Z
D Q
X

CLK
reset

1. Définir l’entité et ses ports.


2. Définir l’architecture et déclarer des signaux pour
les bascules.
3. Modéliser les bascules:
a. Forme générale
b. Signaux de réinitialisation
c. Équation des entrées des bascules
4. Modéliser la sortie
8
Exemple: décrire le circuit en VHDL (1)
A library IEEE;
D Q
use IEEE.std_logic_1164.all;

entity cctsequentielex1 is
CLK port (
reset reset, CLK, X : in STD_LOGIC;
Z : out STD_LOGIC
);
end cctsequentielex1;
B Z
D Q
X

CLK
reset

1. Définir l’entité et ses ports.


2. Définir l’architecture et déclarer des signaux pour
les bascules.
3. Modéliser les bascules:
a. Forme générale
b. Signaux de réinitialisation
c. Équation des entrées des bascules
4. Modéliser la sortie
9
Exemple: décrire le circuit en VHDL (2)
A library IEEE;
D Q
use IEEE.std_logic_1164.all;

entity cctsequentielex1 is
CLK port (
reset reset, CLK, X : in STD_LOGIC;
Z : out STD_LOGIC
);
end cctsequentielex1;
B Z
D Q
X architecture arch1 of cctsequentielex1 is
signal A, B : STD_LOGIC;
begin
CLK
reset

1. Définir l’entité et ses ports.


2. Définir l’architecture et déclarer des signaux pour
les bascules.
3. Modéliser les bascules:
a. Forme générale
b. Signaux de réinitialisation
c. Équation des entrées des bascules
4. Modéliser la sortie
end arch1;
10
Exemple: décrire le circuit en VHDL (3)
A library IEEE;
D Q
use IEEE.std_logic_1164.all;

entity cctsequentielex1 is
CLK port (
reset reset, CLK, X : in STD_LOGIC;
Z : out STD_LOGIC
);
end cctsequentielex1;
B Z
D Q
X architecture arch1 of cctsequentielex1 is
signal A, B : STD_LOGIC;
begin
CLK
reset process(CLK, reset) is
begin
if (reset = '0') then
1. Définir l’entité et ses ports. A <= '0';
2. Définir l’architecture et déclarer des signaux pour B <= '0';
elsif (rising_edge(CLK)) then
les bascules. A <=
3. Modéliser les bascules: B <=
end if;
a. Forme générale end process;
b. Signaux de réinitialisation
c. Équation des entrées des bascules
4. Modéliser la sortie
end arch1;
11
Exemple: décrire le circuit en VHDL (4)
A library IEEE;
D Q
use IEEE.std_logic_1164.all;

entity cctsequentielex1 is
CLK port (
reset reset, CLK, X : in STD_LOGIC;
Z : out STD_LOGIC
);
end cctsequentielex1;
B Z
D Q
X architecture arch1 of cctsequentielex1 is
signal A, B : STD_LOGIC;
begin
CLK
reset process(CLK, reset) is
begin
if (reset = '0') then
1. Définir l’entité et ses ports. A <= '0';
2. Définir l’architecture et déclarer des signaux pour B <= '0';
elsif (rising_edge(CLK)) then
les bascules. A <= A xor B;
3. Modéliser les bascules: B <= x or not(B);
end if;
a. Forme générale end process;
b. Signaux de réinitialisation
c. Équation des entrées des bascules
4. Modéliser la sortie end arch1;

12
Exemple: décrire le circuit en VHDL (5)
A library IEEE;
D Q
use IEEE.std_logic_1164.all;

entity cctsequentielex1 is
CLK port (
reset reset, CLK, X : in STD_LOGIC;
Z : out STD_LOGIC
);
end cctsequentielex1;
B Z
D Q
X architecture arch1 of cctsequentielex1 is
signal A, B : STD_LOGIC;
begin
CLK
reset process(CLK, reset) is
begin
if (reset = '0') then
1. Définir l’entité et ses ports. A <= '0';
2. Définir l’architecture et déclarer des signaux pour B <= '0';
elsif (rising_edge(CLK)) then
les bascules. A <= A xor B;
3. Modéliser les bascules: B <= x or not(B);
end if;
a. Forme générale end process;
b. Signaux de réinitialisation
z <= not(A or B);
c. Équation des entrées des bascules
4. Modéliser la sortie end arch1;

13
7-Synthèse d’un circuit séquentiel
Sujets de ce thème
• Reconnaître des bascules et des loquets dans du code VHDL.
• Étapes de synthèse.
• Schéma correspondant au code VHDL.
• Implémenter un circuit séquentiel sur un FPGA.
• Bonnes pratiques de modélisation de circuits séquentiels
pour FPGA.

2
La synthèse d’un modèle VHDL
• La synthèse du code VHDL est effectuée par
un synthétiseur.
• Le processus de synthèse peut être
décomposé et effectué en plusieurs passes.
vérification de la puce

Ce processus est très complexe sauf pour les


circuits les plus simples.
annotation
vérification par simulation
des délais

• Le produit du synthétiseur est


communément appelé «liste des code HDL

interconnexions» (netlist), qui inclut: schéma synthèse implémentation


génération du
fichier de
– la liste des composantes de base utilisées; et,
puce
génération configuration
de code

– les liens qui les relient. diagramme


d’états
HDL

• Après le processus de synthèse, il est possible contraintes

d’obtenir un estimé de la performance et des (temps et


espace)

ressources utilisées par le circuit. Extraction statique des métriques d’implémentation


(ressources, délai, puissance)

3
Reconnaître les loquets et bascules - rappel
• Les bascules et les loquets sont reconnus par des process(G, D) is
begin
patrons de code spécifiques. if (G = '1') then
Q <= D;
• Un loquet est reconnu par un énoncé if-then end if;
end process;
où toutes les conditions ne sont pas couvertes.
• Une bascule est reconnue par l’assignation d’un process(CLK) is
signal ou d’une variable à l’intérieur d’un begin
if (CLK = '1' and CLK'event) then
processus, à l’intérieur d’une condition de Q <= D;
end if;
transition sur un signal d’horloge. end process;

4
Étapes de la synthèse d’un modèle séquentiel
décrit en VHDL
1. Identifier les entrées et sorties du circuit.
library IEEE;
use IEEE.std_logic_1164.all;

2. Identifier les éléments à mémoire. entity cctsequentielex1 is

3. Pour chaque élément à mémoire, trouver


port (
reset, CLK, X : in STD_LOGIC;
l’équation booléenne de son entrée. Réduire );
Z : out STD_LOGIC

l’équation si nécessaire. Identifier les entrées end cctsequentielex1;


spéciales: horloge et initialisation. architecture arch1 of cctsequentielex1 is
4. Pour chaque sortie, trouver l’équation booléenne signal A, B : STD_LOGIC;
begin
ou la table de vérité correspondante. Réduire
l’équation si nécessaire.
process(CLK, reset) is
begin

5. Si la cible est un FPGA, découper les équations


if (reset = '0') then
A <= '0';
selon la taille des tables de correspondance B <= '0';
elsif (rising_edge(CLK)) then
disponibles. A <= A xor B;
B <= x or not(B);
6. Implémentation: choisir des ressources end if;

spécifiques sur la puce pour les ports et les


end process;

fonctions logiques. z <= not(A or B);

end arch1;

5
Exemple: donner le schéma correspondant à ce
module
library IEEE; process(CLK, reset) is
use IEEE.std_logic_1164.all; begin
if (reset = '0') then
entity cctsequentielex4 is W <= '0';
port ( X <= '0';
clk, reset : in STD_LOGIC; elsif (rising_edge(CLK)) then
A, B, C: in STD_LOGIC; W <= A xor B;
U, V, W, X, Y, Z : out STD_LOGIC X <= not(B);
); end if;
end cctsequentielex4; end process;

architecture arch of cctsequentielex4 is process(A, C) is


begin begin
if (A = '0') then
U <= B xor C; Y <= C nor B;
Z <= not(B);
process(A, B) else
begin Z <= B nand C;
V <= A and B; end if;
end process; end process;

end arch;

6
Exemple: donner le schéma correspondant à ce
module (1)
library IEEE;
use IEEE.std_logic_1164.all;

entity cctsequentielex4 is
port (
clk, reset : in STD_LOGIC;
A, B, C: in STD_LOGIC;
U, V, W, X, Y, Z : out STD_LOGIC
);
end cctsequentielex4;

architecture arch of cctsequentielex4 is


begin

U <= B xor C;

process(A, B)
begin
V <= A and B;
end process;

...

end arch;

7
Exemple: donner le schéma correspondant à ce
module (2)
library IEEE;
use IEEE.std_logic_1164.all;

entity cctsequentielex4 is
port (
clk, reset : in STD_LOGIC;
A, B, C: in STD_LOGIC;
U, V, W, X, Y, Z : out STD_LOGIC
);
end cctsequentielex4;

architecture arch of cctsequentielex4 is


begin

...

process(CLK, reset) is
begin
if (reset = '0') then
W <= '0';
X <= '0';
elsif (rising_edge(CLK)) then
W <= A xor B;
X <= not(B);
end if;
end process;

...

8
end arch;
Exemple: donner le schéma correspondant à ce
module (3)
library IEEE;
use IEEE.std_logic_1164.all;

entity cctsequentielex4 is
port (
clk, reset : in STD_LOGIC;
A, B, C: in STD_LOGIC;
U, V, W, X, Y, Z : out STD_LOGIC
);
end cctsequentielex4;

architecture arch of cctsequentielex4 is


begin

...

process(A, C) is
begin
if (A = '0') then
Y <= C nor B;
Z <= not(B);
else
Z <= B nand C;
end if;
end process;

end arch;

9
Rappel: architecture d’un FPGA
• Un FPGA est composé à la base de :
– un réseau de blocs de logique IOB IOB IOB IOB IOB IOB

programmable (Configurable Logic Block


− CLB);
– un réseau d’interconnexions
programmables entre les blocs; et,
CLB CLB CLB CLB CLB

– des blocs d’entrée et de sortie avec le


monde extérieur (Input/Output Block –
IOB). CLB CLB CLB CLB CLB

• Dans la figure, on a:
– 12 IOBs, 3 × 5 CLBs
• Le FPGA XC5VLX50TFFG1136C a
CLB CLB CLB CLB CLB

plutôt:
– 480 IOBs, 120 × 30 CLBs
IOB IOB IOB IOB IOB IOB

10
Rappel: tranche d’un FPGA Virtex

• Une tranche comprend:


– Quatre tables de correspondance
(Look-up Table – LUT) à 6 entrées,
pouvant être programmées comme:
• fonction logique
• mémoire ROM
– Quatre éléments à mémoire: bascule
ou loquet.
– Des multiplexeurs pour router les
signaux.
– Des portes logiques pour l’addition
rapide.

11
Modèle simplifié d’une tranche (~ une tranche du
Spartan)
G4

• Deux tables de correspondance G3 D Q


YQ

à 4 entrées:
Table de
correspondance
G2 G CLK
16 X 1 S0

fonction logique
G!

Y

– mémoire RAM H

– mémoire ROM H1 S1

– décalage F4

• Deux éléments à mémoire,


XQ
F3 D Q
Table de

bascule ou loquet.
correspondance
F2 F CLK
16 X 1 S2
F1

• Des multiplexeurs pour router X

les signaux.
S3
CLK

12
A
D Q

Exemple: Implémenter le circuit suivant sur un FPGA CLK


reset

B Z
D Q
X

CLK
reset

G4 G4
YQ YQ
G3 D Q G3 D Q
Table de Table de
conversion conversion
G2 G G2 G
reset reset
16 X 1 S0 16 X 1 S0
G1 G1

Y Y

H H

H1 S1 H1 S1

F4 F4
XQ XQ
F3 D Q F3 D Q
Table de Table de
conversion conversion
F2 F F2 F
reset reset
16 X 1 S2 16 X 1 S2
F1 F1

X X

S3 S3
CLK CLK

reset reset

13
Trois bonnes pratiques à respecter avec les FPGA
1. Utiliser des bascules, éviter les 3. Le signal de réinitialisation reset
loquets. est spécial:
– Les éléments à mémoire d’un FPGA – Les circuits séquentiels doivent pouvoir
peuvent implémenter une bascule ou un être placés dans un état de départ connu.
loquet: il n’y a pas de différence de coût. – En principe, on mène toutes les bascules
– Le désavantage du loquet est son mode avec le même signal de réinitialisation.
transparent. – Certaines bascules peuvent être
– Pour le reste du cours, nous allons utiliser initialisées à ‘0’, d’autres à ‘1’.
exclusivement des bascules. – On ne fait pas d’opérations logiques sur le
2. Le signal d’horloge CLK est spécial: signal de réinitialisation.
– En principe, on mène toutes les bascules
avec le même signal d’horloge CLK. On ne fait pas d’opérations logiques sur les signaux
d’horloge et de réinitialisation!
– On ne fait pas d’opérations logiques sur le
signal CLK.

14
8-Modélisation de machines à états
Sujets de ce thème
• Notation pour les machine à états de Moore et de Mealy.
• Donner le diagramme d’une machine à états à partir d’une
spécification.

2
Diagrammes d’états: notation pour une Machine
de Moore
• Chaque bulle représente un état avec un identificateur.
• L’état de départ est indiqué.
• La transition peut se faire d’un état à un autre lors
d’une transition de l’horloge du système.
• Sur les transitions on indique la valeur nécessaire des
entrées pour que la transition ait lieu. Un tiret indique
une valeur sans importance.
• Si aucune condition de transition n’est satisfaite, la
machine reste dans l’état courant.
• Dans une machine de Moore, les sorties ne dépendent
que de l’état présent donc elles sont indiquées à
l’intérieur des états.
• Dans l’exemple il y a une seule entrée et une seule
sortie.

3
Diagrammes d’états: notation pour une Machine
de Mealy
• La notation est similaire à celle de la machine de
Moore.
• Dans une machine de Mealy, les sorties
dépendent a la fois de l’état présent et des
entrées, donc elles sont indiquées sur les
transitions après une barre oblique.
• Dans l’exemple, il y a deux entrées et une sortie.

4
Conception de machine à états: principes de base
• La conception d’une machine à états • Le système une fois conçu se
est un processus créatif similaire à la comporte exactement tel qu’il a été
description d’un algorithme avec un décrit, mais pas nécessairement
langage de programmation. comme on voudrait qu’il se comporte.
• Il faut souvent faire des compromis • Utiliser un processus itératif aide les
entre des contraintes qui ne peuvent choses.
toutes être satisfaites simultanément: • Bien documenter toutes les étapes.
– Coût, performance, précision, et
consommation de puissance;
– Lisibilité et testabilité.
• Pendant le processus de conception,
on réalise souvent que la spécification
est incomplète, ambigüe ou mal
comprise.

5
Conception de machine à états: bâtir le
diagramme d’états
• La représentation graphique offerte par un diagramme d’états est très avantageuse.
Certains outils de conception produisent automatiquement du code VHDL à partir d’un
diagramme d’états.
• Les étapes suivants peuvent grandement aider à obtenir le diagramme d’état.
1. À partir des données du problème, simuler certaines combinaisons d’entrée et de sortie pour
bien comprendre la nature du problème.
2. Construire un diagramme partiel menant à une sortie désirée du système.
3. Ajouter au diagramme les autres chemins menant aux sorties désirées du système.
4. Vérifier le diagramme pour éviter les états équivalents (deux états qui mènent aux mêmes
prochains états et qui ont les mêmes sorties pour les mêmes entrées).
5. Compléter le diagramme en ajoutant des transitions pour toutes les entrées possibles à partir
de chaque état.
6. Identifier toute condition où le circuit doit être réinitialisé à un état de départ, et annoter le
diagramme avec cette information.
7. Vérifier le diagramme en appliquant des combinaisons d’entrées représentatives.

6
Exemple: reconnaître une séquence
• Donner un diagramme d’états pour une machine
de Mealy qui doit reconnaître la séquence
« 1101 ».
• Le circuit a une seule entrée sur laquelle la
séquence est appliquée.
• Il a une seule sortie: ‘0’ tant que la séquence
n’est pas détectée, et ‘1’ dès que la séquence est
détectée.

1. Simuler certaines combinaisons d’entrée et de sortie.


2. Construire un diagramme partiel – une sortie.
3. Ajouter d’autres chemins – autres sorties.
4. Éliminer les états équivalents
5. Ajouter toutes les autres transitions.
6. Ajouter la réinitialisation. 7
7. Vérifier.
Exemple: reconnaître une séquence
• Donner un diagramme d’états pour une machine de Moore
qui doit reconnaître la séquence « 1101 »

1. Simuler certaines combinaisons d’entrée et de sortie.


2. Construire un diagramme partiel – une sortie.
3. Ajouter d’autres chemins – autres sorties.
4. Éliminer les états équivalents
5. Ajouter toutes les autres transitions.
6. 8 Ajouter la réinitialisation.
7. Vérifier.
9-Analyse de machines à états et leur
description en VHDL
Sujets de ce thème
• Analyser un circuit séquentiel synchrone à partir de son
schéma.
• État et sorties en fonction du temps.
• Diagrammes d’états et code VHDL.

2
Analyse d’un circuit séquentiel synchrone (1)

• On analyse un circuit pour en comprendre le


fonctionnement.
A
D Q

• Analyser un circuit séquentiel synchrone en


quatre étapes: CLK
reset
1. identifier les variables d’états: les sorties des
éléments à mémoire;
2. écrire les équations d’états et les équations de D Q
B Z

sortie; X

3. dresser le tableau d’états; et, CLK


4. dessiner le diagramme d’états. reset

3
Analyse d’un circuit séquentiel synchrone (2)
D Q
A
1. identifier les 4. Diagramme d’états:
variables
CLK
reset
d’états: état 0: AB = « »
{ , } état 1: AB = « »
état 2: AB = « »
état 3: AB = « »
B Z
2.
D Q
X

CLK A+ = ;
reset B+ = ;
Z= ;
3. Tableau d’états:

état présent entrée état prochain sortie

A B X A+ B+ Z

C’est une machine de Moore,


la sortie ne dépend que de l’état présent.

4
Évolution de l’état et des sorties en fonction du temps

A
D Q

CLK
reset

B Z
D Q
X

CLK
reset
5
Description d’une machine à états en VHDL:
1. à partir d’un schéma
Approche adéquate:
library IEEE;
• use IEEE.std_logic_1164.all;

– quand on désire modéliser un circuit pour lequel entity cctsequentielex1 is


on a le schéma port (
reset, CLK, X : in STD_LOGIC;
– quand on a les équations d’états et de sortie );
Z : out STD_LOGIC

end cctsequentielex1;

architecture arch1 of cctsequentielex1 is


A signal A, B : STD_LOGIC;
D Q
begin

process(CLK, reset) is
CLK
begin
reset

B Z
D Q
X
Deux bascules dans un seul processus

CLK Sortie décrite par un énoncé concurrent à l’extérieur du end process;


reset processus (pas de registre).
z <=
Réinitialisation asynchrone.
end arch1;
6
Description d’une machine à états en VHDL
2. à partir d’un diagramme d’états
architecture arch3 of cctsequentielex1 is

• Approche beaucoup plus puissante: type type_etat is (Etat0, Etat1, Etat2, Etat3);
signal etat : type_etat := Etat0;
– identifier les états, les conditions de transition et begin
les sorties pour chaque état process(CLK, reset) is
– pas besoin d’équations d’états begin
if (reset = '0') then
– plus lisible, robuste, facile à maintenir etat <= Etat0;
elsif (rising_edge(CLK)) then
case etat is

-
reset
(état État 0 État 1
initial)
Sortie: 1 Sortie: 0

0 0
1
end if;
end case;
État 3 1 État 2 end if;
end process;
Sortie: 0 Sortie: 0
z <= ;
-
end arch3;

7
Trois styles de description d’une machine à états en VHDL

• Les trois parties d’une machine à états sont :


– les éléments à mémoire qui conservent l’état
présent de la machine;
– un circuit combinatoire qui calcule le prochain
état; et,
– un circuit combinatoire qui calcule les sorties de
Moore et de Mealy.
• Il y a trois styles principaux de description selon
la répartition des trois parties de la machine sur
un ou plusieurs processus.

8
Trois styles de description d’une machine à états en VHDL
1. Avec un seul processus
Attention aux sorties:
architecture unprocessus of cctsequentielex2 is
• type type_etat is (S1, S2, S3, S4);
signal etat : type_etat := S1;
– inférence de registres pour les sorties
begin
– spécifier la sortie du prochain état étant donnés process(CLK, reset) is
un état et une entrée présentes. begin
if (reset = '0') then
– si plusieurs conditions résultent en un état donné, etat <= S1;
sortie <= '1';
il faut spécifier la sortie de Moore de cet état à elsif (rising_edge(CLK)) then

chaque fois.
case etat is
when S1 =>
if x = '0' then
etat <= S3;
X’
sortie <= '0';
S1 S3
else
reset
Sortie = 1 Sortie = 0 etat <= S2;
sortie <= '1';
end if;
when S2 | S3 =>
X
etat <= S4;
sortie <= '0';
when S4 =>
S2 S4 etat <= S1;
Sortie = 1 Sortie = 0 sortie <= '1';
end case;
end if;
end process;
end unprocessus; 9
Trois styles de description d’une machine à états en VHDL
2. Avec deux processus
architecture deuxprocessus of cctsequentielex2 is
type type_etat is (S1, S2, S3, S4);

• Bon compromis entre la flexibilité et la lisibilité signal etat : type_etat := S1;


begin

du code. process(CLK, reset) is


begin
• Deux processus: if (reset = '0') then
etat <= S1;
– un pour le calcul et l’entreposage de l’état elsif (rising_edge(CLK)) then
Machine
case etat is de Moore …
– un pour les sorties (peut être remplacé par des when S1 =>
if x = '0' then
énoncés concurrents) etat <= S3;
else
etat <= S2;
end if;
when S2 | S3 =>
etat <= S4;
X’ when S4 =>
reset S1 S3 etat <= S1;
Sortie = 1 Sortie = 0 end case;
end if;
end process;
X
process(etat)
begin
case etat is
S2 S4 when S1 | S2 => sortie <= '1';
Sortie = 1 Sortie = 0 when S3 | S4 => sortie <= '0';
end case;
end process;

end deuxprocessus;
10
Trois styles de description d’une machine à états en VHDL
3. Avec trois processus
• Style qui correspondre exactement au modèle.
• Code est très lisible mais moins compact que la
version à deux processus.
• La liste de sensibilité du processus qui calcule le
prochain état inclut le signal qui entrepose l’état
courant ainsi que toutes les entrées.
• Le même principe s’applique au processus qui
calcule les sorties (pour une machine de Mealy).

11
Trois styles de description d’une machine à états en VHDL
3. Avec trois processus
-- processus pour le calcul du prochain état
architecture troisprocessus of cctsequentielex2 is process(etat, x) is
begin
type type_etat is (S1, S2, S3, S4); case etat is
signal etat : type_etat := S1; when S1 =>
signal etat_prochain : type_etat := S1; if x = '0' then
etat_prochain <= S3;
begin else
etat_prochain <= S2;
-- processus pour garder l'état actuel en end if;
mémoire when S2 | S3 =>
process(CLK, reset) is etat_prochain <= S4;
begin when S4 =>
if (reset = '0') then etat_prochain<= S1;
etat <= S1; end case;
elsif (rising_edge(CLK)) then end process;
etat <= etat_prochain;
end if; end troisprocessus;
end process;

-- processus pour les sorties


process(etat)
begin
case etat is
when S1 | S2 => sortie <= '1';
when S3 | S4 => sortie <= '0';
end case;
end process;

12
Trois styles de description d’une machine à états en VHDL:
Conclusion
• Les trois styles ont chacun leurs mérites et
inconvénients.
• Cette variété d’options illustre à nouveau la très
grande richesse de VHDL.
• Cette richesse cause cependant des difficultés
parce qu’il n’existe pas une norme unique pour la
description de machines à états.
• Il est donc plus difficile de concevoir un
synthétiseur qui puisse reconnaître de façon
satisfaisante les intentions du concepteur.
• Il est nécessaire de consulter le manuel
d’utilisation du synthétiseur utilisé afin de
connaître les styles d’encodage de machines à
états reconnus.
13
Conception de machine à états: procédure
traditionnelle et avec un HDL
Étape Procédure traditionnelle Procédure avec un HDL
Bâtir un diagramme d’états à partir des
oui oui
données du problème.
Bâtir le tableau d’états à partir du diagramme
d’états, en identifiant les états par des oui non
symboles.
pas obligatoire
Réduire le nombre d’états nécessaires en
oui peut simplifier la clarté du
éliminant les états équivalents.
code
Assigner un code binaire à chaque état, et
oui par l’outil de synthèse
ajouter cette information au tableau d’état.
À partir du tableau d’état complet, obtenir les
équations booléennes d’entrée des bascules du
type choisi ainsi que les équations booléennes oui par l’outil de synthèse
des sorties du système, en simplifiant si
possible.
Donner le diagramme et/ou construire le
oui par l’outil de synthèse
circuit.
Vérifier, vérifier, vérifier. oui oui
14
10-Banc d’essai pour un circuit séquentiel
Sujets de ce thème
• Structure d'un banc d'essai pour un circuit séquentiel.
• Générer un signal d’horloge et un signal de réinitialisation.
• Stimuler un circuit séquentiel avec un banc d’essai.

2
La vérification d’un circuit
• La vérification a pour but de confirmer qu’un
circuit rencontre bien ses spécifications.
• La vérification complète d’un circuit est
normalement un problème très difficile.
vérification de la puce

• Dans l’industrie de la conception numérique, annotation

on considère en général que le processus de


vérification par simulation
des délais

vérification nécessite autant d’efforts que le


processus de conception lui-même. code HDL

• La vérification d’un circuit est un art qui schéma synthèse implémentation


génération du
fichier de

repose sur la maîtrise de trois principes:


puce
génération configuration
de code
HDL
– la compréhension de la spécification; diagramme
d’états

– le contrôle des entrées et de signaux internes du contraintes


circuit à vérifier; et, (temps et
espace)

– l’observation des sorties, des signaux internes et


de l’état du circuit à vérifier.
Extraction statique des métriques d’implémentation
(ressources, délai, puissance)

3
Vérification par banc d’essai
• Un banc d’essai doit effectuer les tâches
suivantes :
– instancier le circuit à vérifier; banc d’essai

– générer des vecteurs de test et les appliquer aux réponses attendues

ports d’entrée du circuit; génération de


vecteurs de
observation
des réponses
succès/échec

– [utile]: générer automatiquement des réponses test et de


réponses
comparaison
aux réponses
attendues aux vecteurs de test;
attendues
attendues
fichier de vecteurs de test circuit à vérifier réponses fichier des

– [utile]: comparer les réponses du circuit aux


stimuli et
résultats
réponses

réponses attendues,
et indiquer toute différence entre les deux par une génération
condition d’erreur; d’horloge et de
signal de

– [facultatif]: lire des stimuli d’un fichier et écrire les


réinitialisation

réponses dans un fichier.


– + (pour circuit séquentiel): générer un signal
d’horloge et un signal de réinitialisation

4
Vérification par banc d’essai
• La génération d’un signal d’horloge périodique et -- partie du banc d’essai
d’un signal de réinitialisation peut être faite de
façon très efficace par deux énoncés concurrents -- dans la partie déclarative de l’architecture
signal clk : std_logic := '0';
dans l’architecture du banc d’essai. constant periode : time := 10 ns;
• L’horloge se voit assigner une valeur initiale dans ...
sa déclaration, puis dans l’architecture elle
bascule entre deux états à chaque demi-période. -- dans l’architecture
clk <= not clk after periode / 2;

reset <=
'0' after 0 ns,
'1' after periode / 4;

5
Circuit séquentiel synchrone à vérifier
library IEEE;
use IEEE.std_logic_1164.all;
A
D Q entity cctsequentielex1 is
port (
reset, CLK, X : in STD_LOGIC;
CLK Z : out STD_LOGIC
reset );
end cctsequentielex1;

architecture arch1 of cctsequentielex1 is


B Z signal A, B : STD_LOGIC;
D Q begin
X

process(CLK, reset) is
CLK begin
reset if (reset = '0') then
A <= '0';
B <= '0';
elsif (rising_edge(CLK)) then
A <= A xor B;
B <= x or not(B);
end if;
end process;

z <= not(A or B);

end arch1;

6
Banc d’essai pour la vérification d’un circuit
séquentiel
architecture arch2 of cctsequentielex1TB is
• Le processus est contrôlé par le signal d’horloge
dans sa liste de sensitivité: pas d’énoncé wait.
signal reset, clk : std_logic := '0';
signal X, Z : std_logic;
constant periode : time := 10 ns;
• Les vecteurs de test sont encodés dans un begin
tableau de constantes. clk <= not clk after periode / 2;

• Pas de vérification automatisée des réponses reset <=

dans cet exemple.


'0' after 0 ns,
'1' after 5 * periode / 4;

-- instanciation du module à vérifier


UUT : entity cctsequentielex1(arch1) port map (reset, clk, X,
Z);

process (clk)
constant vecteurX : std_logic_vector := "101010101";
variable compte : natural range 0 to vecteurX'length := 0;
begin
if (rising_edge(clk)) then
X <= vecteurX(compte);
compte := compte + 1;
if compte = vecteurX'length then
report "simulation terminée" severity failure;
end if;
end if;
end process;

end arch2;
7

Vous aimerez peut-être aussi