CλaSH (pronounced ‘clash’) is a functional hardware description language that borrows both its syntax and semantics from the functional programming language Haskell. It provides a familiar structural design approach to both combinational and synchronous sequential circuits. The CλaSH compiler transforms these high-level descriptions to low-level synthesizable VHDL, Verilog, or SystemVerilog.
Features of CλaSH:
CλaSH descriptions are strongly typed, yet with a high degree of type inference, enabling both safe and fast prototyping using concise descriptions.
Interactive REPL: load your designs in an interactive interpreter and easily test all parts of your design without needing to setup a test bench first.
Compile your test bench for very fast simulations.
Higher-order functions, in combinations with type inference, result in designs that are fully parametric by default.
Synchronous sequential circuit design based on streams of values, called Signals in CλaSH, lead to natural descriptions of feedback loops.
Support for designing with multiple clock domains, where clock domain crossings are statically verified.
Template language for introducing new VHDL, Verilog, or SystemVerilog primitives.
“CλaSH is a real pleasure to use compared to VHDL. Being able to use Haskell's strong type system really helps speed up development. Modules written in CλaSH are not only easier to maintain, but also easier to compose with one another.”
“CλaSH was an invaluable tool for implementing novel ideas for interactions with FPGAs. It enabled me to develop ambitious digital circuits that I have confidence in.”
“I find it extremely useful because of two things: power of Haskell's compiler and agile support of developers (you). Once I started with CλaSH I had no reason to switch back to VHDL or Python/MyHDL.”
“CλaSH will be to hardware design what Arduino and Raspberry Pi have been to automation.”
“I have needed just half an hour for implementing a PCA9552 (LED driver) simulation in CλaSH and after some initial fixes we could hook it up to our ersatz-I2C bus of the SIM (via sockets) where it worked out of the box.”