
nextpnr nextpnr-0.11
nextpnr strumento portatile per posizionamento e instradamento FPGA
nextpnr -- uno strumento portatile di place and route per FPGA
nextpnr mira ad essere uno strumento di place and route per FPGA FOSS, neutrale rispetto al fornitore e guidato dal timing.
Attualmente nextpnr supporta:
- Dispositivi Lattice iCE40 supportati da Project IceStorm
- Dispositivi Lattice ECP5 supportati da Project Trellis
- Dispositivi Lattice Nexus supportati da Project Oxide
- Dispositivi Gowin LittleBee e Aurora V supportati da Project Apicula
- Dispositivi NanoXplore NG-Ultra supportati da Project Beyond
- Dispositivi Cologne Chip GateMate supportati da Project Peppercorn
- (sperimentale) Dispositivi Cyclone V supportati da Mistral
- (sperimentale) Dispositivi Lattice MachXO2 supportati da Project Trellis
- (sperimentale) Dispositivi Xilinx 7-series supportati da Project X-Ray
- (sperimentale) un backend "generico" per architetture definite dall'utente
Un breve articolo (accademico) che descrive il flusso Yosys+nextpnr può essere trovato su arXiv.
Ecco uno screenshot di nextpnr per iCE40. Le istruzioni di compilazione e le note per iniziare si trovano qui sotto.
Vedi anche:
Prerequisiti
I seguenti pacchetti devono essere installati per compilare nextpnr, indipendentemente dall'architettura selezionata:
- CMake 3.25 o successivo
- Compilatore C++17 moderno (
clang-formatrichiesto per lo sviluppo) - Python 3.5 o successivo, incluse le librerie di sviluppo (
python3-devper Ubuntu)- Python 3.9 o successivo è richiesto per
nextpnr-himbaechel - su Windows assicurati di installare la stessa versione supportata da vcpkg
- Python 3.9 o successivo è richiesto per
- Librerie Boost (
libboost-dev libboost-filesystem-dev libboost-thread-dev libboost-program-options-dev libboost-iostreams-dev libboost-devolibboost-all-devper Ubuntu) - Eigen3 (
libeigen3-devper Ubuntu) - Yosys è richiesto per sintetizzare il design di esempio
- Per la compilazione su Windows con MSVC, si consiglia l'uso di vcpkg per l'installazione delle dipendenze.
- Per build a 32 bit:
vcpkg install boost-filesystem boost-program-options boost-thread eigen3 - Per build a 64 bit:
vcpkg install boost-filesystem:x64-windows boost-program-options:x64-windows boost-thread:x64-windows eigen3:x64-windows - Per build statiche, aggiungi
-statica ciascun nome di pacchetto. Ad esempio, cambiaeigen3:x64-windowsineigen3:x64-windows-static - Una copia di Python che corrisponde alla versione in vcpkg (attualmente Python 3.6.4). Puoi scaricare il file zip incorporabile ed estrarlo. Potrebbe essere necessario estrarre
python36.zipall'interno del file zip incorporabile in una nuova directory chiamata "Lib".
- Per build a 32 bit:
- Per la compilazione su macOS, è necessario lo strumento brew.
- Installa tutti i pacchetti necessari
brew install cmake python boost eigen
- Installa tutti i pacchetti necessari
Per iniziare
Prima di tutto, esegui:
git submodule update --init --recursive
nextpnr-ice40
Per il supporto iCE40, installa Project IceStorm in /usr/local o in un'altra posizione, che dovrebbe essere passata come -DICESTORM_INSTALL_PREFIX=/usr a CMake. Quindi compila e installa nextpnr-ice40 usando i seguenti comandi:
mkdir -p build && cd build
cmake .. -DARCH=ice40
make -j$(nproc)
sudo make install
Su Windows, puoi specificare i percorsi esplicitamente:
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
Per compilare una release statica, cambia il triplet di destinazione da x64-windows a x64-windows-static e aggiungi -DBUILD_STATIC=ON.
Un semplice esempio che funziona sulla scheda di sviluppo iCEstick può essere trovato in ice40/examples/blinky/blinky.*.
Esempio di utilizzo:
cd ice40/examples/blinky
yosys -p 'synth_ice40 -top blinky -json blinky.json' blinky.v # sintetizza in blinky.json
nextpnr-ice40 --hx1k --json blinky.json --pcf blinky.pcf --asc blinky.asc # esegui place and route
icepack blinky.asc blinky.bin # genera il file bitstream binario
iceprog blinky.bin # carica il design su iCEstick
Esecuzione di nextpnr in modalità GUI (vedi sotto per le istruzioni su come compilare nextpnr con supporto GUI):
nextpnr-ice40 --json blinky.json --pcf blinky.pcf --asc blinky.asc --gui
(Usa i pulsanti della barra degli strumenti o la console dei comandi Python per eseguire azioni come pack, place, route e scrivere file di output.)
nextpnr-ecp5
Per il supporto ECP5, installa Project Trellis in /usr/local o in un'altra posizione, che dovrebbe essere passata come -DTRELLIS_INSTALL_PREFIX=/usr/local a CMake. Quindi compila e installa nextpnr-ecp5 usando i seguenti comandi:
mkdir -p build && cd build
cmake .. -DARCH=ecp5 -DTRELLIS_INSTALL_PREFIX=/usr/local
make -j$(nproc)
sudo make install
- Esempi del flusso ECP5 per una gamma di schede possono essere trovati negli Esempi di Project Trellis.
nextpnr-nexus
Per il supporto Nexus, installa Project Oxide in $HOME/.cargo o in un'altra posizione, che dovrebbe essere passata come -DOXIDE_INSTALL_PREFIX=$HOME/.cargo a CMake. Quindi compila e installa nextpnr-nexus usando i seguenti comandi:
mkdir -p build && cd build
cmake .. -DARCH=nexus -DOXIDE_INSTALL_PREFIX=$HOME/.cargo
make -j$(nproc)
sudo make install
- Esempi del flusso Nexus per una gamma di schede possono essere trovati negli Esempi di Project Oxide.
nextpnr-mistral
Per il supporto Cyclone V, clona Mistral in $HOME/mistral o in un'altra posizione e passa questo percorso come -DMISTRAL_ROOT=$HOME/mistral a CMake. Quindi compila e installa nextpnr-mistral usando i seguenti comandi:
mkdir -p build && cd build
cmake .. -DARCH=mistral -DMISTRAL_ROOT=$HOME/mistral
make -j$(nproc)
sudo make install
Il supporto per Cyclone V è attualmente sperimentale e ha test limitati. Il backend è in fase di refactoring attivo dell'API e la sua struttura, i requisiti di compilazione e i punti di integrazione possono cambiare tra le versioni.
nextpnr-generic
Il target generico permette di eseguire place and route per architetture personalizzate arbitrarie.
mkdir -p build && cd build
cmake .. -DARCH=generic
make -j$(nproc)
sudo make install