Clash is an open-source hardware description language (HDL) that closely mirrors the syntax and semantics of the Haskell programming language. Clash is mainly developed at QBayLogic, but is freely available to anyone. Clash allows developers to write high level synchronous sequential descriptions. Clash can turn these descriptions into low-level Verilog or VHDL, thus achieving high interoperability with existing HDL tools.
Clash is fully open-source software and published on GitHub under BSD-2. This means you can look into its internals and freely modify it for your organization’s needs.
Clash designs compile extremely quickly, as witnessed by Myrtle.ai. Their deep neural network accelerator, MAU, compiles in less than 15 seconds from a cold start. Once Clash is warmed up, design changes can be recompiled in less than a second. A (re)compiled design can be simulated and interactively inspected.
It offers a fully-featured REPL. Design parts can be inspected, simulated, and debugged interactively – without having to write separate test files. Nowadays, this feature can be found in many software programming languages, most notably Python, but it remains unavailable for many HDLs.
Inherited from the Haskell programming language, Clash offers a modern way of tracking dependencies and publishing reusable components. It can reuse many of the packages already available on hackage.haskell.org, thanks to its compatibility with existing Haskell software libraries and ecosystem.
Clash uses a modern, static type system. This helps to catch errors at a very early stage of a design pipeline. For example, Clash designers don’t have to worry about accidentally mixing up signals from different clock domains. In general, it allows designers to develop reusable components that communicate their intent clearly and statically prevent illegal states from ever occurring.
Clash is built on strong foundations and contains very few hard coded constructs. This allows developers to extend Clash to their heart’s desire. Designers can write their own domain specific languages, frameworks, and abstractions – and they can still expect it to compile quickly.