
nextpnr outil portable de placement et routage pour FPGA
nextpnr vise à être un outil de placement et routage FPGA neutre vis-à-vis des fournisseurs, piloté par le timing, et open source.
Actuellement, nextpnr prend en charge :
Un bref article (académique) décrivant le flux Yosys+nextpnr peut être trouvé sur arXiv.
Voici une capture d'écran de nextpnr pour iCE40. Les instructions de construction et notes de démarrage se trouvent ci-dessous.
Voir aussi :
Les paquets suivants doivent être installés pour construire nextpnr, indépendamment de l'architecture sélectionnée :
clang-format requis pour le développement)python3-dev pour Ubuntu)
nextpnr-himbaechellibboost-dev libboost-filesystem-dev libboost-thread-dev libboost-program-options-dev libboost-iostreams-dev libboost-dev ou libboost-all-dev pour Ubuntu)libeigen3-dev pour 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-windowsTout d'abord, exécutez :
git submodule update --init --recursive
Pour la prise en charge iCE40, installez Project IceStorm dans /usr/local ou un autre emplacement, qui doit être passé comme -DICESTORM_INSTALL_PREFIX=/usr à CMake. Ensuite, construisez et installez nextpnr-ice40 en utilisant les commandes suivantes :
mkdir -p build && cd build
cmake .. -DARCH=ice40
make -j$(nproc)
sudo make install
Sous Windows, vous pouvez spécifier les chemins explicitement :
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
Pour construire une version statique, remplacez le triplet cible x64-windows par x64-windows-static et ajoutez -DBUILD_STATIC=ON.
Un exemple simple qui fonctionne sur la carte de développement iCEstick se trouve dans ice40/examples/blinky/blinky.*.
Exemple d'utilisation :
cd ice40/examples/blinky
yosys -p 'synth_ice40 -top blinky -json blinky.json' blinky.v # synthétiser dans blinky.json
nextpnr-ice40 --hx1k --json blinky.json --pcf blinky.pcf --asc blinky.asc # exécuter le placement et le routage
icepack blinky.asc blinky.bin # générer le fichier binaire du bitstream
iceprog blinky.bin # télécharger le design sur iCEstick
Exécution de nextpnr en mode GUI (voir ci-dessous pour les instructions de construction de nextpnr avec support GUI) :
nextpnr-ice40 --json blinky.json --pcf blinky.pcf --asc blinky.asc --gui
(Utilisez les boutons de la barre d'outils ou la console de commandes Python pour effectuer des actions telles que le pack, le placement, le routage et l'écriture des fichiers de sortie.)
Pour la prise en charge ECP5, installez Project Trellis dans /usr/local ou un autre emplacement, qui doit être passé comme -DTRELLIS_INSTALL_PREFIX=/usr/local à CMake. Ensuite, construisez et installez nextpnr-ecp5 en utilisant les commandes suivantes :
mkdir -p build && cd build
cmake .. -DARCH=ecp5 -DTRELLIS_INSTALL_PREFIX=/usr/local
make -j$(nproc)
sudo make install
Pour la prise en charge Nexus, installez Project Oxide dans $HOME/.cargo ou un autre emplacement, qui doit être passé comme -DOXIDE_INSTALL_PREFIX=$HOME/.cargo à CMake. Ensuite, construisez et installez nextpnr-nexus en utilisant les commandes suivantes :
mkdir -p build && cd build
cmake .. -DARCH=nexus -DOXIDE_INSTALL_PREFIX=$HOME/.cargo
make -j$(nproc)
sudo make install
Pour la prise en charge Cyclone V, clonez Mistral dans $HOME/mistral ou un autre emplacement et passez ce chemin comme -DMISTRAL_ROOT=$HOME/mistral à CMake. Ensuite, construisez et installez nextpnr-mistral en utilisant les commandes suivantes :
mkdir -p build && cd build
cmake .. -DARCH=mistral -DMISTRAL_ROOT=$HOME/mistral
make -j$(nproc)
sudo make install
La prise en charge de Cyclone V est actuellement expérimentale et a été testée de manière limitée. Le back-end subit une refonte active de son API, et sa structure, ses prérequis de construction et ses points d'intégration peuvent changer entre les versions.
La cible générique permet d'exécuter le placement et le routage pour des architectures personnalisées arbitraires.
mkdir -p build && cd build
cmake .. -DARCH=generic
make -j$(nproc)
sudo make install
Un exemple d'utilisation du flux générique se trouve dans generic/examples. Voir aussi la documentation de l'architecture générique.
La cible himbaechel permet d'exécuter le placement et le routage pour des architectures plus grandes qui partagent une structure commune.
Pour la prise en charge Gowin, installez Project Apicula
mkdir -p build && cd build
cmake .. -DARCH="himbaechel" -DHIMBAECHEL_UARCH="gowin"
make -j$(nproc)
sudo make install
Pour la prise en charge NanoXplore NG-Ultra, clonez le dépôt Project Beyond DB
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
Veuillez noter que la création du bitstream binaire nécessite l'outil Impulse de NanoXplore.
Pour la prise en charge Cologne Chip GateMate, clonez 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
L'interface graphique (GUI) de nextpnr n'est pas construite par défaut, afin de réduire le nombre de dépendances pour une construction standard sans tête. Pour l'activer, ajoutez -DBUILD_GUI=ON à la ligne de commande CMake et assurez-vous que Qt5/Qt6 et OpenGL sont disponibles :
Pour Qt6 :
qt6-base-devqt-base (32 bits) ou qt-base:x64-windows (64 bits)qt6 et ajoutez qt6 dans le chemin : echo 'export PATH="/usr/local/opt/qt/bin:$PATH"' >> ~/.bash_profile
` - ce changement est effectif dans la prochaine session de terminal, veuillez donc rouvrir la fenêtre du terminal avant de construirePour Qt5 :
qtbase5-dev qtchooser qt5-qmake qtbase5-dev-toolsqt5-defaultqt5-base (32 bits) ou qt5-base:x64-windows (64 bits)qt5 et ajoutez qt5 dans le chemin : echo 'export PATH="/usr/local/opt/qt/bin:$PATH"' >> ~/.bash_profile
` - ce changement est effectif dans la prochaine session de terminal, veuillez donc rouvrir la fenêtre du terminal avant de construirePour construire nextpnr pour plusieurs architectures à la fois, une liste séparée par des points-virgules peut être utilisée avec -DARCH.
mkdir -p build && cd build
cmake .. -DARCH="ice40;ecp5"
make -j$(nproc)
sudo make install
Pour construire toutes les architectures stables disponibles, utilisez -DARCH=all. Pour inclure les architectures expérimentales (actuellement nexus), utilisez -DARCH=all+alpha.
Pour construire un seul exécutable nextpnr-himbachel pour chacune des microarchitectures prises en charge, utilisez -DHIMBAECHEL_SPLIT.
mkdir -p build && cd build
cmake .. -DARCH="himbaechel" -DHIMBAECHEL_UARCH="gowin;ng-ultra"
make -j$(nproc)
sudo make install
Dans une telle construction, au lieu d'un seul binaire nextpnr-himbaechel, deux binaires nextpnr-himbaechel-gowin et nextpnr-himbaechel-ng-ultra sont construits. Bien qu'ils soient installés ensemble, chaque microarchitecture est complètement indépendante de l'autre et n'a besoin que de son répertoire de base de données de puces .../share/himbaechel/<microarchitecture>/ correspondant pour fonctionner. La construction fractionnée réduit la taille des artefacts individuels distribués (bien que la taille totale augmente) et permet la co-installation d'artefacts de différentes versions.
En dehors des bases de données de puces, nextpnr nécessite l'outil bba pour être compilé pour le système de construction. Cet outil peut être compilé en tant que projet séparé :
cd bba
cmake .
make
Cela créera un fichier bba-export.cmake. Fournissez le chemin de ce fichier lors de la cross-compilation de nextpnr en utilisant -DBBA_IMPORT=/chemin/vers/bba-export.cmake.
Ce qui suit exécute une construction de débogage de l'architecture iCE40 sans GUI, sans support Python, sans le placeur analytique HeAP et seulement avec le support HX1K :
mkdir -p build && cd build
cmake .. -DARCH=ice40 -DCMAKE_BUILD_TYPE=Debug -DBUILD_PYTHON=OFF -DICE40_DEVICES=1k
make -j$(nproc)
Pour réaliser une construction statique de version pour l'architecture iCE40, utilisez ce qui suit :
mkdir -p build && cd build
cmake .. -DARCH=ice40 -DBUILD_PYTHON=OFF -DSTATIC_BUILD=ON
make -j$(nproc)
Le solveur du placeur HeAP peut éventuellement utiliser OpenMP pour une accélération sur les très grands designs. Activez cette option en passant -DUSE_OPENMP=yes à cmake (le support du compilateur peut varier).
Vous pouvez modifier l'emplacement où nextpnr sera installé (la valeur par défaut est généralement /usr/local) en utilisant -DCMAKE_INSTALL_PREFIX=/prefixe/installation.
clang-format selon les règles de style dans .clang-format (basé sur LLVM avec
des largeurs d'indentation augmentées et des retours à la ligne après les classes).make clangformat.ffmpeg -f image2 -r 1 -i movie_%05d.png -c:v libx264 nextpnr.mp4-DBUILD_TESTS=ON et après make exécutez make test pour les lancer, ou vous pouvez exécuter des binaires séparés.cmake :
-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 et après make exécutez make ice40-coverage-static à chacun des noms de paquets. Par exemple, remplacez eigen3:x64-windows par eigen3:x64-windows-staticpython36.zip du fichier zip embarquable dans un nouveau répertoire appelé « Lib ».brew install cmake python boost eigenice40-coverage/index.html dans votre navigateur pour consulter le rapport de couverturelcov est nécessaire pour générer les rapports