اگر کمی با ابزارهای الکترونیکی و میکروکنترلرها کار کرده باشید، شاید برای شما هم پیش آمده باشد که بخواهید تعداد زیادی عملیات را به طور همزمان انجام دهید. مثل من که برای اولین بار میخواستم دادههای تعداد زیادی سنسور متصل به یک ربات را به طور همزمان بخوانم و پردازش کنم. حتما میدانید که همزمانی در میکروکنترلر معنی ندارد و در واقع همه کارها پشت سر هم انجام میشود. در نتیجه اتفاقی که واقعا میافتاد این بود که تمام سنسورهای من باید منتظر میماندند تا دادههای قبلی پردازش شود.
برای کارهای کوچک شاید این مسئله زیاد به چشم نیاید اما وقتی حجم اطلاعات بیشتر شود به یک مسئله جدی تبدیل میشود. بعد از این موضوع بود که متوجه شدم چیزی که من به آن نیاز داشتم یک برد FPGA بوده است.اگر طراحی برد الکترونیکی برایتان جذابیت دارد، FPGA یکی از موضوعاتی است که باید در مورد آن بدانید.
FPGA چیست؟
FPGA یا field programmable gate array تراشههای نیمهرسانایی هستند که از تعداد زیادی جزء کوچک الکترونیکی به نام بلوک منطقی (Logic Block) یا سلول منطقی (Logic cell) ساخته شدهاند. از نظر من FPGA چیزی بین یک مدار الکترونیکی و یک میکروکنترلر است. همان طور که از نام آن برمیآید FPGA یک تراشه قابل برنامهریزی است.
کوچکترین جزء سازنده میکروکنترلرها و همین طور پردازندهها (CPU) المانهای الکترونیکی به نام گیتمنطقی (Logic gate) است. این گیت ها سادهترین اعمال منطقی مانند AND و OR را انجام میدهند. از همین المانها برای انجام اعمال ساده ریاضی مثل جمع و ضرب استفاده میشود و در نهایت مجموعه بزرگی از این گیت ها یک فرایند پیچیده را تشکیل میدهند.
ساختار داخلی CPU ها و میکروکنترلرها در کارخانه سازنده به طور کامل طراحی شده و تمام گیتها به نحو خاصی و طبق معماری مشخصی ساخته شده و قابل تغییر نیستند.
اصلیترین تمایز FPGA با موارد قبل این است که در این حالت، تراشه یک ساختار خام دارد و شما میتوانید ساختار و معماری و نحوه ارتباطات بین گیتهای منطقی را خودتان تعریف کنید.
نتیجه این تمایز این میشود که FPGA یک برد از پیش آماده نیست، بلکه با انتخاب و طراحی کاربر، میتواند مثل یک مدار الکترونیکی ساده یا یک واحد پردازش سیگنال و یا حتی مثل یک CPU عمل کند. از طرفی FPGA قابلیت برنامهریزی مجدد را نیز دارد که دست طراح را برای انجام تغییرات باز میگذارد.
مزایا و معایب FPGA
بردهای FPGA توانایی انجام کارهایی را دارند که انجام آنها با ابزارهای دیگر بسیار مشکل یا غیرممکن است؛ اما در عین حال مثل هر چیز دیگری بدون عیب هم نیست. دوره آموزش FPGA در مورد ماشین حالت و برنامههای کنترل داده، فراخوانیهای مکرر، زیربرنامهها و توابع در VHDL است.
مزایا:
سرعت بالا
مهمترین عاملی که باعث میشود افراد به سراغ برد FPGA بروند سرعت بسیار بالای آن است که به هیچ وجه با یک میکروکنترلر قابل مقایسه نیست. علت سرعت بالای FPGA این است که اعمال مورد نظر مستقیما از طریق المانهای الکترونیکی انجام شده و پردازش به مفهومی که در CPU تعریف میشود، وجود ندارد. انجام یک پردازش در CPU یا میکروکنترلر نیازمند زمان است که فرایند را کند میکند؛ در حالی که در FPGA عملیاتها تقریبا به صورت بلادرنگ انجام میشوند (مثلا در حد چند نانوثانیه).
پردازش موازی
بردهای FPGA معمولا تعداد بسیار زیادی پایه دارند. این باعث میشود تا بتوانید تعداد زیادی ورودی به آن داده و برای هر کدام از آنها عملیات مورد نظرتان را به طور مستقل انجام دهید. بنابراین هیچ ورودی برای پردازش منتظر سایر اعمال نمیماند و همه به طور همزمان انجام میشوند. این مورد برای کارهایی مثل پردازش تعداد زیادی سنسور، مزیت خیلی بزرگی به حساب میآید.
انعطافپذیری
اینکه FPGA دقیقا چه کاری انجام دهد کاملا به طراح بستگی دارد. از این نظر FPGA به هیچ کدام از بردهای الکترونیکی دیگر شباهت ندارد. تفاوت FPGA با تراشهها و بردهای از پیش آماده مثل CPU مثل تفاوت مداری است که روی بردبورد میبندید با یک برد مدار چاپی الکترونیکی (PCB). طبیعتا مورد اول را میتوانید به هر صورتی که میخواهید تغییر دهید.
هزینه و زمان توسعه محصول
اگر بخواهید یک برد الکترونیکی معمولی به منظور خاصی بسازید، پس از ساخت برد ممکن است ایرادی در طراحی آن وجود داشته باشد. در این صورت مجبورید طرح را اصلاح کرده و مجددا برد جدید را بسازید. این کار زمان و هزینه زیادی را از شما تلف میکند. در صورتی که ایجاد تغییرات در FPGA بدون تغییر سختافزار و با همان برد قابل انجام است.
معایب:
تکمنظوره بودن
CPU ها تراشههای چندمنظوره (General Purpose) هستند. بنابراین سیستمعامل میتواند به نحوهای که ترجیح میدهد آن را کنترل کند و برنامههای مختلف میتوانند به گونهای که نیاز دارند از آن استفاده کنند. کاری که CPU انجام میدهد در زمانهای مختلف متفاوت است و حتی فرکانس کاری (که سرعت آن را تعیین میکند) و میزان استفاده از آن (Utilization) همواره در حال تغییر است.
در سوی مقابل FPGA همیشه یک عمل ثابت را انجام میدهد و در صورتی که بخواهید عملکرد آن را تغییر دهید باید طراحی گیتهای آن اصلاح شود. تکمنظوره بودن الزاما نقطه ضعف نیست بلکه در بعضی شرایط نقطه قوت محسوب میشود. از این نظر FPGA شبیه به تراشههای ASIC است.
FPGAها در دهه گذشته به رشد سریعی دست یافته اند زیرا برای طیف وسیعی از کاربردها مفید هستند. کاربرد خاص یک اف پی جی ای شامل مواردی همچون پردازش سیگنال دیجیتال، سیستم های مخابراتی، رادیو نرم افزاری، بیو انفورماتیک، کنترل کننده دستگاه های مختلف، منطق تصادفی، نمونه سازی اولیه ASIC، تصویر برداری پزشکی، شبیه سازی سخت افزار کامپیوتر، ادغام چندین SPLD، تشخیص صدا، رمز نگاری، فیلتر کردن، رمز گذاری ارتباطات، زمینه مهندسی پزشکی، در مهندسی برق و کاربردهای نظامی میباشد.
می توان گفت FPGA یک دستگاه نادر در الکترونیک است، زیرا دارای مزایای بسیار قوی و معایب کمی است. به همین دلیل است که در بسیاری از موقعیت ها به پردازنده دیجیتال منتخب تبدیل شده است. با انتخاب یک اف پی جی ای منطبق با طراحی، می توان عملکرد بالا، توان کم و هزینه کم همراه با سهولت نسبی در تعبیه طرح ها و الگوریتم های سطح بالا را تضمین کرد.
همه اینها با مزایای امکان برنامه ریزی میدانی همراه است، به این معنی که طراحی را می توان بدون نیاز به NRE یا تاخیر زمانی بالا تست، دیباگ یا اشکال زدایی کرد و به راحتی تغییر داد. در آینده بازار FPGA بیش از پیش گسترش می یابد. تولیدکنندگان اصلی CPUهای استاندارد با خرید شرکت های متخصص در FPGA، سبد محصولات خود را گسترش می دهند.
اف پی جی ای ها نیز به طور گسترده در شبکه ها استفاده خواهند شد. به غیر از سلول های منطقی قابل برنامه ریزی، آنها حاوی عناصر سیلیکونی بسیار تخصصی، یعنی کنترل کننده های رابط شبکه هستند.