
nextpnr पोर्टेबल FPGA प्लेस और रूट टूल
nextpnr -- एक पोर्टेबल FPGA प्लेस एंड रूट टूल =============================================== nextpnr का उद्देश्य विक्रेता-तटस्थ, टाइमिंग-चालित, FOSS FPGA प्लेस एंड रूट टूल होना है। वर्तमान में nextpnr समर्थन करता है: * लैटिस iCE40 उपकरण जो [Project IceStorm](https://github.com/YosysHQ/icestorm) द्वारा समर्थित हैं * लैटिस ECP5 उपकरण जो [Project Trellis](https://github.com/YosysHQ/prjtrellis) द्वारा समर्थित हैं * लैटिस Nexus उपकरण जो [Project Oxide](https://github.com/gatecat/prjoxide) द्वारा समर्थित हैं * गोविन LittleBee और Aurora V उपकरण जो [Project Apicula](https://github.com/YosysHQ/apicula) द्वारा समर्थित हैं * NanoXplore NG-Ultra उपकरण जो [Project Beyond](https://github.com/YosysHQ-GmbH/prjbeyond-db) द्वारा समर्थित हैं * कोलोन चिप GateMate उपकरण जो [Project Peppercorn](https://github.com/YosysHQ/prjpeppercorn) द्वारा समर्थित हैं * *(प्रायोगिक)* Cyclone V उपकरण जो [Mistral](https://github.com/Ravenslofty/mistral) द्वारा समर्थित हैं * *(प्रायोगिक)* लैटिस MachXO2 उपकरण जो [Project Trellis](https://github.com/YosysHQ/prjtrellis) द्वारा समर्थित हैं * *(प्रायोगिक)* Xilinx 7-श्रृंखला उपकरण जो [Project X-Ray](https://github.com/F4PGA/prjxray) द्वारा समर्थित हैं * *(प्रायोगिक)* उपयोगकर्ता-परिभाषित आर्किटेक्चर के लिए एक "जेनेरिक" बैक-एंड 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"/> यह भी देखें: - [सामान्य प्रश्न](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 या बाद का संस्करण आवश्यक है - विंडोज पर सुनिश्चित करें कि [vcpkg](https://github.com/Microsoft/vcpkg/blob/master/ports/python3/CONTROL) द्वारा समर्थित समान संस्करण स्थापित हो - 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](https://www.python.org/downloads/release/python-364/) डाउनलोड कर सकते हैं और इसे निकाल सकते हैं। आपको embeddable 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 ``` विंडोज पर, आप पथ स्पष्ट रूप से निर्दिष्ट कर सकते हैं: ``` 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 जेनेरिक लक्ष्य मनमाने कस्टम आर्किटेक्चर के लिए प्लेसमेंट और रूटिंग चलाने की अनुमति देता है। ``` 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 कोलोन चिप 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 डिफ़ॉल्ट रूप से नहीं बनाया जाता है, ताकि एक मानक हेडलेस बिल्ड के लिए निर्भरता की संख्या कम हो सके। इसे सक्षम करने के लिए, 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` की आवश्यकता है लिंक और संदर्भ -------------------- ### संश्लेषण, सिमुलेशन और तर्क अनुकूलन - [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-Series)](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)