Separate compilation for synchronous programs

Esterel and other imperative synchronous languages offer a rich set of statements, which can be used to conveniently describe complex control behaviors in a concise, but yet precise way. In particular, the ability to arbitrarily nest all kinds of statements including loops, local declarations, sequential and parallel control, as well as several kinds of preemption statements leads to a powerful programming language. However, this orthogonal design imposes difficult problems for the modular or separate compilation, which has to deal with special problems like the instantaneous reincarnation of locally declared variables. This paper presents a compilation procedure allowing to separately compile modules of a synchronous language. Our approach is based on two new achievements: First, we derive the information that is required for a linker to combine already compiled modules. This information is stored in a file written in an intermediate format, which is the target of our compilation procedure and the source of the linker. Second, we describe a compilation procedure for a typical imperative synchronous language to generate this intermediate format. We have implemented the approach in the upcoming version 2.0 of our Averest system.

[1]  K. Mani Chandy,et al.  Parallel program design - a foundation , 1988 .

[2]  Michel Poize,et al.  TAXYS: A Tool for the Development and Verification of Real-Time Embedded Systems , 2001, CAV.

[3]  Leslie Lamport,et al.  The temporal logic of actions , 1994, TOPL.

[4]  Tobias Schüle,et al.  Causality analysis of synchronous programs with delayed actions , 2004, CASES '04.

[5]  Robert de Simone,et al.  Optimizations for faster execution of Esterel programs , 2003, First ACM and IEEE International Conference on Formal Methods and Models for Co-Design, 2003. MEMOCODE '03. Proceedings..

[6]  Stephen A. Edwards,et al.  An Esterel compiler for large control-dominated systems , 2002, IEEE Trans. Comput. Aided Des. Integr. Circuits Syst..

[7]  Stephen A. Edwards,et al.  Separate Compilation for Synchronous Modules , 2005, ICESS.

[8]  Edward A. Lee,et al.  A causality interface for deadlock analysis in dataflow , 2006, EMSOFT '06.

[9]  Nicolas Halbwachs,et al.  Implementing Reactive Programs on Circuits: A Hardware Implementation of LUSTRE , 1991, REX Workshop.

[10]  Nicolas Halbwachs,et al.  Synchronous Programming of Reactive Systems , 1992, CAV.

[11]  Gérard Berry,et al.  The Esterel Synchronous Programming Language: Design, Semantics, Implementation , 1992, Sci. Comput. Program..

[12]  Klaus Schneider A Verified Hardware Synthesis of Esterel Programs , 2000, DIPES.

[13]  Luciano Lavagno,et al.  ECL: a specification environment for system-level design , 1999, DAC '99.

[14]  Pascal Aubry,et al.  GC: the data-flow graph format of synchronous programming , 1995 .

[15]  Tobias Schüle,et al.  A Verified Compiler for Synchronous Programs with Local Declarations , 2006, SLAP@ETAPS.

[16]  K. Schneider,et al.  A new method for compiling schizophrenic synchronous programs , 2001, CASES '01.

[17]  Reino Kurki-Suonio,et al.  The DisCo Language and Temporal Logic of Actions , 1990 .

[18]  Stephen A. Edwards,et al.  Compiling Esterel into Static Discrete-Event Code , 2006, SLAP@ETAPS.

[19]  Gérard Berry,et al.  The foundations of Esterel , 2000, Proof, Language, and Interaction.

[20]  Gérard Berry,et al.  The constructive semantics of pure esterel , 1996 .

[21]  Klaus Schneider,et al.  Modular Compilation of Synchronous Programs , 2006, DIPES.

[22]  Klaus Schneider,et al.  Efficient code generation from synchronous programs , 2006, Fourth ACM and IEEE International Conference on Formal Methods and Models for Co-Design, 2006. MEMOCODE '06. Proceedings..

[23]  S. Edwards Compiling Esterel into sequential code , 2000, Proceedings of the Seventh International Workshop on Hardware/Software Codesign (CODES'99) (IEEE Cat. No.99TH8450).

[24]  Klaus Schneider,et al.  Proving the Equivalence of Microstep and Macrostep Semantics , 2002, TPHOLs.

[25]  David L. Dill,et al.  The Murphi Verification System , 1996, CAV.

[26]  Stephen Edwards,et al.  ESUIF: An Open Esterel Compiler , 2002, SLAP@ETAPS.

[27]  K. Mani Chandy Parallel program design , 1989 .

[28]  Stephen A. Edwards,et al.  The synchronous languages 12 years later , 2003, Proc. IEEE.

[29]  Michel Poize,et al.  SAXO-RT: Interpreting Esterel Semantic on a Sequential Execution Structure , 2002, SLAP@ETAPS.

[30]  Gérard Berry,et al.  A hardware implementation of pure ESTEREL , 1992 .

[31]  A. Sangiovanni-Vincentelli,et al.  Formal analysis of synchronous circuits , 1996 .

[32]  Gérard Berry Synchronous languages for hardware and software reactive systems , 1997 .

[33]  Robert de Simone,et al.  Curing schizophrenia by program rewriting in Esterel , 2004, Proceedings. Second ACM and IEEE International Conference on Formal Methods and Models for Co-Design, 2004. MEMOCODE '04..

[34]  Klaus Schneider,et al.  Embedding imperative synchronous languages in interactive theorem provers , 2001, Proceedings Second International Conference on Application of Concurrency to System Design.

[35]  Tobias Schüle,et al.  Maximal causality analysis , 2005, Fifth International Conference on Application of Concurrency to System Design (ACSD'05).

[36]  Stephen A. Edwards,et al.  The Synchronous Languages Twelve Years Later , 1997 .

[37]  Klaus Schneider,et al.  The Synchronous Programming Language Quartz , 2009 .

[38]  Klaus Schneider,et al.  Performing causality analysis by bounded model checking , 2008, 2008 8th International Conference on Application of Concurrency to System Design.