-\todo{Add references}
- Recently, there have been some renewed efforts, especially using the Haskell
- functional language. Examples are Lava, ForSyde, ..., which are all a form of an
- embedded domain specific language. Each of these have a slightly different
- approach, but all of these do some trickery inside the Haskell language
- itself, meaning you write a program that generates a hardware circuit,
- instead of describing the circuit directly (either by running the haskell
- code after compilation, or using Template Haskell to inspect parts of the
- code you have written). This allows the full power of Haskell for generating
- a circuit. However it also creates severe limitations in the use of the
- language (you can't use case expressions in Lava, since they would be
- executed only once during circuit generation) and extra notational overhead.
-
- We will now have a look at the existing hardware description languages,
- both conventional and functional to see the fields in which Cλash is
- operating.
-
- \section{Conventional hardware description languages}
- Considering that we already have some hardware description languages like
- \small{VHDL} and Verilog, why would we need anything else? By introducing
- the functional style to hardware description, we hope to obtain a hardware
- description language that is:
- \startitemize
- \item More consise. Functional programs are known for their conciseness
- and ability to abstract away common patterns. This is largely enabled
- by features like an advanced type system with polymorphism and higher
- order functions.
- \item Type-safer. Functional programs typically have a highly expressive
- type system, which makes it harder to write incorrect code.
- \item Easy to process. Functional languages have nice properties like
- purity \refdef{purity} and single binding behaviour, which make it easy
- to apply program transformations and optimizations and could potentially
- simplify program verification.
- \stopitemize
-