
nextpnr ポータブル FPGA 配置配線ツール
nextpnrは、ベンダーに依存しないタイミング駆動型のFOSS FPGA配置配線ツールを目指しています。
現在、nextpnrは以下をサポートしています:
Yosys+nextpnrフローを説明する簡単な(学術)論文は arXiv にあります。
以下はiCE40用のnextpnrのスクリーンショットです。ビルド手順とはじめには以下にあります。
関連リンク:
選択したアーキテクチャに関係なく、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 を追加します。例えば、 を に変更します。まず最初に、以下を実行します:
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 にあります。Generic Architecture docsも参照してください。
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
バイナリビットストリームの作成には、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-dev をインストールqt-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-tools をインストールqt5-default をインストールqt5-base(32ビット)または qt5-base:x64-windows(64ビット)をインストールqt5 をインストールし、qt5をパスに追加:echo 'export PATH="/usr/local/opt/qt/bin:$PATH"' >> ~/.bash_profile
` - この変更は次のターミナルセッションで有効になるため、ビルド前にターミナルウィンドウを開き直してください。複数のアーキテクチャを同時にビルドするには、-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 の2つのバイナリがビルドされます。これらは一緒にインストールされますが、各マイクロアーキテクチャは互いに完全に独立しており、実行には対応する .../share/himbaechel/<microarchitecture>/ チップデータベースディレクトリのみが必要です。分割ビルドにより、個々の配布物のサイズが削減され(総サイズは増加しますが)、異なるバージョンの配布物の同時インストールが可能になります。
チップデータベースとは別に、nextpnrはビルドシステム用にコンパイルされた bba ツールを必要とします。このツールは別のプロジェクトとしてコンパイルできます:
cd bba
cmake .
make
これにより、bba-export.cmake ファイルが作成されます。クロスビルド時に -DBBA_IMPORT=/path/to/bba-export.cmake を使用して、このファイルへのパスをnextpnrに指定します。
以下は、GUIなし、Pythonサポートなし、HeAPアナリティックプレーサなし、HX1KのみのサポートでiCE40アーキテクチャのデバッグビルドを実行します:
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 を実行しますeigen3:x64-windowseigen3:x64-windows-staticpython36.zip を "Lib" という新しいディレクトリに展開する必要があるかもしれません。brew install cmake python boost eigenice40-coverage/index.html を開いてカバレッジレポートを表示しますlcov が必要です