A Functional Approach to Hardware Software Co-Design
Licentiatavhandling, 2018

Developing software for embedded systems presents quite the challenge---not only do these systems demand good knowledge of the hardware they run on, but their limited resources also make it difficult to achieve efficiency. For embedded systems with different kinds of processing elements, the challenge is even greater; the presence of heterogeneous elements both raises all of the issues associated with homogeneous systems, and may also cause non-uniform system development and capability.

In this thesis we explore a functional approach to heterogeneous system development, with a staged hardware software co-design language embedded in Haskell, to address many of the modularity problems typically found in such systems. This staged approach enables designers to build their applications from reusable components and skeletons, while retaining control over much of the generated source code. Design exploration also benefits from the functional approach, since Haskell's type classes can be used to ensure that certain operations will be available. As a result, a developer can not only write for hardware and software in the co-design language, but she can also write generic programs that are suitable for both.

Internally, the co-design language is based on a monadic representation of imperative programs that abstracts away from its underlying statement, expression, and predicate types by establishing an interface to their respective interpreters. Programs are thus loosely coupled to their underlying types, giving a clear separation of concerns. The compilation process is expressed as a series of translations between progressively smaller typed languages, which safeguards against many common errors.

In addition to the hardware software co-design language, this thesis also introduces a language for expressing digital signal processing algorithms, using a model of synchronous data-flow that is embedded in Haskell. The language supports definitions in a functional style, reducing the gap between an algorithm's mathematical specification and its implementation. A vector language is also presented, which builds on a functional representation that guarantees fusion for arrays. Both of these languages are intended to be extensions of the co-design language, but neither one is dependent on it and can thus be used to extend other languages as well.

domain specific languages

functional programming

signal processing

code generation

Opponent: Dimitrios Vytiniotis, Deep Mind, London


Markus Aronsson

Chalmers, Data- och informationsteknik, Funktionell programmering

Hardware Software Co-design in Haskell

ICFP Workshops 2017 - 10th ACM SIGPLAN International Haskell Symposium (Haskell 2017),; (2017)

Konferensbidrag (offentliggjort, men ej förlagsutgivet)

Stream Processing for Embedded Domain Specific Languages

26th Symposium on Implementation and Application of Functional Languages, IFL 2014, Northeastern University Boston, United States, 1 October 2014 through 3 October 2014,; (2014)

Konferensbidrag (offentliggjort, men ej förlagsutgivet)

Hårdvaruacceleration av algoritmer genom funktionell programmering

Vetenskapsrådet (VR), 2012-01-01 -- 2014-12-31.


Informations- och kommunikationsteknik


Inbäddad systemteknik

Datavetenskap (datalogi)



Chalmers tekniska högskola


Opponent: Dimitrios Vytiniotis, Deep Mind, London

Mer information

Senast uppdaterat