
nextpnr nextpnr-0.11
nextpnr herramienta portátil de ubicación y enrutado para FPGA
nextpnr -- una herramienta portátil de colocación y enrutamiento para FPGA
nextpnr pretende ser una herramienta FOSS de colocación y enrutamiento para FPGA, independiente del fabricante y guiada por la temporización.
Actualmente, nextpnr soporta:
- Dispositivos Lattice iCE40 compatibles con Project IceStorm
- Dispositivos Lattice ECP5 compatibles con Project Trellis
- Dispositivos Lattice Nexus compatibles con Project Oxide
- Dispositivos Gowin LittleBee y Aurora V compatibles con Project Apicula
- Dispositivos NanoXplore NG-Ultra compatibles con Project Beyond
- Dispositivos Cologne Chip GateMate compatibles con Project Peppercorn
- (experimental) dispositivos Cyclone V compatibles con Mistral
- (experimental) dispositivos Lattice MachXO2 compatibles con Project Trellis
- (experimental) dispositivos Xilinx serie 7 compatibles con Project X-Ray
- (experimental) un back-end "genérico" para arquitecturas definidas por el usuario
Un breve artículo (académico) que describe el flujo Yosys+nextpnr se puede encontrar en arXiv.
Aquí se muestra una captura de pantalla de nextpnr para iCE40. Las instrucciones de compilación y las notas de inicio rápido se pueden encontrar a continuación.
Véase también:
Requisitos previos
Es necesario instalar los siguientes paquetes para compilar nextpnr, independientemente de la arquitectura seleccionada:
- CMake 3.25 o posterior
- Compilador moderno de C++17 (
clang-formatnecesario para el desarrollo) - Python 3.5 o posterior, incluidas las bibliotecas de desarrollo (
python3-deven Ubuntu)- Se requiere Python 3.9 o posterior para
nextpnr-himbaechel - en Windows, asegúrate de instalar la misma versión compatible con vcpkg
- Se requiere Python 3.9 o posterior para
- Bibliotecas Boost (
libboost-dev libboost-filesystem-dev libboost-thread-dev libboost-program-options-dev libboost-iostreams-dev libboost-devolibboost-all-deven Ubuntu) - Eigen3 (
libeigen3-deven Ubuntu) - Yosys es necesario para sintetizar el diseño de demostración
- Para compilar en Windows con MSVC, se recomienda el uso de vcpkg para la instalación de dependencias.
- Para compilaciones de 32 bits:
vcpkg install boost-filesystem boost-program-options boost-thread eigen3 - Para compilaciones de 64 bits:
vcpkg install boost-filesystem:x64-windows boost-program-options:x64-windows boost-thread:x64-windows eigen3:x64-windows - Para compilaciones estáticas, añade
-statica cada uno de los nombres de paquete. Por ejemplo, cambiaeigen3:x64-windowsaeigen3:x64-windows-static - Una copia de Python que coincida con la versión en vcpkg (actualmente Python 3.6.4). Puedes descargar el archivo ZIP integrable y extraerlo. Puede que necesites extraer
python36.zip, que está dentro del archivo ZIP integrable, a un nuevo directorio llamado "Lib".
- Para compilaciones de 32 bits:
- Para compilar en macOS, se necesita la utilidad brew.
- Instala todos los paquetes necesarios
brew install cmake python boost eigen
- Instala todos los paquetes necesarios
Primeros pasos
En primer lugar, ejecuta:
git submodule update --init --recursive
nextpnr-ice40
Para soporte de iCE40, instala Project IceStorm en /usr/local u otra ubicación, que debe pasarse como -DICESTORM_INSTALL_PREFIX=/usr a CMake. Luego compila e instala nextpnr-ice40 con los siguientes comandos:
mkdir -p build && cd build
cmake .. -DARCH=ice40
make -j$(nproc)
sudo make install
En Windows, puedes especificar las rutas explícitamente:
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
Para crear una compilación estática de release, cambia el triplet de destino de x64-windows a x64-windows-static y añade -DBUILD_STATIC=ON.
Un ejemplo sencillo que se ejecuta en la placa de desarrollo iCEstick se puede encontrar en ice40/examples/blinky/blinky.*.
Ejemplo de uso:
cd ice40/examples/blinky
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
Ejecutar nextpnr en modo GUI (consulta a continuación las instrucciones para compilar nextpnr con soporte GUI):
nextpnr-ice40 --json blinky.json --pcf blinky.pcf --asc blinky.asc --gui
(Usa los botones de la barra de herramientas o la consola de comandos de Python para realizar acciones como empaquetar, colocar, enrutar y escribir archivos de salida).
nextpnr-ecp5
Para soporte de ECP5, instala Project Trellis en /usr/local u otra ubicación, que debe pasarse como -DTRELLIS_INSTALL_PREFIX=/usr/local a CMake. Luego compila e instala nextpnr-ecp5 con los siguientes comandos:
mkdir -p build && cd build
cmake .. -DARCH=ecp5 -DTRELLIS_INSTALL_PREFIX=/usr/local
make -j$(nproc)
sudo make install
- Ejemplos del flujo ECP5 para una variedad de placas se pueden encontrar en los Ejemplos de Project Trellis.
nextpnr-nexus
Para soporte de Nexus, instala Project Oxide en $HOME/.cargo u otra ubicación, que debe pasarse como -DOXIDE_INSTALL_PREFIX=$HOME/.cargo a CMake. Luego compila e instala nextpnr-nexus con los siguientes comandos:
mkdir -p build && cd build
cmake .. -DARCH=nexus -DOXIDE_INSTALL_PREFIX=$HOME/.cargo
make -j$(nproc)
sudo make install
- Ejemplos del flujo Nexus para una variedad de placas se pueden encontrar en los Ejemplos de Project Oxide.
nextpnr-mistral
Para soporte de Cyclone V, clona Mistral en $HOME/mistral u otra ubicación y pasa esta ruta como -DMISTRAL_ROOT=$HOME/mistral a CMake. Luego compila e instala nextpnr-mistral con los siguientes comandos:
mkdir -p build && cd build
cmake .. -DARCH=mistral -DMISTRAL_ROOT=$HOME/mistral
make -j$(nproc)
sudo make install
El soporte para Cyclone V es actualmente experimental y cuenta con pruebas limitadas. El backend está siendo sometido a una refactorización activa de su API, y su estructura, requisitos de compilación y puntos de integración pueden cambiar entre versiones.
nextpnr-generic
El target genérico permite ejecutar la colocación y el enrutamiento para arquitecturas personalizadas arbitrarias.