HEXALINX
535 subscribers
147 photos
4 files
74 links
این آغاز ماجراجویی شماست...
آموزش رایگان برنامه نویسی FPGA و ZYNQ و ابزارهای طراحی XILINX

پرسش و پاسخ:
@ask_linx

آدرس سایت:
hexalinx.com

آدرس کانال آپارات:
aparat.com/hexalinx

آدرس اینستاگرام:
insatagram.com/hexalinx_go
Download Telegram
#PYNQ
#Python
#Essentials
چگونه یک طراح نرم افزار کارش را با FPGA ها شروع کند؟

در نگاه اول به نظر می رسد، شما باید در یک زمان، تمام مفاهیم جدید، سخت افزار جدید و محیط توسعه جدید را مدیریت کنید. در حالت کلی تمامی مدارک، مستندات و مثال های آموزشی در این حوزه توسط مهندسین الکترونیک برای مهندسان الکترونیک ایجاد شده اند و این به مهندسان نرم افزار کمک نمی کند. این دقیقا نکته ایست که توجه شرکت Digilent را به خودش جلب کرد. بورد آموزشیPYNQ-Z1 برای حل این مشکل به افراد برنامه نویس اجازه می دهد به آرامی در انتهای کم عمق استخر شنا کنند، و کم کم به سمت مسائل پیچیده تر بروند.
اجرای کدها و کار با بورد در هر محیطی امکان پذیر است اما پیشنهاد خود سازندگان استفاده از Ubuntu است. به این ترتیب کار شروع می شود و شما به عنوان یک مهندس نرم افزار با اجرای کدهای پایتون یکسری فیدبک مثبت دریافت می کننید. کم کم همان طور که شما کد پایتون را اجرا می کنید، متوجه خواهید شد که تراشه Xilinx ZYNQ یک تراشه کاملا سازمان یافته است و به مرور نحوه اجرای کد روی آن را درک می کنید. البته اشتباه نکنید، شما در نهایت باید دست به کار شوید و به سطوح پایین تر طراحی بروید و مهارت کافی در بکاگیری مجموعه ابزارهای ارائه شده برای توسعه FPGA را بدست بیاورید. اما شما تنها پس از رسیدن به برخی از موفقیت ها و درک مفاهیم، شروع خواهید کرد. پس وقت را تلف نکنید و شروع کنید.


@Hexalinx
#Essentials
🔖 حافظه ها درون FPGA به دو دسته تقسیم می شوند

✳️ حافظه های بلوکی یا #BLOCK_RAM
✳️ حافظه های توزیع شده یا #DISTRIBUTED_RAM

حافظه های بلوکی یکسری منابع اختصاصی سخت افزاری هستند و به صورت بلوک هایی با ظرفیت ذخیره سازی چند ده کیلوبیت روی تراشه های FPGA قابل فراخوانی هستد. ظرفیت هر هر کدام از بلوک های حافظه در تراشه های سری 7 ، 36 کیلوبیت است که البته به صورت بلوک های حافظه 18 کیلو بیتی نیز قابل استفاده هستند. با توجه به سری ساخت FPGA و نوع آن بلوک های حافظه ممکن است ظرفیت پایین تری داشته باشند، به عنوان مثال برای تراشه های Spartan 6 ظرفیت ذخیره سازی یک بلوک حافظه 18 کیلوبیت است و در صورت نیاز می تواند به صورت بلوک 9 کیلوبیتی نیز استفاده شود.

این که چه تعداد از این بلوک های حافظه در هر FPGA وجود دارد، بستگی به نوع FPGA دارد به عنوان مثال کوچکترین تراشه FPGA سری 7 یعنی تراشه XC7S6 از خانواده Spartan 7 تنها 5 بلوک حافظه 36 کیلوبیتی دارد در حالی تراشه های قدرتمند Virtex 7 می توانند تا 1880 بلوک حافظه داشته باشند، یعنی ظرفیت ذخیره سازی حدود 68 مگابیت !!! تعداد بلوک های حافظه برای تراشه های خانواده Spartan 6 بین 12 تا 268 بلوک 16 کیلوبیتی متغیر است.

زمانی که هر کدام از این بلوک های حافظه توسط طراح فراخوانی شوند، فارغ از اینکه چه مقدار اطلاعات قرار است در آنها ذخیره شود، کل فضای ذخیره سازی آن بلوک مورد استفاده قرار می گیرد، به عنوان مثال فرض کنید قرار است 128 کلمه 16 بیتی را درون یک حافظه بلوکی روی یکی از تراشه های Spartan 6 پیاده سازی کنیم. یعنی 2048 بیت یا 2 کیلو بیت، در صورت استفاده از یک حافظه 9 کیلوبیتی درون تراشه واضح است که 7 کیلوبیت آن بدون استفاده باقی می ماند و این یک اشکال در طراحی است. اجازه بدهید بحث در رابطه با حافظه های بلوکی را در همینجا متوقف کنیم و کمی به حافظه های توزیع شده بپردازیم.

برخلاف حافظه های بلوکی حافظه های توزیع شده، منابع اختصاصی سخت افزاری نیستند، و با استفاده از LUT ها ساخته می شوند و همانطور که از نامشان می توان تشخیص داد، می توانند در هر جایی از تراشه پیاده سازی شوند. این حافظه ها قابلیت ذخیره سازی تعداد محدودی بیت دارند و در مواردی که نیاز به ذخیره سازی حجم کمی از داده ها وجود داشته باشد، مورد استفاده قرار می گیرند، ظرفیت ذخیره سازی این حافظه ها ثابت نیست و می تواند کاملا سفارشی شده باشند، برای تراشه XC7S6 که پیشتر به عنوان کوچکترین تراشه خانواده Spartan 7 معرفی شد، کل ظرفیت حافظه های توزیع شده برابر با 70 کیلو بیت است. این عدد برای بزرگترین تراشه خانواده Virtex 7 حدود 21 مگابیت است.

در حالت کلی LUT ها برای انجام روابط منطقی بکار گرفته می شوند اما LUT های درون اسلایس های کامل #SLICEM که از قبل آنها را می شناسیم، می توانند به صورت حافظه پیکره بندی شوند، هر LUT در تراشه های سری 7 قابلیت ذخیره سازی حداکثر 64 بیت داده را دارد و با اتصال آبشاری LUT های درون یک اسلایس امکان افزایش این ظرفیت تا 256 بیت نیز وجود دارد.

البته با استفاده از چندین اسلایس و بخشی از منایع دیگر FPGA امکان افزایش ظرفیت حافظه های توزیع شده وجود دارد و به عنوان مثال با استفاده از 16 اسلایس می توان یک حافظه 16 بیتی با عمق ذخیره سازی 64 کلمه تولید کرد یعنی یک حافظه 1 کیلوبیتی.

❗️ حالا سوال اینجاست؟ برای طراحی از کدام حافظه استفاده کنیم، یا سوال مهمتر اینکه چگونه این حافظه ها را در کدهای خودمون فراخوانی کنیم و چگونه پیکره بندی آن ها را تنظیم کنیم.

پاسخ به این سوال بسیار ساده است، فقط باید درست کد نویسی انجام دهیم، ابزار سنتز به صورت اتوماتیک حافظه ها را به منابع درون تراشه نگاشت می کند. یعنی ابزار سنتز با توجه به ظرفیت حافظه بهترین جایگاه برای پیاده سازی را انتخاب می کند. می توان این مساله را با چند مثال توضیح داد اما قبل از ارائه مثال بهتر است با پیکره بندی های مختلف حافظه ها نیز آشنا بشویم.

✳️ حافظه های بلوکی و حافظه های توزیع شده می توانند به اشکال مختلفی پیکره بندی شوند. اگر علاقه مندید با آن ها آشنا بشوید، به شما توصیه می کنم مقاله بعدی ما در رابطه با حافظه ها که چند روز دیگر منتشر می شود را مطالعه کنید.

@Hexalinx