Chortl: Combinator Haskell Operators for RTL
Chortl is Julian Kongslie's Register-Transfer Language (RTL) embedding in Haskell; an extremely simple Haskell EDSL for hardware description. It takes advantage of Haskell's laziness, monads, typeclasses, and user-definable operators to allow easy description of a digital "circuit" (i.e., dataflow diagram) with the full power of Haskell evaluation to make the job easier. Currently, Chortl circuits are compiled out to Verilog, which can then be compiled with a Verilog compiler for hardware such as FPGA's. In the short term, we also plan to be able to compile them out to C code, circuit diagrams, or circuit simulator input; in the longer term, we may add Lava or EDIF generators.
Chortl circuit descriptions look vaguely like collections of flowgraph segments. The segments are bound together with names under a Chortl monad. One can describe new blocks either as compositions of existing blocks, or as "magic" blocks with explicit code generation rules.
Chortl features include simplicity, a notation reasonably comprehensible by HW folks, the ability to define custom "components" such as adder trees in full Haskell, simplicity, and simplicity. This is currently all very experimental and poorly-documented. We would welcome ideas, suggestions and help to make it better.
For other Haskell-based digital design software, see the Haskell wiki page on this topic.
Chortl is available as: