Skip to content
KitploitKITPLOIT
ИнструментыЭксплойтыБлог
Log in
Отправить
ИнструментыЭксплойтыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

ЛентыКонтактыКонфиденциальность© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
nextpnr — nextpnr портативный инструмент для размещения и трассировки FPGA | Kitploit
Инструменты/GitHubGitHub/yosyshq/nextpnr
Безопасность встроенных системАппаратная БезопасностьСтатьи и ИсследованияОбучение и ОбразованиеАнализ Прошивок
GitHubyosyshq/nextpnr

nextpnr

nextpnr портативный инструмент для размещения и трассировки FPGA

Репозиторий
1.7k331871 день назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться
nextpnr — портативный инструмент для размещения и трассировки FPGA
=====================================================

nextpnr стремится быть независимым от вендора, управляемым по таймингам, свободным инструментом для размещения и трассировки FPGA.

В настоящее время nextpnr поддерживает:
* Устройства Lattice iCE40, поддерживаемые [Project IceStorm](https://github.com/YosysHQ/icestorm)
* Устройства Lattice ECP5, поддерживаемые [Project Trellis](https://github.com/YosysHQ/prjtrellis)
* Устройства Lattice Nexus, поддерживаемые [Project Oxide](https://github.com/gatecat/prjoxide)
* Устройства Gowin LittleBee и Aurora V, поддерживаемые [Project Apicula](https://github.com/YosysHQ/apicula)
* Устройства NanoXplore NG-Ultra, поддерживаемые [Project Beyond](https://github.com/YosysHQ-GmbH/prjbeyond-db)
* Устройства Cologne Chip GateMate, поддерживаемые [Project Peppercorn](https://github.com/YosysHQ/prjpeppercorn)
* *(экспериментально)* Устройства Cyclone V, поддерживаемые [Mistral](https://github.com/Ravenslofty/mistral)
* *(экспериментально)* Устройства Lattice MachXO2, поддерживаемые [Project Trellis](https://github.com/YosysHQ/prjtrellis)
* *(экспериментально)* Устройства Xilinx 7-й серии, поддерживаемые [Project X-Ray](https://github.com/F4PGA/prjxray)
* *(экспериментально)* «универсальный» бэкенд для пользовательских архитектур

Краткая (академическая) статья, описывающая поток Yosys+nextpnr, доступна на [arXiv](https://arxiv.org/abs/1903.10407).

Ниже приведён скриншот nextpnr для iCE40. Инструкции по сборке и [заметки для начала работы](#начало-работы) можно найти далее.

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

См. также:
- [Часто задаваемые вопросы](https://github.com/yosyshq/nextpnr/blob/main/docs/faq.md)
- [API архитектуры](https://github.com/yosyshq/nextpnr/blob/main/docs/archapi.md)


Предварительные требования
--------------------------

Для сборки nextpnr, независимо от выбранной архитектуры, необходимо установить следующие пакеты:

- CMake 3.25 или новее
- Современный компилятор C++17 (для разработки требуется `clang-format`)
- Python 3.5 или новее, включая библиотеки для разработки (`python3-dev` для Ubuntu)
  - Для `nextpnr-himbaechel` требуется Python 3.9 или новее
  - В Windows убедитесь, что установлена версия, поддерживаемая [vcpkg](https://github.com/Microsoft/vcpkg/blob/master/ports/python3/CONTROL)
- Библиотеки Boost (`libboost-dev libboost-filesystem-dev libboost-thread-dev libboost-program-options-dev libboost-iostreams-dev libboost-dev` или `libboost-all-dev` для Ubuntu)
- Eigen3 (`libeigen3-dev` для Ubuntu)
- Yosys требуется для синтеза демонстрационного дизайна
- Для сборки в Windows с MSVC рекомендуется использовать vcpkg для установки зависимостей.
  - Для 32-битных сборок: `vcpkg install boost-filesystem boost-program-options boost-thread eigen3`
  - Для 64-битных сборок: `vcpkg install boost-filesystem:x64-windows boost-program-options:x64-windows boost-thread:x64-windows eigen3:x64-windows`
  - Для статических сборок добавьте `-static` к каждому имени пакета. Например, замените `eigen3:x64-windows` на `eigen3:x64-windows-static`
  - Копия Python, соответствующая версии в vcpkg (в настоящее время Python 3.6.4). Вы можете скачать [Встраиваемый ZIP-файл](https://www.python.org/downloads/release/python-364/) и распаковать его. Возможно, потребуется извлечь `python36.zip` из встраиваемого zip-файла в новую директорию с именем «Lib».
- Для сборки на macOS потребуется утилита brew.
  - Установите все необходимые пакеты: `brew install cmake python boost eigen`

Начало работы
-------------

Прежде всего выполните:

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

### nextpnr-ice40

Для поддержки iCE40 установите [Project IceStorm](https://github.com/YosysHQ/icestorm) в `/usr/local` или другое место, которое следует передать в CMake как `-DICESTORM_INSTALL_PREFIX=/usr`. Затем соберите и установите `nextpnr-ice40` с помощью следующих команд:

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

В Windows можно явно указать пути:

```
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
```

Для статической сборки измените triplet с `x64-windows` на `x64-windows-static` и добавьте `-DBUILD_STATIC=ON`.

Простой пример, который работает на отладочной плате iCEstick, можно найти в `ice40/examples/blinky/blinky.*`.
Пример использования:

```
cd ice40/examples/blinky
yosys -p 'synth_ice40 -top blinky -json blinky.json' blinky.v               # синтез в blinky.json
nextpnr-ice40 --hx1k --json blinky.json --pcf blinky.pcf --asc blinky.asc   # размещение и трассировка
icepack blinky.asc blinky.bin                                               # генерация битового потока
iceprog blinky.bin                                                          # загрузка дизайна на iCEstick
```

Запуск nextpnr в режиме GUI (см. ниже инструкции по сборке nextpnr с поддержкой GUI):

```
nextpnr-ice40 --json blinky.json --pcf blinky.pcf --asc blinky.asc --gui
```

(Используйте кнопки панели инструментов или консоль команд Python для выполнения действий,
таких как упаковка, размещение, трассировка и запись выходных файлов.)

### nextpnr-ecp5

Для поддержки ECP5 установите [Project Trellis](https://github.com/YosysHQ/prjtrellis) в `/usr/local` или другое место, которое следует передать в CMake как `-DTRELLIS_INSTALL_PREFIX=/usr/local`. Затем соберите и установите `nextpnr-ecp5` с помощью следующих команд:

```
mkdir -p build && cd build
cmake .. -DARCH=ecp5 -DTRELLIS_INSTALL_PREFIX=/usr/local
make -j$(nproc)
sudo make install
```

 - Примеры потока ECP5 для различных плат можно найти в [Project Trellis Examples](https://github.com/YosysHQ/prjtrellis/tree/main/examples).

### nextpnr-nexus

Для поддержки Nexus установите [Project Oxide](https://github.com/gatecat/prjoxide) в `$HOME/.cargo` или другое место, которое следует передать в CMake как `-DOXIDE_INSTALL_PREFIX=$HOME/.cargo`. Затем соберите и установите `nextpnr-nexus` с помощью следующих команд:

```
mkdir -p build && cd build
cmake .. -DARCH=nexus -DOXIDE_INSTALL_PREFIX=$HOME/.cargo
make -j$(nproc)
sudo make install
```

 - Примеры потока Nexus для различных плат можно найти в [Project Oxide Examples](https://github.com/gatecat/prjoxide/tree/main/examples).

### nextpnr-mistral

Для поддержки Cyclone V клонируйте [Mistral](https://github.com/Ravenslofty/mistral/tree/nextpnr-latest) в `$HOME/mistral` или другое место и передайте этот путь в CMake как `-DMISTRAL_ROOT=$HOME/mistral`. Затем соберите и установите `nextpnr-mistral` с помощью следующих команд:

```
mkdir -p build && cd build
cmake .. -DARCH=mistral -DMISTRAL_ROOT=$HOME/mistral
make -j$(nproc)
sudo make install
```

Поддержка Cyclone V в настоящее время является экспериментальной и имеет ограниченное тестирование. Бэкенд находится в процессе активного рефакторинга API, его структура, требования к сборке и точки интеграции могут меняться между версиями.

### nextpnr-generic

Универсальная цель позволяет выполнять размещение и трассировку для произвольных пользовательских архитектур.

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

Пример использования универсального потока находится в [generic/examples](https://github.com/yosyshq/nextpnr/blob/main/generic/examples). См. также [документацию по универсальной архитектуре](https://github.com/yosyshq/nextpnr/blob/main/docs/generic.md).

### nextpnr-himbaechel

Цель himbaechel позволяет выполнять размещение и трассировку для более крупных архитектур, имеющих общую структуру.

#### gowin

Для поддержки Gowin установите [Project Apicula](https://github.com/YosysHQ/apicula)

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

 - Примеры потока Gowin для различных плат можно найти в [Project Apicula Examples](https://github.com/YosysHQ/apicula/tree/master/examples).

#### ng-ultra

Для поддержки NanoXplore NG-Ultra клонируйте репозиторий [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
```

*Обратите внимание, что для создания двоичного битового потока требуется инструмент Impulse от NanoXplore.*

#### gatemate

Для поддержки Cologne Chip GateMate клонируйте [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

Графический интерфейс nextpnr не собирается по умолчанию, чтобы уменьшить количество зависимостей для стандартной сборки без графического интерфейса. Чтобы включить его, добавьте `-DBUILD_GUI=ON` в командную строку CMake и убедитесь, что Qt5/Qt6 и OpenGL доступны:

Для Qt6:
 - В Ubuntu 22.04 LTS или новее установите `qt6-base-dev`
 - Для MSVC vcpkg установите `qt-base` (32-битная) или `qt-base:x64-windows` (64-битная)
 - Для Homebrew установите `qt6` и добавьте qt6 в путь: `echo 'export PATH="/usr/local/opt/qt/bin:$PATH"' >> ~/.bash_profile`
 ` — это изменение вступит в силу в следующем сеансе терминала, поэтому перед сборкой откройте новое окно терминала

Для Qt5:
 - В Ubuntu 22.04 LTS установите `qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools`
 - В других версиях Ubuntu установите `qt5-default`
 - Для MSVC vcpkg установите `qt5-base` (32-битная) или `qt5-base:x64-windows` (64-битная)
 - Для Homebrew установите `qt5` и добавьте qt5 в путь: `echo 'export PATH="/usr/local/opt/qt/bin:$PATH"' >> ~/.bash_profile`
 ` — это изменение вступит в силу в следующем сеансе терминала, поэтому перед сборкой откройте новое окно терминала

### Несколько архитектур

Чтобы собрать nextpnr сразу для нескольких архитектур, можно использовать список, разделённый точкой с запятой, в `-DARCH`.

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

Чтобы собрать все доступные стабильные архитектуры, используйте `-DARCH=all`. Чтобы включить экспериментальные архитектуры (в настоящее время nexus), используйте `-DARCH=all+alpha`.

### Разделение по микроархитектурам Himbächel

Чтобы собрать отдельный исполняемый файл `nextpnr-himbaechel` для каждой из поддерживаемых микроархитектур, используйте `-DHIMBAECHEL_SPLIT`.

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

В такой сборке вместо одного двоичного файла `nextpnr-himbaechel` будут созданы два: `nextpnr-himbaechel-gowin` и `nextpnr-himbaechel-ng-ultra`. Хотя они устанавливаются вместе, каждая микроархитектура полностью независима от другой и для работы требует только соответствующего каталога базы данных микросхем `.../share/himbaechel/<микроархитектура>/`. Раздельная сборка уменьшает размер отдельных распространяемых артефактов (хотя общий размер увеличивается) и позволяет совместно устанавливать артефакты разных версий.

Кросс-компиляция
----------------

Помимо баз данных микросхем, nextpnr требует, чтобы инструмент `bba` был скомпилирован для целевой системы сборки. Этот инструмент можно скомпилировать как отдельный проект:

```
cd bba
cmake .
make
```

Это создаст файл `bba-export.cmake`. Укажите путь к этому файлу при кросс-сборке nextpnr, используя `-DBBA_IMPORT=/path/to/bba-export.cmake`.

Дополнительные замечания по сборке nextpnr
------------------------------------------

Следующая команда выполняет отладочную сборку архитектуры iCE40 без GUI, без поддержки Python, без аналитического разместителя HeAP и только с поддержкой HX1K:

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

Для статической сборки релиза архитектуры iCE40 используйте следующее:

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

Решатель разместителя HeAP при необходимости может использовать OpenMP для ускорения работы с очень большими проектами. Включите это, передав `-DUSE_OPENMP=yes` в cmake (поддержка компилятора может различаться).

Вы можете изменить место установки nextpnr (по умолчанию обычно `/usr/local`), используя `-DCMAKE_INSTALL_PREFIX=/install/prefix`.

Заметки для разработчиков
-------------------------

- Весь код форматируется с помощью `clang-format` в соответствии с правилами стиля в `.clang-format` (на основе LLVM с
  увеличенной шириной отступов и размещением фигурных скобок после классов).
- Чтобы автоматически отформатировать весь исходный код, выполните `make clangformat`.
- См. вики для дополнительной документации по API архитектуры.

Запись видео
------------

- Чтобы сохранить видеозапись процесса размещения и трассировки, нажмите значок записи на панели инструментов и выберите пустую директорию,
  где будут храниться файлы записи, а также укажите количество пропускаемых кадров.
- Вручную запустите все необходимые операции PnR
- Снова нажмите на значок записи, чтобы остановить запись
- Перейдите в директорию с файлами и выполните `ffmpeg -f image2 -r 1 -i movie_%05d.png -c:v libx264 nextpnr.mp4`

Тестирование
------------

- Чтобы также собрать тестовые двоичные файлы, используйте `-DBUILD_TESTS=ON` и после `make` выполните `make test` для их запуска, или вы можете запустить отдельные двоичные файлы.
- Чтобы использовать санитайзеры кода, используйте параметры `cmake`:
  - `-DSANITIZE_ADDRESS=ON`
  - `-DSANITIZE_MEMORY=ON -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++`
  - `-DSANITIZE_THREAD=ON`
  - `-DSANITIZE_UNDEFINED=ON`
- Пример запуска valgrind: `valgrind --leak-check=yes --tool=memcheck ./nextpnr-ice40 --json ice40/blinky.json`
- Для запуска тестов с покрытием кода используйте `-DBUILD_TESTS=ON -DCOVERAGE` и после `make` выполните `make ice40-coverage`
- После этого откройте `ice40-coverage/index.html` в вашем браузере, чтобы просмотреть отчёт о покрытии
- Обратите внимание, что для создания отчётов требуется `lcov`

Ссылки и дополнительные материалы
---------------------------------

### Синтез, моделирование и логическая оптимизация

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

### Проекты по документированию (и инструментам) битовых потоков FPGA

- [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)

### Другие свободные проекты размещения и трассировки FPGA

- [Arachne PNR](https://github.com/cseed/arachne-pnr)
- [VPR/VTR](https://verilogtorouting.org/)
- [SymbiFlow](https://github.com/SymbiFlow/symbiflow-arch-defs)
Скачать инструмент