
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».
- Для 32-битных сборок:
- Для сборки на 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
Цель himbaechel позволяет выполнять размещение и трассировку для более крупных архитектур, имеющих общую структуру.
gowin
Для поддержки Gowin установите Project Apicula
mkdir -p build && cd build
cmake .. -DARCH="himbaechel" -DHIMBAECHEL_UARCH="gowin"
make -j$(nproc)
sudo make install
- Примеры потока Gowin для различных плат можно найти в Project Apicula Examples.
ng-ultra
Для поддержки NanoXplore NG-Ultra клонируйте репозиторий Project Beyond 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
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
Ссылки и дополнительные материалы
Синтез, моделирование и логическая оптимизация
Проекты по документированию (и инструментам) битовых потоков FPGA
- Project IceStorm (Lattice iCE40)
- Project Trellis (Lattice ECP5)
- Project X-Ray (Xilinx 7-Series)
- Project Chibi (Intel MAX-V)