You are on page 1of 35

Universit Grenoble Alpes Anne 2017-2018

Polytech IESE5 / Master 2 MISTRE


I. CONCEPTION, NIVEAUX DE MODELISATION
I.1 Prambule
Objet du cours : Mthodes pour l'aide la conception des systmes
numriques ! modlisation, simulation, synthse

Le contexte est donc l'EDA :

Electronic Design Automation is a category of software tools for designing


electronic systems such as printed circuit boards and integrated circuits.
The tools work together in a design flow that chip designers use to design
and analyze entire semiconductor chips. EDA is also referred to as

Modlisation des "Electronic Computer-Aided Design" (ECAD). Wikipedia

systmes numriques - VHDL


Pourquoi modliser, simuler ? Qu'est ce qu'un flot de conception pour
systmes embarqus ?

Il s'agit de systmes complexes :

- parfois conus partir de composants existants (IP)


L'objectif de ce cours est de fournir une introduction aux principes et
langages couramment utiliss dans les niveaux d'abstraction les plus
levs du flot de conception (VHDL principalement), et aux mthodes et - incluant des parties matrielles et des parties logicielles
outils associs (simulation, synthse)
- et gnralement soumis de nombreuses contraintes (cot, perfor-
mances, consommation, fiabilit,)

! les mthodes de conception doivent pouvoir prendre en compte tous


ces aspects.
Laurence PIERRE
Laurence.Pierre@univ-grenoble-alpes.fr NOTE. IP block: In electronic design a semiconductor intellectual property
http://users-tima.imag.fr/amfors/lpierre/MSN core, IP core, or IP block is a reusable unit of logic, cell, or chip layout
design that is the intellectual property of one party. The IP core can be
described as being for chip design what a library is for computer
programming. Synthesizable cores are delivered in a hardware
description language such as Verilog or VHDL. Wikipedia

2
Il faut galement : prendre en compte le "Time To Market" (un retard d'un
mois la mise sur le march peut induire une perte de l'ordre de 30% dans
la rentabilit !), considrer que les aspects lis la vrification peuvent
reprsenter de 60 70% du cycle de conception, mais aussi que faciliter
maintenance et mises jour est crucial,

D'o l'intrt de modliser et simuler avant de synthtiser et de fabriquer


le dispositif. Un flot de conception partir du niveau ESL (Electronic
System Level) est souvent adopt.

Electronic System Level design and verification is an emerging electronic


design methodology that focuses primarily on the higher abstraction level
concerns. The basic premise is to model the behavior of the entire system
using a high-level language such as C, C++, LabVIEW, or MATLAB. ESL
can also be accomplished through the use of SystemC as an abstract Avant de nous concentrer sur le niveau RTL et sur VHDL, nous allons donc

modeling language. Rapid and correct-by-construction implementation of dire quelques mots sur SystemC, couramment associ au niveau ESL.

the system can be automated using EDA tools such as high-level synthesis
I.2 Principes de SystemC
and embedded software tools, although much of it is performed manually
today. Wikipedia SystemC, standard IEEE 1666 (http://www.systemc.org/) : version prlimi-
naire fin 1999, standard IEEE depuis fin 2005.

Son niveau TLM (Transactional Level Modeling) permet de dcrire


aisment des plateformes virtuelles, par exemple:

http://chipdesignmag.com/display.php?articleId=67

3 4
Note. SystemC est en fait une bibliothque C++ pour la description de Exemple de plateforme :
systmes matriels (comportements concurrents, notion de temps,...) + Plateforme de traitement de signaux radio (modle issu de http://www.ics.
noyau de simulation ele.tue.nl/~dsd/dsd2005/files/DSD05ThalesSept1rstPorto.pdf, p.10, ralis
dans un environnement de modlisation de Synopsys)
Niveaux de description :
Ancienne vue (PV/PVT) :

ISS (instruction
set simulator),
ou traffic generator Viterbi
decoder

AHB/APB bus
DDC
Contrleur
d'interruption

DMA

Nouvelle vue (LT/AT) :

LT = Loosely Timed
AT = Approximately Timed

5 6
II. VHDL. ENTITES ET ARCHITECTURES simulation dirige par vnements, diverses constructions ne sont pas
synthtisables. Nous tudions ci-dessous une partie de VHDL'87.
II.1 Langages de description de matriel au niveau RTL Une description VHDL se compose d'une dclaration d'entit et d'une ou
Les langages de description de matriel (Hardware Description plusieurs architectures (gnralement diffrents niveaux d'abstraction).
Languages) ont vu le jour la fin des annes 1960, dans le but de dcrire
La dclaration d'entit dcrit essentiellement l'interface (les ports
et simuler les circuits. Il y a eu prolifration de langages (et simulateurs),
d'entre/sortie).
couvrant divers niveaux d'abstraction.
Elle peut aussi spcifier des paramtres gnriques qui permettent de
A l'heure actuelle, il existe deux standards IEEE qui permettent de la
modliser des familles de circuits (paramtres de temps, taille des ports,
modlisation RTL (ou plus bas niveau) : Verilog et VHDL.
nombre de composants utiliss,).
Verilog (http://www.verilog.com/) est n au dbut des annes 1980 Sa forme, lgrement simplifie, est la suivante :
(Gateway Design Automation). Il a t mis dans le domaine public en 1990
entity nom is
par Cadence (acqureur de Gateway Design Automation), puis standardis generic (paramtres-gnriques);
par l'IEEE en 1995 (IEEE Std. 1364-1995). Il propose les niveaux de port (ports d'entres/sorties);
dclarations diverses: types, constantes;
description algorithmique, RTL, portes logiques et transistors. end nom;

Le dveloppement de VHDL a t entrepris en 1981 par le Dpartement


Les ports d'entres/sorties peuvent tre spcifis :
de la Dfense des USA (DoD), des industriels ont t largement impliqus
- in : ports d'entre, ne peuvent pas tre modifis
dans le processus de standardisation. Le premier manuel de rfrence a
- out : ports de sortie, ne peuvent pas tre lus
t rdig fin 1984, et les premiers outils ont t proposs en 1986
- inout : ports bidirectionnels, servant en entre et en sortie
(vraiment disponibles en 1988). Il a t standardis par l'IEEE en 1987
- buffer : ports de sortie pouvant tre lus
(IEEE Std. 1076-1987), et des rvisions significatives ont eu lieu en 1993,
2000 et 2008. Il propose les niveaux de description algorithmique, RTL et Exemple : additionneur 1 bit
portes logiques. entity full_adder is
Remarque : Verilog-AMS et VHDL-AMS sont des drivs de Verilog et port(X,Y,Cin : in Bit; -- ports d'entre
Sum,Cout : out Bit); -- ports de sortie
VHDL, pour la description de systmes signaux analogiques et mixtes. end full_adder;

II.2 VHDL - Premires notions Les paramtres gnriques peuvent tre de n'importe quel type, avoir une
valeur par dfaut, et ils sont considrs comme des constantes.
VHDL signifie VHSIC (Very High Speed Integrated Circuits) Hardware
Description Language. Sa smantique est dcrite en termes du moteur de

7 8
Exemples : types, de constantes, de fonctions et procdures, de composants, et de
entity Add_N_bit is signaux. On ne peut pas trouver de dclarations de variables (VHDL'87).
generic(N: Natural);
port(A,B: in Bit_vector(N downto 1); Cin: in Bit;
S: out Bit_vector(N downto 1); Cout: out Bit); Attention, Les instructions se trouvant dans une architecture sont toutes
end Add_N_bit; des instructions concurrentes.

entity async_transmitter is
generic(Bit_time: time := 20 ms); Dans le style structurel, on dcrit une hirarchie de composants
port(parallel_in: in bit_vector (7 downto 0); interconnects. Les communications se font par les interfaces (ports
load: in bit;
serial_out : out bit := '0'; d'E/S), les interconnexions sont exprimes par les port map. Les
done : out bit := '1');
composants utiliss doivent faire l'objet d'une configuration (voir plus bas).
end async_transmitter;

Exemple :
Les architectures permettent de dcrire le comportement ou la structure
architecture Structure_view of full_adder is
des composants reprsents par les entits. Plusieurs architectures,
-- dclaration des composants utiliss :
ventuellement donnes diffrents niveaux d'abstraction, peuvent tre component Half_adder
port(I1,I2: in Bit; Carry,Sum: out Bit);
associes une mme entit. Trois styles de description peuvent tre end component;
utiliss en VHDL : component Or_gate
port(I1,I2: in Bit; O: out Bit);
- le style "structurel" : interconnexion de composants, chacun d'eux end component;
tant une instance de couple entit/architecture -- dclaration des "signaux" internes :
signal A,B,C : Bit;
- le style "dataflow" (s'apparente au niveau d'abstraction RTL) :
begin
ensemble d'instructions sur signaux qui dcrivent les connexions U1: Half_adder port map(X,Y,A,B);
U2: Half_adder port map(Cin,B,C,Sum);
entre portes logiques et les chargements de registres U3: Or_gate port map(A,C,Cout);
- le style "comportemental" : ensemble de processus qui expriment le end Structure_view;
comportement du systme sum
cin

Une dfinition d'architecture a la forme suivante : x B C cout


y
architecture nom of nom-entit is
dclarations A
begin !
instructions-concurrentes
end nom; Dans le style dataflow, la description traduit les quations caractristiques

du circuit, les temps de traverse des portes correspondant aux oprateurs


Dans la partie dclarations peuvent se trouver des dclarations de
utiliss peuvent tre explicits.

9 10
Exemple : ...
end for;
cin sum ...
end nom;
x S cout
y Cela est utile si l'on souhaite retarder le choix de configuration et/ou avoir
plusieurs configurations pour une mme architecture; nom_arch est
!
gnralement un nom d'architecture (mais peut tre une tiquette de block
architecture Dataflow_view of full_adder is ou de generate, voir plus loin).
signal S : Bit; -- pas indispensable ici
begin
S <= X xor Y after 5 ns; Exemple : prenons le petit exemple illustratif ci-dessous
Sum <= S xor Cin after 5 ns;
Cout <= (X and Y) or (S and Cin) after 20 ns; A S1
S
end Dataflow_view; 4ns
2ns
B 5ns
S2

II.3 Configurations
L'entit correspondante est la suivante :
Nous reviendrons plus loin sur l'instruction d'instanciation de composant, entity Exemple is
port(a,b: in Bit; s: out Bit);
utilise dans le style structurel. Voyons les configurations, qui permettent end Exemple;
de spcifier les couples entits/architectures choisis pour instancier des
Une description totalement dataflow ne ncessite pas de configuration :
composants.
architecture RTL of Exemple is
Une spcification de configuration peut tre simplement place dans signal s1,s2: Bit;
begin
l'architecture mme. Elle a la forme suivante : s1 <= not a after 2 ns;
s2 <= s1 nand b after 5 ns;
for instance(s)_de_composant : nom_composant s <= s1 and s2 after 4 ns;
use entity end RTL;
nom_library.nom_entit(nom_architecture);
Voyons maintenant une description mixte structurelle/dataflow, avec
De prfrence, on fera appel une unit de conception configuration, qui a
configuration incorpore :
la forme ci-dessous :
entity porteET is port(x,y: in bit; s: out bit);
configuration nom of nom_entit is end porteET;
for nom_arch architecture RTL of porteET is
for instance(s)_de_composant : nom_composant begin
use entity s <= x and y after 4 ns;
nom_library.nom_entit(nom_architecture); end RTL;
end for;
11 12
for P2: porteNAND use entity work.porteNAND(RTL);
entity porteNAND is port(x,y: in bit; s: out bit); end for;
end porteNAND; end for;
architecture RTL of porteNAND is end Config1;
begin
s <= x nand y after 5 ns; Dans ce second cas, lorsqu'une instance de Exemple sera son tour
end RTL;
utilise, la configuration mettra en jeu use configuration au lieu de
architecture Struct of Exemple is
-- dclaration des composants utiliss : use entity :
component porteET port(x,y: in bit; s: out bit); for E:Exemple use configuration work.Config1;
end component;
component porteNAND port(x,y: in bit; s: out bit); au lieu de
end component; for E:Exemple use entity work.Exemple(Struct);
-- configuration :
for P1:porteET use entity work.porteET(RTL);
for P2:porteNAND use entity work.porteNAND(RTL); Remarque : les packages peuvent tre utiliss pour rassembler des
-- dclaration des "signaux" internes : dclarations (types, constantes,...) et des dfinitions de sous-programmes.
signal s1,s2: Bit;
begin Les dclarations de composants peuvent galement tre places dans un
s1 <= not a after 2 ns; package, nous n'aborderons pas cette possibilit ici.
P1: porteET port map(s1, s2, s);
P2: porteNAND port map(s1, b, s2);
end Struct;

Alternativement, une unit de conception spcifique peut tre utilise (il


est d'ailleurs prfrable de procder ainsi) :

architecture Struct of Exemple is


component porteET port(x,y: in bit; s: out bit);
end component;
component porteNAND port(x,y: in bit; s: out bit);
end component;
signal s1,s2: Bit;
begin
s1 <= not a after 2 ns;
P1: porteET port map(s1, s2, s);
P2: porteNAND port map(s1, b, s2);
end Struct;
configuration Config1 of Exemple is
for Struct -- pour l'architecture Struct de Exemple
for P1: porteET use entity work.porteET(RTL);
end for;

13 14
III. VHDL. INSTRUCTIONS CONCURRENTES SIMPLES - stable(t) : signal implicite de type boolen, qui prend la valeur false
chaque fois qu'un vnement s'est produit sur le signal depuis un
III.1 Signaux et variables temps infrieur t

Nous avons dj mentionn que les architectures VHDL ne contiennent


que des instructions concurrentes. Ces instructions mettent en jeu des
signaux.

L'une de ces instructions, le process (voir plus loin), contient des


instructions squentielles qui peuvent utiliser des variables. Il s'agit de
variables au sens classique des langages de programmation. Une variable
est dclare grce au mot-cl variable, elle a un type et une valeur.
L'instruction d'affectation de variable est note :=

Un signal reprsente un lment de connexion (fil, bus,), et peut dans


III.2 Instructions concurrentes
certains cas reprsenter un registre. Ce concept est donc plutt li la
notion d'instruction concurrente. Un signal est dclar grce au mot-cl III.2.1 Affectation concurrente de signal
signal, il a un type, une valeur courante, ainsi qu'un historique. Variables
Cette instruction est essentiellement utilise dans le style dataflow, sa
et signaux peuvent changer des valeurs, pourvu que leurs types soient
syntaxe simplifie est la suivante :
les mmes.
signal <= exp1 after expression-temporelle1,
Des attributs sur signaux sont prdfinis, ils correspondent des exp2 after expression-temporelle2,
... ;
caractristiques dynamiques du signal auquels ils se rattachent.
L'utilisation d'un attribut se fait de la faon suivante : La clause after peut tre absente. Dans le cas o l'on spcifie plusieurs

nom-du-signal'nom-attribut valeurs affecter successivement, ces clauses doivent tre prsentes et


les expressions temporelles doivent correspondre des temps croissants,
Voyons quelques attributs, assez couramment utiliss (illustrs sur un
par exemple :
exemple ci-dessous) :
x <= 3 after 1 ns, 0 after 3 ns, 2 after 7 ns;
- event : boolen, qui vaut true si un vnement vient de se produire
sur le signal (changement de valeur)
Attention, place hors d'un process, cette instruction est concurrente. En
- delayed(t) : signal implicite, identique au signal auquel l'attribut est
particulier, l'ordre dans lequel ces instructions sont crites dans le corps de
appliqu, retard d'un temps t
l'architecture n'a aucune importance.

15 16
III.2.2 Affectations conditionnelles Elle permet le choix de la source du signal suivant la valeur d'une
expression. Chaque expi peut prendre la mme forme que ci-dessus.
L'affectation conditionnelle se prsente comme suit :
Chaque choixi peut tre de la forme :
signal <= exp1 when condition1 else
exp2 when condition2 else un-choix1 | un-choix2 | un-choix3 ...
...
expN-1 when conditionN-1 else expN; Enfin choixN peut prendre la valeur others, ce qui signifiera "dans tous
les autres cas".
Elle permet le choix de la source du signal, la source choisie correspond
la premire condition boolenne value vrai. Le dernier else est Exemple :
obligatoire. Chaque expi peut tre de la forme : entity Decoder is
port(Sel: in Bit_vector(2 downto 0) ;
expr1 after expr-temp1, expr2 after expr-temp2,... Dout: out Bit_vector(7 downto 0));
constant Delay: Time := 5 ns;
Une expression expi gale null signifie qu'il n'y a pas de changement end Decoder;
de valeur.
architecture Selection of Decoder is
begin
Exemple : with Sel select
Dout <= "00000001" after Delay when "000",
entity DFF is
"00000010" after Delay when "001",
port(Preset, Clear, Cl, D: in Bit;
"00000100" after Delay when "010",
Q, QBar: out Bit);
"00001000" after Delay when "011",
constant Delay: Time := 5 ns;
"00010000" after Delay when "100",
end DFF;
"00100000" after Delay when "101",
architecture Simple of DFF is
"01000000" after Delay when "110",
signal Q1: Bit;
"10000000" after Delay when "111";
begin
end Selection;
Q1 <= '0' after Delay when Clear = '1' else
'1' after Delay when Preset = '1' else
D after Delay when Cl = '1' else III.2.3 Instanciation de composant
Q1;
Q <= Q1; Cette instruction est utilise dans le style structurel. Elle permet la
QBar <= not Q1;
description hirarchique de systmes matriels. Lors de l'instanciation d'un
end Simple;
composant, ports effectifs et paramtres gnriques effectifs doivent tre
L'affectation slective a la syntaxe suivante : spcifis, de la faon suivante :

with expression select tiquette : nom


signal <= exp1 when choix1, generic map (paramtres-gnriques-effectifs)
exp2 when choix2, port map (ports-effectifs);
...
expN when choixN; Pour l'association paramtres formels/paramtres effectifs (resp. ports

17 18
formels/ports effectifs), on peut soit lister les paramtres (resp. les ports) entity Adder is port(a,b:in bit_vector(7 downto 0);
c:in bit;
effectifs dans le bon ordre, soit lister des expressions de la forme s:out bit_vector(8 downto 0));
end Adder;
paramtre-formel => paramtre-effectif
architecture struct of Adder is
(resp. port-formel => port-effectif) dans un ordre quelconque. component full_adder
port(X,Y,Cin:in bit; Sum,Cout:out bit);
Toute instanciation de composant doit tre prcde de la dclaration du end component;
signal carry:bit_vector(0 to 8);
composant (soit dans la partie dclarative de l'architecture, soit dans un begin
package). Voir la section II.3 pour les configurations. fadd:for I in 0 to 7 generate
for all:full_adder
use entity work.full_adder(Dataflow_view);
III.2.4 Generate
begin
Nous ne parlerons que de l'instruction for..generate, qui permet f1:full_adder port map(a(I),b(I),carry(I),
s(I),carry(I+1));
l'laboration itrative d'instructions concurrentes. Sa syntaxe est la end generate;
carry(0) <= c;
suivante : s(8) <= carry(8);
for index in intervalle generate end struct;
instructions-concurrentes
end generate; et la version N bits, utilisant un paramtre gnrique :

entity AdderN is generic(N:positive);


L'intervalle parcouru est born par des valeurs constantes ou paramtres port(a,b:in bit_vector(N-1 downto 0);
c:in bit;
gnriques. Comme toute instruction concurrente, une instruction s:out bit_vector(N downto 0));
generate peut avoir une tiquette. Voyons comment elle peut s'associer end AdderN;
l'instruction d'instantiation de composant. architecture struct of AdderN is
component full_adder
port(X,Y,Cin:in bit; Sum,Cout:out bit);
Exemple : additionneur retenue propage, version 8 bits end component;
signal carry:bit_vector(0 to N);
A B A1 B A n-1 B n-1
C 0 0 1 C n-1 begin
0
fadd:for I in 0 to N-1 generate
for all:full_adder
use entity work.full_adder(Dataflow_view);
begin
f1:full_adder port map(a(I),b(I),carry(I),
s(I),carry(I+1));
end generate;
C1 C carry(0) <= c;
2
s(N) <= carry(N);
S0 S S n-1 Sn end struct;
1

19 20
III.2.5 Block (positive)
- les rels (real)
Le block permet de regrouper un ensemble d'instructions concurrentes, il
- les caractres (character) et les chanes de caractres (string)
peut contenir une partie dclarative. On peut lui associer une expression
- les boolens (boolean) : false, true
de garde (boolenne). Dans ce cas, le rle du block est de permettre de
- les bits (bit) : '0', '1'
contrler l'affectation des signaux gards par cette expression (le mot-cl
- les vecteurs de bits (bit_vector), par exemple B"1101"
guarded apparat dans l'instruction d'affectation). La syntaxe est :

tiquette : block (expression-de-garde) Un type utilisateur peut tre dfini de la faon suivante :
partie-dclarative
begin Type Nom is Dfinition;
instructions-concurrentes
end block; On peut notamment dfinir des types intervalles (range) et tableaux (array).
Les tableaux peuvent avoir plusieurs dimensions, chacune d'elles tant
Exemple :
d'un type discret, ils peuvent tre contraints (bornes spcifies) ou non
entity Cl_DFF is port(Clock, D: in Bit;
Q, QBar: out Bit); contraints (bornes non spcifies).
end Cl_DFF;
architecture RTL of Cl_DFF is Exemples :
begin Type Byte is range -128 to 127;
B: block(Clock'event and Clock = '1') Type Bit_position is range 7 downto 0;
begin
Q <= guarded D; Type Word is array(15 downto 0) of Bit;
QBar <= guarded not D;
end block; Type Column is range 1 to 80;
end RTL; Type Row is range 1 to 24;
Type Matrix is array(Row, Column) of Boolean;

III.3 Complment - Types et oprateurs Type Bit_vector is


array(Natural range <>) of Bit;
Quelques conventions lexicales : les identificateurs sont forms de lettres, Type String is
array(Positive range <>) of Character;
chiffres et "_". Ils commencent par une lettre, deux "_" ne peuvent pas se
suivre, il n'y a pas de distinction entre les majuscules et les minuscules. Il est possible de faire rfrence un lment d'un tableau ou toute une
Les entiers peuvent tre crits en base 10, 2, 8 ou 16, par exemple "tranche" (pour un tableau unidimensionnel), par exemple :
2#00110#, 8#3607#, 16#07FF#. Les caractres sont placs entre quotes,
signal M: Matrix;
et les chanes de caractres entre guillemets.
ici M est la matrice entire et M(20,35) est un lment
Les principaux types prdfinis sont :
Type Byte is array(7 downto 0) of Bit;
- les entiers (integer), les entiers naturels (natural), les entiers positifs signal Octet: Byte;
21 22
Octet(6 downto 4) est une "tranche" de 3 lments du tableau Octet. III.4 Simulation - Entits de test
Enfin, notons la possibilit de dfinir des types numrs, par exemple : La simulation ncessite pralablement la dfinition d'une entit de test,
Type three_level_logic is ('0','1', 'Z'); sans port. Celle-ci comporte une instance du composant que l'on veut
tester, et des instructions qui spcifient les jeux d'essai souhaits (valeurs
Les oprateurs de VHDL sont les suivants, rangs par catgorie : affecter aux ports d'entre). Lors de la simulation, on observera le
- oprateurs arithmtiques : comportement des ports de sortie, voire des signaux internes.
+ plus unaire , addition Exemple :
- moins unaire, soustraction entity testExemple is
*, / multiplication, division end testExemple;

rem,mod reste de la division entire architecture test1 of testExemple is


(x rem y a le signe de x, et x mod y le signe de y) component Exemple
port(a,b:in bit; s:out bit);
** puissance end component;
abs valeur absolue signal x,y,w: bit;
for E:Exemple use entity work.Exemple(Struct);
-- ou
- oprateurs relationnels : -- for E:Exemple use configuration work.Config1;
begin
= gal E: Exemple port map(x,y,w);
/= diffrent x <= '1' after 4 ns, '0' after 20 ns;
y <= '1' after 4 ns, '0' after 35 ns;
<, <= infrieur, infrieur ou gal end test1;
>, >= suprieur, suprieur ou gal
Remarque : on rencontre frquemment, la place du type bit, les types
- oprateurs logiques : std_logic ou std_ulogic. Ce sont des types dfinis dans le standard
and et IEEE 1164, qui contiennent 9 valeurs symboliques :
or ou
type std_ulogic is ('U', -- Uninitialized
nand non et 'X', -- Forcing Unknown
'0', -- Forcing 0
nor non ou
'1', -- Forcing 1
xor ou exclusif 'Z', -- High Impedance
'W', -- Weak Unknown
not ngation 'L', -- Weak 0
'H', -- Weak 1
- oprateur de concatnation (pour les caractres, chanes de '-' -- Don't care
);
caractres, bits, et tous tableaux uni-dimensionnels) : &
23 24
subtype std_logic is resolved std_ulogic; IV. RAPPELS - CIRCUITS COMBINATOIRES
Les descriptions contiennent alors les directives suivantes :
Rappelons tout d'abord quelques notions lmentaires concernant la
library ieee;
use ieee.std_logic_1164.all; conception de circuits combinatoires. Un circuit combinatoire correspond
la mise en uvre d'une expression boolenne, et est form de portes
logiques.

IV.1 Algbre de Boole

L'analyse du comportement des circuits logiques repose sur l'algbre de


Boole (de George Boole, mathmaticien anglais, 1815-1864), dans laquelle
les variables ne peuvent prendre que les valeurs binaires 0 et 1.

Chaque porte logique (NON, ET, OU, NAND, NOR, XOR) ralise une
fonction qu'on caractrise gnralement par une table de vrit qui donne
la valeur de sa sortie en fonction des valeurs des entres.

Exemples :
x z = not(x)
x z 0 1
1 0

x y z = x and y
x 0 0 0
z
y
0 1 0
1 0 0
1 1 1

Les expressions logiques construites base des oprateurs NON, ET, et


OU, peuvent tre simplifies grce un certain nombre de lois de l'algbre
de Boole. Ceci peut notamment permettre de rduire le nombre de portes
logiques dans un circuit et donc de minimiser son cot.

25 26
Ces lois sont les suivantes : de vrit pour lesquelles la sortie vaut 1. Dans chaque produit, les
variables d'entre qui ont la valeur 1 sont prises telles quelles et les
commutativit : a.b=b.a a+b=b+a
autres sont complmentes.
associativit : (a.b).c = a.(b.c) (a+b)+c = a+(b+c)
distributivit : a+(b.c) = (a+b).(a+c) a.(b+c) = (a.b)+(a.c) Obtention d'un produit de sommes : on considre les lignes de la table

idempotence : a.a=a a+a=a de vrit pour lesquelles la sortie vaut 0. Dans chaque somme, les

lois d'identit : 1.a=a 0+a=a variables d'entre qui ont la valeur 0 sont prises telles quelles et les

lois de nullit : 0.a=0 1+a=1 autres sont complmentes.

lois d'inversion : a . not(a) = 0 a + not(a) = 1


3. si possible, on simplifie cette expression, par exemple en utilisant les
lois d'absorption : a. (a + b) = a a + (a . b) = a
lois de l'algbre de Boole vues prcdemment.

lois de De Morgan : not(a . b) = not(a) + not(b)


4. on construit le circuit en utilisant les portes logiques correspondant aux
not(a + b) = not(a) . not(b)
oprateurs de l'expression, ou en utilisant une bibliothque donne de
portes logiques.
IV.2 Synthse de circuits combinatoires Par exemple, dans le cas o on obtient les expressions
y = (c and d) or (e and f)
On se pose le problme suivant : partir de l'expression informelle de la
z = (a and b) or y
fonction logique qu'on veut raliser, comment faire la synthse du circuit
le circuit correspondant est naturellement le suivant :
correspondant ?
a x
b z
On procde de la faon suivante :
c
1. on exprime, pour chaque combinaison possible des entres, la valeur d
e y
que l'on souhaite avoir sur la sortie, c'est dire qu'on construit la table f
de vrit (une alternative consiste utiliser le modle des tables de
Mais dans le cas o on dispose d'une bibliothque de portes NAND et
Karnaugh).
NOT, on pourrait obtenir :
2. on en drive une expression algbrique, soit sous forme d'une somme a x z
b
de produits ("minterms") soit sous forme d'un produit de sommes
c
("maxterms"). d
e
Obtention d'une somme de produits : on considre les lignes de la table f y

27 28
car y = (c and d) or (e and f)
= (c nand d) nand (e nand f) 4. Circuit :

et z = (a and b) or y A
S
= (a nand b) nand (not y) B C

En effet, les fonctions NOR et NAND sont des fonctions universelles


Ces principes de base vont s'tendre au cas des circuits squentiels (voir
(permettent chacune d'exprimer la ngation, le ET et le OU), et les portes
plus loin dans le cours).
NOR et NAND sont petites et rapides.

Exemple de synthse : tant donnes 3 entres A, B et C, la fonction


qu'on souhaite raliser pour la sortie S est la suivante : S ne vaut 1 que
lorsqu'un nombre impair d'entres est 1.

1. Construction de la table de vrit :

A B C S
0 0 0 0
0 0 1 1
0 1 0 1
0 1 1 0
1 0 0 1
1 0 1 0
1 1 0 0
1 1 1 1

2. Construction de l'expression associe sous forme d'une somme de


produits :

S = (not A).(not B).C + (not A).B.(not C) + A.(not B).(not C) + A.B.C


3. Transformation (simplification) :

S = (not A).((not B).C + B.(not C)) + A.(B.C + (not B).(not C))


= (not A).(B xor C) + A.(B equ C)
= (not A).(B xor C) + A.(not(B xor C))
= A xor B xor C

29 30
V. VHDL. INSTRUCTIONS COMPORTEMENTALES V.2 Instructions squentielles

V.1 Instruction process V.2.1 Wait

Le process est une instruction concurrente qui contient des instructions Cette instruction permet de suspendre l'excution d'une instruction
squentielles, grce auxquelles des descriptions comportementales ou process. Elle peut figurer n'importe o dans le process. Les instructions du

algorithmiques peuvent tre ralises. Des variables peuvent tre process s'excutent en squence jusqu' la premire instruction wait. Le
dclares localement au process, qui accde par ailleurs aux signaux de processus est alors suspendu jusqu' ce que la condition de ractivation

l'architecture. Plusieurs processes peuvent tre actifs simultanment, du wait soit satisfaite. A ce moment, le process est ractiv et les

comme nous le verrons par la suite, mais plusieurs processes ne peuvent instructions s'excutent jusqu' la prochaine instruction wait, et ainsi de
modifier un mme signal. Un process se prsente de la faon suivante : suite.
Elle peut prendre la forme :
process (liste-de-sensibilit)
dclarations wait on liste-signaux until condition for temps;
begin
instructions-squentielles Dans le cas wait on liste-signaux; le process est suspendu jusqu'
end process;
l'arrive d'un vnement sur l'un des signaux.
ou
Une instruction de la forme wait until condition; suspend le process
process
dclarations jusqu' ce que condition devienne vraie.
begin
Enfin, si la clause for temps est prsente, alors temps donne le temps
instructions-squentielles
end process; maximum de suspension du process.

La ractivation du process est conditionne par le contenu de sa liste de Exemple :


sensibilit, ou par ses instructions wait. And_process : process
begin
wait on A,B until Enable = '1';
Dans le premier cas, la liste-de-sensibilit est une liste de
T <= A and B after 5 ns;
signaux. Le process est ractiv chaque fois qu'au moins l'un de ces end process;
signaux subit une mise jour de sa valeur. Les instructions-
Nous nous intressons essentiellement ici aux systmes synchroniss par
squentielles sont alors excutes, puis le process est nouveau
horloge. Nous ne considrerons donc, pour les chargements de registres,
suspendu. Le process ne doit contenir aucune instruction wait.
que des processes dont la condition de ractivation est un front montant de
Dans le deuxime cas, le process doit contenir au moins une instruction
l'horloge de synchronisation, ce qui s'exprime par exemple par :
wait, dont nous allons parler ci-dessous.
wait until clk'event and clk='1';
31 32
clk tant un signal de type bit. Cette instruction sera la seule instruction q1 <= q0 xor q1;
end process;
wait du process et sera place comme premire instruction. -- mise jour de la sortie
S <= q0 and q1;
end Dataflow;
Pour les parties combinatoires, nous rencontrerons galement des
instructions concurrentes d'affectations de signaux, sans retard explicite
L'entit de test utilise pour simuler un tel circuit devra faire apparatre une
(clause after). Notons qu'une instruction concurrente d'affectation de signal
instruction pour la gnration de l'horloge, par exemple :
est quivalente un process qui ne contient que cette instruction et dont la
liste de sensibilit contient tous les signaux apparaissant en partie droite, entity testCompt is
end testCompt;
par exemple :
architecture test1 of testCompt is
Output <= A or B; component Compt
port(clk : in Bit; S : out Bit);
est quivalente : end component;
signal ck,z: bit;
process(A,B) for C:Compt use entity work.Compt(Dataflow);
begin begin
Output <= A or B; C: Compt port map(ck,z);
end process ; ck <= not ck after 10 ns;
end test1;
Exemple : prenons le petit exemple d'un compteur modulo 4 (nous
parlerons de sa synthse plus loin) V.2.2 Instructions conditionnelles

Des conditionnelles peuvent tre exprimes au moyen des instructions if


q0 q1
s et case. La syntaxe de l'instruction if est la suivante :

if condition1 then instructions1


elsif condition2 then instructions2
elsif condition3 then instructions3
entity Compt is port(clk : in Bit; ...
S : out Bit); else instructionsN
end Compt; end if;
architecture Dataflow of Compt is Les clauses elsif et else sont optionnelles. Les conditioni sont des
signal q0,q1:Bit;
begin expressions boolennes et les instructionsi des suites d'instructions
-- chargement des registres sur front montant
process squentielles.
begin
wait until clk'event and clk='1';
q0 <= not q0;

33 34
Exemple : V.2.3 Boucles
And_behav: process
begin Nous finirons par les instructions itratives. D'autres types de constructions
if In1 = '0' or In2 ='0' then squentielles existent dans le langage, notamment les fonctions et
Output <= '0' after 5 ns;
elsif In1 = 'X' or In2= 'X' then procdures, nous ne les tudierons pas.
Output <= 'X' after 5 ns;
else Output <= '1' after 5 ns;
L'instruction loop peut prendre la forme while..loop ou for..loop,
end if;
wait on In1, In2; ce qui se traduit syntaxiquement par :
end process;
while condition loop
instructions-squentielles
L'instruction case se prsente comme suit :
end loop;
case expression is ou
when choix1 => instructions1
when choix2 => instructions2 for identificateur in intervalle loop
... instructions-squentielles
when choixN => instructionsN end loop;
end case;
La premire forme permet de faire un traitement itratif tant que
Les instructionsi sont des instructions squentielles. L'expression
condition est vraie. La seconde forme permet de faire un traitement
doit tre d'un type discret (ou une matrice uni-dimensionnelle). Toutes les
itratif en faisant parcourir l'indice de boucle identificateur un
valeurs possibles pour expression doivent tre considres, dans
intervalle discret.
exactement une clause when. Chaque choixi peut tre de la forme :

un-choix1 | un-choix2 | un-choix3 ... Dans le cas de l'instruction for..loop, l'indice de boucle
identificateur n'a pas tre dclar, et n'est connu qu' l'intrieur de
Enfin choixN peut tre others, ce qui permet de considrer globalement
la boucle. L'intervalle discret intervalle peut tre croissant ou
tous les cas restants.
dcroissant. Il est frquent d'utiliser dans ce contexte les attributs sur types
Exemple : range et reverse_range.
Selection: process
begin Divers attributs sur types sont prdfinis, ils correspondent des
case X is
when 1 => Output <= 0; caractristiques du type auquel ils se rattachent. L'utilisation d'un attribut se
when 2 | 3 => Output <= 1;
fait de la faon suivante :
when others => Output <= 2;
end case; nom-du-type'nom-attribut
wait on X;
end process; ou

35 36
identificateur-objet-du-type'nom-attribut VI. CIRCUITS SEQUENTIELS SYNCHRONES
s'il s'agit d'un type tableau.
VI.1 Machine de Mealy
Parmi les attributs sur types tableaux se trouvent les attributs suivants : Les circuits combinatoires ne permettent pas de mmoriser des valeurs.
ime
- left(n) : borne gauche de la n dimension En gnral, un systme numrique est form d'une partie combinatoire et
ime
- right(n) : borne droite de la n dimension d'une partie faite de dispositifs mmoire :
ime
- range(n) : plage de variation des indices dans la n dimension
(range dans le cas d'une seule dimension)
- reverse_range(n) : plage de variation, l'envers, des indices dans la
ime
n dimension (reverse_range dans le cas d'une seule dimension)

Exemple :
signal A,B,C : bit_vector(0 to 7);
...
process
begin
for i in A'range loop Voyons ce qui compose un tel systme :
C(i) <= A(i) and B(i);
end loop; - des entres (primaires)
...
end; - des sorties (primaires)
- des lments mmorisants, pour mmoriser l'tat
- chaque top d'horloge, les sorties et l'tat sont mis jour. Les
fonctions correspondantes sont caractrises par la partie
combinatoire.

Cette figure correspond en fait une machine de Mealy, c'est dire que
- l'tat suivant dpend de la valeur courante des entres et de la valeur
courante de l'tat,
- la valeur courante des sorties dpend galement de la valeur courante
des entres et de la valeur courante de l'tat.

37 38
Q = { Q0, Q1 }, q0 = Q0
2
I = {0,1}

O = {0,1}
http://www.groupes.polymtl.ca/circuits-logiques/help/Chapitre06.htm 2
t : { Q0, Q1 } x {0,1} { Q0, Q1 }
2
f : { Q0, Q1 } x {0,1} {0,1}
Plus prcisment, une machine de Mealy est un tuple :

(Q, I, O, t, f, q0) VI.2 Machine de Moore


o Q ensemble des tats
Dans le cas d'une machine de Moore, l'tat suivant dpend toujours de la
I ensemble des entres
valeur courante des entres et de la valeur courante de l'tat, mais la valeur
O ensemble des sorties
courante des sorties ne dpend que de la valeur courante de l'tat.
t fonction de transition, t : Q x I Q
f fonction de sortie, f : Q x I O
q0 tat initial

Exemple : additionneur squentiel pour deux vecteurs an ... a1 a0 et bn ... b1


b0 entrs en squence, partir du bit de poids faible. L'tat sert
mmoriser la dernire retenue :
Q0 : dernire retenue 0 (tat initial)
Q1 : dernire retenue 1

http://www.groupes.polymtl.ca/circuits-logiques/help/Chapitre06.htm

39 40
Plus prcisment, une machine de Moore est un tuple : VI.3 Descriptions VHDL d'automates
(Q, I, O, t, f, q0)
La modlisation d'une machine d'tats finis (FSM) peut se faire de diverses
o Q ensemble des tats faons en VHDL. Nous allons dj voquer certaines conventions qu'il est
I ensemble des entres prfrable d'utiliser pour que la machine soit synthtisable. Notons
O ensemble des sorties toutefois que, bien qu'il existe un document de standardisation pour la
t fonction de transition, t : Q x I Q synthse au niveau RTL (IEEE Std 1076.6-1999 IEEE Standard for VHDL
f fonction de sortie, f : Q O Register Transfer Level Synthesis), le sous-ensemble du langage reconnu
q0 tat initial et les conventions adoptes peuvent varier d'un outil l'autre.

Exemple : compteur 2 bits avec une entre de contrle C, i.e. La reprsentation des tats symboliques donne lieu la dfinition d'un type
comportement 00 01 10 11 00 pourvu que l'entre C soit 1. numr. Un signal spcifique est utilis pour mmoriser l'tat courant de
Il y a 4 tats possibles, qui correspondent aux valeurs possibles des sorties la machine, un deuxime signal peut tre utilis pour le calcul de l'tat
S1 S0 suivant.

Q1 La modlisation d'une FSM correspond au codage de la fonction de


1 1
S1S0 = 01 0 transition et de la fonction de sortie :
S1S0 = 10 - les sorties sont des lments combinatoires, un ensemble
S1S0 = 00
Q0 0 Q2 0 d'instructions concurrentes d'affectations de signaux (ou le process
correspondant) sera utilis. Ces instructions ne doivent pas faire
Q3 1
1 apparatre de retards explicites. Pour ne pas prendre implicitement
0
S1S0 = 11
un caractre mmorisant sans contrle de l'horloge, ces signaux
doivent tre affects dans toutes les branches des instructions
Q = { Q0, Q1, Q2, Q3 }, q0 = Q0
conditionnelles
I = {0,1}
- un process synchronis par horloge traduit la mise jour du registre
2
O = {0,1} d'tat. Calcul de l'tat suivant (fonction combinatoire) et mise jour
t : { Q0, Q1, Q2, Q3 } x {0,1} { Q0, Q1, Q2, Q3 } du registre d'tat peuvent se trouver dans deux processes distincts
2
f : { Q0, Q1, Q2, Q3 } {0,1} - un reset asynchrone est gnralement autoris, pour placer
l'automate dans son tat initial, voire initialiser d'autres registres
(indiquer dans la description des valeurs initiales pour les signaux n'a

41 42
pas de sens pour la synthse). end if;
when S2 =>
Par ailleurs, les configurations ne sont gnralement pas admises, les if X='0' then nextstate <= S3;
else nextstate <= S5;
rels et matrices multi-dimensionnelles non plus, et la plupart des end if;
when S3 => nextstate <= INIT;
oprateurs sont admis, sous quelques restrictions.
when S4 => nextstate <= S5;
when S5 => nextstate <= INIT;
Exemple : considrons un systme reconnaisseur de code BCD end case;
end process;
-- mise jour de l'tat
/1 process (reset, clk)
begin
0/1 -- si reset asynchrone (actif haut)
0/1 S2 S3 if (reset = '1') then state <= INIT;
/1 -- sur front montant
init S1 1/1
1/0 elsif (clk'event and clk='1') then
1/1 state <= nextstate;
/1
S4 S5 end if;
0/1 end process;
-- mise jour de la sortie
process (state, X) -- machine de Mealy
Il est usuellement dcrit comme suit, avec trois processes (calcul de l'tat begin
if (state=S5) and (X='1') then Z <= '0';
suivant, mise jour de l'tat, mise jour des sorties). Un signal
else Z <= '1';
supplmentaire nextstate sert au calcul de l'tat suivant. Un signal de end if;
end process;
reset a galement t considr dans cette description. end Auto;

entity DCB is
port(X,reset,clk: in std_logic; Z: out std_logic);
end DCB;

architecture Auto of DCB is


-- tats de l'automate
type States is (INIT,S1,S2,S3,S4,S5);
signal state, nextstate: States;
begin
-- calcul de l'tat suivant (process combinatoire)
process (state, X)
begin
case state is
when INIT => nextstate <= S1;
when S1 =>
if X='0' then nextstate <= S2;
else nextstate <= S4;

43 44
VII. FLOT DE CONCEPTION ET SYNTHESE - par synthse logique, une description de type "netlist" (interconnexion
de portes et registres) peut tre obtenue. A noter que la description
VII.1 Gnralits synthtise peut son tour tre simule, sur les mmes jeux d'essai
VII.1.1 Flot de conception que ceux utiliss sur la description initiale, afin de vrifier que les

Une vue typique du flot de conception d'ASIC peut se prsenter comme rsultats de simulation sont compatibles

suit : - le schma final pourra tre obtenu par placement et routage.

VII.1.2 Synthse

Parmi les outils de synthse, on distingue notamment :


- la synthse de haut niveau (high-level synthesis, HLS) ou synthse
comportementale, qui prend en entre une description algorithmique
du systme (souvent en C) et produit une description d'un circuit qui
implmente ce comportement, typiquement au niveau RTL
- la synthse logique qui permet de convertir au niveau portes logiques
une description donne au niveau RTL. Il pourra s'agir de synthse
ASIC (Application Specific Integrated Circuit), utilisant une biblio-
thque de cellules logiques, ou de synthse sur FPGA (Field
Programmable Gate Array) via gnration d'un bitstream.

http://asicdesign2vlsi.blogspot.fr/2009/03/asic-desin-flow.html
VII.2 Synthse ASIC

Il fait intervenir divers outils de CAO de circuits. Globalement la dmarche VII.2.1 VHDL pour la synthse

est la suivante : Le sous-ensemble VHDL pour la synthse logique est dfini dans le
- partir d'une spcification du comportement attendu (qui peut tre standard IEEE Std 1076.6 IEEE Standard for VHDL Register Transfer
associe une description comportementale), une description RTL Level Synthesis. Les outils de synthse peuvent toutefois adopter des
peut tre obtenue. Cette description, exprime l'aide d'un langage de conventions variables.
description de matriel comme VHDL, pourra servir de rfrence pour Note. De nombreux dtails sur les styles de codage peuvent aussi tre
la suite du flot trouvs dans le livre "VHDL Coding Styles and Methodologies", Ben Cohen
- elle peut tre simule sur divers jeux d'essai pour tenter une (Springer).
vrification fonctionnelle Rsumons quelques caractristiques et contraintes du sous-ensemble
45 46
pour la synthse : Les instructions concurrentes conditionnelles d'affectation de signal
(when, with..select), ou process "combinatoire" correspondant, vont pouvoir
Tous les types ne sont pas autoriss, notamment :
induire la prsence de multiplexeurs.
- Les rels ne sont pas autoriss.
Attention, l'oubli d'alternative(s) dans des instructions conditionnelles va
- Les bits, boolean, std_logic, et vecteurs associs sont autoriss.
provoquer de la mmorisation, via latches.
- Les tableaux une dimension sont reconnus, mais les tableaux multi-
Exemple :
dimensionnels ne le sont gnralement pas.
process(a,b,sel)
Exemple : une RAM de mots de 32 bits serait plutt dfinie comme suit begin
case sel is
type Word is array (31 downto 0) of bit; when "001" => x <= a;
type RAM is array (1023 downto 0) of Word; when "010" => x <= b;
when others => null;
- Les entiers et intervalles sont autoriss. Par dfaut, les entiers seront end case;
synthtiss en vecteurs 32 bits. Les intervalles induiront des vecteurs de la end process;
plus petite taille ncessaire au codage.
Les signaux affects dans des processes avec condition de rveil
Exemple : 4 bits pour coder integer range 0 to 15 exprimant un front (montant) d'horloge sont interprts comme des flip-

- Les types numrs seront gnralement utiliss pour reprsenter des flops (comme vu en sections V et VI).

valeurs de l'tat symbolique d'un automate, le codage utilis pour la


VII.2.2 Principe pour la synthse de FSM
synthse pourra tre spcifi par l'utilisateur (voir plus loin).
La synthse (ASIC) d'un circuit squentiel synchrone partir d'une FSM se
Les valeurs initiales qui peuvent tre associes des dclarations de fait par les tapes suivantes :
signaux seront ignores
1. on dessine le diagramme de transitions d'tats et on construit les tables
Timing : les expressions qui pourraient dnoter des retards ne sont pas associes, chaque table doit prendre en compte toutes les
admises (clauses after, instructions wait for) combinaisons d'entres possibles.

2. la partie combinatoire du circuit est dduite de ces tables, en drivant


Par ailleurs, la forme utilise pour reprsenter un process peut tre
des expressions algbriques (soit sous forme de sommes de produits
fondamentale pour son interprtation en synthse. Rappelons quelques
soit sous forme de produits de sommes) que l'on simplifie si possible. Il
points fondamentaux dj tudis :
faudra pralablement avoir dcid d'un codage pour l'tat.
Les instructions concurrentes non conditionnelles d'affectation de signal
3. pour la partie mmorisante : le codage choisi pour l'tat dtermine le
(ou process "combinatoire" correspondant) reprsentent un bloc combina-
nombre de flip-flops ncessaires, k bits de variables d'tat permettent
toire.
47 48
k
de coder jusqu' 2 tats. Le codage est trivial ici (Q0 associ 0, et Q1 associ 1), d'o :

Dans le cas d'un codage binaire classique, nbff = log2 (nbtats). On peut a b q q' s
0 0 0 0 0
donc remarquer que doubler le nombre d'tats possibles revient
0 0 1 0 1
rajouter 1 flip-flop.
0 1 0 0 1
Nous voquerons plus loin les codages de Gray et One Hot.
0 1 1 1 0
Remarques : 1 0 0 0 1
1 0 1 1 0
- le circuit ne doit pas contenir de "boucles combinatoires", i.e. toute
1 1 0 1 0
boucle structurelle doit contenir au moins 1 flip-flop,
1 1 1 1 1
- la priode d'horloge sera dtermine soigneusement, grce au chemin
critique. ce qui donne :
q' = not(a).b.q + a.not(b).q + a.b.not(q) + a.b.q = (a xor b).q + a.b
Exemple 1 : additionneur srie (vu section VI.1) s = not(a).not(b).q + not(a).b.not(q) + a.not(b).not(q) + a.b.q
Diagramme de transition :

Tables de transition et de sortie :


Exemple 2 : compteur 2 bits avec une entre de contrle C, i.e.
a b q q' s comportement 00 01 10 11 00 pourvu que l'entre C soit 1
0 0 Q0 Q0 0 (vu section VI.2).
0 0 Q1 Q0 1
0 1 Q0 Q0 1 Q1
1 1
S1S0 = 01 0
0 1 Q1 Q1 0
S1S0 = 10
1 0 Q0 Q0 1 Q0
S1S0 = 00 0 Q2 0
1 0 Q1 Q1 0
1 1 Q0 Q1 0 1 Q3 1
0
1 1 Q1 Q1 1 S1S0 = 11

49 50
Tables de transition et de sortie : q = q1 q0 S1 S0
00 00
c q q'
0 Q0 Q0 01 01
10 10
0 Q1 Q1
11 11
0 Q2 Q2
0 Q3 Q3 ce qui donne comme quations :
1 Q0 Q1
q0' = not(c).not(q1).q0 + not(c).q1.q0 + c.not(q1).not(q0) + c.q1.not(q0)
1 Q1 Q2 = not(c).q0 + c.not(q0)
1 Q2 Q3 q1' = not(c).q1.not(q0) + not(c).q1.q0 + c.not(q1).q0 + c.q1.not(q0)
1 Q3 Q0 = not(c).q1 + c.(q0 xor q1)
S0 = not(q1).q0 + q1.q0 = q0
q S1 S0
S1 = q1.not(q0) + q1.q0 = q1
Q0 00
Q1 01 C
q0
Q2 10 S0

Q3 11

q1
On choisit alors un codage, par exemple : Q0 = 00, Q1 = 01, Q2 = 10, et S1
Q3 = 11. Les tables deviennent :

c q = q1 q0 q'
0 00 00 VII.2.3 Codages
0 01 01
0 10 10 Revenons sur les diffrents codages de l'tat. Dans le codage binaire

0 11 11 classique, les tats sont associs aux squences binaires correspondant


1 00 01 aux entiers 0, 1, 2, Les avantages sont une minimisation du nombre de
1 01 10 flips-flops (puisque log2 (nbtats) flips-flops suffisent), donc une optimisation
1 10 11 de la surface du circuit. Mais ce codage prsente aussi des inconvnients :
1 11 00
plusieurs bits d'tat changent chaque top d'horloge, la partie combina-
toire peut tre plus complexe, et la consommation requise plus importante.

51 52
Une alternative est le codage de Gray : la numrotation est similaire celle - Le codage binaire donne le rsultat suivant :
du codage binaire, mais l'objectif est d'associer des codes de Gray
q q' s
"adjacents" des tats conscutifs. Par exemple, sur 3 bits :
00 01 0

0 000 01 10 0
1 001 10 11 0
2 011
3 010 11 00 1
4 110
q0' = not(q0).not(q1) + not(q0).q1 = not(q0)
5 111
6 101 q1' = q0 xor q1
7 100
s = q0.q1
Le nombre de flips-flops ncessaires est le mme que pour le codage
binaire. La puissance requise est moindre car 1 seul bit d'tat change, pour q0 q1
s
des tats adjacents. La partie combinatoire est toujours assez complexe.
Ce type de codage est appropri pour des systmes orients contrle
prsentant de longs chemins sans branchement dans leur diagramme de
- Le codage de Gray conduira au rsultat ci-dessous :
transitions d'tats.
q q' s
Enfin, le codage One-Hot est trs diffrent : un flip-flop est simplement
00 01 0
associ chaque tat, et un seul flip-flop peut donc tre 1 tout moment.
01 11 0
Les avantages sont que la logique combinatoire associe est trs simple
11 10 0
(la vitesse est donc optimise), et que seulement deux bits d'tat changent
10 00 1
tout instant (la puissance ncessaire est donc limite). L'inconvnient est
q0' = not(q0).not(q1) + q0.not(q1) = not(q1)
que le nombre de flips-flops utiliss est grand, c'est une solution approprie
q1' = q0.not(q1) + q0.q1 = q0
pour des ralisations sur FPGAs.
s = not(q0).q1 = not(q0 + not(q1))
Exemple lmentaire : compteur modulo 4 sans entre
q q' s
zero un 0 q0 q1
s
un deux 0
deux trois 0
trois zero 1 - Et avec le codage One-Hot, on obtiendrait (schma avec reset) :

53 54
q q' s case state is
when Q0 =>
0001 0010 0
if C='0' then nextstate <= Q0;
0010 0100 0 else nextstate <= Q1;
end if;
0100 1000 0 when Q1 =>
1000 0001 1 if C='0' then nextstate <= Q1;
else nextstate <= Q2;
q0' = q3, q1' = q0 end if;
when Q2 =>
q2' = q1, q3' = q2 if C='0' then nextstate <= Q2;
s = q3 else nextstate <= Q3;
end if;
when Q3 =>
if C='0' then nextstate <= Q3;
else nextstate <= Q0;
end if;
end case;
end process;

-- mise jour de l'tat


process
begin
VII.2.4 Exemple VHDL wait until (clk'event and clk='1');
state <= nextstate;
Le processus de synthse ASIC tiendra compte d'une bibliothque donne end process;
de composants (la description obtenue dans ce cas sera dans le style -- mise jour des sorties
S0 <= '0' when ((state=Q0) or (state=Q2)) else '1';
structurel, interconnexion des composants de base ncessaires). S1 <= '0' when ((state=Q0) or (state=Q1)) else '1';
Illustrons tout d'abord le processus, en restant dans le style dataflow, sur end Automate;

l'exemple du compteur 2 bits vu plus haut.


On rappelle que les quations obtenues manuellement par synthse sont :
entity Compteur is q0' = not(c).not(q1).q0 + not(c).q1.q0 + c.not(q1).not(q0) + c.q1.not(q0)
port(C, clk : in std_logic;
S0, S1 : out std_logic); = not(c).q0 + c.not(q0)
end Compteur; q1' = not(c).q1.not(q0) + not(c).q1.q0 + c.not(q1).q0 + c.q1.not(q0)
= not(c).q1 + c.(q0 xor q1)
architecture Automate of Compteur is
-- tats de l'automate S0 = not(q1).q0 + q1.q0 = q0
type ETATS is (Q0, Q1, Q2, Q3);
S1 = q1.not(q0) + q1.q0 = q1
signal state, nextstate: ETATS;
begin
-- calcul tat suivant
process (state, c)
begin

55 56
C se prsente par exemple comme suit :
q0
S0

q1
S1

Ce qui pourrait donner la description VHDL dataflow suivante :

architecture Dataflow of Compteur is


signal q0,q1:Bit;
begin
-- chargement des registres sur front montant Ses blocs logiques configurables (CLBs) peuvent prendre la forme
process
suivante :
begin
wait until clk'event and clk='1';
q0 <= (not C and q0) or (C and not q0);
q1 <= (not C and q1) or (C and (q0 xor q1));
end process;
-- mise jour des sorties
S0 <= q0;
S1 <= q1;
end Dataflow;

Et la description obtenue par synthse ASIC avec l'outil Leonardo, et la


bibliothque de cellules C35_CORELIB (comme en TP) se prsenterait La LUT (Look-Up Table) est un lment combinatoire qui peut raliser
comme une description structurelle : interconnexion de cellules de cette n'importe quelle fonction boolenne. Le flip-flop peut permettre, si
bibliothque (portes NAND21, NOR21,, flip-flops DFC1, DFP1,). ncessaire, de mmoriser 1 bit.

VII.3 Comparaison avec la synthse FPGA On "programme" donc la fonction ralise par chaque cellule, de mme
que les interconnexions entre cellules.
VII.3.1 FPGA

Il existe divers types de composants (re)configurables. Si les PLA sont les VII.3.2 Synthse ASIC vs synthse sur FPGA
plus simples, les FPGA (Field Programmable Gate Array) sont parmi les
En synthse ASIC (par exemple ici avec Leonardo Spectrum de Mentor
plus volus.
Graphics), aprs avoir indiqu le choix de cette synthse, on choisira une
Un FPGA est un circuit qui peut tre (re)programm aprs sa fabrication. Il bibliothque de composants utiliser pour produire le circuit :
57 58
CLKIN1 c35_CORELIB 4 x 36 146 um2
DFC1 c35_CORELIB 3 x 309 928 um2
DFCP1 c35_CORELIB 1 x 328 328 um2
DFEC1 c35_CORELIB 1 x 346 346 um2
IMUX21 c35_CORELIB 1 x 91 91 um2
MUX22 c35_CORELIB 1 x 109 109 um2
NAND21 c35_CORELIB 8 x 55 437 um2
NAND31 c35_CORELIB 1 x 73 73 um2
NOR21 c35_CORELIB 3 x 55 164 um2
NOR31 c35_CORELIB 3 x 73 218 um2
NOR40 c35_CORELIB 1 x 73 73 um2
OAI211 c35_CORELIB 5 x 73 364 um2
OAI2111 c35_CORELIB 2 x 91 182 um2
OAI311 c35_CORELIB 1 x 91 91 um2
TIE0 c35_CORELIB 1 x 36 36 um2
XNR21 c35_CORELIB 1 x 109 109 um2

Number of ports : 9
Number of nets : 51
Number of instances : 43
Number of references to this view : 0

Total accumulated area :


Number of um2 : 4168

On obtiendra galement des informations de timing concernant le chemin


critique, et la frquence possible. Par exemple :

Clock Frequency Report


Clock : Frequency
------------------------------------
Clk : 301.2 MHz

Critical Path Report


Critical path #1, (unconstrained path)
NAME GATE ARRIVAL LOAD
----------------------------------------------------------------
clock information not specified
delay thru clock network 0.00 (ideal)

A l'issue de la synthse, outre le source VHDL synthtis, on obtiendra reg_state(1)/Q DFEC1 0.00 1.09 dn 0.14
ix103/Q NOR31 0.23 1.42 dn 0.01
notamment des informations quantitatives sur la surface, en termes des ix680/Q AOI211 0.33 1.75 up 0.03
ix129/Q NOR21 0.41 2.16 dn 0.09
cellules utilises, par exemple : ix663/Q AOI211 0.41 2.58 up 0.04
ix661/Q NAND21 0.38 2.84 up 0.03
Cell Library References Total Area ix85/Q OAI2111 0.22 2.94 up 0.01
ix720/Q NAND21 0.09 3.03 dn 0.02
AOI211 c35_CORELIB 4 x 73 291 um2 ix725/SN DFCP1 0.00 3.03 dn 0.00
AOI2111 c35_CORELIB 1 x 91 91 um2
data arrival time 3.22
AOI221 c35_CORELIB 1 x 91 91 um2

59 60
En synthse sur FPGA (par exemple ici avec Precision Synthesis de
Mentor Graphics), on choisira un modle de FPGA :

et on obtiendra des informations relatives au nombre de CLB et de flip-


flops utiliss, par exemple :

***********************************************
Device Utilization for 2V40cs144
***********************************************
Resource Used Avail Utilization
-----------------------------------------------
IOs 14 88 15.91%
Global Buffers 1 16 6.25%
Function Generators 12 512 2.34%
CLB Slices 6 256 2.34%
Dffs or Latches 6 776 0.77%
Block RAMs 0 4 0.00%
Block Multipliers 0 4 0.00%
Block Multiplier Dffs 0 144 0.00%

-----------------------------------------------

Le diagramme ci-dessous rsume le compromis temps de conception / per-


formance, selon les divers types de conceptions :

61 62
VIII. SIMULATION Aprs cette phase d'initialisation, une vue simplifie de la boucle de
simulation qui s'excute est la suivante :
VIII.1 Boucle de simulation
Tant que le temps courant NOW est infrieur au temps de fin de simulation
Aprs compilation d'un code source VHDL, la construction du modle
faire
simulable met en jeu une procdure d'laboration.
NOW avance jusqu'au temps o un process devient actif;
les signaux explicites, puis implicites, sont mis jour;
tout process P sensible l'un des signaux ayant subi un vnement
est ractiv et excut, jusqu' suspension;
Fin tant que

Note. Le calcul de la valeur de mise jour d'un signal rsolu (i.e.


possdant une fonction de rsolution), modlisant par exemple une porte 3
tats, pourra faire appel cette fonction de rsolution.

VIII.2 Pilotes, affectations en mode inertiel

La suite des valeurs pouvant tre prises par un signal durant la simulation
est reprsente grce un pilote (ou driver).

http://www.pldworld.com/_hdl/1/www.ireste.fr/fdl/vcl/lesd/Vstruct.htm
Un pilote reprsente le futur projet pour un signal. Il se prsente sous la
forme d'une squence ordonne de couples (v,t), appels des
L'laboration cre un modle de la hirarchie de conception (entit et
transactions, o v reprsente une valeur future prvue pour le signal, et t
architecture + configuration) qui est ensuite li un processus noyau. Dans
le temps o la transaction doit avoir lieu.
ce modle, toutes les instructions concurrentes sont converties en
Tout signal possde un pilote, plus exactement il y a un pilote par signal
processes. Le processus noyau coordonne l'activit des processus
par process.
utilisateur durant la simulation.
Les pilotes sont mis jour lors de l'excution des processes.
La simulation commence par une phase d'initialisation :
- initialisation des signaux Une vue un peu plus prcise du corps de la boucle de simulation peut tre
- excution de tous les processes jusqu' suspension reprsente comme suit :
- initialisation du temps courant de simulation NOW 0

63 64
n'tudierons que celui-ci.

Une affectation suivant le mode inertiel modlise un dispositif qui ne ragit


que si une valeur sur son entre reste inchange pour une dure donne.
L'effet d'une telle affectation sur le pilote du signal est le suivant :
- les transactions prvues aprs la date de la nouvelle transaction sont
supprimes du pilote, et la nouvelle transaction est ajoute la fin du
pilote
- les transactions prvues avant la date de la nouvelle transaction sont
supprimes du pilote, sauf celles se trouvant immdiatement avant la
nouvelle transaction si leur valeur est identique la valeur de la
nouvelle transaction.
http://www.ida.liu.se/~petel71/SysSyn/lect2.frm.pdf
Exemple : reprenons le petit exemple ci-dessous (vu p.12), avec la
Exemple/exercice : prenons l'exemple de l'entit de test ci-dessous (vue description suivante
p.24). Quel est le process correspondant l'instruction d'affectation du
entity Exemple is
signal x ? Quand ce process est-il activ, et quelles sont les mises jour port(A,B: in Bit; S: out Bit);
end Exemple;
correspondantes du pilote ?
architecture RTL of Exemple is
entity testExemple is signal X,Y: Bit;
end testExemple; begin
architecture test1 of testExemple is process (A,B,X,Y) -- attention, process
component Exemple begin
port(a,b:in bit; s:out bit); X <= not A after 2 ns;
end component; Y <= X nand B after 5 ns;
signal x,y,w: bit; S <= X and Y after 4 ns;
for E:Exemple use entity work.Exemple(Struct); end process;
begin end RTL;
E: Exemple port map(x,y,w);
A S1
x <= '1' after 4 ns, '0' after 20 ns; S
4ns
y <= '1' after 4 ns, '0' after 35 ns; 2ns
B 5ns
end test1; S2

Dans une affectation de signal, la forme d'onde peut tre prcde d'un Note importante. Cette description (avec un process) n'est pas celle qui
mot-cl qui indique le mode de propagation, transport ou inertial. Le serait naturellement associe ce circuit, elle a t choisie seulement pour
mode inertial est le mode par dfaut et gnralement utilis, nous servir d'illustration l'volution des pilotes (une description plus naturelle

65 66
pour ce circuit serait celle propose page 12). A 0 1 S
4ns
2ns
Supposons qu'on soit, 10 ns, dans la configuration suivante o X = '0', B 1 5ns
0
Y='1', et S='0' :
et les pilotes prennent la forme suivante :
A 1 0 X
S
4ns
2ns 0
B 1 5ns
1
Y

- Au temps 29 ns, la transaction sur X se produit, mais elle n'induit pas


- Au temps 20 ns, A passe '0', ce qui provoque la mise jour des pilotes
d'vnement.
comme suit :
- Au temps 31 ns, l'vnement sur S se produit, on a S = '0'

A 0 1 S
4ns
- Au temps 22 ns, l'vnement sur X se produit, on a X = '1' 2ns 0
B 1 5ns
0
A 0 1 S
4ns
2ns
B 1 5ns - Au temps 32 ns, la transaction sur Y se produit, qui n'induit pas
1
d'vnement.
et les pilotes prennent la forme suivante :

VIII.3 Retards delta


Une affectation de signal sans clause after induit un retard delta. Il
- Au temps 24 ns, la transaction sur X se produit, mais elle n'induit pas
reprsente un pas de simulation de toute la description, sans modification
d'vnement.
du temps physique.
- Au temps 26 ns, l'vnement sur S se produit, on a S = '1' Plusieurs retards delta peuvent se succder, jusqu' stabilisation des

A 0 1 valeurs des signaux.


S
4ns
2ns 1
B 1 5ns
1
Exemple/exercice : reprenons le full-adder en style flot de donnes, sans
retards explicites
et l'tat courant des pilotes est :
entity full_adder is
port(X,Y,Cin : in Bit;
Sum,Cout : out Bit);
end full_adder;
- Au temps 27 ns, l'vnement sur Y se produit, on a Y = '0' architecture Dataflow_view of full_adder is
signal S : Bit;

67 68
begin
S <= X xor Y;
Sum <= S xor Cin;
Cout <= (X and Y) or (S and Cin);
end Dataflow_view;
entity test is
end test;
architecture Struct1 of test is
component full_adder
port(X,Y,Cin : in Bit; Sum,Cout : out Bit);
end component;
signal A,B,C,S,C2 : Bit;
for F1: full_adder use
entity work.full_adder(Dataflow_view);
begin
F1: full_adder port map(A,B,C,S,C2);
A <= '1' after 10 ns;
B <= '0' after 10 ns;
C <= '0' after 10 ns;
end Struct1;

Que se passe-t-il lors de la simulation correspondante ?

Parmi les documents utiliss dans ce cours...

"Introduction to automata theory, languages and computation". J.Hopcroft,


... ? J.Ullman. Addison-Wesley.

"VHDL. Du langage la modlisation". R.Airiau, J.M.Berg, V.Olive,


J.Rouillard. Presses polytechniques et universitaires romandes.

"A Guide to VHDL". S.Mazor, P.Langstraat. Kluwer Academic Pub.

"VHDL Coding Styles and Methodologies". B.Cohen. Kluwer Academic Pub.

69 70

You might also like