La conception de circuit synchrones en Esterel v7 Gérard Berry Chaire Algorithmes, machines et...

Post on 03-Apr-2015

111 views 3 download

Transcript of La conception de circuit synchrones en Esterel v7 Gérard Berry Chaire Algorithmes, machines et...

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