| commit | ba27aaa7af87ec0473c6e17aa882566a6340948e | [log] [tgz] |
|---|---|---|
| author | Sergiusz Bazanski <q3k@q3k.org> | Fri Aug 24 01:06:23 2018 +0100 |
| committer | Sergiusz Bazanski <q3k@q3k.org> | Fri Aug 24 02:17:51 2018 +0100 |
| tree | 493bc86ec431612d84ec9c6ab840c8619c2a26ed | |
| parent | 61b1a754905893de213ec79ab030df92ebe1d0ca [diff] |
ci: preliminary implementation
nextpnr aims to be a vendor neutral, timing driven, FOSS FPGA place and route tool.
Currently nextpnr supports:
We hope to see Xilinx 7 Series thanks to Project X-Ray and even more FPGA families supported in the future. We would love your help in developing this awesome new project!
Here is a screenshot of nextpnr for iCE40. Build instructions and getting started notes can be found below.
See also:
The following packages need to be installed for building nextpnr, independent of the selected architecture:
clang-format required for development)qt5-default for Ubuntu 16.04)python3-dev for Ubuntu)libboost-dev or libboost-all-dev for Ubuntu)vcpkg install boost-filesystem boost-program-options boost-thread boost-python qt5-basevcpkg install boost-filesystem:x64-windows boost-program-options:x64-windows boost-thread:x64-windows boost-python:x64-windows qt5-base:x64-windowsbrew install cmake python boost boost-python3 qt5echo 'export PATH="/usr/local/opt/qt/bin:$PATH"' >> ~/.bash_profileTo build the iCE40 version of nextpnr, install icestorm with chipdbs installed in /usr/local/share/icebox. Then build and install nextpnr-ice40 using the following commands:
cmake -DARCH=ice40 . make -j$(nproc) sudo make install
A simple example that runs on the iCEstick dev board can be found in ice40/blinky.*. Usage example:
cd ice40 yosys -p 'synth_ice40 -top blinky -json blinky.json' blinky.v # synthesize into blinky.json nextpnr-ice40 --hx1k --json blinky.json --pcf blinky.pcf --asc blinky.asc # run place and route icepack blinky.asc blinky.bin # generate binary bitstream file iceprog blinky.bin # upload design to iCEstick
Running nextpnr in GUI mode:
nextpnr-ice40 --json blinky.json --pcf blinky.pcf --asc blinky.asc --gui
(Use the toolbar buttons or the Python command console to perform actions such as pack, place, route, and write output files.)
For ECP5 support, you must download Project Trellis, then follow its instructions to download the latest database and build libtrellis.
cmake -DARCH=ecp5 -DTRELLIS_ROOT=/path/to/prjtrellis . make -j$(nproc) sudo make install
For an ECP5 blinky on the 45k ULX3S board, first synthesise using yosys blinky.ys in ecp5/synth.
Then run ECP5 place-and route using ./nextpnr-ecp5 --json ecp5/synth/blinky.json --basecfg ecp5/synth/ulx3s_empty.config --textcfg ecp5/synth/ulx3s_out.config
Create a bitstream using ecppack ulx3s_out.config ulx3s.bit
Note that ulx3s_empty.config contains fixed/unknown bits to be copied to the output bitstream
More examples of the ECP5 flow for a range of boards can be found in the Project Trellis Examples.
Currently the ECP5 flow supports LUTs, flipflops and IO. IO must be instantiated using TRELLIS_IO primitives and constraints specified using LOC and IO_TYPE attributes on those instances, as is used in the examples.
The generic target allows running placement and routing for arbitrary custom architectures.
cmake -DARCH=generic . make -j$(nproc) sudo make install
TBD: Getting started example for generic target.
Use cmake -D options to specify which version of nextpnr you want to build.
Use -DARCH=... to set the architecture. It is semicolon separated list. Use cmake . -DARCH=all to build all supported architectures.
The following runs a debug build of the iCE40 architecture without GUI and without Python support and only HX1K support:
cmake -DARCH=ice40 -DCMAKE_BUILD_TYPE=Debug -DBUILD_PYTHON=OFF -DBUILD_GUI=OFF -DICE40_HX1K_ONLY=1 . make -j$(nproc)
To make static build relase for iCE40 architecture use the following:
cmake -DARCH=ice40 -DBUILD_PYTHON=OFF -DBUILD_GUI=OFF -DSTATIC_BUILD=ON . make -j$(nproc)
clang-format according to the style rules in .clang-format (LLVM based with increased indent widths and brace wraps after classes).make clangformat.-DBUILD_TESTS=ON and after make run make tests to run them, or you can run separate binaries.cmake options:-DSANITIZE_ADDRESS=ON-DSANITIZE_MEMORY=ON -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++-DSANITIZE_THREAD=ON-DSANITIZE_UNDEFINED=ONvalgrind --leak-check=yes --tool=memcheck ./nextpnr-ice40 --json ice40/blinky.json-DBUILD_TESTS=ON -DCOVERAGE and after make run make ice40-coverageice40-coverage/index.html in your browser to view the coverage reportlcov is needed in order to generate reports