There is an increasing research interest in system level design languages which can carry designers from specification to implementation of system-on-a-chip. Unfortunately, two of the most important goals in designing such a language, are at odds with each other: Heterogeneity requires components of the system to be captured precisely by domain specific models to simplify analysis and synthesis; simplicity requires a consistent notation to avoid confusion. In this paper, we focus on our effort in resolving this dilemma in an extensible language called OpenJ. In contrast to the conventional monolithic languages, OpenJ has a layered structure consisting of the kernel layer, which is essentially an object oriented language designed to be simple, modular and polymorphic; and the open layer, which exports parameterizable language constructs; and the domain layer which precisely captures the computational models essential for embedded systems. The domain layer can be provided by vendors via...