World Library  
Flag as Inappropriate
Email this Article


Esterel is a synchronous programming language for the development of complex reactive systems. The imperative programming style of Esterel allows the simple expression of parallelism and preemption. As a consequence, it is well suited for control-dominated model designs.

The development of the language started in the early 1980s, and was mainly carried out by a team of Ecole des Mines de Paris and INRIA led by Gérard Berry. Current compilers take Esterel programs and generate C code or hardware (RTL) implementations (VHDL or Verilog).

The language is still under development, with several compilers out. The commercial version of Esterel is the development environment Esterel Studio. The company that commercialize it (Synfora) initiated a normalization process with the IEEE in April 2007 however the working group (P1778) dissolved March 2011. The Esterel v7 Reference Manual Version v7 30 – initial IEEE standardization proposal is publicly available.


  • The Multiform Notion of Time 1
  • Signals 2
    • Signal Coherence rules 2.1
  • The language constructs 3
    • Primitive Esterel statements 3.1
    • Derived Esterel statements 3.2
    • Other Esterel statements 3.3
    • Example (ABRO) 3.4
  • Advantages of Esterel 4
  • Disadvantages of Esterel 5
  • See also 6
  • References 7
  • External links 8

The Multiform Notion of Time

The notion of time used in Esterel differs from that of non-synchronous languages in the following way: The notion of physical time is replaced with the notion of order. Only the simultaneity and precedence of events are considered. This means that the physical time does not play any special role. This is called multiform notion of time. An Esterel program describes a totally ordered sequence of logical instants. At each instant, an arbitrary number of events occur (including 0). Event occurrences that happen at the same logical instant are considered simultaneous. Other events are ordered as their instances of occurrences. There are two types of statements: Those that take zero time (execute and terminate in the same instant) and those that delay for a prescribed number of cycles.


Signals are the only means of communication. There are valued and non-valued signals. They are further categorized as being input, output, or local signals. A signal has the property of being either present or absent in an instant. Valued signals also contain a value. Signals are broadcast across the program, and that means any process can read or write a signal. The value of a valued signal can be determined in any instant, even if the signal is absent. The default status of a signal is absent. Signals remain absent until they are explicitly set to present using the emit statement. Communication is instantaneous, that means that a signal emitted in a cycle is visible immediately. Note that one can communicate back and forth in the same cycle.

Signal Coherence rules

  • Each signal is only present or absent in a cycle, never both.
  • All writers run before any readers do.


present A else
    emit A

is an erroneous program: the writer "emit A" must run before the reader "present A", but the semantics of the language requires the "present A" to be performed first, resulting in a conflict in the program's semantics.

The language constructs

Primitive Esterel statements

Pure Esterel has eleven primitive statements.[1]

nothing Terminates immediately with no other effect.
pause Blocks control flow in the current cycle for resumption in the next cycle.
p ; q Runs p until it terminates and then, in the same reaction, start q.
p || q Runs p and q in parallel
loop p end Restart the body p as soon as it terminates. Every path through the loop body must contain at least one pause statement to avoid unbounded looping within a single reaction.
signal S in p end Declares a local signal.
emit S Make signal S present in the current instant. A signal is absent unless it is emitted.
present S then p else q end If signal S is present in the current instant, immediately run p, otherwise run q.
suspend p when S Suspends the execution of the body in instants where S is present.
trap T in p end Declare a labeled escape block.
exit T Jump to the end of the innermost T-labeled escape block.

Derived Esterel statements

Esterel has several derived constructions:[2][3]

Derived statement Expansion
halt loop pause end
sustain s loop emit s; pause end
present s then p end present s then p else nothing end
await s trap T in loop pause; present s then exit T end end loop end
await immediate s trap T in loop present s then exit T end; pause end loop end
suspend p when immediate s suspend present s then pause end; p when s
abort p when (immediate) s trap T in suspend p when (immediate) s; exit T || await (immediate) s; exit T; end
weak abort p when (immediate) s trap T in p; exit T || await (immediate) s; exit T; end
loop p each s loop abort p ; halt when s end loop
every (immediate) s do p end every await (immediate) s; loop p each s

Other Esterel statements

The full Esterel language also has statements for declaring and instantiating modules, for variables, for calling external procedures, and for valued signals.

Example (ABRO)

The following program emits the output O as soon as both inputs A and B have been received. Reset the behaviour whenever the input R is received.

module ABRO:
input A, B, R;
output O;

  [ await A || await B ];
  emit O
each R

end module

Advantages of Esterel

  • Model of time gives programmer precise control
  • Concurrency convenient for specifying control systems
  • Completely deterministic
  • Finite-state language
    • Execution time predictable
    • Much easier to verify formally
  • Can be implemented in hardware as well as in software

Disadvantages of Esterel

  • Finite-state nature of the language limits flexibility (but expressivity is sufficient for the chosen application field)
  • Semantic challenges
    • Avoiding causality violations is often difficult
    • Difficult to compile in the general case, but simple correctness criteria exist

See also


  1. ^ Berry, Gérard (1999). "The Constructive Semantics of Pure Esterel".  
  2. ^ Berry, Gérard (June 2000). "The Esterel v5 Language Primer". Ecole des Mines and INRIA.  
  3. ^  

External links

  • Synfora, Inc.
  • Esterel Web
  • The Esterel Language
  • The Columbia Esterel Compiler: An open-source Esterel compiler
This article was sourced from Creative Commons Attribution-ShareAlike License; additional terms may apply. World Heritage Encyclopedia content is assembled from numerous content providers, Open Access Publishing, and in compliance with The Fair Access to Science and Technology Research Act (FASTR), Wikimedia Foundation, Inc., Public Library of Science, The Encyclopedia of Life, Open Book Publishers (OBP), PubMed, U.S. National Library of Medicine, National Center for Biotechnology Information, U.S. National Library of Medicine, National Institutes of Health (NIH), U.S. Department of Health & Human Services, and, which sources content from all federal, state, local, tribal, and territorial government publication portals (.gov, .mil, .edu). Funding for and content contributors is made possible from the U.S. Congress, E-Government Act of 2002.
Crowd sourced content that is contributed to World Heritage Encyclopedia is peer reviewed and edited by our editorial staff to ensure quality scholarly research articles.
By using this site, you agree to the Terms of Use and Privacy Policy. World Heritage Encyclopedia™ is a registered trademark of the World Public Library Association, a non-profit organization.

Copyright © World Library Foundation. All rights reserved. eBooks from Project Gutenberg are sponsored by the World Library Foundation,
a 501c(4) Member's Support Non-Profit Organization, and is NOT affiliated with any governmental agency or department.