This article describes FSMLanguage, a domain-specific language for HW/SW co-design targeting platform FPGAs. Modern platform
FPGAs provide a wealth of configurable logic in addition to embedded processors, distributed RAM blocks, and DSP slices in
order to help facilitate building HW/SW co-designed systems. A technical challenge in building such systems is that the practice
of designing software and hardware requires different areas of expertise and different description domains, i.e. languages and vocabulary. FSMLanguage attempts to unify these domains by defining a way
to describe HW/SW co-designed systems in terms of sets of finite-state machines – a concept that is reasonably familiar to
both software programmers and hardware designers. FSMLanguage is a domain-specific language for describing the functionality
of a finite-state machine in such a way that its implementation can be re-targeted to software or hardware in an efficient
manner. The efficiency is achieved by exploiting the resources found within modern platform FPGAs – namely the distributed
RAM blocks, soft-core processors, and the ability to construct dedicated communication channels between FSMs in the reconfigurable
fabric. The language and its compiler promote uniformity in the description of a HW/SW co-designed system, which allows a
system designer to make partitioning and implementation strategy decisions later in the design cycle.