مقدمه
شرکت Xilinx با ساختن تراشههای Zynq و +Zynq UltraScale ، کلاسی از سیستمهای قابل پیکرهبندی بر روی تراشه (SoC) را معرفی کرد که در آن ترکیبی از یک پردازنده چند هستهای (دو هسته ARM® Cortex®-A9 یا چهار هسته ARM® Cortex®-A53) به همراه آرایه منطقی قابل پیکرهبندی (FPGA) در قالب یک مدار مجتمع مستقل ارائه شده است. به طور کلی FPGA، یا همان بخش قابل پیکرهبندی و ریزپردازندهها، فناوریهای مکمل برای سیستمهای نهفته محسوب میشوند و هر یک پاسخگوی نیازهای متفاوتی در این سیستمها هستند که در شرایط عادی توسط بخش دیگر قابل دستیابی و اجرا نیست.
اهداف پروژه
هدف اصلی پروژه PYNQ، بهرهگیری از پایتون برای طراحی روی تراشه های Zynq است، به طوری که با تسهیل فرایند طراحی، توسعه دهندگان سیستم های نهفته را قادر میسازد تا به بهترین شکل از مزایای منحصر به فرد این تراشه در برنامههای کاربردی خود بهرهمند شوند. به طور خاص، پروژه PYNQ این امکان را برای معماران سیستم، مهندسان طراح و برنامه نویسان سیستمهای نهفته فراهم میآورد تا بدون نیاز به بکارگیری ابزارهای طراحی ASIC مدارهای منطقی قابل پیکرهبندی را طراحی کنند.
پروژه PYNQ این کار را به سه شکل انجام می دهد:
- مدارات منطقی قابل پیکرهبندی بصورت کتابخانههای سخت افزاری به نام پوشانندهها (overlays) ارائه شدهاند. این کتابخانه ها مشابه کتابخانههای نرم افزاری هستند. یک مهندس نرم افزار با سنجش عملکرد مورد نیازش قادر است بهترین پوشاننده از بین پوشانندههای موجود را که بیشترین انطباق با برنامهاش را دارد، انتخاب کند و از آن استفاده کند. هر پوشاننده توسط یک API قابل دسترسی است. البته باید توجه داشت که برای ایجاد یک کتابخانه سخت افزاری جدید همچنان نیاز به مهندسان با تخصص در زمینه طراحی مدارهای منطقی قابل پیکرهبندی وجود دارد. با این حال تفاوت کلیدی در این است که پوشانندهها یکبار ساخته میشوند و بارها امکان استفاده مجدد دارند. این پوشانندهها، همانند کتابخانههای نرم افزاری به شکلی طراحی شده اند، که تنظیم و استفاده مجدد از آنها در اغلب برنامههای کاربردی به سادگی امکان پذیر باشد.
در واقع این روش، یک رویکرد کاملا آشنا است که با توجه به بهترین تجارب کاری در جوامع نرم افزاری انتخاب شده است. همه روزه شاهد این هستیم که هسته لینوکس توسط صدها هزار طراح در سیستمهای نهفته مورد استفاده قرار میگیرد، در حالی که توسعه و نگهداری این هسته توسط کمتر از یک هزار نفر از مهندسان و معماران بسیار حرفهای نرم افزار صورت می پذیرد. استفاده مجدد و گسترده از کار تعداد کمی از نوابغ مهندسی، توسط بسیاری دیگر از مهندسان نرم افزار با استعداد، آن ها را قادر میسازد تا در سطح انتزاعی بالاتری کار کنند، بدون اینکه نیاز داشته باشند به تمام جزئیات سطوح پایین تر مسلط شوند. کتابخانههای سخت افزاری یا پوشانندهها از موفقیت مدل هسته لینوکس در پوشاندن جزئیات و پیچیدگیهای نرم افزارهای وابسته به سخت افزارهای سطح پایین، الهام گرفته شدهاند.
- پروژه PYNQ از زبان پایتون برای برنامه نویسی پردازندههای نهفته و پوشانندهها استفاده میکند. پایتون یک زبان برنامه نویسی در سطح بهرهوری است. تا به امروز، زبان های C یا ++C رایج ترین زبان های برنامه نویسی برای سیستم های نهفته بوده اند. در مقابل، پایتون سطح انتزاع برنامه نویسی و بهرهوری برنامه نویس را افزایش میدهد. با این وجود این دو زبان گزینههایی در مقابل هم نیستند. پروژه PYNQ از CPython استفاده میکند که در C نوشته شده است و هزاران کتابخانهِ C را ادغام کرده است و با کدهای بهینه شده در C گستره کتابخانههای آن وسیع تر میشود. به عبارت دیگر هر کجا که عملی باشد، از محیط پایتون که بهرهوری بالاتری دارد استفاده میشود و هر زمان که کارایی تعیین کننده باشد، کدهای سطح پایین تر C میتواند مورد استفاده قرار گیرد.
- پروژه PYNQ یک پروژه منبع باز است و هدف آن کار بر روی هر پلت فرم محاسباتی با هر نوع سیستم عامل اختصاصی میباشد. این هدف تنها با اتخاذ یک معماری مبتنی بر وب به دست می آید، که دقیقا مشابه فلسفه مرورگرها است. در PYNQ از زیرساخت منبع باز Jupyter Notebook برای اجرای یک هسته تعاملی پایتون یا همان Interactive Python – IPython و یک وب سرور به طور مستقیم بر روی پردازنده ARM در تراشه Zynq استفاده می شود. دسترسی به هسته لینوکس از طریق مجموعهای از ابزارهای مرورگر صورت میپذیرد و به وسیله آن یک داشبورد، ترمینال bash، ویرایشگر متن و Jupyter Notebooks فراهم آورده میشود. مجموعه ابزار مرورگر با ترکیبی از جاوا اسکریپت، HTML و CSS پیاده سازی شده است و بر روی هر مرورگر مدرنی اجرا می شود.
جمع بندی
در واقع PYNQ اولین پروژهای است که مجموعهای از عناصر را برای ساده سازی و بهبود طراحی در SoC ها کنار هم ترکیب کرده است، این عناصر عبارتند از:
- یک زبان بهرهوری سطح بالای به نام پایتون
- پوشانندههای FPGA با مجموعه وسیعی از API ها به عنوان کتابخانههای پایتون
- بکارگیری یک معماری مبتنی بر وب روی پردازندههای نهفته و در نهایت
- بکاگیری چارچوب Jupyter Notebook درون سیستم نهفته
منبع: PYNQ
5 در مورد “بهره گیری از پایتون در Zynq”
درود
ممنون از مطالب خوبتون
در pynq این امکان وجود داره که بخش ARM رو بکمک اون کد بنویسیم براش ولی بخش FPGA رو با HDLها؟
سلام و درود فراوان بر شما دوست عزیز و گرامی،
از اینکه این مطلب مورد توجه شما قرار گرفته بسیار خشنودیم. سوألی که مطرح کردید بسیار دقیق و مناسب است. ما در این مقاله کوتاه فقط سعی کردیم پروژه PYNQ را به شما معرفی کنیم و مجال کافی برای بیان تمام جزئیات نداشتیم، از این رو توصیه میکنم حتماً به صفحه اصلی پروژه مراجعه کنید تا اطلاعات تکمیلی را به دست بیاورید.
اما در پاسخ باید بگم که سوأل شما جواب را هم در خودش به صورت نهفته جای داده. بله شما برای بخش PL تراشه Zynq همچنان نیاز به محیط توسعه Vivado و کدهای RTL دارید. پس همچنان میتوانید از IP Core ها و کدهای HDL برای توسعه و طراحی در PL استفاده کنید. (در بخش پایینی تصویر با باکس مربوط به User Design توجه کنید …)
خیلی ممنون از پاسخدهی سریعتون و مطالب عالی سایتتون واقعا عالی و به روز هستن مطالبتون.
کاش دوره هم برگزار میکردید خیلی عالی میشد هرچند Xilinx خیلی مطالب و آموزش های کامل و عالی داره خودش ولی بازهم برای یادگیری بعضی چیزها یک دوره جامع و کامل بنظر من مفیدتره مثلا Vitis خیلی قوی و فوق العادس و من خیلی دوست دارم دوره ای باشه که کار با بخشهای مختلفش رو تا حد خوبی آموزش بده.
بازهم خیلی ممنون از مطالب عالیتون
موفق باشید
سلام و خدا قوت .یه سوال اینکه ما برای اینکه با زبان پایتون برروی هسته های آرمی که در پردازنده های ulterascale وجود داره برنامه نویسی کنیم آیا نیاز به این داریم که لینوکس رو روی این هسته بوت کنیم یا اینکه مستقل از این کار میتونیم مستقیم برروی هسته آرم با پایتون برنامه نویسی کنیم؟
سلام و درود فراوان بر محمد عزیز
اینکه وقت با ارزشتون را به خواندن این مطلب و انتشار دیدگاهتون اختصاص دادید باعث دلگرمی و افتخار ماست.
سوالی که مطرح کردید، سوال خیلی خوبی هست. به صورت کلی شما برای توسعه اپلیکیشن به دسکتاپ لینوکس احتیاجی ندارید، ولی برای اجرای اون روی FPGA ها حتماً نیاز دارید از لینوکس نهفته روی هسته ARM استفاده کنید. در حال حاضر برای توسعه اپلیکیشنهای bare-metal فقط میتونید از C و ++C استفاده کنید.
پیشنهاد میکنم برای اطلاعات بیشتر نگاهی به این مقاله بیندازید.
https://discuss.pynq.io/t/deploying-pynq-and-jupyter-with-petalinux/677