Mantle is part of the Magma ecosystem of python programming tools for FPGAs.
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.
- Combinational logic
- Sequential logic
- Memory
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")
- Follow these instructions to install magma
$ git clone https://github.com/phanrahan/mantle
$ cd mantle
$ pip install pytest
$ pip install -e .
$ pytest
You should see something like
==================================== test session starts =====================================
platform darwin -- Python 3.6.2, pytest-3.1.3, py-1.4.34, pluggy-0.4.0
rootdir: .../mantle, inifile:
collected 7 items
tests/ice40/test_ff.py .
tests/mantle40/test_mux.py ..
tests/verilog/test_dff.py .
tests/verilog/test_gates.py ...
================================== 7 passed in 2.78 seconds ==================================