nextpnr/machxo2
gatecat c7c13cd95f Remove isValidBelForCell
This Arch API dates from when we were first working out how to
implement placement validity checking, and in practice is little used by
the core parts of placer1/HeAP and the Arch implementation involves a
lot of duplication with isBelLocationValid.

In the short term; placement validity checking is better served by the
combination of checkBelAvail and isValidBelForCellType before placement;
followed by isBelLocationValid after placement (potentially after
moving/swapping multiple cells).

Longer term, removing this API makes things a bit cleaner for a new
validity checking API.

Signed-off-by: gatecat <gatecat@ds0.me>
2021-02-16 13:31:36 +00:00
..
examples machxo2: Add prefix parameter to simtest.sh. Remove show command from 2021-02-12 10:36:59 +00:00
.gitignore machxo2: Update with Arch API changes 2021-02-12 10:36:59 +00:00
arch_pybindings.cc Remove isValidBelForCell 2021-02-16 13:31:36 +00:00
arch_pybindings.h machxo2: Python bindings and stub GUI 2021-02-12 10:40:03 +00:00
arch.cc Remove isValidBelForCell 2021-02-16 13:31:36 +00:00
arch.h Remove isValidBelForCell 2021-02-16 13:31:36 +00:00
archdefs.h machxo2: Misc tidying up 2021-02-12 10:43:15 +00:00
bitstream.cc machxo2: Use snake_case for non-ArchAPI functions 2021-02-12 10:36:59 +00:00
bitstream.h machxo2: Add/fix copyright banners. 2021-02-12 10:36:59 +00:00
cells.cc machxo2: Update with Arch API changes 2021-02-12 10:36:59 +00:00
cells.h machxo2: Add packing logic to handle FFs fed with constant value; UART test core routes. 2021-02-12 10:36:59 +00:00
CMakeLists.txt Update machxo2 backend with build system changes. 2021-02-12 10:36:59 +00:00
config.cc machxo2: Add stub bitstream writer plus support files. 2021-02-12 10:36:59 +00:00
config.h machxo2: Add stub bitstream writer plus support files. 2021-02-12 10:36:59 +00:00
constids.inc machxo2: Fix REGMODE identifier (per slice, not per-FF). 2021-02-12 10:36:59 +00:00
facade_import.py machxo2: Convert facade_import to use pybind API from pytrellis. 2021-02-12 10:36:59 +00:00
family.cmake machxo2: Python bindings and stub GUI 2021-02-12 10:40:03 +00:00
main.cc machxo2: Use snake_case for non-ArchAPI functions 2021-02-12 10:36:59 +00:00
pack.cc machxo2: Update with Arch API changes 2021-02-12 10:36:59 +00:00
README.md machxo2: Prepare README.md for first PR. 2021-02-12 10:36:59 +00:00

nextpnr-machxo2

Experimental FOSS Place And Route backend for the Lattice MachXO2 family of FPGAs. Fuzzing takes place as a subproject of prjtrellis.

Known to work:

  • Basic routing from pads to SLICEs and back!
  • Basic packing of one type of FF and LUT into half of a SLICE!
  • Using the internal oscillator OSCH as a clock
  • LOGIC SLICE mode

Things that probably work but are untested:

  • Any non-3.3V I/O standard that doesn't use bank VREFs.

Things remaining to do include (but not limited to):

  • More intelligent and efficient packing
  • Global Routing (exists in database/sim models, nextpnr-machxo2 doesn't use it yet)
  • Secondary High Fanout Nets
  • Edge Clocks (clock pads work, but not routed to global routing yet)
  • PLLs
  • Synchronous Release Global Set/Reset Interface (SGSR)
  • Embedded Function Block (EFB)
  • All DDR-related functionality
  • Bank VREFs
  • Embedded Block RAM (EBR)
  • CCU2 and DPRAM SLICE modes

Quick Start

The following commands are known to work on a near-fresh Linux Mint system (thank you securelyfitz!):

Prerequisites

sudo apt install cmake clang-format libboost-all-dev build-essential
qt5-default libeigen3-dev build-essential clang bison flex libreadline-dev
gawk tcl-dev libffi-dev git graphviz xdot pkg-config python3
libboost-system-dev libboost-python-dev libboost-filesystem-dev zlib1g-dev
python3-setuptools python3-serial

Installation

Use an empty directory to hold all the cloned repositories. Upstream repos can be used as well (e.g. YosysHQ/prjtrellis, etc.).

git clone git@github.com:cr1901/prjtrellis.git
cd prjtrellis
git checkout facade
git submodule update --init --recursive
cd libtrellis
cmake -DCMAKE_INSTALL_PREFIX=/usr
make -j 8
sudo make install

cd ../../

git clone git@github.com:cr1901/yosys.git
cd yosys/
git checkout machxo2
make config-gcc
make
sudo make install

cd ../

git clone git@github.com:tinyfpga/TinyFPGA-A-Programmer.git
cd TinyFPGA-A-Programmer/
sudo python setup.py install

cd ../

git clone git@github.com:cr1901/nextpnr.git
cd nextpnr
git checkout machxo2
git submodule update --init --recursive
cmake . -DARCH=machxo2 -DBUILD_GUI=OFF  -DTRELLIS_INSTALL_PREFIX=/usr -DBUILD_PYTHON=OFF -DBUILD_HEAP=OFF
make

Although uncommon, the facade and machxo2 branches of the above repos are occassionally rebased; use git pull -f if necessary.

Demo

If you have a TinyFPGA Ax2 board with the TinyFPGA Programmer, the following script will build a blinky bitstream and load it onto the MachXO2; the gateware will flash the LED!

cd machxo2/examples/
sh demo.sh tinyfpga

The tinyfpga.v code used in demo.sh is slightly modified from the user's guide to accommodate (* LOC = "pin" *) constraints and the built-in user LED.