FPGA چیست؟ سخته یا آسون؟
FPGA چیست؟ سوالی که در این صفحه قراره اونو جواب بدیم! اصولا ما آدما اگر در اون لحظه سنگی به سرمون نخورده باشه سعی می کنیم که همیشه تو زندگیمون آسون ترین راه را انتخاب کنیم با سیسوگ همراه باشید. اجازه بدید پیش از شروع آموزش FPGA یه مثال براتون بزنم تا کاملا متوجه چیستی برد FPGA بشید، فرض کنید یک سیستم مهندسی داریم و باید این سیستم را با یک معادله ی ریاضی توصیف کنیم و دو راه حل برای توصیف این سیستم وجود دارد:
- توصیف سیستم با یک معادله جبری
- توصیف سیستم با یک معادله ی دیفرانسیل
واضح و مبرهن است که ما راه اول را انتخاب خواهیم کرد. چرا؟ چون هنوز داغ انواع روشهای شناخته شده و شناخته نشده حل معادلات دیفرانسیل تازست ولی ما مهندسا دیگه اینقدر پوستمون کلفت شده که از یک معادله جبری نمیترسیم.
حالا فرض کنید که یک معادله جبری نمیتواند این سیستم مهندسی را به طور کاملا صحیحی توصیف کند، چاره چیست؟ چاره ای نیست جز اینکه برویم سراغ توصیف این سیستم با یک معادلهی دیفرانسیل، بالاخره همیشه که دو راه یا چند راه وجود ندارد بعضی وقتا پیش میاد که یک راه و راه دیگری نیست.
دیگه وقتشه که از مقدمه گذر کنیم و بریم سراغ اصل مطلب، ولی قبلش اینو بدونید راهی که ما انتخاب کردیم، راه دوم یعنی سختترین راه می باشد، بعدا خودتون دلیلش رو خواهید فهمید.
اسم این مسیری که ما انتخاب کردیم و ظاهرا هم ترسناک به نظر میاد (نگران نباشید بعدا متوجه خواهید شد که اونقدرا هم ترسناک نیست) موجودی است به نام FPGA یا به طور دقیقتر Field Programmable Gate Array.
مسیر پیشرفت تکنولوژی و بوجود آمدن FPGA
اگر اجازه بدهید گذری به مسیر تاریخی که منجر به تولید FPGA شد داشته باشیم تا آسان تر به سوال FPGA چیست پاسخ بدیم، در گذشته طراحان الکترونیک برای پیاده سازی توابع و اعمال منطقی خود از آی سیها بهره می جستند ولی کم کم با گستردگی و پیچیدهتر شدن سیستمهای الکترونیکی این روش دیگر کار آمد نبود، راه جدید به این صورت بود که ما تمامی مشخصات طرح خود را به کارخانه تحویل میدادیم و کارخانه سازنده طرح موجود را پیاده سازی می کرد و به ما تحویل میداد.
از مزایای این روش هرچه بگوییم کم گفتیم. کاهش قابل ملاحظه ابعاد و حجم سیستم، کاهش نویز و توان مصرفی از مزایای این روش بودند اما یک عیبب بسیار بزرگ وجود داشت، عیبی که ما در یک طرح مهندسی یا در تولید یک محصول، اکثر اوقات همه چیز را فدای اون میکنیم، یعنی بالا بودن هزینه تولید یک نمونه از طرحی که ما تحویل کارخانه دادیم. از طرفی دیگر تکنولوژی این روش چندان فراگیر نبود.
همین دو عیب بزرگ باعث شد تا راه حل دیگری جایگزین شود، راه حل ساخت تراشههای قابل برنامه ریزی. اما این تراشه ها یکدفعه ساخته نشدند. در اوایل کار یک سری تراشه ساخته شدند که بیشتر به عنوان حافظههای قابل برنامهریزی استفاده میشدند تا به عنوان پیادهسازی توابع منطقی ولی عیب بزرگ این تراشهها این بود که قابلیت بازنویسی مجدد را نداشتند ولی کم کم این عیب برطرف شد و این تراشهها با استفاده از اشعه ی ماورای بنفش قابلیت پاک شدن را داشتند و ما می توانستیم آنها را بازنویسی کنیم. این مسیر به همین منوال پیش رفت تا اینکه این تراشه ها با استفاده از سیگنالهای الکتریکی پاک میشدند.
خب تا الان احساس میکنید که تراشههای بسیار جالبی ساخته شدند ولی این همه ی داستان نیست در ادامه به جاهای جالب تر خواهیم رسید. بالاخره همه ی این پیش زمینهها طی شد تا اینکه اولین تراشه برنامه پذیر برای مدارات منطقی ساخته شد و در نهایت پیشرفت در این نوع از تراشهها منجر به ساخت FPGA شد.
مقایسه FPGA با پردازنده های مختلف
وقتی ما از سختی حرف میزنیم غالبا در مقایسه با عملی دیگر این صفت را به کار میبریم، حالا مقایسهای که ما میخواهیم انجام بدهیم مقایسهای خواهد بود بین FPGA و یک نوع پردازنده مثلا AVR یا ARM. حداقل امکاناتی که میتواند در یک پردازنده وجود داشته باشد شامل CPU، حافظههای دائمی و موقت و ورودی-خروجیها میباشد.
اما تقریبا هیچ کدام از امکاناتی که در پردازندهها وجود دارند در FPGA وجود ندارند مگر ورودی-خروجیها و یک سری منابع دیگر که بعدا بیشتر باهاشون آشنا خواهیم شد. خب تا الان که هر چی بدی تو دنیا وجود داره به این FPGA بدبخت نسبت دادیم و می گوییم که سختترین راه نیز هست.
اما در دل FPGA چه چیزی نهفته است که میتونه همچین سرعتی داشته باشه؟ تازه بحث داره جالب میشه و مطمئنم برای شما نیز خیلی هیجان انگیزه وقتی کاملا متوجه طرز کار این نوع از تراشهها بشید.
باید بگم که در FPGA چیزی به اسم CPU وجود ندارد، یکی از دلایل اصلی سرعت زیاد در دل همین نکته نهفته است. خب بهتره اول یه نگاهی به دیاگرام زیر بیندازید تا بعد بهتر بتونیم در مورد این موضوع با هم صحبت کنیم.
مقایسه FPGA با CPU و پردازنده ها و میکروکنترلر ها
شاید تا الان با یک نگاه مفهومی به دیاگرام بالا متوجه شده باشید که ادامه صحبت ما در مورد چه خواهد بود. همانطور که میبینید در پردازنده یک CPU وجود دارد که به ترتیب دستور C1 را روی دیتای D1 و دستور C2 را روی دیتای D2 اعمال خواهد کرد و به همین ترتیب تا آخر، توجه کنید که این اعمال همزمان صورت نمیپذیرد بلکه به صورت یکی پس از دیگری انجام خواهد شد، اما در FPGA به طور همزمان دستور C1 روی دیتای D1 و دستور C2 روی دیتای D2 اعمال خواهد شد و به همین نحو به صورت همزمان و موازی با هم تا آخر.
اما یک دلیل عمده دیگر نیز هست که سرعت این نمونه از تراشهها را بسیار زیاد میکند، در پردازندهها معماری ثابت است و ما فقط برای آن برنامهنویسی میکنیم و سخت افزار تقریبا هیچ گونه انعطافی ندارد. تنها عامل قابل تغییر برنامهای است که ما مینویسیم. اما در FPGA همانطور که قبلا گفتیم تقریبا هیچ گونه سخت افزار از قبل آمادهای وجود ندارد. به این صورت که ما از یک سری منابع موجود برای هر کاربرد جدیدی یک مدار دیجیتال را به صورت بهینه پیاده سازی میکنیم و الگوریتمهای زیادی برای پیاده سازی این سخت افزار وجود دارد که آن را به صورت بهینهترین حالت ممکن پیاده سازی میکند. همین انعطاف در سخت افزار، عامل دیگر سرعت زیاد در این نوع تراشه هاست و اصولا در FPGA هیچ گونه برنامهای (منظور برنامهای که با یک زبان برنامه نویسی ایجاد میشود) وجود ندارد و فقط باید به فکر توصیف یک سخت افزار از منابع موجود بود.
قبل از اینکه بحثمون تموم بشه و بدانید که کار آسونی هست و می تونید از عهدش بر بیایید این نوید را بهتون بدم که برای توصیف یک سخت افزار در درون FPGA، اشراف کامل بر مدارات دیجیتال نیاز نیست و درک منطق مدار دیجیتالی که میخواهیم طراحی کنیم، میتواند راه را بسیار برای ما هموار کند. با استفاده از زبان توصیف سختافزاری که بعدا باهاش آشنا خواهیم شد و یک کد، میتونیم مدار مورد نظر خود را طراحی کنیم، ولی ناگفته نماند که در اکثر اوقات آشنایی هرچه بیشتر با مدارات دیجیتال میتواند به ما کمک کند که طراحی را بهتر و سریعتر انجام بدهیم.
امیدوارم که تا به این جای کار از این موضوع خوشتون اومده باشه، در قسمتهای بعدی به طور مفصل در مورد منابع درونی، چگونگی ایجاد سخت افزار با استفاده از منابع درونی، مزایا و معایب و اینکه چه مواقعی و به چه نحوی سراغ اینگونه از تراشهها برویم صحبت خواهیم کرد.
در قسمت دوم آموزش FPGA به نحوه انتخاب FPGA میپردازیم. با سیسوگ همراه باشید.
خیلی مختصر و مفید بود. این مقاله رو حتما به دوستان و علاقهمندان به FPGA معرفی میکنم.
ممنون از شما 🙂
سلام و درود لذت بردم از این توضیحات زیبا و اینکه من به عنوان یه دانشجوی مهندسی نرم افزار بسیار درگیر شناخت و انتخاب مسیر شغلیم هستیم و با توجه به داشتن تجربه در زمینه رباتیک و همچنین تست و مونتاژ و گاها تعمیر بردهای خانگی الکترونیک و مقداری کد زدن نمیدونم که به عنوان یک مهندس امبدد سیستم یا طراح برد الکترونیک و یا حتی برنامه نویس این حوزه قرار بگیریم ممنون میشم اگر پیشنهادی داری در اختیارم بزاری
سلام دوست عزیز
من فکر میکنم مسیر مهندس امبدد مخصوصا اونجا که با لینوکس تلاقی میکنه و میشه امبدد لینوکس خیلی میتونه براب شما جذاب باشه
یعنی همزمان شما هم نرم افزار رو دارید و هم سخت افزار رو
دم شما گرم
عالی و شیوا توضیح دادید
پیدا کردن کار تو این حوزه چجوریه؟راحته؟یا حتی کاراموزی
بستگی به مهارت و تا حدود زیادی هم موقعیت جغرافیایی شما داره
سلام و خداقوت
من هم تازه با سایتتون آشنا شدم در یک کلام فوقالعاده این… مطالبتون عالیه?
سلام و درود بر علی عزیز. سپاس از نظر مثبتتان. خوشحالم که این مطالب برایتان مفید واقع شده است.
سلام خداقوت.
میخواستم سوالی راجع به شروع کار با fpga ها بپرسم.
و اون اینه که برای شروع کار با fpga ها چه دانش و مهارت هایی لازمه.
البته به غیر از مدار منطقی و زبان توصیف سخت افزاری.
مثلا ایا لازمه که طراحی pcb های فرکانس بالا رو بلد باشیم.
یا میتونیم در پروژه ها از بورد های اماده استفاده کنیم؟
و این که برای شروع کار با fpga ها چه سخت افزاری رو پیشنهاد میکنید؟
مثلا از چه بوردی برای شروع استفاده کنیم؟
سلام محمدرضای نازنینم.
همانجوری که خودتان هم میدانید شناخت مدار منطقی و درک صحیح زبانهای توصیف سختافزار، مقدمه و پیشنیاز کار با FPGA هستند.
اگر نظر من را میخواهید بهتر است که اگر اشراف خوبی به مدار منطقی ندارید ابتدا به صورت جداگانه مدار منطقی را بخوانید و با تراشههایی که گیتهای منطقی دارند کار کنید. اما برای زبان توصیف سختافزار مثل VHDL بهتر است که همزمان با FPGA آن را یاد بگیرید و به صورت عملی کار کنید چون که بسیاری از مفاهیم را تا عملی کار نکنید به خوبی متوجه نخواهید شد.
در مورد طراحی برد هم خدمتتان عرض کنم که غالب افرادی که با FPGA کار میکنند نه تنها طراحی فرکانس بالا بلد نیستند، بلکه کلا طراحی برد بلد نیستند چون یک تخصص جداست اگرچه بلد بودنش یک کهن مثبت شاید بتونه باشه.
پیشنهاد من اینه که در ابتدای کار حتما و حتما از بردهای آماده استفاده کنید. و چون در ابتدای کار هستید و بهتر است که از نرمافزار ISE استفاده کنید پس بردی مبتنی بر تراشه SPARTAN 6 تهیه کنید.
این برد در سایت ای سی موجود است، برای جزئیات بیشتر به لینک زیر مراجعه کنید:
https://isee.sisoog.com/nc-products/2172211785/Spartan-6-FPGA-XC6SLX9-2TQG144C
سلام و خسته نباشید شدید!!!
تازه با سایتتون و بخش های مختلفش دارم آشنا میشم… واقعا خوشحالم پیداتون کردم.
من فقط از FPGA شنیدم و تو دانشگاه کد زدنشو تاحدودی یادگرفتم
ولی جواب این سوالو نفهمیدم لطفا شما جواب بدید؟!
من با FPGA میتوانم …..؟
چندتا نمونه بزرگ و کوچک بگید
ممنون
سلام دوست نازنینم. سپاس از نظر مثبت و لطف شما نسبت به ما.
اگه منظورتون را درست متوجه شده باشم، منظورتان این است که از کاربردهای FPGA بگم.
همانطور که در مقاله توضیح دادم مقوله اصلی که ما را مجبور به استفاده از FPGA میکند، سرعت است. پس به طور کلی هرجا سرعت بالا نیاز داشتیم میرویم سراغ FPGA.
کاربرداش میتونه از کارهای اینترفیس تا پردازش سیگنال متفاوت باشه. در حوزههای نظامی و مخابراتی FPGA شدیدا مورد استفاده قرار میگیره. بحث رادار و سونار با FPGAها انجام میشه. موشکایی که هر روز دارن رو سرمون خراب میشن هم غالبا نیاز به FPGA دارن.
واقعا خیلی روان و راحت مینویسید احسنت
خیلی حال کردم دمت گرم
سپاس از توجه شما دوست نازنینم. ما تمام سعیمان را میکنیم که مفاهیم را به صورت ساده و کاربردی برای شما توضیح بدهیم.
قلم روانی دارید
خدا قوت
شما لطف دارید دوست عزیز. ☺️☺️??
با تشکر. بی صبرانه منتظر قسمت بعدی هستیم.
سپاس. توجه شما، به ما انگیزه بیشتری در نگارش هر چه بهتر این مجموعه خواهد داد.
فونیکس جان عالی بود
منتظر قسمت بعد هستیم?
سپاس از توجه شما. قسمت های بعدی به زودی با همین کیفیت منتشر خواهد شد.
بسیار عالی
به قول استیو جابز ؛
شرکتهای پیشرو در صنعت کامپیوتر سخت افزار مورد نیازشان را خودشان درست میکنند
بعضی وقتا از این حدی که شما می فرمائید نیز گذر کرده، مثلا در سال 2016 اینتل، آلترا را به ارزش 16.7 میلیارد دلار خریداری کرد.
سیسوگ جان دیگه داری خیلی خیلی حرفه ایی میشیااا
دمت گرم همینطور ادامه بده
سپاس از توجه شما