
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 또는 Ubuntu의 경우 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 또는 다른 위치에 설치하고, 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
정적 릴리스를 빌드하려면 대상 트리플렛을 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 또는 다른 위치에 설치하고, 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 리팩토링 중이며, 구조, 빌드 요구 사항 및 통합 지점은 버전 간에 변경될 수 있습니다.
일반(generic) 대상은 사용자 정의 아키텍처에 대한 배치 및 배선을 실행할 수 있게 합니다.
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
바이너리 비트스트림 생성에는 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는 기본적으로 빌드되지 않습니다. 이는 표준 헤드리스 빌드의 종속성 수를 줄이기 위함입니다. 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
` - 이 변경 사항은 다음 터미널 세션에서 적용되므로 빌드 전에 터미널 창을 다시 여십시오.한 번에 여러 아키텍처에 대해 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/<microarchitecture>/ 칩 데이터베이스 디렉토리만 필요합니다. 분할 빌드는 개별 배포 아티팩트의 크기를 줄이고(전체 크기는 증가하지만) 다른 버전의 아티팩트를 함께 설치할 수 있습니다.
칩 데이터베이스 외에도 nextpnr은 빌드 시스템용으로 컴파일된 bba 도구가 필요합니다. 이 도구는 별도의 프로젝트로 컴파일할 수 있습니다:
cd bba
cmake .
make
그러면 bba-export.cmake 파일이 생성됩니다. nextpnr을 크로스 빌드할 때 -DBBA_IMPORT=/path/to/bba-export.cmake를 사용하여 이 파일의 경로를 제공하십시오.
다음은 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를 사용할 수 있습니다. CMake에 -DUSE_OPENMP=yes를 전달하여 활성화하십시오 (컴파일러 지원은 다를 수 있음).
nextpnr이 설치될 위치를 변경할 수 있습니다 (-DCMAKE_INSTALL_PREFIX=/install/prefix 사용). 일반적으로 기본값은 /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-coverage 실행eigen3:x64-windowseigen3:x64-windows-staticpython36.zip을 "Lib"라는 새 디렉토리로 추출해야 할 수도 있습니다.brew install cmake python boost eigenice40-coverage/index.htmllcov가 필요합니다.