
nextpnr nextpnr-0.11
nextpnr पोर्टेबल FPGA प्लेस और रूट टूल
nextpnr -- एक पोर्टेबल FPGA प्लेस एंड रूट टूल
nextpnr का उद्देश्य विक्रेता-तटस्थ, टाइमिंग-चालित, FOSS FPGA प्लेस एंड रूट टूल होना है।
वर्तमान में nextpnr समर्थन करता है:
- लैटिस iCE40 उपकरण जो Project IceStorm द्वारा समर्थित हैं
- लैटिस ECP5 उपकरण जो Project Trellis द्वारा समर्थित हैं
- लैटिस Nexus उपकरण जो Project Oxide द्वारा समर्थित हैं
- गोविन LittleBee और Aurora V उपकरण जो Project Apicula द्वारा समर्थित हैं
- NanoXplore NG-Ultra उपकरण जो Project Beyond द्वारा समर्थित हैं
- कोलोन चिप GateMate उपकरण जो Project Peppercorn द्वारा समर्थित हैं
- (प्रायोगिक) Cyclone V उपकरण जो Mistral द्वारा समर्थित हैं
- (प्रायोगिक) लैटिस MachXO2 उपकरण जो Project Trellis द्वारा समर्थित हैं
- (प्रायोगिक) Xilinx 7-श्रृंखला उपकरण जो Project X-Ray द्वारा समर्थित हैं
- (प्रायोगिक) उपयोगकर्ता-परिभाषित आर्किटेक्चर के लिए एक "जेनेरिक" बैक-एंड
Yosys+nextpnr प्रवाह का वर्णन करने वाला एक संक्षिप्त (शैक्षणिक) पेपर arXiv पर पाया जा सकता है।
यहाँ iCE40 के लिए nextpnr का एक स्क्रीनशॉट है। निर्माण निर्देश और आरंभ करने के नोट्स नीचे दिए गए हैं।
यह भी देखें:
पूर्वापेक्षाएँ
nextpnr बनाने के लिए निम्नलिखित पैकेज स्थापित करने की आवश्यकता है, चयनित आर्किटेक्चर से स्वतंत्र:
- CMake 3.25 या बाद का संस्करण
- आधुनिक C++17 कंपाइलर (विकास के लिए
clang-formatआवश्यक) - Python 3.5 या बाद का संस्करण, जिसमें विकास लाइब्रेरी शामिल हों (Ubuntu के लिए
python3-dev)nextpnr-himbaechelके लिए Python 3.9 या बाद का संस्करण आवश्यक है- विंडोज पर सुनिश्चित करें कि vcpkg द्वारा समर्थित समान संस्करण स्थापित हो
- Boost लाइब्रेरीज़ (Ubuntu के लिए
libboost-dev libboost-filesystem-dev libboost-thread-dev libboost-program-options-dev libboost-iostreams-dev libboost-devयाlibboost-all-dev) - Eigen3 (Ubuntu के लिए
libeigen3-dev) - डेमो डिज़ाइन को संश्लेषित करने के लिए Yosys आवश्यक है
- MSVC के साथ विंडोज पर बनाने के लिए, निर्भरता स्थापित करने के लिए 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में बदलें। - Python की एक प्रति जो vcpkg में संस्करण से मेल खाती हो (वर्तमान में Python 3.6.4)। आप Embeddable Zip File डाउनलोड कर सकते हैं और इसे निकाल सकते हैं। आपको embeddable zip फ़ाइल के अंदर
python36.zipको "Lib" नामक एक नई निर्देशिका में निकालने की आवश्यकता हो सकती है।
- 32 बिट बिल्ड के लिए:
- macOS पर बनाने के लिए, brew उपयोगिता की आवश्यकता है।
- सभी आवश्यक पैकेज स्थापित करें
brew install cmake python boost eigen
- सभी आवश्यक पैकेज स्थापित करें
आरंभ करना
सबसे पहले, चलाएँ:
git submodule update --init --recursive
nextpnr-ice40
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 कमांड कंसोल का उपयोग करें जैसे पैक, प्लेस, रूट, और आउटपुट फ़ाइलें लिखना।)
nextpnr-ecp5
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
- विभिन्न बोर्डों के लिए ECP5 प्रवाह के उदाहरण Project Trellis Examples में पाए जा सकते हैं।
nextpnr-nexus
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
- विभिन्न बोर्डों के लिए Nexus प्रवाह के उदाहरण Project Oxide Examples में पाए जा सकते हैं।
nextpnr-mistral
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 रिफैक्टरिंग से गुजर रहा है, और इसकी संरचना, बिल्ड आवश्यकताएँ और एकीकरण बिंदु संस्करणों के बीच बदल सकते हैं।
nextpnr-generic
जेनेरिक लक्ष्य मनमाने कस्टम आर्किटेक्चर के लिए प्लेसमेंट और रूटिंग चलाने की अनुमति देता है।
mkdir -p build && cd build
cmake .. -DARCH=generic
make -j$(nproc)
sudo make install
जेनेरिक प्रवाह का उपयोग कैसे करें इसका एक उदाहरण generic/examples में है। जेनेरिक आर्किटेक्चर दस्तावेज़ भी देखें।
nextpnr-himbaechel
himbaechel लक्ष्य बड़े आर्किटेक्चर के लिए प्लेसमेंट और रूटिंग चलाने की अनुमति देता है जो एक सामान्य संरचना साझा करते हैं।
gowin
Gowin समर्थन के लिए, Project Apicula स्थापित करें
mkdir -p build && cd build
cmake .. -DARCH="himbaechel" -DHIMBAECHEL_UARCH="gowin"
make -j$(nproc)
sudo make install
- विभिन्न बोर्डों के लिए Gowin प्रवाह के उदाहरण Project Apicula Examples में पाए जा सकते हैं।
ng-ultra
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
कोलोन चिप 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
GUI
nextpnr 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 का उपयोग करें।
प्रति-माइक्रोआर्किटेक्चर हिमबैशल
समर्थित माइक्रोआर्किटेक्चर में से प्रत्येक के लिए एकल 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 का उपयोग करके इस फ़ाइल का पथ प्रदान करें।
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चलाएँ। - आर्किटेक्चर 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 --leak-check=yes --tool=memcheck ./nextpnr-ice40 --json ice40/blinky.json - कोड कवरेज के साथ परीक्षण चलाने के लिए
-DBUILD_TESTS=ON -DCOVERAGEका उपयोग करें औरmakeके बादmake ice40-coverageचलाएँ - उसके बाद कवरेज रिपोर्ट देखने के लिए अपने ब्राउज़र में
ice40-coverage/index.htmlखोलें - ध्यान दें कि रिपोर्ट उत्पन्न करने के लिए
lcovकी आवश्यकता है
लिंक और संदर्भ
संश्लेषण, सिमुलेशन और तर्क अनुकूलन
FPGA बिटस्ट्रीम दस्तावेज़ीकरण (और उपकरण) परियोजनाएँ
- Project IceStorm (Lattice iCE40)
- Project Trellis (Lattice ECP5)
- Project X-Ray (Xilinx 7-Series)
- Project Chibi (Intel MAX-V)