
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सबसे पहले, चलाएँ:
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
विंडोज पर, आप पथ स्पष्ट रूप से निर्दिष्ट कर सकते हैं:
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 रिफैक्टरिंग से गुजर रहा है, और इसकी संरचना, बिल्ड आवश्यकताएँ और एकीकरण बिंदु संस्करणों के बीच बदल सकते हैं।
जेनेरिक लक्ष्य मनमाने कस्टम आर्किटेक्चर के लिए प्लेसमेंट और रूटिंग चलाने की अनुमति देता है।
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 टूल की आवश्यकता है।
कोलोन चिप 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
` - यह परिवर्तन अगले टर्मिनल सत्र में प्रभावी होगा, इसलिए कृपया बनाने से पहले टर्मिनल विंडो फिर से खोलेंएक साथ कई आर्किटेक्चर के लिए 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 का उपयोग करके इस फ़ाइल का पथ प्रदान करें।
निम्नलिखित बिना 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 चलाएँ-static जोड़ें। उदाहरण के लिए, eigen3:x64-windows को eigen3:x64-windows-static में बदलें।python36.zip को "Lib" नामक एक नई निर्देशिका में निकालने की आवश्यकता हो सकती है।brew install cmake python boost eigenice40-coverage/index.html खोलेंlcov की आवश्यकता है