
nextpnr nextpnr-0.11
nextpnr ferramenta portátil de posicionamento e roteamento para FPGA
nextpnr -- uma ferramenta portátil de posicionamento e roteamento para FPGA
nextpnr visa ser uma ferramenta de posicionamento e roteamento para FPGA neutra em relação ao fabricante, orientada por temporização e de código aberto (FOSS).
Atualmente, o nextpnr suporta:
- Dispositivos Lattice iCE40 suportados pelo Project IceStorm
- Dispositivos Lattice ECP5 suportados pelo Project Trellis
- Dispositivos Lattice Nexus suportados pelo Project Oxide
- Dispositivos Gowin LittleBee e Aurora V suportados pelo Project Apicula
- Dispositivos NanoXplore NG-Ultra suportados pelo Project Beyond
- Dispositivos Cologne Chip GateMate suportados pelo Project Peppercorn
- (experimental) Dispositivos Cyclone V suportados pelo Mistral
- (experimental) Dispositivos Lattice MachXO2 suportados pelo Project Trellis
- (experimental) Dispositivos Xilinx 7-series suportados pelo Project X-Ray
- (experimental) um back-end "genérico" para arquiteturas definidas pelo usuário
Um breve artigo (acadêmico) descrevendo o fluxo Yosys+nextpnr pode ser encontrado no arXiv.
Aqui está uma captura de tela do nextpnr para iCE40. Instruções de compilação e notas de início rápido podem ser encontradas abaixo.
Veja também:
Pré-requisitos
Os seguintes pacotes precisam ser instalados para compilar o nextpnr, independentemente da arquitetura selecionada:
- CMake 3.25 ou posterior
- Compilador C++17 moderno (
clang-formatnecessário para desenvolvimento) - Python 3.5 ou posterior, incluindo bibliotecas de desenvolvimento (
python3-devno Ubuntu)- Python 3.9 ou posterior é necessário para
nextpnr-himbaechel - no Windows, certifique-se de instalar a mesma versão suportada pelo vcpkg
- Python 3.9 ou posterior é necessário para
- Bibliotecas Boost (
libboost-dev libboost-filesystem-dev libboost-thread-dev libboost-program-options-dev libboost-iostreams-dev libboost-devoulibboost-all-devno Ubuntu) - Eigen3 (
libeigen3-devno Ubuntu) - Yosys é necessário para sintetizar o design de demonstração
- Para compilar no Windows com MSVC, recomenda-se o uso do vcpkg para instalação das dependências.
- Para compilações de 32 bits:
vcpkg install boost-filesystem boost-program-options boost-thread eigen3 - Para compilações de 64 bits:
vcpkg install boost-filesystem:x64-windows boost-program-options:x64-windows boost-thread:x64-windows eigen3:x64-windows - Para compilações estáticas, adicione
-statica cada um dos nomes de pacote. Por exemplo, altereeigen3:x64-windowsparaeigen3:x64-windows-static - Uma cópia do Python que corresponda à versão do vcpkg (atualmente Python 3.6.4). Você pode baixar o Arquivo Zip Incorporável e extraí-lo. Pode ser necessário extrair
python36.zipdentro do arquivo zip incorporável para um novo diretório chamado "Lib".
- Para compilações de 32 bits:
- Para compilar no macOS, o utilitário brew é necessário.
- Instale todos os pacotes necessários
brew install cmake python boost eigen
- Instale todos os pacotes necessários
Início rápido
Primeiro, execute:
git submodule update --init --recursive
nextpnr-ice40
Para suporte a iCE40, instale o Project IceStorm em /usr/local ou outro local, que deve ser passado como -DICESTORM_INSTALL_PREFIX=/usr para o CMake. Em seguida, compile e instale o nextpnr-ice40 usando os seguintes comandos:
mkdir -p build && cd build
cmake .. -DARCH=ice40
make -j$(nproc)
sudo make install
No Windows, você pode especificar caminhos explicitamente:
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
Para compilar uma versão estática, altere o triplet de destino de x64-windows para x64-windows-static e adicione -DBUILD_STATIC=ON.
Um exemplo simples que roda na placa de desenvolvimento iCEstick pode ser encontrado em ice40/examples/blinky/blinky.*.
Exemplo de uso:
cd ice40/examples/blinky
yosys -p 'synth_ice40 -top blinky -json blinky.json' blinky.v # sintetizar em blinky.json
nextpnr-ice40 --hx1k --json blinky.json --pcf blinky.pcf --asc blinky.asc # executar posicionamento e roteamento
icepack blinky.asc blinky.bin # gerar arquivo bitstream binário
iceprog blinky.bin # enviar design para iCEstick
Executando o nextpnr no modo GUI (veja abaixo instruções para compilar o nextpnr com suporte a GUI):
nextpnr-ice40 --json blinky.json --pcf blinky.pcf --asc blinky.asc --gui
(Use os botões da barra de ferramentas ou o console de comandos Python para executar ações como pack, place, route e escrever arquivos de saída.)
nextpnr-ecp5
Para suporte a ECP5, instale o Project Trellis em /usr/local ou outro local, que deve ser passado como -DTRELLIS_INSTALL_PREFIX=/usr/local para o CMake. Em seguida, compile e instale o nextpnr-ecp5 usando os seguintes comandos:
mkdir -p build && cd build
cmake .. -DARCH=ecp5 -DTRELLIS_INSTALL_PREFIX=/usr/local
make -j$(nproc)
sudo make install
- Exemplos do fluxo ECP5 para uma variedade de placas podem ser encontrados nos Exemplos do Project Trellis.
nextpnr-nexus
Para suporte a Nexus, instale o Project Oxide em $HOME/.cargo ou outro local, que deve ser passado como -DOXIDE_INSTALL_PREFIX=$HOME/.cargo para o CMake. Em seguida, compile e instale o nextpnr-nexus usando os seguintes comandos:
mkdir -p build && cd build
cmake .. -DARCH=nexus -DOXIDE_INSTALL_PREFIX=$HOME/.cargo
make -j$(nproc)
sudo make install
- Exemplos do fluxo Nexus para uma variedade de placas podem ser encontrados nos Exemplos do Project Oxide.
nextpnr-mistral
Para suporte a Cyclone V, clone o Mistral para $HOME/mistral ou outro local e passe este caminho como -DMISTRAL_ROOT=$HOME/mistral para o CMake. Em seguida, compile e instale o nextpnr-mistral usando os seguintes comandos:
mkdir -p build && cd build
cmake .. -DARCH=mistral -DMISTRAL_ROOT=$HOME/mistral
make -j$(nproc)
sudo make install
O suporte a Cyclone V é atualmente experimental e tem testes limitados. O backend está passando por uma refatoração ativa da API, e sua estrutura, requisitos de compilação e pontos de integração podem mudar entre versões.
nextpnr-generic
O alvo genérico permite executar posicionamento e roteamento para arquiteturas personalizadas arbitrárias.
mkdir -p build && cd build
cmake .. -DARCH=generic
make -j$(nproc)
sudo make install