Professional Documents
Culture Documents
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,
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.
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
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;
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
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;
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
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 :
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 :
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;
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
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
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
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
29 30
V. VHDL. INSTRUCTIONS COMPORTEMENTALES V.2 Instructions squentielles
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.
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 :
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.
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;
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
VII.1.2 Synthse
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).
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 :
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
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;
55 56
C se prsente par exemple comme suit :
q0
S0
q1
S1
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
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 :
***********************************************
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%
-----------------------------------------------
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
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.
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
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 :
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;
69 70