
nextpnr أداة محمولة لتنسيب وتوجيه FPGA
تطمح nextpnr إلى أن تكون أداة تنسيب وتوجيه FPGA حرة ومفتوحة المصدر (FOSS)، محايدة تجاه البائعين ومحركة بالتوقيت.
حاليًا تدعم nextpnr:
يمكن العثور على ورقة (أكاديمية) موجزة تصف مسار عمل Yosys+nextpnr على arXiv.
فيما يلي لقطة شاشة من nextpnr لـ iCE40. يمكن العثور على تعليمات البناء وملاحظات البدء أدناه.
انظر أيضًا:
يجب تثبيت الحزم التالية لبناء 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-static إلى كل اسم من أسماء الحزم. على سبيل المثال، غيّر إلى أولاً وقبل كل شيء، شغّل:
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 # synthesize into blinky.json
nextpnr-ice40 --hx1k --json blinky.json --pcf blinky.pcf --asc blinky.asc # run place and route
icepack blinky.asc blinky.bin # generate binary bitstream file
iceprog blinky.bin # upload design to iCEstick
تشغيل nextpnr في وضع الواجهة الرسومية (انظر أدناه للحصول على تعليمات بناء 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 حاليًا تجريبي وذو اختبارات محدودة. النهاية الخلفية تخضع لإعادة هيكلة نشطة لواجهة برمجة التطبيقات، وقد تتغير بنيتها ومتطلبات البناء ونقاط الدمج بين الإصدارات.
الهدف العام يتيح تشغيل التنسيب والتوجيه لأي بنى معمارية مخصصة.
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
يرجى ملاحظة أن إنشاء تدفق البت الثنائي يتطلب أداة Impulse من NanoXplore.
لدعم Cologne Chip 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 الرسومية افتراضيًا، لتقليل عدد التبعيات للبناء القياسي بدون واجهة رسومية. لتمكينها، أضف -DBUILD_GUI=ON إلى سطر أوامر CMake وتأكد من توفر Qt5/Qt6 وOpenGL:
بالنسبة لـ Qt6:
qt6-base-devqt-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-toolsqt5-defaultqt5-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/<microarchitecture>/ لتشغيلها. البناء المقسم يقلل حجم المخرجات الموزعة بشكل فردي (على الرغم من زيادة الحجم الإجمالي)، ويسمح بالتثبيت المشترك لمخرجات من إصدارات مختلفة.
بصرف النظر عن قواعد بيانات الشرائح، يتطلب nextpnr تجميع أداة bba لنظام البناء. يمكن تجميع هذه الأداة كمشروع منفصل:
cd bba
cmake .
make
سينشئ ذلك ملف bba-export.cmake. قدم المسار إلى هذا الملف عند البناء المتبادل لـ nextpnr باستخدام -DBBA_IMPORT=/path/to/bba-export.cmake.
ما يلي يشغّل بناء تصحيح أخطاء لبنية iCE40 بدون واجهة رسومية، وبدون دعم Python، وبدون أداة التنسيب التحليلية HeAP، ومع دعم HX1K فقط:
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-coverageeigen3:x64-windowseigen3:x64-windows-staticpython36.zip داخل ملف zip القابل للتضمين إلى دليل جديد يُسمى "Lib".brew install cmake python boost eigenice40-coverage/index.html في متصفحك لعرض تقرير التغطيةlcov مطلوب من أجل إنشاء التقارير