
nextpnr portables FPGA-Platzierungs- und Verdrahtungswerkzeug
nextpnr zielt darauf ab, ein herstellerneutrales, zeitgesteuertes Open-Source-FPGA-Platzierungs- und Routing-Tool zu sein.
Derzeit unterstützt nextpnr:
Ein kurzes (wissenschaftliches) Paper, das den Yosys+nextpnr-Ablauf beschreibt, finden Sie auf arXiv.
Hier ist ein Screenshot von nextpnr für iCE40. Bauanleitungen und Erste-Schritte-Hinweise finden Sie unten.
Siehe auch:
Die folgenden Pakete müssen zum Erstellen von nextpnr installiert sein, unabhängig von der gewählten Architektur:
clang-format wird für die Entwicklung benötigt)python3-dev für Ubuntu)
nextpnr-himbaechel erforderlichlibboost-dev libboost-filesystem-dev libboost-thread-dev libboost-program-options-dev libboost-iostreams-dev libboost-dev oder libboost-all-dev für Ubuntu)libeigen3-dev für Ubuntu)vcpkg install boost-filesystem boost-program-options boost-thread eigen3vcpkg install boost-filesystem:x64-windows boost-program-options:x64-windows boost-thread:x64-windows eigen3:x64-windowsFühren Sie zunächst Folgendes aus:
git submodule update --init --recursive
Für iCE40-Unterstützung installieren Sie Project IceStorm nach /usr/local oder an einen anderen Ort, der als -DICESTORM_INSTALL_PREFIX=/usr an CMake übergeben werden sollte. Erstellen und installieren Sie dann nextpnr-ice40 mit den folgenden Befehlen:
mkdir -p build && cd build
cmake .. -DARCH=ice40
make -j$(nproc)
sudo make install
Unter Windows können Sie Pfade explizit angeben:
cmake . -B build -DARCH=ice40 -DICESTORM_INSTALL_PREFIX=C:/ProgramData/icestorm -DCMAKE_TOOLCHAIN_FILE=C:/vcpkg/scripts/buildsystems/vcpkg.cmake -DVCPKG_TARGET_TRIPLET=x64-windows -G "Visual Studio 15 2017 Win64" -DPython3_EXECUTABLE=C:/Python364/python.exe -DPython3_LIBRARY=C:/vcpkg/packages/python3_x64-windows/lib/python36.lib -DPython3_INCLUDE_DIR=C:/vcpkg/packages/python3_x64-windows/include/python3.6
cmake --build build --config Release
Um einen statischen Release zu erstellen, ändern Sie das Ziel-Triplett von x64-windows in x64-windows-static und fügen Sie -DBUILD_STATIC=ON hinzu.
Ein einfaches Beispiel, das auf dem iCEstick-Entwicklungsboard läuft, finden Sie in ice40/examples/blinky/blinky.*.
Nutzungsbeispiel:
cd ice40/examples/blinky
yosys -p 'synth_ice40 -top blinky -json blinky.json' blinky.v # Synthese in blinky.json
nextpnr-ice40 --hx1k --json blinky.json --pcf blinky.pcf --asc blinky.asc # Platzierung und Routing durchführen
icepack blinky.asc blinky.bin # Binäre Bitstream-Datei erzeugen
iceprog blinky.bin # Design auf iCEstick hochladen
Ausführen von nextpnr im GUI-Modus (siehe unten für Anweisungen zum Erstellen von nextpnr mit GUI-Unterstützung):
nextpnr-ice40 --json blinky.json --pcf blinky.pcf --asc blinky.asc --gui
(Verwenden Sie die Symbolleistenschaltflächen oder die Python-Befehlskonsole, um Aktionen wie Packen, Platzieren, Routen und Schreiben von Ausgabedateien durchzuführen.)
Für ECP5-Unterstützung installieren Sie Project Trellis nach /usr/local oder an einen anderen Ort, der als -DTRELLIS_INSTALL_PREFIX=/usr/local an CMake übergeben werden sollte. Erstellen und installieren Sie dann nextpnr-ecp5 mit den folgenden Befehlen:
mkdir -p build && cd build
cmake .. -DARCH=ecp5 -DTRELLIS_INSTALL_PREFIX=/usr/local
make -j$(nproc)
sudo make install
Für Nexus-Unterstützung installieren Sie Project Oxide nach $HOME/.cargo oder an einen anderen Ort, der als -DOXIDE_INSTALL_PREFIX=$HOME/.cargo an CMake übergeben werden sollte. Erstellen und installieren Sie dann nextpnr-nexus mit den folgenden Befehlen:
mkdir -p build && cd build
cmake .. -DARCH=nexus -DOXIDE_INSTALL_PREFIX=$HOME/.cargo
make -j$(nproc)
sudo make install
Für Cyclone V-Unterstützung klonen Sie Mistral nach $HOME/mistral oder einen anderen Ort und übergeben Sie diesen Pfad als -DMISTRAL_ROOT=$HOME/mistral an CMake. Erstellen und installieren Sie dann nextpnr-mistral mit den folgenden Befehlen:
mkdir -p build && cd build
cmake .. -DARCH=mistral -DMISTRAL_ROOT=$HOME/mistral
make -j$(nproc)
sudo make install
Die Cyclone V-Unterstützung ist derzeit experimentell und nur begrenzt getestet. Das Backend durchläuft eine aktive API-Umstrukturierung, und seine Struktur, Build-Anforderungen und Integrationspunkte können sich zwischen Versionen ändern.
Das generische Ziel ermöglicht die Ausführung von Platzierung und Routing für beliebige benutzerdefinierte Architekturen.
mkdir -p build && cd build
cmake .. -DARCH=generic
make -j$(nproc)
sudo make install
Ein Beispiel zur Verwendung des generischen Ablaufs finden Sie in generic/examples. Siehe auch die Generic Architecture docs.
Das himbaechel-Ziel ermöglicht die Ausführung von Platzierung und Routing für größere Architekturen, die eine gemeinsame Struktur teilen.
Für Gowin-Unterstützung installieren Sie Project Apicula
mkdir -p build && cd build
cmake .. -DARCH="himbaechel" -DHIMBAECHEL_UARCH="gowin"
make -j$(nproc)
sudo make install
Für NanoXplore NG-Ultra-Unterstützung klonen Sie das Project Beyond DB Repository
mkdir -p build && cd build
cmake .. -DARCH="himbaechel" -DHIMBAECHEL_UARCH="ng-ultra" -DHIMBAECHEL_PRJBEYOND_DB=/path/to/prjbeyond-db -DHIMBAECHEL_NGULTRA_DEVICES=ng-ultra
make -j$(nproc)
sudo make install
Bitte beachten Sie, dass die Erstellung des binären Bitstreams das Impulse-Tool von NanoXplore erfordert.
Für Cologne Chip GateMate-Unterstützung klonen Sie Project Peppercorn
mkdir -p build && cd build
cmake .. -DARCH="himbaechel" -DHIMBAECHEL_UARCH="gatemate" -DHIMBAECHEL_PEPPERCORN_PATH=/path/to/prjpeppercorn
make -j$(nproc)
sudo make install
Die nextpnr-GUI wird standardmäßig nicht erstellt, um die Anzahl der Abhängigkeiten für einen normalen Headless-Build zu reduzieren. Um sie zu aktivieren, fügen Sie -DBUILD_GUI=ON zur CMake-Befehlszeile hinzu und stellen Sie sicher, dass Qt5/Qt6 und OpenGL verfügbar sind:
Für Qt6:
qt6-base-devqt-base (32-Bit) oder qt-base:x64-windows (64-Bit)qt6 und fügen Sie qt6 zum Pfad hinzu: echo 'export PATH="/usr/local/opt/qt/bin:$PATH"' >> ~/.bash_profile
` - diese Änderung wird in der nächsten Terminalsitzung wirksam, daher bitte vor dem Erstellen das Terminalfenster erneut öffnenFür Qt5:
qtbase5-dev qtchooser qt5-qmake qtbase5-dev-toolsqt5-defaultqt5-base (32-Bit) oder qt5-base:x64-windows (64-Bit)qt5 und fügen Sie qt5 zum Pfad hinzu: echo 'export PATH="/usr/local/opt/qt/bin:$PATH"' >> ~/.bash_profile
` - diese Änderung wird in der nächsten Terminalsitzung wirksam, daher bitte vor dem Erstellen das Terminalfenster erneut öffnenUm nextpnr für mehrere Architekturen gleichzeitig zu erstellen, kann eine semikolonseparierte Liste mit -DARCH verwendet werden.
mkdir -p build && cd build
cmake .. -DARCH="ice40;ecp5"
make -j$(nproc)
sudo make install
Um jede verfügbare stabile Architektur zu erstellen, verwenden Sie -DARCH=all. Um experimentelle Architekturen (derzeit nexus) einzuschließen, verwenden Sie -DARCH=all+alpha.
Um für jede unterstützte Mikroarchitektur eine einzelne nextpnr-himbachel ausführbare Datei zu erstellen, verwenden Sie -DHIMBAECHEL_SPLIT.
mkdir -p build && cd build
cmake .. -DARCH="himbaechel" -DHIMBAECHEL_UARCH="gowin;ng-ultra"
make -j$(nproc)
sudo make install
In einem solchen Build werden anstelle einer einzelnen Binärdatei nextpnr-himbaechel zwei Binärdateien nextpnr-himbaechel-gowin und nextpnr-himbaechel-ng-ultra erstellt. Obwohl sie zusammen installiert werden, ist jede Mikroarchitektur völlig unabhängig von der anderen und benötigt nur ihr entsprechendes .../share/himbaechel/<Mikroarchitektur>/-Chipdatenbankverzeichnis, um ausgeführt zu werden. Der Split-Build reduziert die Größe einzelner verteilter Artefakte (obwohl die Gesamtgröße zunimmt) und ermöglicht die Koinstallation von Artefakten verschiedener Versionen.
Neben den Chip-Datenbanken benötigt nextpnr das Tool bba, das für das Build-System kompiliert werden muss. Dieses Tool kann als separates Projekt kompiliert werden:
cd bba
cmake .
make
Dadurch wird eine Datei bba-export.cmake erstellt. Geben Sie den Pfad zu dieser Datei an, wenn Sie nextpnr cross-kompilieren, indem Sie -DBBA_IMPORT=/path/to/bba-export.cmake verwenden.
Das Folgende führt einen Debug-Build der iCE40-Architektur ohne GUI, ohne Python-Unterstützung, ohne den HeAP-analytischen Placer und nur mit HX1K-Unterstützung durch:
mkdir -p build && cd build
cmake .. -DARCH=ice40 -DCMAKE_BUILD_TYPE=Debug -DBUILD_PYTHON=OFF -DICE40_DEVICES=1k
make -j$(nproc)
Um einen statischen Build-Release für die iCE40-Architektur zu erstellen, verwenden Sie Folgendes:
mkdir -p build && cd build
cmake .. -DARCH=ice40 -DBUILD_PYTHON=OFF -DSTATIC_BUILD=ON
make -j$(nproc)
Der Solver des HeAP-Placers kann optional OpenMP für eine Beschleunigung bei sehr großen Designs verwenden. Aktivieren Sie dies, indem Sie -DUSE_OPENMP=yes an cmake übergeben (Compiler-Unterstützung kann variieren).
Sie können den Installationsort von nextpnr ändern (standardmäßig /usr/local) mit -DCMAKE_INSTALL_PREFIX=/install/prefix.
clang-format gemäß den Stilregeln in .clang-format formatiert (LLVM-basiert mit größeren Einzugsbreiten und geschweiften Klammern nach Klassen).make clangformat aus.ffmpeg -f image2 -r 1 -i movie_%05d.png -c:v libx264 nextpnr.mp4 aus-DBUILD_TESTS=ON und führen Sie nach make make test aus, um sie auszuführen, oder Sie können separate Binärdateien ausführen.cmake-Optionen:
-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 und führen Sie nach make make ice40-coverage aus-static hinzu. Ändern Sie beispielsweise eigen3:x64-windows in eigen3:x64-windows-staticpython36.zip innerhalb der embeddable zip-Datei in ein neues Verzeichnis namens „Lib“ extrahieren.brew install cmake python boost eigenice40-coverage/index.html in Ihrem Browser, um den Coverage-Bericht anzuzeigenlcov zum Generieren von Berichten erforderlich ist