返回更新列表
新发布Aug 9, 2026

nextpnr nextpnr-0.11

nextpnr 便携式 FPGA 布局布线工具

分享

nextpnr -- 便携式FPGA布局布线工具

nextpnr 的目标是成为一个供应商中立、时序驱动、开源免费的FPGA布局布线工具。

目前nextpnr支持:

描述Yosys+nextpnr流程的简要(学术)论文可在arXiv上找到。

以下是nextpnr用于iCE40的截图。构建说明和入门指南见下文。

另见:

先决条件

构建nextpnr需要安装以下软件包,与所选架构无关:

  • CMake 3.25 或更高版本
  • 现代C++17编译器(开发时需要clang-format)
  • Python 3.5 或更高版本,包含开发库(Ubuntu上为python3-dev)
    • 对于nextpnr-himbaechel需要Python 3.9或更高版本
    • 在Windows上,确保安装与vcpkg支持的版本相同
  • Boost库(Ubuntu上为libboost-dev libboost-filesystem-dev libboost-thread-dev libboost-program-options-dev libboost-iostreams-dev libboost-dev或libboost-all-dev)
  • Eigen3(Ubuntu上为libeigen3-dev)
  • 需要Yosys来综合demo设计
  • 在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
    • 需要一份与vcpkg中版本匹配的Python副本(当前为Python 3.6.4)。您可以下载可嵌入的Zip文件并解压。您可能需要将可嵌入zip文件中的python36.zip解压到一个名为"Lib"的新目录中。
  • 在macOS上构建时,需要brew工具。
    • 安装所有需要的包 brew install cmake python boost eigen

入门

首先,运行:

git submodule update --init --recursive

nextpnr-ice40

对于iCE40支持,将Project IceStorm安装到/usr/local或其他位置,并将其作为-DICESTORM_INSTALL_PREFIX=/usr传递给CMake。然后使用以下命令构建并安装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

要构建静态发布版,将目标三元组从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

在GUI模式下运行nextpnr(请参阅下方关于构建带GUI支持的nextpnr的说明):

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

(使用工具栏按钮或Python命令控制台执行打包、布局、布线和写入输出文件等操作。)

nextpnr-ecp5

对于ECP5支持,将Project Trellis安装到/usr/local或其他位置,并将其作为-DTRELLIS_INSTALL_PREFIX=/usr/local传递给CMake。然后使用以下命令构建并安装nextpnr-ecp5:

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

nextpnr-nexus

对于Nexus支持,将Project Oxide安装到$HOME/.cargo或其他位置,并将其作为-DOXIDE_INSTALL_PREFIX=$HOME/.cargo传递给CMake。然后使用以下命令构建并安装nextpnr-nexus:

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

nextpnr-mistral

对于Cyclone V支持,将Mistral克隆到$HOME/mistral或其他位置,并将此路径作为-DMISTRAL_ROOT=$HOME/mistral传递给CMake。然后使用以下命令构建并安装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

对于高云支持,安装Project Apicula

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

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

请注意,二进制比特流创建需要NanoXplore的Impulse工具。

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 GUI,以减少标准无头构建的依赖数量。要启用它,请在CMake命令行中添加-DBUILD_GUI=ON,并确保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-himbachel可执行文件,请使用-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

分类