Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
nextpnr — nextpnr 휴대용 FPGA 배치 및 배선 도구 | Kitploit
도구/GitHubGitHub/yosyshq/nextpnr
Embedded Systems SecurityHardware SecurityPapers & ResearchLearning & EducationFirmware Analysis
GitHubyosyshq/nextpnr

nextpnr

nextpnr 휴대용 FPGA 배치 및 배선 도구

저장소 보기
1.7k331872일 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
nextpnr -- 휴대용 FPGA 배치 및 배선 도구
===============================================

nextpnr는 공급업체 중립적이고 타이밍 기반의 FOSS FPGA 배치 및 배선 도구를 목표로 합니다.

현재 nextpnr은 다음을 지원합니다:
 * [Project IceStorm](https://github.com/YosysHQ/icestorm)에서 지원되는 Lattice iCE40 장치
 * [Project Trellis](https://github.com/YosysHQ/prjtrellis)에서 지원되는 Lattice ECP5 장치
 * [Project Oxide](https://github.com/gatecat/prjoxide)에서 지원되는 Lattice Nexus 장치
 * [Project Apicula](https://github.com/YosysHQ/apicula)에서 지원되는 Gowin LittleBee 및 Aurora V 장치
 * [Project Beyond](https://github.com/YosysHQ-GmbH/prjbeyond-db)에서 지원되는 NanoXplore NG-Ultra 장치
 * [Project Peppercorn](https://github.com/YosysHQ/prjpeppercorn)에서 지원되는 Cologne Chip GateMate 장치
 * *(실험적)* [Mistral](https://github.com/Ravenslofty/mistral)에서 지원되는 Cyclone V 장치
 * *(실험적)* [Project Trellis](https://github.com/YosysHQ/prjtrellis)에서 지원되는 Lattice MachXO2 장치
 * *(실험적)* [Project X-Ray](https://github.com/F4PGA/prjxray)에서 지원되는 Xilinx 7-시리즈 장치
 * *(실험적)* 사용자 정의 아키텍처를 위한 "일반(generic)" 백엔드

Yosys+nextpnr 흐름을 설명하는 간략한 (학술) 논문은 [arXiv](https://arxiv.org/abs/1903.10407)에서 찾을 수 있습니다.

다음은 iCE40용 nextpnr의 스크린샷입니다. 빌드 지침과 [시작하기 노트](#getting-started)는 아래에서 확인할 수 있습니다.

<img src="https://assets.kitploit.com/production/public/readmes/10385/12bab50b683472060ad2a49530d9b6fe58b2c2b70efd1144b849ff83a8a6e80b.png" width="640"/>

참고:
- [F.A.Q.](https://github.com/yosyshq/nextpnr/blob/main/docs/faq.md)
- [아키텍처 API](https://github.com/yosyshq/nextpnr/blob/main/docs/archapi.md)


사전 요구 사항
-------------

다음 패키지는 선택한 아키텍처와 관계없이 nextpnr을 빌드하기 위해 설치해야 합니다:

- CMake 3.25 이상
- 최신 C++17 컴파일러 (개발 시 `clang-format` 필요)
- Python 3.5 이상, 개발 라이브러리 포함 (Ubuntu의 경우 `python3-dev`)
  - `nextpnr-himbaechel`에는 Python 3.9 이상 필요
  - Windows에서는 [vcpkg](https://github.com/Microsoft/vcpkg/blob/master/ports/python3/CONTROL)에서 지원하는 동일한 버전을 설치해야 합니다.
- Boost 라이브러리 (`libboost-dev libboost-filesystem-dev libboost-thread-dev libboost-program-options-dev libboost-iostreams-dev libboost-dev` 또는 Ubuntu의 경우 `libboost-all-dev`)
- Eigen3 (Ubuntu의 경우 `libeigen3-dev`)
- Yosys는 데모 디자인 합성에 필요합니다.
- MSVC로 Windows에서 빌드할 때는 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 3.6.4)의 버전과 일치하는 Python 사본. [임베더블 ZIP 파일](https://www.python.org/downloads/release/python-364/)을 다운로드하여 압축을 풀 수 있습니다. 임베더블 ZIP 파일 내의 `python36.zip`을 "Lib"라는 새 디렉토리로 추출해야 할 수도 있습니다.
- macOS에서 빌드하려면 brew 유틸리티가 필요합니다.
  - 필요한 모든 패키지 설치 `brew install cmake python boost eigen`

시작하기
---------------

먼저 다음을 실행합니다:

```
git submodule update --init --recursive
```

### nextpnr-ice40

iCE40 지원을 위해 [Project IceStorm](https://github.com/YosysHQ/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 명령 콘솔을 사용하여 패킹, 배치, 배선, 출력 파일 쓰기 등의 작업을 수행할 수 있습니다.)

### nextpnr-ecp5

ECP5 지원을 위해 [Project Trellis](https://github.com/YosysHQ/prjtrellis)을 `/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](https://github.com/YosysHQ/prjtrellis/tree/main/examples)에서 찾을 수 있습니다.

### nextpnr-nexus

Nexus 지원을 위해 [Project Oxide](https://github.com/gatecat/prjoxide)을 `$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](https://github.com/gatecat/prjoxide/tree/main/examples)에서 찾을 수 있습니다.

### nextpnr-mistral

Cyclone V 지원을 위해 [Mistral](https://github.com/Ravenslofty/mistral/tree/nextpnr-latest)을 `$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

일반(generic) 대상은 사용자 정의 아키텍처에 대한 배치 및 배선을 실행할 수 있게 합니다.

```
mkdir -p build && cd build
cmake .. -DARCH=generic
make -j$(nproc)
sudo make install
```

일반 흐름 사용 방법의 예제는 [generic/examples](https://github.com/yosyshq/nextpnr/blob/main/generic/examples)에 있습니다. [일반 아키텍처 문서](https://github.com/yosyshq/nextpnr/blob/main/docs/generic.md)도 참조하십시오.

### nextpnr-himbaechel

himbaechel 대상은 공통 구조를 공유하는 더 큰 아키텍처에 대한 배치 및 배선을 실행할 수 있게 합니다.

#### gowin

Gowin 지원을 위해 [Project Apicula](https://github.com/YosysHQ/apicula)를 설치합니다.

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

 - 다양한 보드에 대한 Gowin 흐름의 예제는 [Project Apicula Examples](https://github.com/YosysHQ/apicula/tree/master/examples)에서 찾을 수 있습니다.

#### ng-ultra

NanoXplore NG-Ultra 지원을 위해 [Project Beyond DB](https://github.com/yosyshq-GmbH/prjbeyond-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](https://github.com/YosysHQ/prjpeppercorn)을 클론합니다.

```
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는 기본적으로 빌드되지 않습니다. 이는 표준 헤드리스 빌드의 종속성 수를 줄이기 위함입니다. 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/<microarchitecture>/` 칩 데이터베이스 디렉토리만 필요합니다. 분할 빌드는 개별 배포 아티팩트의 크기를 줄이고(전체 크기는 증가하지만) 다른 버전의 아티팩트를 함께 설치할 수 있습니다.

크로스 컴파일
-----------------

칩 데이터베이스 외에도 nextpnr은 빌드 시스템용으로 컴파일된 `bba` 도구가 필요합니다. 이 도구는 별도의 프로젝트로 컴파일할 수 있습니다:

```
cd bba
cmake .
make
```

그러면 `bba-export.cmake` 파일이 생성됩니다. nextpnr을 크로스 빌드할 때 `-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를 사용할 수 있습니다. CMake에 `-DUSE_OPENMP=yes`를 전달하여 활성화하십시오 (컴파일러 지원은 다를 수 있음).

nextpnr이 설치될 위치를 변경할 수 있습니다 (`-DCMAKE_INSTALL_PREFIX=/install/prefix` 사용). 일반적으로 기본값은 `/usr/local`입니다.

개발자 참고 사항
--------------------

- 모든 코드는 `.clang-format`의 스타일 규칙에 따라 `clang-format`을 사용하여 포맷됩니다 (LLVM 기반, 들여쓰기 너비 증가 및 클래스 후 중괄호 줄바꿈).
- 모든 소스 코드를 자동으로 포맷하려면 `make clangformat`을 실행하십시오.
- 아키텍처 API에 대한 추가 문서는 위키를 참조하십시오.

동영상 녹화
-----------------

- 배치 및 배선의 동영상 녹화를 저장하려면 툴바에서 녹화 아이콘을 클릭하고 녹화 파일이 저장될 빈 디렉토리를 선택한 다음 건너뛸 프레임을 선택하십시오.
- 원하는 모든 PnR 작업을 수동으로 시작합니다.
- 녹화를 중지하려면 녹화 아이콘을 다시 클릭합니다.
- 파일이 포함된 디렉토리로 이동하여 `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=ON`
- valgrind 실행 예: `valgrind --leak-check=yes --tool=memcheck ./nextpnr-ice40 --json ice40/blinky.json`
- 코드 커버리지로 테스트 실행: `-DBUILD_TESTS=ON -DCOVERAGE`를 사용하고 `make` 후 `make ice40-coverage` 실행
- 그런 다음 브라우저에서 `ice40-coverage/index.html`을 열어 커버리지 보고서를 확인합니다.
- 보고서를 생성하려면 `lcov`가 필요합니다.

링크 및 참고 자료
--------------------

### 합성, 시뮬레이션 및 로직 최적화

- [Yosys](https://yosyshq.net/yosys/)
- [Icarus Verilog](http://iverilog.icarus.com/)
- [ABC](https://people.eecs.berkeley.edu/~alanmi/abc/)

### FPGA 비트스트림 문서 (및 도구) 프로젝트

- [Project IceStorm (Lattice iCE40)](https://github.com/YosysHQ/icestorm)
- [Project Trellis (Lattice ECP5)](https://yosyshq.github.io/prjtrellis-db/)
- [Project X-Ray (Xilinx 7-시리즈)](https://github.com/F4PGA/prjxray)
- [Project Chibi (Intel MAX-V)](https://github.com/rqou/project-chibi)

### 기타 FOSS FPGA 배치 및 배선 프로젝트

- [Arachne PNR](https://github.com/cseed/arachne-pnr)
- [VPR/VTR](https://verilogtorouting.org/)
- [SymbiFlow](https://github.com/SymbiFlow/symbiflow-arch-defs)
도구 다운로드