CAES同步硬件语言
Clash is a functional hardware description language that borrows both
its syntax and semantics from the functional programming language
Haskell. The Clash compiler transforms these high-level descriptions to
low-level synthesizable VHDL, Verilog, or SystemVerilog.
Features of Clash:
Strongly typed, but with a very high degree of type inference, enabling both
safe and fast prototyping using concise descriptions.
Interactive REPL: load your designs in an interpreter and easily test all
your component without needing to setup a test bench.
Higher-order functions, with type inference, result in designs that are
fully parametric by default.
Synchronous sequential circuit design based on streams of values, calledSignal
s, lead to natural descriptions of feedback loops.
Support for multiple clock domains, with type safe clock domain crossing.
Clash benefits from an active community. Whether you need a question answered or
want to contribute to open-source features, browse the features below to make
the most of Clash.
Check out clash-lang.org/install to install the latest stable release of Clash, or to setup a Clash project.
Get the source code using Git and enter the cloned directory:
git clone git@github.com:clash-lang/clash-compiler.git
# Alternatively, if you haven't setup SSH keys with GitHub:
# git clone https://github.com/clash-lang/clash-compiler.git
cd clash-compiler
To check out a released version, use:
git checkout v1.2.3
To checkout a release branch use:
git checkout 1.2
Note that release branches might contain non-released patches.
Linux | Windows | macOS | Clash (released) | Clash (development version) | |
---|---|---|---|---|---|
8.6 | ✔️ | ✔️ | ✔️ | 1.0 - 1.8 | ❌ |
8.8 | ✔️ | ❌ | ✔️ | 1.0 - 1.8 | ❌ |
8.10 | ✔️ | ✔️ | ❌ | 1.2 - 1.8 | ✔️ |
9.0 | ✔️ | ✔️2 | ✔️ | 1.4 - 1.8 | ✔️ |
9.2 | ⚠️1 | ⚠️1 | ⚠️1 | 1.8 | ⚠️1 |
9.4 | ⚠️3 ️ | ⚠️3 | ️⚠️3 ️ | 1.8 | ✔️ |
9.6 | ✔️3 | ✔️3,4 | ✔️3 | 1.8 | ✔️ |
9.8 | ✔️ | ✔️4 | ✔️ | 1.8 | ️✔️ |
9.10 | ✔️ | ✔️4 | ✔️ | 1.8 | ️✔️ |
1 GHC 9.2 contains a regression, rendering Clash error messages indecipherable. This change was reverted in 9.4.
2 GHC 9.0.2 on Windows fails to compile clash-cores
. We therefore don’t run the Clash test suite on CI for this combination.
3 Clash starts extremely slowly when compiled with 9.4.8 up to and including 9.6.2. Consider downgrading to 9.4.7 or upgrading to 9.6.3 and up.
4 Clash starts extremely slowly on Windows with GHC 9.6 through 9.10, consider downgrading to 9.4.7
To use Cabal you need both Cabal and GHC installed on your system. We recommend using ghcup. For more information, see https://www.haskell.org/downloads/.
To run clash
use:
cabal v2-run -- clash
If this fails, make sure you’ve got an up-to-date package index:
cabal update
Install Stack and run:
stack run -- clash
Or use Nix to get a shell with the clash
and clashi
binaries on your PATH:
# Start the default dev shell
nix develop .
# Start a dev shell with a specific GHC version
nix develop .#ghc961
You will need a modern version of nix with support for the new-style nix
command and flakes (2.4 or newer). Support for these must still be manually
enabled, this can be done by setting
experimental-features = nix-command flakes
in your nix.conf
.
To automatically enter and exit the nix
environment on directory change, you
can install direnv
andnix-direnv
and write the
following to a .envrc
file in the root of this repository:
use flake
watch_file nix/*
Upon adding or changing this file you must direnv allow
in order for the file
to be automatically loaded / reloaded on project changes.
Individual packages / applications can also be built or run using the nix
build
and nix run
commands, i.e.
nix build .#clash-ghc
nix run .#clashi