ReWire is a compiler for a subset of Haskell to Verilog and VHDL, suitable for synthesis and implementation on FPGAs. ReWire enables a semantics-directed style of synchronous hardware development, based on reactive resumption monads. See the online documentation for more information.
Make sure Haskell Stack is installed; e.g., for linux machines:
$ sudo apt install haskell-stack
Or, if you have a Mac, haskell-stack is on homebrew:
$ brew install haskell-stack
To clone this repo, build, and install the rwc executable to ~/.local/bin:
$ git clone https://github.com/twosixlabs/ReWire
$ cd ReWire
$ stack install
See rwc --help for a list of supported options and the tests directory for
some examples.
-
Support for a vector library with lengths encoded using type-level natural numbers (compatible with GHC using the
GHC.TypeLits.Normalisetypechecker plugin). E.g.,{-# LANGUAGE DataKinds #-} import ReWire type W n = Vec n Bool a :: W 2 a = fromList [False, True] c :: W 4 c = a ++ (fromList [False] :: W 1)See
rewire-user/src/{ReWire.hs, ReWire/Bits.hs, RWC/Primitives.hs}for supported operations. -
Improved the ability to test ReWire programs with GHC by giving many more RWC primitives GHC-compatible implementations. See
rewire-user/src/RWC/Primitives/hsfor a list of RWC primitives and their GHC-compatible implementations.
Distribution Statement ‘A’ (Approved for Public Release, Distribution Unlimited). This work is supported in part by DARPA. The views, opinions, and/or findings expressed are those of the author(s) and should not be interpreted as representing the official views or policies of the Department of Defense or the U.S. Government.