The ECL (Esterel-C Language) project is a system-level specification research project originating at Cadence Berkeley Laboratories. The project began in 1996, was first released to the public in March 2000, and was put on sourceforge in March 2001.
ECL is a language and a corresponding compiler suite for functional specification of reactive embedded systems. It can be used either stand-alone or in combination with system-level design tools, such as Cadence's VCC tool exploration of hardware/software implementation tradeoffs, or the U.C. Berkeley freely downloadable POLIS tool. For use with VCC, see the section in the documentation that accompanies ECL (ecl/doc/ecl_doc/*.tex).
Each ECL release contains the source code, regression tests, and LaTeX documentation.
What is ECL? ECL is a language for embedded
system specification. ECL stands for Esterel-C Language; the term is used both for the
language and its compiler. The language is ANSI-C with added constructs inspired by Esterel for specifying reactivity (signal communication,
pre-emption, and concurrency). It conveniently supports specification of mixed
control/data modules. The compilation is performed by splitting the source code into
reactive Esterel code and data-dominated C code. The reactive portion can be robustly
optimized and synthesized to either hardware or software, while the C residual code must
be implemented in software as is. ECL was developed by Luciano Lavagno, Roberto Passerone,
and Ellen Sentovich.
An ECL module is compiled to a pure Esterel part and some C residue code. These together comprise a single reactive block. The Esterel part, which contains all reactive statements, is converted to a single extended FSM, and will have the most flexibility: one can choose a hardware or software implementation and explore tradeoffs between the two by estimating the size/speed of the resulting hardware/software. The (optional) C part, called by the extended FSM, contains all instantaneous loops, data type definitions, and those C constructs that have no equivalent in Esterel.
Since ECL supports full ANSI C, it handles pure C input and thus can import legacy code, with very small interface modifications (to make it reactive and use I/O ports rather than function arguments). Such code can later gradually be rewritten in a more reactive style, thereby taking advantage of the enhanced synthesis and optimization provided by the ECL flow. For example, one might take a protocol stack written in C and encapsulate only the top level in an ECL module. During a subsequent refinement, the routines computing the CRC and transmitting bits can be converted into modules (by replacing function calls with event emissions, for example) and further synthesized: partitioned into HW/SW, optimized, and analyzed.
Notes on Languages