/mantle

mantle library

Primary LanguageVerilogOtherNOASSERTION

Mantle

Build Status

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.

Documentation

There also exist libraries for low-level FPGA-specific primitives.

Configuring Mantle

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")

Setup

$ 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 ==================================