La conception de circuit synchrones en Esterel v7

Slides:



Advertisements
Présentations similaires
Du Software au Hardware
Advertisements

Une méthode d'analyse de l'INFORMATION
Le moteur
1. Résumé 2 Présentation du créateur 3 Présentation du projet 4.
Fabrice Lauri, François Charpillet, Daniel Szer
Portée des variables VBA & Excel
Calculs de complexité d'algorithmes
Reconnaissance de la parole
JXDVDTEK – Une DVDthèque en Java et XML
Cours n°2M2. IST-IE (S. Sidhom) UE 303 Promo. M2 IST-IE 2005/06 Conception dun système d'information multimédia Architecture trois-tiers : PHP/MySQL &
Vers un outil d’aide à la conception des cannelures à flancs en développante de cercle La recherche effectuée lors de ma thèse a consisté à décrire le.
A abstraction b assembleur c nombre binaire d bit e cache f UC g puce h compilateur i famille dordinateurs j contrôle k chemin de données l défaut m dé
Objectifs Nous allons concevoir une mise en œuvre contenant un noyau de jeu d’instructions. Nous verrons comment l’architecture de jeu d’instructions.
Les éléments de mémorisation
Flow de conception (4h)-demo
ESIEE Paris © Denis BUREAU I N Initiation à la programmation avec le langage Java.
Primitives - Intégration
Orchestration d’activités Web avec HipHop
Test intégré de composants basé sur les contrats Apinya TANGKAWANIT.
La compilation matérielle et logicielle d’Esterel v5 /v7
Cours Systèmes logiques
ARCHITECTURE GLOBALE CAPTAGE Traitement DES des données GRANDEURS
Page 1 Introduction à ATEasy 3.0 Page 2 Quest ce quATEasy 3.0? n Ensemble de développement très simple demploi n Conçu pour développer des bancs de test.
CYCLE 3 : Alternatives Faire des choix dans un programme en C 1- AIGUILLAGE SIMPLE sur CONDITION : if-else 2-AIGUILLAGE MULTIPLE sur CONDITIONS if-else.
Application des algorithmes génétiques
Cours VHDL Chap 3: sémantique VHDL
Gestion des Périphériques
© 2007 P. Van Roy. All rights reserved. 1 FSAB1402: Informatique 2 La Concurrence Déclarative Peter Van Roy Département dIngénierie Informatique, UCL
Le VHDL De nos jours, les circuits numériques de haute performance sont habituellement créés à partir de descriptions en langages de haut niveau. Nous.
II. Chaînage, SDD séquentielles
La compilation logicielle dEsterel v5 Gérard Berry Chaire Algorithmes, machines et langages Collège de France Cours 4, 23 avril 2013.
La programmation objet Illustration de la POO en Pascal
1.2 COMPOSANTES DES VECTEURS
ACDI IUT de Paris – 05 février CR-MD - v1.20 Enquête POST-DUT Informatique 03 1 Les diplômés de 2003 Claude Ratard - Vélizy.
Historique de SystemC Regroupe 4 courants didées: SCENIC Project : Synopsys+UC Irvine Philips System-Level Data Types, VSIA SLD DWG IMEC, Hardware-Software.
La Saint-Valentin Par Matt Maxwell.
Développer en C avec Eclipse Introduction Création d'un projet Ajout de fichiers Compilation Exécution Utiliser le débogueur Département dinformatique.
Programmation Orienté Objet Application Au Langage JAVA Licence professionnelle ATC ~ 07/08 Bessem BOURAOUI
PLD GHome H4214 Piccolo Thomas Gu Lei Deville Romain Huang Yachen
SCL S7-GRAPH SIEMENS vous souhaite la bienvenue 2.
1.1 LES VECTEURS GÉOMÉTRIQUES
3.2 PRODUIT VECTORIEL Cours 7.
Notre calendrier français MARS 2014
Annexe 1 VISITE SUR
CSI2520 Le langage Scheme (2) Un langage de programmation fonctionnelle.
C'est pour bientôt.....
Veuillez trouver ci-joint
NORMALISATION DES LANGAGES DE PROGRAMMATION des Automates Programmables Industriels CEI Jean-Jacques DUMÉRY -1-
NORMALISATION DES LANGAGES DE PROGRAMMATION des Automates Programmables Industriels CEI
Pour en finir avec l’infini
ECOLE DES HAUTES ETUDES COMMERCIALES MARKETING FONDAMENTAL
Stage 2A CS80 pour Origin 1/28. 1) Presentation of the internship 2) The Multi-Oscillator 3) Connection-GUI’s API Conclusion Stage 2A CS80 pour Origin.
ECOLE DES HAUTES ETUDES COMMERCIALES MARKETING FONDAMENTAL
Traitement d’images sur carte 3D
ECOLE DES HAUTES ETUDES COMMERCIALES MARKETING FONDAMENTAL
1 Notations Asymptotiques Et Complexité Notations asymptotiques : 0 et  Complexité des algorithmes Exemples de calcul de complexité.
10 paires -. 9 séries de 3 étuis ( n° 1 à 27 ) 9 positions à jouer 5 tables Réalisé par M..Chardon.
Modélisation des données Niveau conceptuel DON-2 V0-0.
CALENDRIER-PLAYBOY 2020.
1 Architecture orientée service SOA Architecture orientée service SOA (Service Oriented Architecture)
Outil de gestion des cartes grises
LES PILES ET FILES.
Projet de stage d’année IIR4 sous le thème:
Chapitre 3 :Algèbre de Boole
Université de Sherbrooke
MICROLOR Le savoir partagé
1 École des Mines de Saint-Etienne. 158, cours Fauriel Saint-Etienne Cedex 2. Tél Fax Jean-Jacques Girardot
PICAXE LE MICRO-CONTROLEUR.
Transcription de la présentation:

La conception de circuit synchrones en Esterel v7 Gérard Berry Chaire Algorithmes, machines et langages Collège de France Cours 5, 14 mai 2013

Design Vérification Synthèse Fab Architecture Micro-architecture Design logique RTL Circuits DFT (testabilité) Synthèse PlacementRoutage Masks $ 1,000,000 Chips Fab G. Berry, Collège de France 14/05/2013

$$ $$ Architecture Micro-architecture Design logique RTL Circuits DFT (testabilité) PlacementRoutage $$ Masks $ 1,000,000 Chips G. Berry, Collège de France 14/05/2013

Architecture Micro-architecture Design logique RTL Circuits ESTEREL V7 Design logique RTL Circuits DFT (testabilité) PlacementRoutage Masks $ 1,000,000 Chips G. Berry, Collège de France 14/05/2013

Objectifs 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 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 14/05/2013

Esterel v7 : la genèse 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 ~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 14/05/2013

Esterel v7 : le démarrage 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 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) 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 G. Berry, Collège de France 14/05/2013

Esterel v7 : la maturité 2007 : filiale séparée Esterel EDA Technologies Coopération avec Synfora (Pico), Coware (SystemC) 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 14/05/2013

Esterel v7 : les nouveautés linguistiques 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 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 Meilleure modularité définitions d’ensembles de données définitions d’interfaces (avec miroirs) et de modules généricité (dimensions, fonctions, etc.) G. Berry, Collège de France 14/05/2013

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ée et facilement étendue au clock-gating / multi-horloge G. Berry, Collège de France 14/05/2013

RTL Synthesis SystemC  Design Specification Capture Project Structure Automatic Documentation Project Management Executable Specification Exporter Debugging & Simulation Formal Verification Design Verification Sequential Equivalence check DUT  Optimized for synthesis DFT-ready SystemC & RTL flow integration SystemC RTL Synthesis .sc .vhd Architecture Design Specification Capture Design Functional Spec Verification Requirements Architecture Diagram Editor Simulator Design Verifier Model Reporter Code & Testbench Generators Sequential Equivalence Checker IDE Player G. Berry, Collège de France 14/05/2013

Entiers unsigned (2-adiques bien tronqués) unsigned<N> : entiers positifs i tels que 0  i  N1 (N élts.) unsigned<[N]>  unsigned<2**N> (2N élts, N bits binaire) 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

Opérations unsigned  : unsigned<M>, unsigned<N>  unsigned<MN1> car valeur max (M1)(N1)  (MN1)1  : unsigned<M>, unsigned<N>  unsigned<M> avec erreur si j  i car valeur max (M1)0  M1 (erreur pour i  j si i  j) * : unsigned<M>, unsigned<N>  unsigned<(M1) (N1)  1> car valeur max (M 1) (N 1) / : unsigned<M>, unsigned<N>  unsigned<M> car valeur max (M1) /1 (erreur si second argument nul) mod : unsigned<M>, unsigned<N>  unsigned<min(M,N1)> car valeur max M1 si M1  N2 et N2 sinon (erreur si second argument nul) ** : unsigned<M>, unsigned<N>  unsigned<(M1)**(N1)  1> car valeur max (M1)N1 G. Berry, Collège de France 14/05/2013

Opérations unsigned sat<M>(uexpr) avec uexpr : unsigned<M> : saturation à M1 soit v la valeur de uexpr. Alors sat<M>(uexpr)  min(v,M1) <, <=, > , >=, =, <> : unsigned<M>, unsigned<N>  bool, classiques 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 assert<M>(uexpr) : avec uexpr unsigned, déclare que la valeur v de uexpr vérifiera v  M1 vérifié à la compilation, à la simulation ou formellement G. Berry, Collège de France 14/05/2013

Entiers relatifs signed<N> : entiers i tels que N  i  N1 (2 N éléments) signed<[N]>  signed<2**(N1)> (2N éléments, N bits en binaire)  : signed<M>  signed<M> (unaire) identité : signed<M>  signed<M1> car valeur max (M) abs : signed<M>  unsigned<M1> car valeur max abs(M)  M G. Berry, Collège de France 14/05/2013

Opérations signed  : signed<M>, signed<N>  signed<MN> car valeur min MN : signed<M>, signed<N>  signed<MN > car valeur max M1(N)  (MN)1 * : signed<M>, signed<N>  signed<MN  1 > car valeur max (M)(N) / : signed<M>, signed<N>  signed<M1> 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

Opérations signed Conversion automatique de signed en unsigned 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 M1 si v  M <, <=, > , >=, =, <> : signed<M>, signed<N>  bool, classiques 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 Conversion automatique de signed en unsigned dans toutes les opérations mixtes  : unsigned<M>  signed<M> (unaire) car valeur max M1  : unsigned<M>  signed<M1> (unaire) car valeur min (M1) G. Berry, Collège de France 14/05/2013

Tableaux type Byte  bool [8] ; // bitvector 0..7 input Opcode : Byte ; type Pixel  unsigned<256> ; // ou unsigned<[8]>, nombre constant Size  100 : unsigned<> ; // implicit unsigned<101> output ImageStack : Pixel [Size,Size] [5] ; indexation partielle : X [ i, j ] : Pixel [5] extraction de sous-tableaux : X [1, 3..7] [2..5] : Pixel [5, 4] Y : X [i, j] [ k1] assert<Size>[ i ] & assert<Size>[ j ] & assert<5>[ k1]  vérifié à la compilation, à la simulation ou formellement dimension évaluable statiquement, assertion de taille implicite G. Berry, Collège de France 14/05/2013

Bitvecteurs  vecteurs de bits type Byte  bool [8] ; // bitvector 0..7 input Opcode : Byte ; type Word  bool [32] ; // bitvector 0..31 var Memory : Word [MemSize] in ... end constantes ’b010011 é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. G. Berry, Collège de France 14/05/2013

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] }; nom utile au débogage // définition séquentielle map Instruction : Word seq { Opcode [8] , Immediate , // bool Register [7] , Address [16] }; map Instruction : Word { Opcode [0..7] , Immediate [8] , // bool RegisterNum [9..15] , Address [16..31] }; G. Berry, Collège de France 14/05/2013

Conversion unsigned  bitvecteur expr : unsigned<M> u2bin (expr) : bool [binsize(M1)] // écriture binaire minimale u2bin (expr, N) : bool [N] // avec N  binsize(M1) u2gray (expr) : bool [binsize(M1)] // écriture en code Gray u2gray (expr, N) : bool [N] // avec N  binsize(M1) u2onehot (expr) : bool [M] // écriture un seul bit à 1 u2onehot (expr, N) : bool [N] // avec N  M bin2u (6)  ’b110 u2gray (6)  ’b101 u2onehot (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 G. Berry, Collège de France 14/05/2013

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 onehot onehot2u (expr, N) : unsigned<N> // avec N  M G. Berry, Collège de France 14/05/2013

Conversions signed  bitvecteur expr : signed<M> s2bin (expr) : bool [binsize(M1)1] // écriture binaire minimale s2bin (expr, N) : bool [N] // avec N  binsize(M1)1 s2bin (6)  ’b0101 s2bin (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

Signaux purs et valués S : <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

Valeurs simples, signaux temporaires 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 S8 : temp T, // statut, valeur non mémorisée, S3 : // un émetteur max. 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

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

Nouvelle instruction emit ?S3 <= 3 if X>0, next R10 if S4 and ?S4 > 0, next ?R11 <= pre(?S4)+?S5+2 if S6 } sustain { StartStopCommand <= LR, LapCommand <= UR } every LR do emit StartStopCommand || every UR do emit LapCommand  G. Berry, Collège de France 14/05/2013

Boucles sur tableaux I [0] I [1] I [2] O [0] O [1] O [2] 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ération de circuits G. Berry, Collège de France 14/05/2013

Boucles sur tableaux Alternative : tableaux fonctionnels de SCADE 6 emit seq { O [0] <= I [0] , for i < M -1 doup O [ i+1] <= O [ i ] or I [ i+1] end } Mieux pour la simulation logicielle Alternative : tableaux fonctionnels de SCADE 6 G. Berry, Collège de France 14/05/2013

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

InWord  Feeder  InPixel  BasicFilter  OutPixel InPixel : temp unsigned<[8]> InEndOfLine *1 *4 *6 *4 *1 p3 p2 p1 p0 + / 16 InWord : bool[32] OutPixel : unsigned<[8]> OutEndOfLine G. Berry, Collège de France 14/05/2013

Initialisation à 0 InWord  Feeder  InPixel  BasicFilter  OutPixel InPixel : temp unsigned<[8]> InEndOfLine *1 *4 *6 *4 *1 p3 p2 p1 p0 + / 16 InWord : bool[32] OutPixel : unsigned<[8]> OutEndOfLine Initialisation à 0 G. Berry, Collège de France 14/05/2013

Entrée d’un mot, délai initial 2 cycles InWord  Feeder  InPixel  BasicFilter  OutPixel Feeder BasicFilter InPixel : temp unsigned<[8]> InEndOfLine *1 *4 *6 *4 *1 p3 p2 p1 p0 + / 16 InWord : bool[32] OutPixel : unsigned<[8]> OutEndOfLine Entrée d’un mot, délai initial 2 cycles G. Berry, Collège de France 14/05/2013

InWord  Feeder  InPixel  BasicFilter  OutPixel InPixel : temp unsigned<[8]> InEndOfLine *1 *4 *6 *4 *1 p3 p2 p1 p0 + / 16 InWord : bool[32] OutPixel : unsigned<[8]> OutEndOfLine Délai initial 2 cycles G. Berry, Collège de France 14/05/2013

Sortie du premier OutPixel InWord  Feeder  InPixel  BasicFilter  OutPixel Feeder BasicFilter InPixel : temp unsigned<[8]> InEndOfLine *1 *4 *6 *4 *1 p3 p2 p1 p0 + / 16 InWord : bool[32] OutPixel : unsigned<[8]> OutEndOfLine Sortie du premier OutPixel G. Berry, Collège de France 14/05/2013

InWord  Feeder  InPixel  BasicFilter  OutPixel InPixel : temp unsigned<[8]> InEndOfLine *1 *4 *6 *4 *1 p3 p2 p1 p0 + / 16 InWord : bool[32] OutPixel : unsigned<[8]> OutEndOfLine Sortie d’un OutPixel G. Berry, Collège de France 14/05/2013

Entrée d’un mot, sortie d’un OutPixel InWord  Feeder  InPixel  BasicFilter  OutPixel Feeder BasicFilter InPixel : temp unsigned<[8]> InEndOfLine *1 *4 *6 *4 *1 p3 p2 p1 p0 + / 16 InWord : bool[32] OutPixel : unsigned<[8]> OutEndOfLine Entrée d’un mot, sortie d’un OutPixel G. Berry, Collège de France 14/05/2013

InWord  Feeder  InPixel  BasicFilter  OutPixel InPixel : temp unsigned<[8]> InEndOfLine *1 *4 *6 *4 *1 p3 p2 p1 p0 + / 16 InWord : bool[32] OutPixel : unsigned<[8]> OutEndOfLine Sortie d’un OutPixel G. Berry, Collège de France 14/05/2013

InWord  Feeder  InPixel  BasicFilter  OutPixel InPixel : temp unsigned<[8]> InEndOfLine *1 *4 *6 *4 *1 p3 p2 p1 p0 + / 16 InWord : bool[32] OutPixel : unsigned<[8]> OutEndOfLine Sortie d’un OutPixel G. Berry, Collège de France 14/05/2013

Fin de ligne d’entrée, sortie d’un OutPixel InWord  Feeder  InPixel  BasicFilter  OutPixel Feeder BasicFilter InPixel : temp unsigned<[8]> InEndOfLine *1 *4 *6 *4 *1 p3 p2 p1 p0 + / 16 InWord : bool[32] OutPixel : unsigned<[8]> OutEndOfLine Fin de ligne d’entrée, sortie d’un OutPixel G. Berry, Collège de France 14/05/2013

Entrée de 0, sortie d’un OutPixel InWord  Feeder  InPixel  BasicFilter  OutPixel Feeder BasicFilter InPixel : temp unsigned<[8]> InEndOfLine *1 *4 *6 *4 *1 p3 p2 p1 p0 + / 16 InWord : bool[32] OutPixel : unsigned<[8]> OutEndOfLine Entrée de 0, sortie d’un OutPixel G. Berry, Collège de France 14/05/2013

Entrée de 0, sortie OutPixel, fin de ligne de sortie InWord  Feeder  InPixel  BasicFilter  OutPixel Feeder BasicFilter InPixel : temp unsigned<[8]> InEndOfLine *1 *4 *6 *4 *1 p3 p2 p1 p0 + / 16 InWord : bool[32] OutPixel : unsigned<[8]> OutEndOfLine Entrée de 0, sortie OutPixel, fin de ligne de sortie G. 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 G. Berry, Collège de France 14/05/2013

constant WORD_WIDTH : unsigned<> = 32 ; 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 G. Berry, Collège de France 14/05/2013

constant PIXELS_PER_WORD : unsigned<> 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 G. Berry, Collège de France 14/05/2013

constant Coef : unsigned<> [5]= {1, 4, 6, 4, 1} ; data FilterData : constant Coef : unsigned<> [5]= {1, 4, 6, 4, 1} ; // unsigned <7> constant CoefSum : unsigned<> = 16 ; constant INIT_DELAY : unsigned<> = 3 ; end data G. Berry, Collège de France 14/05/2013

interface InPixelIntf : extends PixelData ; interface WordIntf : extends WordData ; output Ready ; input InWord : Word ; end interface interface InPixelIntf : extends PixelData ; input InPixel : temp Pixel ; input InEndOfLine ; end interface interface OutPixelIntf : extends PixelData ; output OutPixel : temp Pixel ; output OutEndOfLine ; end interface G. Berry, Collège de France 14/05/2013

extends OutPixelIntf ; //========== // 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 signal end module G. Berry, Collège de France 14/05/2013

// Interface declarations extends InputLineData ; extends FilterData ; module Feeder : // Interface declarations extends InputLineData ; extends FilterData ; extends WordIntf ; extends mirror InPixelIntf ; G. Berry, Collège de France 14/05/2013

WORDS_PER_LINE EndOfWord signal EndOfWord WORDS_PER_LINE EndOfWord InWord / InPixel (?InWord.p0) / Ready … / InPixel (?InWord.p3) / EndOfWord InPixel (?InWord.p2) / InPixel(0) 2 InPixel / InEndOfLine G. Berry, Collège de France 14/05/2013

// Interface declarations extends FilterData ; extends InputLineData ; module PixelFilter : // Interface declarations extends FilterData ; extends InputLineData ; extends InPixelIntf ; extends OutPixelIntf ; G. Berry, Collège de France 14/05/2013

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 G. Berry, Collège de France 14/05/2013

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 G. Berry, Collège de France 14/05/2013

?OutPixel <= assert<[8]>((?Product [0] + ?Product [1] + || // Calcul des OutPixel sustain { ?OutPixel <= assert<[8]>((?Product [0] + ?Product [1] + ?Product [2] + ?Product [3] + ?Product [4]) / CoefSum) if Product , OutEndOfLine <= InEndOfLine } end signal end module G. Berry, Collège de France 14/05/2013

Registration des sorties Pas d’empilement des chemins critiques  meilleure composition électrique module PixelFilter : // Interface declarations extends FilterData ; extends InputLineData ; extends InPixelIntf ; extends OutPixelIntf ; refine OutPixel : reg ; refine OutEndOfLine : reg ; G. Berry, Collège de France 14/05/2013

next ?OutPixel <= assert<[8]>((?Product [0] + ?Product [1] + || // 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 signal end module G. Berry, Collège de France 14/05/2013

Accélération par pipeline Pour couper le chemin critique, insérer des registres entre produits et somme 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 G. Berry, Collège de France 14/05/2013

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 14/05/2013

Conclusion 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.... Voir cours 6 pour l’implémentation et cours 2013-2014 pour le multi-horloges G. Berry, Collège de France 14/05/2013

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 G. Berry, Collège de France 14/05/2013