Vous êtes sur la page 1sur 58

Cours N4

Flot de conception dun circuit numrique

VHDL : Conception et implmentation de systmes numriques

Plan

Simulation fonctionnelle dun modle VHDL:


Synthse:
Implmentation et configuration:

VHDL: Conception et implmentation de systmes numriques

Dcomposition architecturale
Introduction et cots

La conception dun systme numrique doit se baser sur une bonne


comprhension des requis et des spcifications.
Le cot associ un changement suit en gnral une relation exponentielle avec
le temps.
Il est avantageux de ne pas avoir faire de changements tard dans le
dveloppement dun produit.
tape o le changement est ncessaire
Dfinition des requis et spcifications

Cot relatif
1

Conception

10

Prototypage

100

Production

1000

Distribution

10000+

VHDL: Conception et implmentation de systmes numriques

Dcomposition architecturale
Dcomposition en modules

La conception dbute par une dcomposition du systme en ses modules


principaux et par une description abstraite de leur comportement.
Pour dterminer la bonne granularit des modules, on peut observer trois
principes :
La cohsion : chaque module ne devrait raliser quune seule fonction ou des
fonctions similaires;
La taille : un module ne devrait pas tre trop grand ni trop petit; tous les modules du
systme devraient tre de tailles comparables; et
Des interfaces claires : chaque module devrait avoir des interfaces claires avec les
autres modules, ce qui permet de mieux grer la complexit du systme au complet.

VHDL: Conception et implmentation de systmes numriques

Dcomposition architecturale
Partitionnement

Le partitionnement consiste dterminer comment chaque module et sousmodule sera implment:


en logiciel sur un processeur usage gnral;
en matriel sur un processeur spcialis.

La dcision de placer un module dun ct ou de lautre est difficile et ncessite


de faire des compromis en termes de prcision des calculs, puissance
consomme, taille du systme et taux de traitement.

VHDL: Conception et implmentation de systmes numriques

Dcomposition architecturale
Modlisation haut niveau

Il est utile de modliser le comportement dun module un niveau lev avant


den entreprendre une description dtaille. On peut utiliser:
un langage comme C ou Python;
un environnement complet comme Matlab;
un outil spcialis.

cette tape, il est utile de garder en tte des principes dimplmentation


matrielle comme la faon de reprsenter des nombres. Le modle peut dj
inclure ces considrations lors de lanalyse de performance.
Cest aussi ltape de modlisation quon dveloppe un banc dessai et des cas
de test contenant des stimuli et des rponses attendues en vue de la
vrification.
Le fait de dvelopper un modle et son banc dessai confirme que les
spcifications du design sont suffisamment claires et bien comprises pour
mener bien le dveloppement du module.

VHDL: Conception et implmentation de systmes numriques

Flot de conception de circuits numriques


vrification de la puce

annotation
des dlais

vrification par simulation

code HDL

schma

diagramme
dtats

gnration
de code
HDL

synthse

implmentation

gnration du
fichier de
configuration

puce

contraintes
(temps et
espace)
Extraction statique des mtriques dimplmentation
(ressources, dlai, puissance)

VHDL: Conception et implmentation de systmes numriques

Description de circuits numriques

La description du module peut se faire par une combinaison de code HDL dans
plusieurs langages, de schmas, diagrammes dtats ou encore flots de
donnes.
Textual HDL

Graphical State Diagram

When clock rises


If (s == 0)
then y = (a & b) | c;
else y = c & !(d ^ e);

Top-level
block-level
schematic

Graphical Flowchart
VHDL: Conception et implmentation de systmes numriques

Block-level schematic
Source: Maxfield, Mentor Graphics, 2004

Flot de conception de circuits numriques


vrification de la puce

annotation
des dlais

vrification par simulation

code HDL

schma

diagramme
dtats

gnration
de code
HDL

synthse

implmentation

gnration du
fichier de
configuration

puce

contraintes
(temps et
espace)
Extraction statique des mtriques dimplmentation
(ressources, dlai, puissance)

VHDL: Conception et implmentation de systmes numriques

Simulation fonctionnelle dun modle VHDL


Introduction

La simulation du code HDL permet au concepteur de vrifier que la description


est conforme aux spcifications.
Un simulateur travaille avec la description intermdiaire produite par un
compilateur partir de code HDL.
Le simulateur ncessite quon force la valeur de certains signaux
(habituellement les ports dentre du circuit simuler), par le biais dun banc
dessai ou doutils de simulation.
Du point de vue du simulateur, le banc dessai et le modle simuler sont
fusionns.
Le simulateur value comment les signaux forcs se propagent dans le circuit et
il calcule la valeur de tous les signaux qui en dpendent.
Le simulateur prsente les rsultats de la simulation via:

un chronogramme;
un tableau;
des messages la console;
un fichier.
VHDL: Conception et implmentation de systmes numriques

10

Simulation fonctionnelle dun modle VHDL


Problme fondamental

VHDL permet de dcrire des circuits numriques, o plusieurs vnements


peuvent se produire simultanment.
La simulation est faite sur une station de travail dote dun microprocesseur qui
traite linformation de faon squentielle.
Le problme fondamental de la simulation de code VHDL sur une station de
travail consiste simuler la concurrence dvnements sur une machine
squentielle.

VHDL: Conception et implmentation de systmes numriques

11

Simulation dun modle avec son banc dessai


Exemple
library ieee;
use ieee.std_logic_1164.all;

entity demodelaidelta is
port(
A : in STD_LOGIC;
B : in STD_LOGIC;
F : out STD_LOGIC
);
end demodelaidelta;

S1

I1
I0

S3
I1
I0

I1

O S2 I0

S4

architecture flot of demodelaidelta is


signal S1, S2, S3, S4 : STD_LOGIC;
begin
S3 <= not(B and S1);
S4 <= not(S2 and A);
F <= not(S4 and S3);
S1 <= not(A);
S2 <= not(B);
end flot;

library ieee;
use ieee.std_logic_1164.all;
entity demodelaidelta_tb is
end demodelaidelta_tb;

ux
a
n
sig

s
c
r
fo

architecture TB_ARCHITECTURE of demodelaidelta_tb is


signal A, B, F : STD_LOGIC;
begin
UUT : entity demodelaidelta(flot) port map (A, B, F);
A <= '0' after 0 ns;
B <= '1' after 0 ns, '0' after 10 ns;
end TB_ARCHITECTURE;
VHDL: Conception et implmentation de systmes numriques

t = 10 ns, un changement sur lentre B entrane des


changements simultans sur les signaux S2 et S3, puis
sur la sortie F.
Comment simuler cette concurrence dvnements?
12

Simulation dun modle VHDL


Listes dvnements et de dpendances

Un simulateur de modle VHDL doit simuler lopration dvnements


concurrents et leur assigner des moments o ils se produisent.
Le fonctionnement du simulateur repose sur trois concepts fondamentaux :
une liste dvnements;
une liste des dpendances des signaux; et,
le concept des dlais delta.

Le simulateur maintient en tout temps une liste dvnements simuler. Un


vnement est un changement de valeur apporter un signal, comme le faire
passer de 1 0.
La liste des dpendances des signaux indique au simulateur, pour chaque signal,
la liste des signaux dont il dpend. Cette dpendance est indique explicitement
ou implicitement dans le code par la liste de sensitivit des processus.
Lorsquun vnement se produit sur un signal, le simulateur ajoute lvaluation
des signaux qui dpendent de ce signal la liste des vnements simuler.
F <= not(A and (B xor not(C)));

VHDL: Conception et implmentation de systmes numriques

process (A, B, C)
begin
F <= not(A and (B xor not(C)));
end process;

13

Simulation dun modle VHDL


Le concept de dlai delta (D)

Le dlai delta (D ) est un mcanisme abstrait pour permettre la simulation


dvnements concurrents par un procd squentiel.
Le simulateur peut traiter plusieurs vnements simultans un la fois grce
aux dlais delta.
Un dlai delta est un temps infinitsimalement court ncessaire lvaluation
dun vnement.
Certaines assignations de signaux peuvent avoir lieu des temps prcis, par
exemple en utilisant la clause after. Il est possible que plus dun signal change
de valeur un moment donn.
Il est possible que plusieurs vnements soient simuls tour tour en plusieurs
dlais delta conscutifs avant que la valeur de tous les signaux ne se stabilise.
Du point de vue du temps de simulation, la somme de tous ces dlais delta reste
nulle.

VHDL: Conception et implmentation de systmes numriques

14

Simulation dun modle


Exemple - dtails de la simulation avec dlais deltas

t = 0 + 0 D, initialisation de la simulation (tout U)


A
t = 0 + 1 D, assignation de 01 AB
t = 0 + 2 D, S1, S2 et S4* prennent leur valeur
t = 0 + 3 D, S3 prend sa valeur
t = 0 + 4 D, F prend sa valeur
B
t = 10 ns + 0 D, assignation de 0 B
t = 10 ns + 1 D, S2 et S3* prennent leurs nouvelles valeurs
t = 10 ns + 2 D, F prend sa nouvelle valeur

S1

I1
I0

S3
I1
I0

I1
I

S2 I0

S4

* ces moments, le simulateur a assez dinformation pour calculer la valeur du signal parce
quun 0 lentre dune porte NON-ET implique automatiquement un 1 sa sortie

VHDL: Conception et implmentation de systmes numriques

15

n D = 0 units de temps:
exemple avec collapse deltas

Dmonstration avec Active-HDL.

VHDL: Conception et implmentation de systmes numriques

16

Simulation dun modle VHDL


Droulement global de la simulation

Au temps 0, le simulateur place, sur la liste des vnements:


les processus;
les assignations concurrentes; et,
les instanciations de composantes.

Un des vnements est choisi et est excut. Lexcution de cet vnement


peut engendrer de nouveaux vnements qui sont placs sur la liste des
vnements, au temps 0 + D ou plus tard, tel que spcifi par une clause
after.
Les autres vnements du temps 0 sont excuts leur tour, et dautres
vnements sont ajouts la liste des vnements au temps 0 + D ou plus tard.
Quand tous les vnements du temps 0 ont t excuts, le temps de
simulation est avanc au temps 0 + D, et le processus recommence.
Le cycle se rpte tant que la liste des vnements contient encore des
vnements traiter un temps 0 + nD.
Ensuite, le temps de simulation est avanc selon le moment du prochain
vnement dans la liste des vnements.
17
Conception et implmentation de systmes numriques
Le VHDL:
cycle
se rpte tant que la liste des vnements nest pas vide.

Simulation dun modle VHDL


Un autre exemple
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

library IEEE;
use IEEE.STD_LOGIC_1164.all;

entity add3bits is
port (
Cin : in std_logic;
X : in std_logic;
Y : in std_logic;
Cout : out std_logic;
S : out std_logic
);
end add3bits;

entity add3bitsTBsimple is
end add3bitsTBsimple;

architecture flotdonnees2 of add3bits is


signal T1 : std_logic;
signal T2 : std_logic;
signal T3 : std_logic;
begin
S <= T1 xor Cin;
Cout <= T3 or T2;
T1 <= X xor Y;
T2 <= X and Y;
T3 <= Cin and T1;
end flotdonnees2;

VHDL: Conception et implmentation de systmes numriques

architecture arch1 of add3bitsTBsimple is


signal Cin, X, Y, Cout, S : std_logic;
begin
UUT : entity add3bits(flotdonnees2)
port map (Cin, X, Y, Cout, S);
Cin <= '0' after 0 ns;
X <= '0' after 0 ns, '1' after 10 ns;
Y <= '0' after 0 ns;
end arch1;

Liste (tableau) des dpendances


des signaux

Signal

Dpend de

T1 , Cin

Cout

T3, T2

T1

X, Y

T2

X, Y

T3

Cin, T1

18

Simulation dun modle VHDL


Un autre exemple

Liste des vnements


t = 0 + 0 D, initialisation de la simulation (tout U)
t = 0 + 1 D, assignation de 000 X, Y, Cin
t = 0 + 2 D, valuation des signaux T1, T2, T3 et S (provoques par les changements sur X, Y, Cin)
t = 0 + 3 D, valuation de T3, S et Cout (provoques par les changements sur T1, T2, T3)
Signal
Aucun nouvel vnement nest ajout la liste dvnements.
t = 10 ns + 0 D, assignation de 1 X
t = 10 ns + 1 D, valuation de T1 et T2 (provoques par le changement sur X)
t = 10 ns + 2 D, valuation de T3 et de S (provoques par le changement sur T1)
Aucun nouvel vnement nest ajout la liste dvnements.

VHDL: Conception et implmentation de systmes numriques

Dpend de

T1 , Cin

Cout

T3, T2

T1

X, Y

T2

X, Y

T3

Cin, T1

19

Assignations des objets des catgories signal et


variable dans un processus

lintrieur dun processus, les noncs sont excuts de faon squentielle.


Les assignations des objets des catgories variable et signal sont
traites diffremment.
Quand la cible est une variable, celle-ci prend immdiatement la valeur qui
lui est assigne.
Pour un signal, lassignation est place sur la liste des vnements:
au temps courant + D (clause implicite after 0 ns); ou,
au moment spcifi par une clause after explicite.

Lvaluation des noncs du processus se poursuit ensuite.


Les assignations de valeurs des signals ne sont effectues que lorsquelles
sont tires de la liste des vnements:
aprs la fin de lexcution du processus; ou bien,
pendant la suspension de lexcution du processus par un nonc wait.
process (A, B, T1)
begin
T1 <= A and B;
T2 <= not(T1);
end process;

VHDL: Conception et implmentation de systmes numriques

quivalence

process
begin
T1 <= A and B;
T2 <= not(T1);
wait on A, B, T1;
end process;

20

Valeur dexpressions contenant des objets des catgories


signal et variable dans un processus
Quand

Variable

Au dbut de la premire
excution du processus

Valeur dinitialisation dans la dclaration, ou valeur par


dfaut correspondant au type.

Au dbut des autres


excutions du processus

Valeur la fin de la dernire


excution

Signal

Valeur assigne aprs la fin


de la dernire excution

Pendant lexcution dun


Dernire valeur assigne
processus qui ne contient pas
dnonc wait

Valeur au lancement du
processus

Pendant lexcution dun


processus qui contient un ou
des noncs wait

Valeur au lancement du
processus ou bien dernire
valeur assigne juste avant
lnonc wait qui prcde
lexpression

Dernire valeur assigne

VHDL: Conception et implmentation de systmes numriques

21

Signals et variables dans un processus: exemple


entity demoprocessus is
end demoprocessus;
architecture arch of demoprocessus is
signal s1 : integer := 100;
signal s2, s3, s4 : integer := -100;
begin
process
variable v1 : integer := 2;
begin
while (v1 >= 0) loop
s2 <= v1 + 5;
v1 := v1 - 1;
s3 <= v1 + 5;
s1 <= s1 + 1;
s4 <= s3 + s2;
wait for 5 ns;
s3 <= s3 + v1;
s4 <= s3 + s2;
wait for 5 ns;
s4 <= s3;
end loop;
wait for 100 ns;
end process;
end arch;

VHDL: Conception et implmentation de systmes numriques

22

Parenthse: Valeurs par dfaut dobjets en VHDL

Lors de la simulation, un objet dclar sans initialisation de valeur se voit


assigner une valeur par dfaut qui dpend de son type.
La valeur par dfaut correspond la borne gauche du type (type T, valeur
Tleft).
La borne gauche dpend de la dclaration du type.
Exemples:
Type

Valeur par dfaut

boolean

FALSE

natural

positive

integer

typiquement -231

std_logic

std_logic_vector

UUU.U

VHDL: Conception et implmentation de systmes numriques

Et si la simulation navance que par des deltas?

Il est possible, lors de la simulation dun modle, que la valeur de certains de ses
signaux ne se stabilise pas. Par exemple, un circuit peut inclure un chemin de
rtroaction qui le fait entrer en oscillation.
Le temps de simulation navance alors quen deltas.
Un simulateur doit pouvoir dtecter cet tat de chose, sarrter lui-mme et
afficher un message derreur.
C

I1

I0

S6

S5

Problme si C a une valeur initiale de 1 puis passe 0


(en supposant que la porte NON-OU na pas de dlai).

VHDL: Conception et implmentation de systmes numriques

24

Parenthse: Des dtails, des dtails et des mises en garde

Il y a plusieurs faons de dcrire un comportement donn en VHDL.


On peut remplacer la liste de sensitivit dun processus par un nonc wait.
(avec trois variations: wait for, wait until, wait on).
On peut avoir une liste de sensitivit non complte (qui ninclut pas tous les
signaux qui font partie dexpressions dans le processus).
Ces approches ne sont pas recommandes, surtout quand on crit du code en
vue de la synthse dun circuit.
process(A, B)
begin
T1 <= A and B;
T2 <= not(T1);
end process;

process
begin
T1 <= A and B;
wait for 0 ns;
T2 <= not(T1);
end process;

process (A, B, T1)


begin
T1 <= A and B;
T2 <= not(T1);
end process;

process
begin
T1 <= A and B;
T2 <= not(T1);
wait on A, B, T1;
end process;

VHDL: Conception et implmentation de systmes numriques

process
begin
wait on A, B, T1;
T1 <= A and B;
T2 <= not(T1);
end process;

process
begin
wait until A = B;
T1 <= A and B;
T2 <= not(T1);
end process;

25

Flot de conception de circuits numriques


vrification de la puce

annotation
des dlais

vrification par simulation

code HDL

schma

diagramme
dtats

gnration
de code
HDL

synthse

implmentation

gnration du
fichier de
configuration

puce

contraintes
(temps et
espace)
Extraction statique des mtriques dimplmentation
(ressources, dlai, puissance)

VHDL: Conception et implmentation de systmes numriques

26

Synthse de code VHDL

La synthse du code VHDL est effectue par un synthtiseur.


Le processus de synthse peut tre dcompos et effectu en plusieurs passes.
Ce processus est trs complexe sauf pour les circuits les plus simples.
Le produit du synthtiseur est communment appel liste des
interconnexions (netlist): les composantes de base et les liens qui les relient.
Aprs le processus de synthse, il est possible dobtenir un estim de la
performance et des cots du circuit.

VHDL: Conception et implmentation de systmes numriques

27

Modlisation en VHDL pour la synthse

La synthse dun circuit numrique consiste obtenir une description du circuit


en termes de composantes et dinterconnexions partir de sa spcification dans
un langage de description matrielle.
Le dfi du synthtiseur est de russir modliser le comportement sousentendu par le code et dinfrer un circuit conforme celui-ci.
Le dfi du concepteur de circuits numriques est de dcrire ses intentions dune
faon non ambige pour le synthtiseur.
Une approche qui fonctionne consiste tout dabord dcomposer le circuit en
blocs de base correspondant des composantes logiques connues, puis
produire une description en fonction de ces blocs.
La norme 1076.6-2004 de lIEEE dfinit le sous-ensemble de VHDL qui est
(devrait tre ) support par les outils de synthse commerciaux.
La documentation accompagnant le synthtiseur est pratique

VHDL: Conception et implmentation de systmes numriques

28

Exemples de code ambigu ou non synthtisable - 1


library ieee;
use ieee.std_logic_1164.all;

entity boucledynamique is
port (
x0, xmax : in integer range 0 to 255;
somme : out integer range 0 to 65535
);
end boucledynamique;
architecture arch of boucledynamique is
begin
process(x0, xmax)
variable sommet : integer;
begin
sommet := 0;
for k in x0 to xmax loop
sommet := sommet + k;
end loop;
somme <= sommet;
end process;

entity registremanque1 is
port (
clk, D : in std_logic;
Q : out std_logic
);
end registremanque1;
architecture arch of registremanque1 is
begin
process(clk)
begin
if (rising_edge(CLK) or falling_edge(CLK)) then
Q <= D;
end if;
end process;
end arch;

Ne respecte pas les patrons pour la


description de registres.

end arch;

Boucle bornes indfinies.

VHDL: Conception et implmentation de systmes numriques

29

Exemples de code ambigu ou non synthtisable - 2


library ieee;
use ieee.std_logic_1164.all;
entity deuxsourcesetpire is
port (
A, B, C, D, CLK : in std_logic;
F : out std_logic
);
end deuxsourcesetpire;
architecture arch of deuxsourcesetpire is
begin
F <= CLK and (C or D);
process(CLK)
begin
if (rising_edge(CLK)) then
F <= A or B;
end if;
end process;
end arch;

Deux sources pour le mme signal.


Utilisation du signal dhorloge dans une
expression (synthtisable, mais )

library ieee;
use ieee.std_logic_1164.all;
entity registremanque is
port (
clk, reset, enable, D : in std_logic;
Q : out std_logic
);
end registremanque;
architecture arch of registremanque is
begin
process(clk, reset)
begin
if (rising_edge(CLK) and reset = '0' and enable = '1') then
Q <= D;
end if;
end process;
end arch;

Ne respecte pas les patrons pour la


description de registres.
VHDL: Conception et implmentation de systmes numriques

30

Parenthse: la norme IEEE 1076.6-2004

http://www.ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=1342563
This document specifies a standard for use of VHDL to model synthesizable
register-transfer level digital logic. A standard syntax and semantics for VHDL
register-transfer level synthesis is defined. The subset of the VHDL language,
which is synthesizable, is described, and nonsynthesizable VHDL constructs are
identified that should be ignored or flagged as errors.

VHDL: Conception et implmentation de systmes numriques

31

Types utiliss pour la synthse

Les types std_logic ou std_logic_vector ne devraient tre utiliss que pour des
valeurs logiques.
Pour reprsenter des nombres pour les ports dune entit, les types prfrs
sont tirs du package numeric_std :
unsigned pour une interprtation non signe
signed pour une interprtation signe en complment deux.

Pour reprsenter des signaux internes dun module, on a avantage utiliser les
types plus abstraits comme integer, character ou string, mme sil est plus
difficile, de retrouver ces signaux pour dbogage dans les produits de la
synthse ou de limplmentation.
Pour les constantes et les paramtres dun module, on peut en gnral utiliser
tous les types abstraits supports par VHDL, comme real, integer, ou string.

VHDL: Conception et implmentation de systmes numriques

32

Parenthse:
Exemple de code utilisant les types character et string
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity banderolev2 is
Port (
reset, clk : in STD_LOGIC;
charout : out unsigned(7 downto 0)
);
end banderolev2;
architecture arch of banderolev2 is
constant message : string := "bonjour et bienvenue!";
begin
process (clk, reset)
variable index : integer range 1 to message'length;
begin
if (rising_edge(clk)) then
if reset = '1' then
index := 1;
else
charout <= to_unsigned(character'pos(message(index)), 8);
if index = message'length then
index := 1;
else
index := index + 1;
end if;
end if;
end if;
end process;
end arch;

VHDL: Conception et implmentation de systmes numriques

33

Fils modliss par les catgories signal et variable

En gnral, lutilisation de la catgorie signal rsulte en un fil concret dans un


module.
Cest moins souvent le cas pour la catgorie variable, cause du traitement
diffrent de ces deux catgories.
library ieee;
use IEEE.STD_LOGIC_1164.ALL;
entity demoSignalVariable is
port (
A, B, C, D: in std_logic;
F1, F2 : out std_logic
);
end demoSignalVariable;
architecture demo of demoSignalVariable is
signal S1, S2 : std_logic;
begin
S1 <= A and B;
S2 <= S1 or C;
F1 <= S2 nand D;
process(A, B, C, D)
variable V : std_logic;
begin
V := A and B;
V := V or C;
V := V nand D;
F2 <= V;
end process;

D
C
B
A

F1
S2
S1

D
C
B
A

V?

F2
(V?)

V?

end demo;

VHDL: Conception et implmentation de systmes numriques

34

Oprateurs synthtisables

La plupart des synthtiseurs peuvent synthtiser des circuits matriels qui


ralisent les oprateurs suivants:

logique: and, or, nand, nor, xor, xnor, not


relation: =, /=, <, <=, >, >=
concatnation: &
arithmtique et dcalage:
+, - ,*, abs
/, rem, mod et **, si loprande de droite est une constante gale une puissance de 2
(parce que )
sll, srl, sla, sra, rol, ror

Les oprateurs ne sont pas dfinis pour tous les types, il faut utiliser les librairies
correspondantes.
parce quil ny a pas (pour linstant, en 2010), de modules
matriels simples sur les FPGAs qui permettent deffectuer ces
oprations.
VHDL: Conception et implmentation de systmes numriques

35

Synthse: boucles et conditions

lintrieur dun processus, on peut utiliser des boucles et des conditions pour
modliser le comportement dun circuit.
Les boucles sont une manire compacte de reprsenter plusieurs noncs relis
logiquement entre eux.
Les paramtres dexcution de la boucle doivent prendre des valeurs statiques
au moment de la synthse.
Les boucles sont implmentes en les droulant: les noncs dassignation
quelles contiennent sont rpliqus, un pour chaque itration de la boucle.
Pour les circuits combinatoires, les conditions permettent deffectuer un choix.
Lnonc case a lavantage de reprsenter des choix qui sont mutuellement
exclusifs et qui ont la mme prsance. Il correspond assez exactement laction
dun multiplexeur.
Lnonc if, est plus gnral avec les clauses elsif ainsi quune clause else. Il est
possible de lutiliser pour donner prsance certaines conditions par rapport
dautres. Cela peut rsulter en un circuit plus complexe que ncessaire, parce que le
comportement dcrit peut tre plus restrictif que ce que le concepteur a en tte.
VHDL: Conception et implmentation de systmes numriques

Case est un meilleur choix quand on na pas


besoin de priorit!

36

Exemple de code utilisant des boucles


et des conditions avec priorit
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity unsigned2dec is
port(
nombre : in unsigned(9 downto 0);
centainesBCD, dizainesBCD, unitesBCD : out unsigned(3 downto 0);
erreur : out std_logic
);
end unsigned2dec;
architecture arch of unsigned2dec is
begin
erreur <= '1' when nombre >= 1000 else '0';
process(nombre)
variable n, c, d, u : natural := 0;
begin
n := to_integer(nombre);
c := 0;
for centaines in 9 downto 1 loop
if n >= centaines * 100 then
c := centaines;
exit;
end if;
end loop;
n := n - c * 100;
d := 0;
for dizaines in 9 downto 1 loop
if n >= dizaines * 10 then
d := dizaines;
exit;
end if;
end loop;
u := n - d * 10;
centainesBCD <= to_unsigned(c, 4);
dizainesBCD <= to_unsigned(d, 4);
unitesBCD <= to_unsigned(u, 4);
end process;
end arch;VHDL: Conception et implmentation de systmes numriques

37

Infrence dlments mmoire

Le processus de synthse repose sur le principe de linfrence de composantes


matrielles partir dune description en code.
Il est important de vrifier la documentation dun outil de synthse pour savoir
quelle structure de langage utiliser pour obtenir le circuit dsir.
lintrieur dun processus, un lment mmoire est infr en VHDL si un
objet des catgories signal ou variable se voit assigner une valeur dans un
nonc if-else, et que certains cas ne sont pas couverts.
Les cas non couverts impliquent que lobjet doit conserver sa valeur, et donc un
loquet est infr.
Il est donc trs important de couvrir tous les cas possible avec une clause else
ou when others, selon le cas, quand on ne dsire pas quun loquet soit infr.

VHDL: Conception et implmentation de systmes numriques

38

Un loquet ou un multiplexeur ?
library ieee;
use ieee.std_logic_1164.all;

library ieee;
use ieee.std_logic_1164.all;

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

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

architecture archi of mystere1 is


begin
process (a, b, c, s)
begin
if (s = "00") then o <= a;
elsif (s = "01") then o <= b;
elsif (s = "10") then o <= c;
end if;
end process;
end archi;

architecture archi of mystere2 is


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

VHDL: Conception et implmentation de systmes numriques

39

Distinctions entre simulation et synthse

On remarque que la description du circuit en HDL peut tre simule et


synthtise.
La simulation est normalement faite par un logiciel qui est excut sur un
microprocesseur, alors que le but principal de la synthse est dobtenir un
circuit matriel.
La simulation sert vrifier la description du systme en diffrents points du
flot. Il peut arriver quune tape du flot produise une description incorrecte, et
la simulation permet de dtecter cette erreur.
Un circuit dcrit en VHDL peut tre parfaitement simulable et pas du tout
synthtisable.
Parfois, des erreurs dans la description du circuit ne sont dcouvertes que lors
du processus de synthse.

VHDL: Conception et implmentation de systmes numriques

40

Parenthse: rsultats diffrents


pour la synthse et la simulation: comment les viter

Attention la liste de sensitivit


labsence dun signal dans la liste de sensitivit est importante pour le simulateur
le synthtiseur suppose (en gnral) que le concepteur a fait une erreur:

noncs wait: pas tenus en compte par le synthtiseur


Quoi faire?
Surveiller les avertissements du synthtiseur
Pour les processus dcrivant des bascules: placer seulement clk et reset dans la liste
de sensitivit
Pour les processus dcrivant de la logique combinatoire: placer tous les signaux
faisant partie dexpressions dans la liste de sensitivit

process(CLK, A)
begin
if rising_edge(CLK)
then
Z <= A;
end if;
end process;

VHDL: Conception et implmentation de systmes numriques

process(A, B)
begin
T1 <= A and B;
T2 <= not(T1);
end process;

process (A, B, T1)


begin
T1 <= A and B;
T2 <= not(T1);
end process;

41

Synthse: mot de la fin

Le synthtiseur respecte un contrat, p. ex. la norme IEEE 1076.6-2004.


Un synthtiseur prend deux entres:
la description du design (code HDL source et librairies); et,
une description des ressources disponibles dans la technologie cible.

Les concepteurs de synthtiseurs sont des gens prudents. Les synthtiseurs


ninfrent que des modules qui peuvent tre dcrits sans ambigut.
le code HDL doit tre non ambigu;
le code HDL doit correspondre une structure disponible sur la technologie cible,
exemples de cas considrer:

registre avec reset synchrone/asynchrone?


registre actif sur un ou deux fronts dhorloge?
type dadditionneur?
division, reste, autres fonctions (sinus, log, tanh, mdiane, etc.)?

Pour crire du bon code synthtisable, il faut donc bien connatre:


le contrat respect par le synthtiseur utilis; et,
la technologie cible.
VHDL: Conception et implmentation de systmes numriques

42

Flot de conception de circuits numriques


vrification de la puce

annotation
des dlais

vrification par simulation

code HDL

schma

diagramme
dtats

gnration
de code
HDL

synthse

implmentation

gnration du
fichier de
configuration

puce

contraintes
(temps et
espace)
Extraction statique des mtriques dimplmentation
(ressources, dlai, puissance)

VHDL: Conception et implmentation de systmes numriques

43

Implmentation

Dans ltape dimplmentation, on:


dcoupe la liste des interconnexions en composantes disponibles sur le circuit
intgr cible (association);
on choisit des endroits spcifiques sur la puce pour chaque composante
(placement); et,
on relie les ports des composantes par des chemins (routage).

Lassociation nest faite en gnral quune seule fois.


Les tapes de placement et routage peuvent tre rptes tant que les
contraintes de temps et/ou despace ne sont pas satisfaites.

VHDL: Conception et implmentation de systmes numriques

44

Association (1)

Un synthtiseur produit en gnral une description du circuit en termes de


composantes de base. Les composantes de base incluent, entre autres :

des fonctions logiques comme ET, OU, OUX;


des multiplexeurs et dcodeurs;
des additionneurs, soustracteurs, accumulateurs, multiplicateurs;
des bascules et loquets; et,
dautres composantes comme des blocs de mmoire, des gnrateurs dhorloge et
des tampons.

Le processus dassociation (mapping) consiste associer des composantes de


base des blocs ou des groupes de blocs logiques du FPGA.
Par exemple, un groupe de portes logiques peut tre combin en une seule
table de conversion dun bloc logique.

VHDL: Conception et implmentation de systmes numriques

45

Association (2)

Portion of gate-level netlist

Contents of 3-input LUT

XOR
a
b

|
NOT

XNOR
|

VHDL: Conception et implmentation de systmes numriques

a b c

0
1
0
1
0
1
0
1

0
1
1
0
1
0
0
1

0
0
0
0
1
1
1
1

0
0
1
1
0
0
1
1

source : fig. 8-8, Maxfield, Mentor Graphics 2004

46

Association (3)

Le processus dassociation est rendu plus complexe quand une fonction logique
a plus dentres que les tables de conversion des blocs logiques.
Il faut donc que loutil dassociation fasse un partitionnement et une
distribution de ces fonctions
Ce processus peut tre trs complexe parce quil ny a pas ncessairement
quune seule solution.
Loutil doit alors se baser sur des contraintes doptimisation imposes par
lutilisateur, comme une rduction de lespace utilis ou une rduction des
dlais de propagation.

VHDL: Conception et implmentation de systmes numriques

47

Placement (1)

Le processus de placement consiste choisir un endroit spcifique sur le FPGA


pour chacune des ressources ncessaires. Le processus de placement est trs
complexe.
En pratique, on voudrait que des blocs qui communiquent entre eux soient
disposs prs les uns des autres. De cette faon, on simplifierait la tche du
routeur et on diminuerait les dlais dus aux interconnexions.
Cependant, dans le cas dune composante avec des liens vers beaucoup
dautres, ce nest pas possible.
De plus, si on utilise une grande proportion des ressources du FPGA (> 80%), le
placeur na pas beaucoup de marge de manuvre.
Les algorithmes de placement utilisent souvent des mthodes heuristiques.

VHDL: Conception et implmentation de systmes numriques

48

Placement (2): exemples de placement


de cinq blocs sur une surface de 5 3
IOB

IOB

IOB

IOB

IOB

IOB

IOB

IOB

IOB

IOB

IOB

IOB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

IOB

IOB

IOB

IOB

IOB

IOB

IOB

IOB

IOB

IOB

IOB

IOB

IOB

IOB

IOB

IOB

IOB

IOB

IOB

IOB

IOB

IOB

IOB

IOB

IOB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

CLB

IOB

IOB

IOB

IOB

IOB

VHDL: Conception et implmentation de systmes numriques

IOB

IOB

IOB

IOB

IOB

IOB

49

Placement (3): Les objectifs

Les objectifs gnraux du placement sont:

garantir quun routage existe;


minimiser la longueur des chemins entre les composantes;
minimiser la consommation de puissance (moins pour FPGA); et,
minimiser le bruit entre les signaux (moins pour FPGA).

Les mtriques suivantes peuvent permettre de comparer deux solutions de


placement:
la longueur totale des interconnexions;
le dlai le plus long; et,
la congestion des interconnexions.

VHDL: Conception et implmentation de systmes numriques

50

Routage (1)

Le processus de routage consiste tablir des connexions entre les ressources.


Le processus de routage est aussi trs complexe, et est souvent bas sur des
mthodes heuristiques.
Le problme vient du fait quil existe un nombre limit de ressources
dinterconnexions entre les blocs logiques dun FPGA.
Il peut donc tre impossible de router un circuit tant donn un placement.
Dans un tel cas, le placeur doit effectuer un nouveau placement pour donner
plus de flexibilit au routeur.
Le routeur doit router trois types de connexions:
les horloges et les signaux de rinitialisation;
les connexions entre les blocs logiques;
les connexions entre les blocs logiques et les blocs dentre/sortiel

VHDL: Conception et implmentation de systmes numriques

51

Routage (2):
Rseau hirarchique dinterconnexions du XC2VP30
Longues lignes: toute la puce
Lignes hex: chaque 3e ou6e bloc
Lignes double: chaque 2e ou 4e bloc

VHDL: Conception et implmentation de systmes numriques

Lignes directes entre CLBs voisins


Lignes rapides: internes aux CLBs
Xilinx, Virtex-II Pro and Virtex-II Pro X Platform FPGAs: Complete Data Sheet, Nov. 2007.

52

Routage (3)

Les objectifs du routage sont:


effectuer toutes les connexions ncessaires;
minimiser la longueur totale des interconnexions; et,
minimiser la longueur du chemin le plus long.

Dans un FPGA, les connexions sont bien caractrises et les dlais et les
longueurs des chemins sont bien connus.

VHDL: Conception et implmentation de systmes numriques

53

Flot de conception de circuits numriques


vrification de la puce

annotation
des dlais

vrification par simulation

code HDL

schma

diagramme
dtats

gnration
de code
HDL

synthse

implmentation

gnration du
fichier de
configuration

puce

contraintes
(temps et
espace)
Extraction statique des mtriques dimplmentation
(ressources, dlai, puissance)

VHDL: Conception et implmentation de systmes numriques

54

Mtriques de performance
et simulation du circuit implment

Une fois limplmentation termine, on obtient:


un fichier qui dcrit toutes les interconnexions et la configuration des blocs logiques;
une liste des interconnexions annote des dlais des composantes et du routage;

Les FPGAs ont une structure trs rgulire et la prcision des dlais est grande
On peut donc simuler cette liste des interconnexions avec le mme banc dessai
initial pour observer le comportement rel du circuit.
Cette simulation prend en gnral un ordre de grandeur supplmentaire en
temps faire que la simulation de la description initiale du circuit, cause du
grand nombre de composantes et de fils dont le simulateur doit tenir compte.
On obtient aussi un rapport dtaill sur les ressources utilises sur le FPGA, ainsi
quune description du chemin critique avec le dlai sur celui-ci.
Si les spcifications ne sont pas rencontres, on peut alors retourner lune des
tapes du flot de conception pour corriger les problmes.

VHDL: Conception et implmentation de systmes numriques

55

Flot de conception de circuits numriques


vrification de la puce

annotation
des dlais

vrification par simulation

code HDL

schma

diagramme
dtats

gnration
de code
HDL

synthse

implmentation

gnration du
fichier de
configuration

puce

contraintes
(temps et
espace)
Extraction statique des mtriques dimplmentation
(ressources, dlai, puissance)

VHDL: Conception et implmentation de systmes numriques

56

Configuration du FPGA (1)

La dernire tape consiste en gnral programmer le dispositif devant


supporter le circuit ou faire dessiner les masques qui permettront de
construire des transistors partir de semi-conducteurs dops et disolants ainsi
que les connexions mtalliques qui les relieront.
Laction de programmer un FPGA consiste configurer tous ses blocs logiques,
ses blocs dentres et sorties et ses interconnexions.
Afin de programmer efficacement un FPGA, on peut imaginer que toutes les
cellules de programmation sont places en srie. Un signal spcial permet de les
placer en mode de programmation, o chaque cellule passe son contenu la
prochaine cellule chaque coup dhorloge. Ce systme permet deffectuer la
programmation du dispositif avec trs peu de pattes : une pour le signal de
programmation, une pour placer les cellules en mode de programmation, une
pour lire le flux de bits de programmation pour fins de vrification, et une
horloge de programmation.

VHDL: Conception et implmentation de systmes numriques

57

Configuration du FPGA (2)

Configuration data in
Configuration data out

= I/O pin/pad
= SRAM cell

VHDL: Conception et implmentation de systmes numriques

source : fig. 5-3, Maxfield, Mentor Graphics 2004

58

Vous aimerez peut-être aussi