LUSTRE: a declarative language for real-time programming
POPL '87 Proceedings of the 14th ACM SIGACT-SIGPLAN symposium on Principles of programming languages
Matrix multiplication via arithmetic progressions
Journal of Symbolic Computation - Special issue on computational algebraic complexity
The ESTEREL synchronous programming language: design, semantics, implementation
Science of Computer Programming
Communications of the ACM
Distributed Implementation of SIGNAL: Scheduling & Graph Clustering
ProCoS Proceedings of the Third International Symposium Organized Jointly with the Working Group Provably Correct Systems on Formal Techniques in Real-Time and Fault-Tolerant Systems
Constructive Analysis of Cyclic Circuits
EDTC '96 Proceedings of the 1996 European conference on Design and Test
Synchronous Distribution of SIGNAL Programs
HICSS '96 Proceedings of the 29th Hawaii International Conference on System Sciences Volume 1: Software Technology and Architecture
The semantics and execution of a synchronous block-diagram language
Science of Computer Programming
Leveraging synchronous language principles for heterogeneous modeling and design of embedded systems
EMSOFT '07 Proceedings of the 7th ACM & IEEE international conference on Embedded software
Clock-directed modular code generation for synchronous data-flow languages
Proceedings of the 2008 ACM SIGPLAN-SIGBED conference on Languages, compilers, and tools for embedded systems
Modularity vs. reusability: code generation from synchronous block diagrams
Proceedings of the conference on Design, automation and test in Europe
Modular Code Generation from Triggered and Timed Block Diagrams
RTAS '08 Proceedings of the 2008 IEEE Real-Time and Embedded Technology and Applications Symposium
Boolean matrix multiplication and transitive closure
SWAT '71 Proceedings of the 12th Annual Symposium on Switching and Automata Theory (swat 1971)
Modular static scheduling of synchronous data-flow networks: an efficient symbolic representation
EMSOFT '09 Proceedings of the seventh ACM international conference on Embedded software
Towards verified synthesis of ProCom, a component model for real-time embedded systems
Proceedings of the 14th international ACM Sigsoft symposium on Component based software engineering
Separate compilation of hierarchical real-time programs into linear-bounded Embedded Machine code
Science of Computer Programming
Journal of Functional Programming - Dedicated to ICFP 2009
Semantic Translation of Simulink Diagrams to Input/Output Extended Finite Automata
Discrete Event Dynamic Systems
Refinement-oriented models of Stateflow charts
Science of Computer Programming
Compositionality in synchronous data flow: Modular code generation from hierarchical SDF graphs
ACM Transactions on Embedded Computing Systems (TECS)
Determinate composition of FMUs for co-simulation
Proceedings of the Eleventh ACM International Conference on Embedded Software
Design synthesis and optimization for automotive embedded systems
Proceedings of the 2014 on International symposium on physical design
Hi-index | 0.00 |
We study modular, automatic code generation from hierarchical block diagrams with synchronous semantics. Such diagrams are the fundamental model behind widespread tools in the embedded software domain, such as Simulink and SCADE. Code is modular in the sense that it is generated for a given composite block independently from context (i.e., without knowing in which diagrams the block is to be used) and using minimal information about the internals of the block. In previous work, we have shown how modular code can be generated by computing a set of interface functions for each block and a set of dependencies between these functions that is exported along with the interface. We have also introduced a quantified notion of modularity in terms of the number of interface functions generated per block, and showed how to minimize this number, which is essential for scalability. Finally, we have exposed the fundamental trade-off between modularity and reusability (set of diagrams the block can be used in). In this paper we explore another trade-off: modularity vs. code size. We show that our previous technique, although it achieves maximal reusability and is optimal in terms of modularity, may result in code replication and therefore large code sizes, something often unacceptable in an embedded system context. We propose to remedy this by generating code with no replication, and show that this generally results in some loss of modularity. We show that optimizing modularity while maintaining maximal reusability and zero replication is an intractable problem (NP-complete). We also show that this problem can be solved using a simple iterative procedure that checks satisfiability of a sequence of propositional formulas. We report on a new prototype implementation and experimental results. The latter demonstrate the practical interest in our methods.