Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

FeedsContactoPrivacidad© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
nextpnr — nextpnr herramienta portátil de ubicación y enrutado para FPGA | Kitploit
Herramientas/GitHubGitHub/yosyshq/nextpnr
Seguridad de Sistemas EmbebidosSeguridad de HardwarePapers e InvestigaciónAprendizaje y EducaciónAnálisis de Firmware
GitHubyosyshq/nextpnr

nextpnr

nextpnr herramienta portátil de ubicación y enrutado para FPGA

Ver Repositorio
1.7k33187hace 2 díasRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir
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](https://github.com/YosysHQ/icestorm)
 * Dispositivos Lattice ECP5 compatibles con [Project Trellis](https://github.com/YosysHQ/prjtrellis)
 * Dispositivos Lattice Nexus compatibles con [Project Oxide](https://github.com/gatecat/prjoxide)
 * Dispositivos Gowin LittleBee y Aurora V compatibles con [Project Apicula](https://github.com/YosysHQ/apicula)
 * Dispositivos NanoXplore NG-Ultra compatibles con [Project Beyond](https://github.com/YosysHQ-GmbH/prjbeyond-db)
 * Dispositivos Cologne Chip GateMate compatibles con [Project Peppercorn](https://github.com/YosysHQ/prjpeppercorn)
 * *(experimental)* dispositivos Cyclone V compatibles con [Mistral](https://github.com/Ravenslofty/mistral)
 * *(experimental)* dispositivos Lattice MachXO2 compatibles con [Project Trellis](https://github.com/YosysHQ/prjtrellis)
 * *(experimental)* dispositivos Xilinx serie 7 compatibles con [Project X-Ray](https://github.com/F4PGA/prjxray)
 * *(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](https://arxiv.org/abs/1903.10407).

Aquí se muestra una captura de pantalla de nextpnr para iCE40. Las instrucciones de compilación y las
[notas de inicio rápido](#getting-started) se pueden encontrar a continuación.

<img src="https://assets.kitploit.com/production/public/readmes/10385/12bab50b683472060ad2a49530d9b6fe58b2c2b70efd1144b849ff83a8a6e80b.png" width="640"/>

Véase también:
- [F.A.Q.](https://github.com/yosyshq/nextpnr/blob/main/docs/faq.md)
- [API de arquitectura](https://github.com/yosyshq/nextpnr/blob/main/docs/archapi.md)


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-format` necesario para el desarrollo)
- Python 3.5 o posterior, incluidas las bibliotecas de desarrollo (`python3-dev` en Ubuntu)
  - Se requiere Python 3.9 o posterior para `nextpnr-himbaechel`
  - en Windows, asegúrate de instalar la misma versión compatible con [vcpkg](https://github.com/Microsoft/vcpkg/blob/master/ports/python3/CONTROL)
- Bibliotecas Boost (`libboost-dev libboost-filesystem-dev libboost-thread-dev libboost-program-options-dev libboost-iostreams-dev libboost-dev` o `libboost-all-dev` en Ubuntu)
- Eigen3 (`libeigen3-dev` en 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 `-static` a cada uno de los nombres de paquete. Por ejemplo, cambia `eigen3:x64-windows` a `eigen3: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](https://www.python.org/downloads/release/python-364/) y extraerlo. Puede que necesites extraer `python36.zip`, que está dentro del archivo ZIP integrable, a un nuevo directorio llamado "Lib".
- Para compilar en macOS, se necesita la utilidad brew.
  - Instala todos los paquetes necesarios `brew install cmake python boost eigen`

Primeros pasos
---------------

En primer lugar, ejecuta:

```
git submodule update --init --recursive
```

### nextpnr-ice40

Para soporte de iCE40, instala [Project IceStorm](https://github.com/YosysHQ/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](https://github.com/YosysHQ/prjtrellis) 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](https://github.com/YosysHQ/prjtrellis/tree/main/examples).

### nextpnr-nexus

Para soporte de Nexus, instala [Project Oxide](https://github.com/gatecat/prjoxide) 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](https://github.com/gatecat/prjoxide/tree/main/examples).

### nextpnr-mistral

Para soporte de Cyclone V, clona [Mistral](https://github.com/Ravenslofty/mistral/tree/nextpnr-latest) 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.

```
mkdir -p build && cd build
cmake .. -DARCH=generic
make -j$(nproc)
sudo make install
```

Un ejemplo de cómo usar el flujo genérico está en [generic/examples](https://github.com/yosyshq/nextpnr/blob/main/generic/examples). Consulta también la [documentación de Generic Architecture](https://github.com/yosyshq/nextpnr/blob/main/docs/generic.md).

### nextpnr-himbaechel

El target himbaechel permite ejecutar la colocación y el enrutamiento para arquitecturas más grandes que comparten una estructura común.

#### gowin

Para soporte de Gowin, instala [Project Apicula](https://github.com/YosysHQ/apicula)

```
mkdir -p build && cd build
cmake .. -DARCH="himbaechel" -DHIMBAECHEL_UARCH="gowin"
make -j$(nproc)
sudo make install
```

 - Ejemplos del flujo Gowin para una variedad de placas se pueden encontrar en los [Ejemplos de Project Apicula](https://github.com/YosysHQ/apicula/tree/master/examples).

#### ng-ultra

Para soporte de NanoXplore NG-Ultra, clona el repositorio [Project Beyond DB](https://github.com/yosyshq-GmbH/prjbeyond-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
```

*Ten en cuenta que la creación de bitstreams binarios requiere la herramienta Impulse de NanoXplore.*

#### gatemate

Para soporte de Cologne Chip GateMate, clona [Project Peppercorn](https://github.com/YosysHQ/prjpeppercorn)

```
mkdir -p build && cd build
cmake .. -DARCH="himbaechel" -DHIMBAECHEL_UARCH="gatemate" -DHIMBAECHEL_PEPPERCORN_PATH=/path/to/prjpeppercorn
make -j$(nproc)
sudo make install
```

### GUI

La GUI de nextpnr no se compila por defecto, para reducir el número de dependencias en una compilación estándar sin interfaz (headless). Para habilitarla, añade `-DBUILD_GUI=ON` a la línea de comandos de CMake y asegúrate de que Qt5/Qt6 y OpenGL estén disponibles:

Para Qt6:
 - En Ubuntu 22.04 LTS o posterior, instala `qt6-base-dev`
 - Para MSVC vcpkg, instala `qt-base` (32 bits) o `qt-base:x64-windows` (64 bits)
 - Para Homebrew, instala `qt6` y añade qt6 al PATH: `echo 'export PATH="/usr/local/opt/qt/bin:$PATH"' >> ~/.bash_profile`
` - este cambio tiene efecto en la próxima sesión de terminal, así que vuelve a abrir la ventana de terminal antes de compilar

Para Qt5:
 - En Ubuntu 22.04 LTS, instala `qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools`
 - En otras versiones de Ubuntu, instala `qt5-default`
 - Para MSVC vcpkg, instala `qt5-base` (32 bits) o `qt5-base:x64-windows` (64 bits)
 - Para Homebrew, instala `qt5` y añade qt5 al PATH: `echo 'export PATH="/usr/local/opt/qt/bin:$PATH"' >> ~/.bash_profile`
` - este cambio tiene efecto en la próxima sesión de terminal, así que vuelve a abrir la ventana de terminal antes de compilar

### Múltiples arquitecturas

Para compilar nextpnr para varias arquitecturas a la vez, se puede usar una lista separada por punto y coma con `-DARCH`.

```
mkdir -p build && cd build
cmake .. -DARCH="ice40;ecp5"
make -j$(nproc)
sudo make install
```

Para compilar todas las arquitecturas estables disponibles, usa `-DARCH=all`. Para incluir arquitecturas experimentales (actualmente nexus), usa `-DARCH=all+alpha`.

### Himbächel por microarquitectura

Para compilar un único ejecutable nextpnr-himbachel para cada una de las microarquitecturas compatibles, usa `-DHIMBAECHEL_SPLIT`.

```
mkdir -p build && cd build
cmake .. -DARCH="himbaechel" -DHIMBAECHEL_UARCH="gowin;ng-ultra"
make -j$(nproc)
sudo make install
```

En una compilación de este tipo, en lugar de un único binario `nextpnr-himbaechel`, se generan dos binarios: `nextpnr-himbaechel-gowin` y `nextpnr-himbaechel-ng-ultra`. Aunque se instalan juntos, cada microarquitectura es completamente independiente de la otra y solo necesita su correspondiente directorio de base de datos de chips `.../share/himbaechel/<microarchitecture>/` para ejecutarse. La compilación dividida reduce el tamaño de los artefactos distribuidos individualmente (aunque el tamaño total aumenta) y permite la coinstalación de artefactos de diferentes versiones.

Compilación cruzada
-----------------

Además de las bases de datos de chips, nextpnr requiere que la herramienta `bba` se compile para el sistema de compilación. Esta herramienta se puede compilar como un proyecto separado:

```
cd bba
cmake .
make
```

Esto creará un archivo `bba-export.cmake`. Proporciona la ruta a este archivo cuando compiles nextpnr de forma cruzada usando `-DBBA_IMPORT=/path/to/bba-export.cmake`.

Notas adicionales para compilar nextpnr
-------------------------------------

Lo siguiente ejecuta una compilación de depuración de la arquitectura iCE40 sin GUI, sin soporte de Python, sin el colocador analítico HeAP y solo con soporte HX1K:

```
mkdir -p build && cd build
cmake .. -DARCH=ice40 -DCMAKE_BUILD_TYPE=Debug -DBUILD_PYTHON=OFF -DICE40_DEVICES=1k
make -j$(nproc)
```

Para hacer una compilación estática de release para la arquitectura iCE40, usa lo siguiente:

```
mkdir -p build && cd build
cmake .. -DARCH=ice40 -DBUILD_PYTHON=OFF -DSTATIC_BUILD=ON
make -j$(nproc)
```

El solver del colocador HeAP puede usar opcionalmente OpenMP para acelerar diseños muy grandes. Habilítalo pasando `-DUSE_OPENMP=yes` a cmake (el soporte del compilador puede variar).

Puedes cambiar la ubicación donde se instalará nextpnr (normalmente será `/usr/local` por defecto) usando `-DCMAKE_INSTALL_PREFIX=/install/prefix`.

Notas para desarrolladores
--------------------

- Todo el código se formatea con `clang-format` de acuerdo con las reglas de estilo de `.clang-format` (basado en LLVM con mayores anchos de sangría y ajuste de llaves después de las clases).
- Para formatear automáticamente todo el código fuente, ejecuta `make clangformat`.
- Consulta la wiki para obtener documentación adicional sobre la API de arquitectura.

Grabar un vídeo
-----------------

- Para guardar una grabación en vídeo de la colocación y el enrutamiento, haz clic en el icono de grabación de la barra de herramientas, selecciona un directorio vacío donde se almacenarán los archivos de grabación y elige los fotogramas que se deben omitir.
- Inicia manualmente todas las operaciones de PnR que desees
- Vuelve a hacer clic en el icono de grabación para detener la grabación
- Ve al directorio que contiene los archivos y ejecuta `ffmpeg -f image2 -r 1 -i movie_%05d.png -c:v libx264 nextpnr.mp4`

Pruebas
-------

- Para compilar también los binarios de prueba, usa `-DBUILD_TESTS=ON` y, después de `make`, ejecuta `make test` para ejecutarlos, o puedes ejecutar los binarios por separado.
- Para usar sanitizadores de código, usa las opciones de `cmake`:
  - `-DSANITIZE_ADDRESS=ON`
  - `-DSANITIZE_MEMORY=ON -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++`
  - `-DSANITIZE_THREAD=ON`
  - `-DSANITIZE_UNDEFINED=ON`
- Ejemplo de ejecución con valgrind: `valgrind --leak-check=yes --tool=memcheck ./nextpnr-ice40 --json ice40/blinky.json`
- Para ejecutar las pruebas con cobertura de código, usa `-DBUILD_TESTS=ON -DCOVERAGE` y, después de `make`, ejecuta `make ice40-coverage`
- Después, abre `ice40-coverage/index.html` en tu navegador para ver el informe de cobertura
- Ten en cuenta que se necesita `lcov` para generar los informes

Enlaces y referencias
--------------------

### Síntesis, simulación y optimización lógica

- [Yosys](https://yosyshq.net/yosys/)
- [Icarus Verilog](http://iverilog.icarus.com/)
- [ABC](https://people.eecs.berkeley.edu/~alanmi/abc/)

### Proyectos de documentación de bitstreams FPGA (y herramientas)

- [Project IceStorm (Lattice iCE40)](https://github.com/YosysHQ/icestorm)
- [Project Trellis (Lattice ECP5)](https://yosyshq.github.io/prjtrellis-db/)
- [Project X-Ray (Xilinx 7-Series)](https://github.com/F4PGA/prjxray)
- [Project Chibi (Intel MAX-V)](https://github.com/rqou/project-chibi)

### Otros proyectos FOSS de colocación y enrutamiento para FPGA

- [Arachne PNR](https://github.com/cseed/arachne-pnr)
- [VPR/VTR](https://verilogtorouting.org/)
- [SymbiFlow](https://github.com/SymbiFlow/symbiflow-arch-defs)
Descargar herramienta