nextpnr portable FPGA place and route tool
Go to file
David Shah 67d4720989 ice40: Fixing carry chain legaliser
Signed-off-by: David Shah <davey1576@gmail.com>
2018-06-26 16:23:10 +02:00
3rdparty Added CMake-sanitizers scripts 2018-06-24 19:05:53 +02:00
common Make GUI use recreated context 2018-06-26 15:47:43 +02:00
dummy Make GUI use recreated context 2018-06-26 15:47:43 +02:00
gui Make GUI use recreated context 2018-06-26 15:47:43 +02:00
ice40 ice40: Fixing carry chain legaliser 2018-06-26 16:23:10 +02:00
json Fixing Python bindings after adding unique_ptr 2018-06-26 14:13:52 +02:00
python ice40: Don't deduplicate local tracks when counting 2018-06-19 13:35:01 +02:00
tests added credits for tests 2018-06-23 16:11:19 +02:00
.clang-format Set clangformat column limit to 120 2018-06-23 15:26:07 +02:00
.gitignore cmake: Fixing the installer 2018-06-13 13:09:37 +02:00
CMakeLists.txt add sanitizer support 2018-06-24 19:32:39 +02:00
README.md added valgrind info 2018-06-24 20:10:15 +02:00

nextpnr -- a portable FPGA place and route tool

Supported Architectures

  • iCE40

Prequisites

  • CMake 3.3 or later
  • Modern C++11 compiler (clang-format required for development)
  • Qt5 or later (qt5-default for Ubuntu 16.04)
  • Python 3.5 or later, including development libraries (python3-dev for Ubuntu)
  • Boost libraries (libboost-dev or libboost-all-dev for Ubuntu)
  • Icestorm, with chipdbs installed in /usr/local/share/icebox
  • Latest git Yosys is required to synthesise the demo design

Building

  • Use CMake to generate the Makefiles (only needs to be done when CMakeLists.txt changes)
    • For a debug build, run cmake -DCMAKE_BUILD_TYPE=Debug .
    • For a debug build with HX1K support only, run cmake -DCMAKE_BUILD_TYPE=Debug -DICE40_HX1K_ONLY=1 .
    • For a release build, run cmake .
    • Add -DCMAKE_INSTALL_PREFIX=/your/install/prefix to use a different install prefix to the default /usr/local
  • Use Make to run the build itself
    • For all binary targets, just run make
    • For just the iCE40 CLI&GUI binary, run make nextpnr-ice40
    • To build binary without Python support, run cmake -DBUILD_PYTHON=OFF .
    • To build binary without GUI, run cmake -DBUILD_GUI=OFF .
    • For minimal binary without Python and GUI, run cmake -DBUILD_PYTHON=OFF -DBUILD_GUI=OFF .
    • For just the iCE40 Python module, run make nextpnrpy_ice40
    • Using too many parallel jobs may lead to out-of-memory issues due to the significant memory needed to build the chipdbs
    • To install nextpnr, run make install

Testing

  • To build test binaries as well, run cmake -DBUILD_TESTS=OFF . and after run make tests to run them, or you can run separate binaries.
  • To use code sanitizers use:
    • cmake . -DSANITIZE_ADDRESS=ON
    • cmake . -DSANITIZE_MEMORY=ON -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++
    • cmake . -DSANITIZE_THREAD=ON
    • cmake . -DSANITIZE_UNDEFINED=ON
  • Running valgrind example valgrind --leak-check=yes --tool=memcheck ./nextpnr-ice40 --json ice40/blinky.json

Running

  • To run the CLI binary, just run ./nextpnr-ice40 (you should see command line help)
  • To start the UI, run ./nextpnr-ice40 --gui
  • The Python module is called nextpnrpy_ice40.so. To test it, run PYTHONPATH=. python3 python/python_mod_test.py
  • Run yosys blinky.ys in ice40/ to synthesise the blinky design and produce blinky.json.
  • To place-and-route the blinky using nextpnr, run ./nextpnr-ice40 --hx1k --json ice40/blinky.json --pcf ice40/blinky.pcf --asc blinky.asc

Notes

  • All code is formatted using clang-format according to the style rules in .clang-format (LLVM based with increased indent widths and brace wraps after classes).
  • To automatically format all source code, run make clangformat.