Mantle is part of the Magma ecosystem of Python hardware contruction tools.
Magma is a programming model for building hardware. The main abstraction in Magma is a Circuit. Circuits are created and then wired together. Magma circuits can be saved as structural verilog files.
Mantle is a library of useful circuits. Examples of mantle circuits are logic operators, arithmetic operators, comparison operators, multiplexers, decoders and encoders, registers, counters, shift regiseters and memory.
Loam is used to model FPGAs, peripherals, parts (ICs) and boards. Loam makes it easy to build applications on a variety of different FPGA demonstration boards.
Currently, Mantle supports generic verilog and the Lattice ice40 (and its open source icestorm toolchain). A Xilinx (spartan3, spartan6, zynq) backends will be released soon. An Altera backend is in the works.
Documentation is hosted at http://magma-mantle.readthedocs.io/
You can also browse the markdown files contained in docs/
directly.
There also exist libraries for low-level FPGA-specific primitives.
By default Mantle is configured to use the CoreIR implementation, equivalent to:
import magma as m
m.set_mantle_target("coreir")
Other options include: verilog
and lattice
.
Mantle can also be configured to synthesize low-level primitives for a particular FPGA.
For example, to use mantle with the Lattice ice40,
set the MANTLE_TARGET
environment variable.
m.set_mantle_target("ice40")
$ git clone https://github.com/phanrahan/mantle
$ cd mantle
$ pip install pytest
$ pip install -e .
$ ./scripts/run_tests.sh # this should pass