آموزش FPGA : قسمت اول
آموزش FPGA قسمت اول ;
سخت یا آسون؟
اصولا ما آدما اگر در اون لحظه سنگی به سرمون نخورده باشه سعی می کنیم که همیشه تو زندگیمون آسون ترین راه را انتخاب کنیم. اجازه بدید یه مثال براتون بزنم، فرض کنید یک سیستم مهندسی داریم و باید این سیستم را با یک معادله ی ریاضی توصیف کنیم و دو راه حل برای توصیف این سیستم وجود دارد:
- توصیف سیستم با یک معادله جبری
- توصیف سیستم با یک معادله ی دیفرانسیل
واضح و مبرهن است که ما راه اول را انتخاب خواهیم کرد. چرا؟ چون هنوز داغ انواع روشهای شناخته شده و شناخته نشده حل معادلات دیفرانسیل تازست ولی ما مهندسا دیگه اینقدر پوستمون کلفت شده که از یک معادله جبری نمیترسیم.
حالا فرض کنید که یک معادله جبری نمیتواند این سیستم مهندسی را به طور کاملا صحیحی توصیف کند، چاره چیست؟ چاره ای نیست جز اینکه برویم سراغ توصیف این سیستم با یک معادلهی دیفرانسیل، بالاخره همیشه که دو راه یا چند راه وجود ندارد بعضی وقتا پیش میاد که یک راه و راه دیگری نیست.
دیگه وقتشه که از مقدمه گذر کنیم و بریم سراغ اصل مطلب، ولی قبلش اینو بدونید راهی که ما انتخاب کردیم، راه دوم یعنی سختترین راه می باشد، بعدا خودتون دلیلش رو خواهید فهمید.
اسم این مسیری که ما انتخاب کردیم و ظاهرا هم ترسناک به نظر میاد (نگران نباشید بعدا متوجه خواهید شد که اونقدرا هم ترسناک نیست) موجودی است به نام FPGA یا به طور دقیقتر Field Programmable Gate Array.
مسیر پیشرفت تکنولوژی…
اگر اجازه بدهید گذری به مسیر تاریخی که منجر به تولید FPGA شد داشته باشیم، در گذشته طراحان الکترونیک برای پیاده سازی توابع و اعمال منطقی خود از آی سیها بهره می جستند ولی کم کم با گستردگی و پیچیدهتر شدن سیستمهای الکترونیکی این روش دیگر کار آمد نبود، راه جدید به این صورت بود که ما تمامی مشخصات طرح خود را به کارخانه تحویل میدادیم و کارخانه سازنده طرح موجود را پیاده سازی می کرد و به ما تحویل میداد. از مزایای این روش هرچه بگوییم کم گفتیم. کاهش قابل ملاحظه ابعاد و حجم سیستم، کاهش نویز و توان مصرفی از مزایای این روش بودند اما یک عیبب بسیار بزرگ وجود داشت، عیبی که ما در یک طرح مهندسی یا در تولید یک محصول، اکثر اوقات همه چیز را فدای اون میکنیم، یعنی بالا بودن هزینه تولید یک نمونه از طرحی که ما تحویل کارخانه دادیم. از طرفی دیگر تکنولوژی این روش چندان فراگیر نبود. همین دو عیب بزرگ باعث شد تا راه حل دیگری جایگزین شود، راه حل ساخت تراشههای قابل برنامه ریزی. اما این تراشه ها یکدفعه ساخته نشدند. در اوایل کار یک سری تراشه ساخته شدند که بیشتر به عنوان حافظههای قابل برنامهریزی استفاده میشدند تا به عنوان پیادهسازی توابع منطقی ولی عیب بزرگ این تراشهها این بود که قابلیت بازنویسی مجدد را نداشتند ولی کم کم این عیب برطرف شد و این تراشهها با استفاده از اشعه ی ماورای بنفش قابلیت پاک شدن را داشتند و ما می توانستیم آنها را بازنویسی کنیم. این مسیر به همین منوال پیش رفت تا اینکه این تراشه ها با استفاده از سیگنالهای الکتریکی پاک میشدند. خب تا الان احساس میکنید که تراشههای بسیار جالبی ساخته شدند ولی این همه ی داستان نیست در ادامه به جاهای جالب تر خواهیم رسید. بالاخره همه ی این پیش زمینهها طی شد تا اینکه اولین تراشه برنامه پذیر برای مدارات منطقی ساخته شد و در نهایت پیشرفت در این نوع از تراشهها منجر به ساخت FPGA شد.
مقایسه؟
وقتی ما از سختی حرف میزنیم غالبا در مقایسه با عملی دیگر این صفت را به کار میبریم، حالا مقایسهای که ما میخواهیم انجام بدهیم مقایسهای خواهد بود بین FPGA و یک نوع پردازنده مثلا AVR یا ARM. حداقل امکاناتی که میتواند در یک پردازنده وجود داشته باشد شامل CPU، حافظههای دائمی و موقت و ورودی-خروجیها میباشد.
اما تقریبا هیچ کدام از امکاناتی که در پردازندهها وجود دارند در FPGA وجود ندارند مگر ورودی-خروجیها و یک سری منابع دیگر که بعدا بیشتر باهاشون آشنا خواهیم شد. خب تا الان که هر چی بدی تو دنیا وجود داره به این FPGA بدبخت نسبت دادیم و می گوییم که سختترین راه نیز هست.
اما در دل FPGA چه چیزی نهفته است که میتونه همچین سرعتی داشته باشه؟ تازه بحث داره جالب میشه و مطمئنم برای شما نیز خیلی هیجان انگیزه وقتی کاملا متوجه طرز کار این نوع از تراشهها بشید.
باید بگم که در FPGA چیزی به اسم CPU وجود ندارد، یکی از دلایل اصلی سرعت زیاد در دل همین نکته نهفته است. خب بهتره اول یه نگاهی به دیاگرام زیر بیندازید تا بعد بهتر بتونیم در مورد این موضوع با هم صحبت کنیم.
شاید تا الان با یک نگاه مفهومی به دیاگرام بالا متوجه شده باشید که ادامه صحبت ما در مورد چه خواهد بود. همانطور که میبینید در پردازنده یک CPU وجود دارد که به ترتیب دستور C1 را روی دیتای D1 و دستور C2 را روی دیتای D2 اعمال خواهد کرد و به همین ترتیب تا آخر، توجه کنید که این اعمال همزمان صورت نمیپذیرد بلکه به صورت یکی پس از دیگری انجام خواهد شد، اما در FPGA به طور همزمان دستور C1 روی دیتای D1 و دستور C2 روی دیتای D2 اعمال خواهد شد و به همین نحو به صورت همزمان و موازی با هم تا آخر.
اما یک دلیل عمده دیگر نیز هست که سرعت این نمونه از تراشهها را بسیار زیاد میکند، در پردازندهها معماری ثابت است و ما فقط برای آن برنامهنویسی میکنیم و سخت افزار تقریبا هیچ گونه انعطافی ندارد. تنها عامل قابل تغییر برنامهای است که ما مینویسیم. اما در FPGA همانطور که قبلا گفتیم تقریبا هیچ گونه سخت افزار از قبل آمادهای وجود ندارد. به این صورت که ما از یک سری منابع موجود برای هر کاربرد جدیدی یک مدار دیجیتال را به صورت بهینه پیاده سازی میکنیم و الگوریتمهای زیادی برای پیاده سازی این سخت افزار وجود دارد که آن را به صورت بهینهترین حالت ممکن پیاده سازی میکند. همین انعطاف در سخت افزار، عامل دیگر سرعت زیاد در این نوع تراشه هاست و اصولا در FPGA هیچ گونه برنامهای (منظور برنامهای که با یک زبان برنامه نویسی ایجاد میشود) وجود ندارد و فقط باید به فکر توصیف یک سخت افزار از منابع موجود بود.
قبل از اینکه بحثمون تموم بشه و بدانید که کار آسونی هست و می تونید از عهدش بر بیایید این نوید را بهتون بدم که برای توصیف یک سخت افزار در درون FPGA، اشراف کامل بر مدارات دیجیتال نیاز نیست و درک منطق مدار دیجیتالی که میخواهیم طراحی کنیم، میتواند راه را بسیار برای ما هموار کند. با استفاده از زبان توصیف سختافزاری که بعدا باهاش آشنا خواهیم شد و یک کد، میتونیم مدار مورد نظر خود را طراحی کنیم، ولی ناگفته نماند که در اکثر اوقات آشنایی هرچه بیشتر با مدارات دیجیتال میتواند به ما کمک کند که طراحی را بهتر و سریعتر انجام بدهیم.
امیدوارم که تا به این جای کار از این موضوع خوشتون اومده باشه، در قسمتهای بعدی به طور مفصل در مورد منابع درونی، چگونگی ایجاد سخت افزار با استفاده از منابع درونی، مزایا و معایب و اینکه چه مواقعی و به چه نحوی سراغ اینگونه از تراشهها برویم صحبت خواهیم کرد.
در قسمت دوم آموزش FPGA به نحوه انتخاب FPGA میپردازیم.