Upload
eugene-metayer
View
107
Download
3
Embed Size (px)
Citation preview
La conception de circuit synchronesen Esterel v7
Gérard Berry
Chaire Algorithmes, machines et langages
Collège de France
Cours 5, 14 mai 2013
2G. Berry, Collège de France 14/05/2013
Micro-architecture
Architecture
Circuits
Design logique RTL
DFT (testabilité)
PlacementRoutage
Masks$ 1,000,000
Chips
Design
Synthèse
Fab
Vérification
Vérification
Vérification
3G. Berry, Collège de France 14/05/2013
Micro-architecture
Architecture
Circuits
Design logique RTL
DFT (testabilité)
PlacementRoutage
Masks$ 1,000,000
Chips
$$
$$
$$
$$
$$
4G. Berry, Collège de France 14/05/2013
Micro-architecture
Architecture
Circuits
Design logique RTL
DFT (testabilité)
PlacementRoutage
Masks$ 1,000,000
Chips
ESTEREL V7
5G. Berry, Collège de France
• Définir un langage de naut niveau– pour écrire des circuits de façon comportementale (?)– en traitant chemins de données + chemins de contrôle
14/05/2013
Objectifs
• Ecrire des compilateurs / simulateurs efficaces – pour que les architectes fassent tourner les designs – très tôt dans le cycle de développement– avec des outils perfectionnés de visualisation et débogage– pour générer des circuits aussi bon qu’à la main – en garantissant une parfaite identité exécution / simulation
• Se connecter aux meilleurs moteurs de vérification– Pour vérifier le maximum de propriétés avant l’exécution– Et donc trouver les bugs très tôt dans le développement
G. Berry, Collège de France
• 1990 : Esterel v5 circuits (cf cours 4, 23/04/2013)
• ~1995 : Joe Buck de Synopsys intègre Esterel v5 dans Cocentric System Studio, pour le design haut niveau de systèmes électroniques
• ~1996 : Luciano Lavagno et Ellen Sentovich de Cadence intègrent Esterel dans Polis, HW/SW Codesign, puis développent ECL = Esterel C Language
14/05/2013 6
Esterel v7 : la genèse
• ~1998 : Michael Kisninevsky (Intel Strategic CAD Lab, Portland, Oregon) expérimente Esterel pour le design de circuits de contrôle
• ~1998 : Yves Leduc / Gaël Clavé expérimentent Esterel v5 chez Texas Instruments
• ~2000 : design préliminaire d’Esterel v7 avec M. Kishinevsky
G. Berry, Collège de France
• 2000-2001 : Création d’Esterel Technologies – Objectif : développer Esterel v7 / Esterel Studio pour les applications
logicielles et matérielles– Clients Dassault Aviation, Thomson, Texas Instruments, etc.– Intel Capital + Caisse des dépôts + VCs
14/05/2013 7
Esterel v7 : le démarrage
• 2003: Esterel Technologies rachète SCADE et décide la partition Esterel circuits / SCADE logiciels embarqués
• 2004-2009 : améliorations techniques, utilisation sur produits complexes en production
• 2007 : travail de standardisation IEEE
• 2001-2004 : développement du langage, du compilateur et du vérifieur, intégrés dans Esterel Studio; expérimentations clients (TI, ST Micro, Xilinx, Philips NXP, Intel)
G. Berry, Collège de France
• 2007 : filiale séparée Esterel EDA Technologies Coopération avec Synfora (Pico), Coware (SystemC)
14/05/2013 8
Esterel v7 : la maturité
• 2008 : développement de SCADE 6 chez E. T.
• 2008 : crise financière, TI licencie massivement
• 2009 : Esterel EDA ferme Esterel v7 Synfora
• 2011 : Synopsys rachète Synfora• 2009 : Esterel v7 Synopsys
• 2012 : Ansys rachète Esterel Technologies• 2009 : SCADE 6 en pleine forme !
?
G. Berry, Collège de France
• Définitions de données– en v5, données purement abstraites (APIs)– en v7, données paramétriques, précises et optimisées – pour la synthèse et la vérification, tableaux, bitvecteurs
14/05/2013 9
Esterel v7 : les nouveautés linguistiques
• Meilleure modularité– définitions d’ensembles de données– définitions d’interfaces (avec miroirs) et de modules– généricité (dimensions, fonctions, etc.)
• Enrichissement des signaux– mémorisés ou temporaires, avec ou sans valeurs initiales– immédiats ou retardés (registres)– tableaux de signaux et signaux à valeurs tableaux
G. Berry, Collège de France 14/05/2013 10
Esterel v7 : les nouveautés linguistiques
• Nouvelles instructions– équations simplifiant et standardisant le codage– boucles statiques de manipulation de tableaux– meilleur branchements des signaux meilleurs modules
• Manipulation d’horloges– masquage de cycles (clock gating)– vrai multi-horloge modulaire
La sémantique d’Esterel v5 est globalement préservéeet facilement étendue au clock-gating / multi-horloge
11G. Berry, Collège de France 14/05/2013
Project Structure
Automatic Documentation
ProjectManagement
Executable Specification
Exporter
Debugging & Simulation
Formal Verification
DesignVerification
Sequential Equivalence
check
DUT
Optimized for synthesis
DFT-ready
SystemC & RTL flow integrationSystemC RTL Synthesis
.sc .vhd
Architecture
Design Specification Capture
Design Functional
Spec Verification Requirements
ArchitectureDiagram
Editor
Simulator
DesignVerifier
ModelReporter
Code & TestbenchGenerators
Editor
SequentialEquivalence
Checker
IDE
PlayerIDE
G. Berry, Collège de France
• unsigned<N> : entiers positifs i tels que 0 i N1 (N élts.)
• unsigned<[N]> unsigned<2**N> (2N élts, N bits binaire)
14/05/2013 12
Entiers unsigned (2-adiques bien tronqués)
• Pourquoi cette précision ?– pour optimiser l’allocation des bus de données– 4 : unsigned<5> demande 3 fils– 5 : unsigned<6> demande 3 fils– mais 4*5 : unsigned<21> demande 5 fils, pas 6 !–pour vérifier statiquement l’indexation des tableaux
Regarder toutes les opérations dans le blanc des yeux,avec parfois de mauvaises surprises !
G. Berry, Collège de France 14/05/2013 13
Opérations unsigned : unsigned<M>, unsigned<N> unsigned<MN1> car valeur max (M1)(N1) (MN1)1
: unsigned<M>, unsigned<N> unsigned<M> avec erreur si j i car valeur max (M1)0 M1 (erreur pour i j si i j)
* : unsigned<M>, unsigned<N> unsigned<(M1) (N1) 1> car valeur max (M 1) (N 1)
/ : unsigned<M>, unsigned<N> unsigned<M> car valeur max (M1) /1 (erreur si second argument nul)
mod : unsigned<M>, unsigned<N> unsigned<min(M,N1)> car valeur max M1 si M1 N2 et N2 sinon (erreur si second argument nul)
** : unsigned<M>, unsigned<N> unsigned<(M1)**(N1) 1>
car valeur max (M1)N1
G. Berry, Collège de France 14/05/2013 14
Opérations unsigned
assert<M>(uexpr) : avec uexpr unsigned, déclare que la valeur v de uexpr vérifiera v M1 vérifié à la compilation, à la simulation ou formellement
<, <=, > , >=, =, <> : unsigned<M>, unsigned<N> bool, classiques
sat<M>(uexpr) avec uexpr : unsigned<M> : saturation à M1 soit v la valeur de uexpr. Alors sat<M>(uexpr) min(v,M1)
binsize (uexpr) : nombre de bits pour écrire uexpr en binaire
si la valeur de uexpr est v, le n tel que 2 n-1 v 2
n
G. Berry, Collège de France
• signed<N> : entiers i tels que N i N1 (2 N éléments)
• signed<[N]> signed<2**(N1)> (2N éléments, N bits en binaire)
14/05/2013 15
Entiers relatifs
- : signed<M> signed<M1> car valeur max (M)
abs : signed<M> unsigned<M1> car valeur max abs(M) M
: signed<M> signed<M> (unaire) identité
G. Berry, Collège de France 14/05/2013 16
Opérations signed : signed<M>, signed<N> signed<MN> car valeur min MN
- : signed<M>, signed<N> signed<MN > car valeur max M1(N) (MN)1
* : signed<M>, signed<N> signed<MN 1 > car valeur max (M)(N)
/ : signed<M>, signed<N> signed<M1> car valeur max M / 1 si (erreur si second argument nul)
** : non introduit
mod : pas clair ! Pas de meilleure définition mathématique, on trouve toutes les définitions possibles selon les restes et signes ...
G. Berry, Collège de France 14/05/2013 17
Opérations signed
assert<M>(sexpr) : avec sexpr signed, déclare que la valeur v de sexpr vérifiera M v M vérifié à la compilation, à la simulation ou formellement
sat<M>(sexpr) avec sexpr : signed<M> : saturation dans le sens du signe soit v la valeur de sexpr. Alors sat<M>(sexpr) v si M v M ou M si v M ou M1 si v M
Conversion automatique de signed en unsigned dans toutes les opérations mixtes
<, <=, > , >=, =, <> : signed<M>, signed<N> bool, classiques
: unsigned<M> signed<M> (unaire) car valeur max M1
: unsigned<M> signed<M1> (unaire) car valeur min (M1)
G. Berry, Collège de France 14/05/2013 18
Tableauxtype Byte bool [8] ; // bitvector 0..7input Opcode : Byte ;
• indexation partielle : X [ i, j ] : Pixel [5] • extraction de sous-tableaux : X [1, 3..7] [2..5] : Pixel [5, 4]
type Pixel unsigned<256> ; // ou unsigned<[8]>, nombreconstant Size 100 : unsigned<> ; // implicit unsigned<101>output ImageStack : Pixel [Size,Size] [5] ;
Y : X [i, j] [ k1]
assert<Size>[ i ] & assert<Size>[ j ] & assert<5>[ k1] vérifié à la compilation, à la simulation ou formellement
• dimension évaluable statiquement, assertion de taille implicite
G. Berry, Collège de France 14/05/2013 19
Bitvecteurs vecteurs de bits
• égalité , différence <>• B << k : shift gauche non signé• B >> k : shift droit non signé• B <<< k: shift gauche signé• B >>> k : shift droit signé
• concaténation : lcat(B0 , B1,..., Bn) et mcat(B0 , B1,..., Bn)
• extension à k bits : extend(B, k) et sextend(B, k)
• resize, reverse, etc.
type Byte bool [8] ; // bitvector 0..7input Opcode : Byte ;
type Word bool [32] ; // bitvector 0..31var Memory : Word [MemSize] in ... end
• constantes ’b010011
G. Berry, Collège de France 14/05/2013 20
Cartes (maps) de bitvecteurs
Objectif : donner des synonymes intuitifs aux champs
map Word { // map non nommée LowByte [0..7] , LowHalf [0..15] , HighHalf [16..31]}; // définition séquentielle
map Instruction : Word seq {Opcode [8] ,Immediate , // boolRegister [7] ,Address [16]};
nom utile au débogage
map Instruction : Word { Opcode [0..7] , Immediate [8] , // bool RegisterNum [9..15] , Address [16..31]};
G. Berry, Collège de France 14/05/2013 21
Conversion unsigned bitvecteurexpr : unsigned<M>
u2bin (expr) : bool [binsize(M1)] // écriture binaire minimaleu2bin (expr, N) : bool [N] // avec N binsize(M1)
bin2u (6) ’b110u2gray (6) ’b101u2onehot (6) ’b0000001 // 7 bits car 6 : unsigned<7>u2onehot (6, 10) ’b0000001000 // 10 bits, bit 6 à 1
u2code : possibilité pour l’utilisateur de définir son propre code
u2onehot (expr) : bool [M] // écriture un seul bit à 1u2onehot (expr, N) : bool [N] // avec N M
u2gray (expr) : bool [binsize(M1)] // écriture en code Grayu2gray (expr, N) : bool [N] // avec N binsize(M1)
G. Berry, Collège de France 14/05/2013 22
Conversion bitvecteur unsigned
expr : bool [M]
bin2u (expr) : unsigned<[M]> // décodage binaire
bin2u (expr, N) : unsigned<N> // avec N 2M
gray2u (expr) : unsigned<[M]> // décodage Gray
gray2u (expr, N) : unsigned<N> // avec N 2M
onehot2u (expr) : unsigned<M> // décodage onehotonehot2u (expr, N) : unsigned<N> // avec N M
G. Berry, Collège de France 14/05/2013 23
Conversions signed bitvecteur
expr : signed<M>
s2bin (expr) : bool [binsize(M1)1] // écriture binaire minimale
s2bin (expr, N) : bool [N] // avec N binsize(M1)1
s2bin (6) ’b0101s2bin (6) ’b1011
expr : bool [M]
bin2s (expr) : signed <[M]>
bin2s (expr, N) : signed <N> // avec N 2M-1
G. Berry, Collège de France 14/05/2013 24
Signaux purs et valuésS : <statut, valeur> uniques dans l’instant (idem Esterel v5)Nouveau : reg (de Moore), temp (non mémorisé), initialisation
signal S1, // signal pur : statut mais pas de valeur
S2 : T, // signal valué : statut, valeur de type T mémorisée, S3 : // un émetteur au maximum à chaque instant
S3 : T combine F, // statut, valeur de type T mémorisée // émissions simultanées combinées par F
S4 : T init exp, // statut, valeur de type T mémorisée, S3 : // initialisée à la valeur de exp
S5 : T combine F init exp,
G. Berry, Collège de France 14/05/2013 25
Valeurs simples, signaux temporaires
S8 : temp T, // statut, valeur non mémorisée, S3 : // un émetteur max.
S6 : value T, // pas de statut, valeur mémorisée, S3 : // un émetteur maximum à chaque instant
S7 : value T combine F, // pas de statut, valeur mémorisée // émetteurs multiples combinés par F
S9 : temp value T combine F init exp, // pas de statut, valeur combinée non mémorisée, // réinitialisation à chaque instant à la valeur de exp
G. Berry, Collège de France 14/05/2013 26
Signaux retardés
R10 : reg, // statut retardé
R11 : reg T, // statut retardé, valeur de type T
R12 : reg value T combine F init exp,
...
?R10 : valeur émise à l’instant précédent
pre (?R10) non autorisé
G. Berry, Collège de France 14/05/2013 27
Nouvelle instruction emitemit { S1, ?S2 <= 2, ?S3 <= 3 if X>0, next R10 if S4 and ?S4 > 0, next ?R11 <= pre(?S4)+?S5+2 if S6 }
every LR do emit StartStopCommand|| every UR do emit LapCommand
sustain { StartStopCommand <= LR, LapCommand <= UR}
G. Berry, Collège de France 14/05/2013 28
Boucles sur tableaux
emit { O [0] <= I [0] , for i < M 1 do O [ i+1] <= O [ i ] or I [ i+1] end for}
OK pour la générationde circuits
I [0] I [1] I [2]
O [0] O [1] O [2]
G. Berry, Collège de France 14/05/2013 29
Boucles sur tableaux
emit seq { O [0] <= I [0] , for i < M -1 doup O [ i+1] <= O [ i ] or I [ i+1] end}
Alternative : tableaux fonctionnels de SCADE 6
I [0] I [1] I [2]
O [0] O [1] O [2]
Mieux pour lasimulation logicielle
G. Berry, Collège de France 14/05/2013 30
Exemple : un mini-filtre d’images TV
Etant donné un flot de pixels d’entrée xi ,
calculer un flot de pixels de sortie yi tels que
yi ( xi-2 4 xi-1 6 xi 4 xi+1 xi+2 ) / 16
• les pixels sont contenus dans des mots 32 bits• il faut laisser passer 2 pixels au démarrage
et les récupérer à la fin en complétant avec des 0
G. Berry, Collège de France 14/05/2013 31
p0p1p2p3
*1 *4 *6 *4 *1
+ / 16
InWord : bool[32]
InPixel : temp unsigned<[8]>
OutPixel : unsigned<[8]>
Feeder BasicFilter
InWord Feeder InPixel BasicFilter OutPixel
OutEndOfLine
InEndOfLine
G. Berry, Collège de France 14/05/2013 32
p0p1p2p3
*1 *4 *6 *4 *1
+ / 16
InWord : bool[32] OutPixel : unsigned<[8]>
Feeder BasicFilter
InWord Feeder InPixel BasicFilter OutPixel
OutEndOfLine
InEndOfLine
Initialisation à 0
0 0 0 00
InPixel : temp unsigned<[8]>
G. Berry, Collège de France 14/05/2013 33
p0p1p2p3
*1 *4 *6 *4 *1
+ / 16
InWord : bool[32] OutPixel : unsigned<[8]>
Feeder BasicFilter
InWord Feeder InPixel BasicFilter OutPixel
OutEndOfLine
InEndOfLine
0 0 0 0
Entrée d’un mot, délai initial 2 cycles
InPixel : temp unsigned<[8]>
G. Berry, Collège de France 14/05/2013 34
p0p1p2p3
*1 *4 *6 *4 *1
+ / 16
InWord : bool[32] OutPixel : unsigned<[8]>
Feeder BasicFilter
InWord Feeder InPixel BasicFilter OutPixel
OutEndOfLine
InEndOfLine
0 0 0
Délai initial 2 cycles
InPixel : temp unsigned<[8]>
G. Berry, Collège de France 14/05/2013 35
p0p1p2p3
*1 *4 *6 *4 *1
+ / 16
InWord : bool[32] OutPixel : unsigned<[8]>
Feeder BasicFilter
InWord Feeder InPixel BasicFilter OutPixel
OutEndOfLine
InEndOfLine
0 0
Sortie du premier OutPixel
InPixel : temp unsigned<[8]>
G. Berry, Collège de France 14/05/2013 36
p0p1p2p3
*1 *4 *6 *4 *1
+ / 16
InWord : bool[32] OutPixel : unsigned<[8]>
Feeder BasicFilter
InWord Feeder InPixel BasicFilter OutPixel
OutEndOfLine
InEndOfLine
Sortie d’un OutPixel
0
InPixel : temp unsigned<[8]>
G. Berry, Collège de France 14/05/2013 37
p0p1p2p3
*1 *4 *6 *4 *1
+ / 16
InWord : bool[32] OutPixel : unsigned<[8]>
Feeder BasicFilter
InWord Feeder InPixel BasicFilter OutPixel
OutEndOfLine
InEndOfLine
Entrée d’un mot, sortie d’un OutPixel
InPixel : temp unsigned<[8]>
G. Berry, Collège de France 14/05/2013 38
p0p1p2p3
*1 *4 *6 *4 *1
+ / 16
InWord : bool[32] OutPixel : unsigned<[8]>
Feeder BasicFilter
InWord Feeder InPixel BasicFilter OutPixel
OutEndOfLine
InEndOfLine
Sortie d’un OutPixel
InPixel : temp unsigned<[8]>
G. Berry, Collège de France 14/05/2013 39
p0p1p2p3
*1 *4 *6 *4 *1
+ / 16
InWord : bool[32] OutPixel : unsigned<[8]>
Feeder BasicFilter
InWord Feeder InPixel BasicFilter OutPixel
OutEndOfLine
InEndOfLine
Sortie d’un OutPixel
InPixel : temp unsigned<[8]>
G. Berry, Collège de France 14/05/2013 40
p0p1p2p3
*1 *4 *6 *4 *1
+ / 16
InWord : bool[32] OutPixel : unsigned<[8]>
Feeder BasicFilter
InWord Feeder InPixel BasicFilter OutPixel
OutEndOfLine
InEndOfLine
Fin de ligne d’entrée, sortie d’un OutPixel
InPixel : temp unsigned<[8]>
G. Berry, Collège de France 14/05/2013 41
p0p1p2p3
*1 *4 *6 *4 *1
+ / 16
InWord : bool[32] OutPixel : unsigned<[8]>
Feeder BasicFilter
InWord Feeder InPixel BasicFilter OutPixel
OutEndOfLine
InEndOfLine
Entrée de 0, sortie d’un OutPixel
0
InPixel : temp unsigned<[8]>
G. Berry, Collège de France 14/05/2013 42
p0p1p2p3
*1 *4 *6 *4 *1
+ / 16
InWord : bool[32] OutPixel : unsigned<[8]>
Feeder BasicFilter
InWord Feeder InPixel BasicFilter OutPixel
OutEndOfLine
InEndOfLine
Entrée de 0, sortie OutPixel, fin de ligne de sortie
00
InPixel : temp unsigned<[8]>
43G. Berry, Collège de France 14/05/2013
Groupes de données
data PixelData : constant PIXEL_WIDTH : unsigned<> = 8 ; // unsigned<9> type Pixel = unsigned <[ PIXEL_WIDTH ]> ; // un nombre!end data
data ImageData : constant LINE_LENGTH : unsigned<> = 8 ; constant NUMBER_OF_LINES : unsigned <> = 2 ;end data
44G. Berry, Collège de France 14/05/2013
data WordData :
constant WORD_WIDTH : unsigned<> = 32 ;
type Word = bool [WORD_WIDTH] ;
// un mot se décompose en 4 octets map Word { b0 [0..7], // bitvecteurs, pas nombres b1 [8..15], b2 [16..23], b3 [24..31] };end data
45G. Berry, Collège de France 14/05/2013
data InputLineData :
extends ImageData ; extends WordData ; extends PixelData ;
constant PIXELS_PER_WORD : unsigned<> = WORD_WIDTH / PIXEL_WIDTH ;
constant WORDS_PER_LINE : unsigned<> = LINE_LENGTH / PIXELS_PER_WORD ;end data
46G. Berry, Collège de France 14/05/2013
data FilterData :
constant Coef : unsigned<> [5]= {1, 4, 6, 4, 1} ;
// unsigned <7>
constant CoefSum : unsigned<> = 16 ;
constant INIT_DELAY : unsigned<> = 3 ;
end data
47G. Berry, Collège de France 14/05/2013
interface OutPixelIntf : extends PixelData ; output OutPixel : temp Pixel ; output OutEndOfLine ;end interface
interface WordIntf : extends WordData ; output Ready ; input InWord : Word ;end interface
interface InPixelIntf : extends PixelData ; input InPixel : temp Pixel ; input InEndOfLine ;end interface
48G. Berry, Collège de France 14/05/2013
//==========// Main module//==========
module Filter : extends WordIntf ; extends OutPixelIntf ;
signal extends InPixelIntf in // déclare tous les signaux de // InPixelIntf comme locaux run Feeder || run PixelFilter end signalend module
49G. Berry, Collège de France 14/05/2013
module Feeder :
// Interface declarationsextends InputLineData ;extends FilterData ;extends WordIntf ;extends mirror InPixelIntf ;
50G. Berry, Collège de France 14/05/2013
InWord / InPixel (?InWord.p0)
InPixel (?InWord.p2)
/ InPixel (?InWord.p3)/ EndOfWord
/ Ready …
/ InPixel(0)
WORDS_PER_LINE EndOfWord
2 InPixel / InEndOfLine
signal EndOfWord
51G. Berry, Collège de France 14/05/2013
module PixelFilter :
// Interface declarationsextends FilterData ;extends InputLineData ;
extends InPixelIntf ;extends OutPixelIntf ;
52G. Berry, Collège de France
signal Product : unsigned<1531>[5] in // Compute Product array loop weak abort signal DelayLine : Pixel [5] init 0 in sustain { if InPixel then // décalage ?DelayLine [1..4] <= pre (?DelayLine [0..3]), ?DelayLine [0] <= ?InPixel end if }|| await INIT_DELAY InPixel ; sustain ?Product <= Coef [*] ?DelayLine // * sur tableaux end signal when InEndOfLine ; pause end loop
14/05/2013
53G. Berry, Collège de France
signal Product : unsigned<1531>[5] in // Compute Product array loop weak abort signal DelayLine : Pixel [5] init 0 in sustain { if InPixel then // décalage ?DelayLine [1..4] <= pre(?DelayLine [0..3]), ?DelayLine [0] <= ?InPixel end if }|| await INIT_DELAY InPixel ; sustain ?Product <= Coef [*] ?DelayLine // * sur tableaux end signal when InEndOfLine ; pause end loop
14/05/2013
54G. Berry, Collège de France 14/05/2013
|| // Calcul des OutPixel sustain { ?OutPixel <= assert<[8]>((?Product [0] + ?Product [1] + ?Product [2] + ?Product [3] + ?Product [4]) / CoefSum) if Product ,
OutEndOfLine <= InEndOfLine }end signalend module
G. Berry, Collège de France 14/05/2013 55
Registration des sorties
module PixelFilter :
// Interface declarationsextends FilterData ;extends InputLineData ;
extends InPixelIntf ;extends OutPixelIntf ;
Pas d’empilement des chemins critiques meilleure composition électrique
refine OutPixel : reg ;refine OutEndOfLine : reg ;
56G. Berry, Collège de France 14/05/2013
|| // Calcul des OutPixel sustain { next ?OutPixel <= assert<[8]>((?Product [0] + ?Product [1] + ?Product [2] + ?Product [3] + ?Product [4]) / CoefSum) if Product, next OutEndOfLine <= InEndOfLine }end signalend module
G. Berry, Collège de France 14/05/2013 57
Accélération par pipeline
signal Product : reg unsigned<1531>[5] in // Compute Product array loop weak abort signal DelayLine : Pixel [5] init 0 in ...|| await INIT_DELAY InPixel ; sustain next ?Product <= Coef [*] ?DelayLine end signal when InEndOfLine ; pause end loop
Pour couper le chemin critique, insérer des registres entre produits et somme
G. Berry, Collège de France 14/05/2013 58
Généricité
data PixelData : generic constant PIXEL_WIDTH : unsigned ; type Pixel = unsigned <[ PIXEL_WIDTH ]> ; // un nombre!end data
interface Intf : extends PixelData [ 16 / PIXEL_WIDTH ] input InPixel : Pixel // Pixel = unsigned<[16]> ; ...end interface
G. Berry, Collège de France
• Un langage riche et souple pour la conception de circuits synchrones (multi-horloges) complexes
• Qui rend triviales des opérations manuellement difficiles : séquence / parallèle / préemption, registration, pipelining, etc.
• Très amélioré et simplifié par la proposition de standardisation IEEE (merci aux participants)
• Mais maintenant apparemment en coma profond....
14/05/2013 59
Conclusion
Voir cours 6 pour l’implémentation et cours 2013-2014 pour le multi-horloges
G. Berry, Collège de France 14/05/2013 60
Références
• The Esterel v7 Reference Manual Version v7.60 for Esterel Studio 6.1 Esterel EDA Technologies, Nov. 2008
• IEEE P1778™/D1 Draft Standard for Esterel v7 Language Reference Manual