nextpnr 的目标是成为一个供应商中立、时序驱动、开源免费的FPGA布局布线工具。
目前nextpnr支持:
描述Yosys+nextpnr流程的简要(学术)论文可在arXiv上找到。
以下是nextpnr用于iCE40的截图。构建说明和入门指南见下文。
另见:
构建nextpnr需要安装以下软件包,与所选架构无关:
clang-format)python3-dev)
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)libeigen3-dev)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-static。例如,将eigen3:x64-windows改为首先,运行:
git submodule update --init --recursive
对于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命令控制台执行打包、布局、布线和写入输出文件等操作。)
对于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
对于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
对于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重构,其结构、构建要求和集成点可能会在版本之间发生变化。
通用目标允许为任意自定义架构运行布局布线。
mkdir -p build && cd build
cmake .. -DARCH=generic
make -j$(nproc)
sudo make install
如何使用通用流程的示例在generic/examples中。另见通用架构文档。
himbaechel目标允许为共享通用结构的较大架构运行布局布线。
对于高云支持,安装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
请注意,二进制比特流创建需要NanoXplore的Impulse工具。
对于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 GUI,以减少标准无头构建的依赖数量。要启用它,请在CMake命令行中添加-DBUILD_GUI=ON,并确保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-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
这将创建一个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来加速非常大的设计。通过向cmake传递-DUSE_OPENMP=yes来启用此功能(编译器支持可能有所不同)。
您可以通过使用-DCMAKE_INSTALL_PREFIX=/install/prefix来更改nextpnr的安装位置(通常默认为/usr/local)。
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-coverageice40-coverage/index.html查看覆盖率报告eigen3:x64-windows-staticpython36.zip解压到一个名为"Lib"的新目录中。brew install cmake python boost eigenlcov