Назад к обновлениям
New releaseAug 9, 2026

nextpnr nextpnr-0.11

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

Поделиться

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

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

В настоящее время nextpnr поддерживает:

  • Устройства Lattice iCE40, поддерживаемые Project IceStorm
  • Устройства Lattice ECP5, поддерживаемые Project Trellis
  • Устройства Lattice Nexus, поддерживаемые Project Oxide
  • Устройства Gowin LittleBee и Aurora V, поддерживаемые Project Apicula
  • Устройства NanoXplore NG-Ultra, поддерживаемые Project Beyond
  • Устройства Cologne Chip GateMate, поддерживаемые Project Peppercorn
  • (экспериментально) Устройства Cyclone V, поддерживаемые Mistral
  • (экспериментально) Устройства Lattice MachXO2, поддерживаемые Project Trellis
  • (экспериментально) Устройства Xilinx 7-й серии, поддерживаемые Project X-Ray
  • (экспериментально) «универсальный» бэкенд для пользовательских архитектур

Краткая (академическая) статья, описывающая поток Yosys+nextpnr, доступна на arXiv.

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

См. также:

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

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

  • CMake 3.25 или новее
  • Современный компилятор C++17 (для разработки требуется clang-format)
  • Python 3.5 или новее, включая библиотеки для разработки (python3-dev для Ubuntu)
    • Для nextpnr-himbaechel требуется Python 3.9 или новее
    • В Windows убедитесь, что установлена версия, поддерживаемая vcpkg
  • Библиотеки 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-файл и распаковать его. Возможно, потребуется извлечь python36.zip из встраиваемого zip-файла в новую директорию с именем «Lib».
  • Для сборки на macOS потребуется утилита brew.
    • Установите все необходимые пакеты: brew install cmake python boost eigen

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

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

git submodule update --init --recursive

nextpnr-ice40

Для поддержки iCE40 установите Project 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 в /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.

nextpnr-nexus

Для поддержки Nexus установите Project Oxide в $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.

nextpnr-mistral

Для поддержки Cyclone V клонируйте Mistral в $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. См. также документацию по универсальной архитектуре.

nextpnr-himbaechel

Категории