Introduction * Goals * Outline *Context * Other FHDLs (short, Christiaan has details) * Advantages of clash / why clash? Haskell as hardware * Simple function -> component interpretation (Model: Structure) * Choice / Case * Types * Partial application * Model: State * Explicit vs implicit passing of state (e.g, delay) * Explicit vs implicit marking * Interpret: Polymorphism * Interpret: Higher order * Recursion Prototype * Choice of Haskell * VHDL / Verilog / EDIF etc. Why VHDL? * Stages (-> Core, Normalization, -> VHDL) . Core - description of the language * Expressions Typing Implementation issues -- Which? State annotations Normalization * Normal form * Rules used . Properties / Proofs (termination, soundness, completeness, determinism) Future work * Boilerplate reduction (State distribution & pipelining) * Recursion * Multiple time domains (Events) -- Also, clock line optimization / -- write enable * Multiple cycle descriptions * Higher order state * New language * Don't care TODO: Define user / developer TODO: Hardware description / model vs program TODO: Separate compilation / Prelude TODO: User-defined type classes (future work?) TODO: Entity / Architecture / Component vs Function? TODO: Expand on "representable" TODO: Register TODO: Variable vs binder TODO: simplification -> Normalisation? TODO: Use saturated (application) instead of complete (application)? TODO: core => Core TODO: Say something about implementation differences with transformation specs TODO: Say something about the builtin functions somewhere (ref: christiaan) TODO: Future work: Use Cλash TODO: Abstract TODO: Preface TODO: Top level function -> top level binder