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