
nextpnr портативный инструмент для размещения и трассировки FPGA
nextpnr стремится быть независимым от вендора, управляемым по таймингам, свободным инструментом для размещения и трассировки FPGA.
В настоящее время nextpnr поддерживает:
Краткая (академическая) статья, описывающая поток Yosys+nextpnr, доступна на arXiv.
Ниже приведён скриншот nextpnr для iCE40. Инструкции по сборке и заметки для начала работы можно найти далее.
См. также:
Для сборки nextpnr, независимо от выбранной архитектуры, необходимо установить следующие пакеты:
clang-format)python3-dev для Ubuntu)
nextpnr-himbaechel требуется Python 3.9 или новееlibboost-dev libboost-filesystem-dev libboost-thread-dev libboost-program-options-dev libboost-iostreams-dev libboost-dev или libboost-all-dev для Ubuntu)libeigen3-dev для Ubuntu)vcpkg install boost-filesystem boost-program-options boost-thread eigen3vcpkg install boost-filesystem:x64-windows boost-program-options:x64-windows boost-thread:x64-windows eigen3:x64-windowsПрежде всего выполните:
git submodule update --init --recursive
Для поддержки 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 для выполнения действий, таких как упаковка, размещение, трассировка и запись выходных файлов.)
Для поддержки 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
Для поддержки 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
Для поддержки 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, его структура, требования к сборке и точки интеграции могут меняться между версиями.
Универсальная цель позволяет выполнять размещение и трассировку для произвольных пользовательских архитектур.
mkdir -p build && cd build
cmake .. -DARCH=generic
make -j$(nproc)
sudo make install
Пример использования универсального потока находится в generic/examples. См. также документацию по универсальной архитектуре.
Цель himbaechel позволяет выполнять размещение и трассировку для более крупных архитектур, имеющих общую структуру.
Для поддержки Gowin установите Project Apicula
mkdir -p build && cd build
cmake .. -DARCH="himbaechel" -DHIMBAECHEL_UARCH="gowin"
make -j$(nproc)
sudo make install
Для поддержки 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.
Для поддержки 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
Графический интерфейс nextpnr не собирается по умолчанию, чтобы уменьшить количество зависимостей для стандартной сборки без графического интерфейса. Чтобы включить его, добавьте -DBUILD_GUI=ON в командную строку CMake и убедитесь, что Qt5/Qt6 и OpenGL доступны:
Для Qt6:
qt6-base-devqt-base (32-битная) или qt-base:x64-windows (64-битная)qt6 и добавьте qt6 в путь: echo 'export PATH="/usr/local/opt/qt/bin:$PATH"' >> ~/.bash_profile
` — это изменение вступит в силу в следующем сеансе терминала, поэтому перед сборкой откройте новое окно терминалаДля Qt5:
qtbase5-dev qtchooser qt5-qmake qtbase5-dev-toolsqt5-defaultqt5-base (32-битная) или qt5-base:x64-windows (64-битная)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.
Чтобы собрать отдельный исполняемый файл 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.
Следующая команда выполняет отладочную сборку архитектуры 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.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=ONvalgrind --leak-check=yes --tool=memcheck ./nextpnr-ice40 --json ice40/blinky.json-DBUILD_TESTS=ON -DCOVERAGE и после make выполните make ice40-coverage-staticeigen3:x64-windowseigen3:x64-windows-staticpython36.zip из встраиваемого zip-файла в новую директорию с именем «Lib».brew install cmake python boost eigenice40-coverage/index.html в вашем браузере, чтобы просмотреть отчёт о покрытииlcov