FPGA چیست؟ سوالی که در این صفحه قراره اونو جواب بدیم! اصولا ما آدما اگر در اون لحظه سنگی به سرمون نخورده باشه سعی می کنیم که همیشه تو زندگیمون آسون ترین راه را انتخاب کنیم با سیسوگ همراه باشید. اجازه بدید پیش از شروع آموزش FPGA یه مثال براتون بزنم تا کاملا متوجه چیستی برد FPGA بشید، فرض کنید یک سیستم مهندسی داریم و باید این سیستم را با یک معادله ی ریاضی توصیف کنیم و دو راه حل برای توصیف این سیستم وجود دارد:
واضح است که ما راه اول را انتخاب خواهیم کرد. چرا؟ چون هنوز داغ انواع روشهای شناخته شده و شناخته نشده حل معادلات دیفرانسیل تازست ولی ما مهندسا دیگه اینقدر پوستمون کلفت شده که از یک معادله جبری نمیترسیم.
حالا فرض کنید که یک معادله جبری نمیتواند این سیستم مهندسی را به طور کاملا صحیحی توصیف کند، چاره چیست؟ چاره ای نیست جز اینکه برویم سراغ توصیف این سیستم با یک معادلهی دیفرانسیل، بالاخره همیشه که دو راه یا چند راه وجود ندارد بعضی وقتا پیش میاد که یک راه و راه دیگری نیست.
دیگه وقتشه که از مقدمه گذر کنیم و بریم سراغ اصل مطلب، ولی قبلش اینو بدونید راهی که ما انتخاب کردیم، راه دوم یعنی سختترین راه می باشد، بعدا خودتون دلیلش رو خواهید فهمید.
اسم این مسیری که ما انتخاب کردیم و ظاهرا هم ترسناک به نظر میاد (نگران نباشید بعدا متوجه خواهید شد که اونقدرا هم ترسناک نیست) موجودی است به نام FPGA یا به طور دقیقتر Field Programmable Gate Array.
اگر اجازه بدهید گذری به مسیر تاریخی که منجر به تولید FPGA شد داشته باشیم تا آسان تر به سوال FPGA چیست پاسخ بدیم، در گذشته طراحان الکترونیک برای پیاده سازی توابع و اعمال منطقی خود از آی سیها بهره می جستند ولی کم کم با گستردگی و پیچیدهتر شدن سیستمهای الکترونیکی این روش دیگر کار آمد نبود، راه جدید به این صورت بود که ما تمامی مشخصات طرح خود را به کارخانه تحویل میدادیم و کارخانه سازنده طرح موجود را پیاده سازی می کرد و به ما تحویل میداد.
از مزایای این روش هرچه بگوییم کم گفتیم. کاهش قابل ملاحظه ابعاد و حجم سیستم، کاهش نویز و توان مصرفی از مزایای این روش بودند اما یک عیبب بسیار بزرگ وجود داشت، عیبی که ما در یک طرح مهندسی یا در تولید یک محصول، اکثر اوقات همه چیز را فدای اون میکنیم، یعنی بالا بودن هزینه تولید یک نمونه از طرحی که ما تحویل کارخانه دادیم. از طرفی دیگر تکنولوژی این روش چندان فراگیر نبود.
همین دو عیب بزرگ باعث شد تا راه حل دیگری جایگزین شود، راه حل ساخت تراشههای قابل برنامه ریزی. اما این تراشه ها یکدفعه ساخته نشدند. در اوایل کار یک سری تراشه ساخته شدند که بیشتر به عنوان حافظههای قابل برنامهریزی استفاده میشدند تا به عنوان پیادهسازی توابع منطقی ولی عیب بزرگ این تراشهها این بود که قابلیت بازنویسی مجدد را نداشتند ولی کم کم این عیب برطرف شد و این تراشهها با استفاده از اشعه ی ماورای بنفش قابلیت پاک شدن را داشتند و ما می توانستیم آنها را بازنویسی کنیم. این مسیر به همین منوال پیش رفت تا اینکه این تراشه ها با استفاده از سیگنالهای الکتریکی پاک میشدند.
خب تا الان احساس میکنید که تراشههای بسیار جالبی ساخته شدند ولی این همه ی داستان نیست در ادامه به جاهای جالب تر خواهیم رسید. بالاخره همه ی این پیش زمینهها طی شد تا اینکه اولین تراشه برنامه پذیر برای مدارات منطقی ساخته شد و در نهایت پیشرفت در این نوع از تراشهها منجر به ساخت FPGA شد.
اجزای تشکیلدهنده FPGA عبارتاند از:
بلوکهای منطقی، یکی از اصلیترین اجزای تشکیلدهنده FPGA هستند که وظیفه پردازش و انجام عملیات منطقی را بر عهده دارند. این بلوکها معمولاً از جداول LUT (Look-Up Table)، فلیپفلاپها و مالتیپلکسرها تشکیل شدهاند. LUT یک جدول حافظه کوچک است که میتواند هر تابع منطقی را با استفاده از ورودیهایش پیادهسازی کند. فلیپفلاپها برای ذخیره اطلاعات بهصورت موقتی و ساخت مدارهای ترتیبی استفاده میشوند.
برای اینکه سیگنالها بتوانند بین واحدهای مختلف منطقی حرکت کنند، FPGA به یک شبکه پیچیده از مسیرهای ارتباطی نیاز دارد. این منابع شامل سیمهای بیناتصالی و سوئیچهایی هستند که امکان برقراری ارتباط بین بلوکهای منطقی مختلف را فراهم میکنند. این مسیرها قابلبرنامهریزی هستند و بسته به طراحی مدار، میتوان آنها را بهدلخواه تنظیم کرد تا بهترین عملکرد حاصل شود.
بلوکهای I/O وظیفه اتصال FPGA به دنیای بیرون را برعهده دارند. این بلوکها سیگنالهای دیجیتال را از دنیای بیرونی دریافت کرده و به مدار داخلی منتقل میکنند، یا بالعکس، خروجیهای مدار را به بیرون هدایت میکنند. این بلوکها میتوانند برای پشتیبانی از استانداردهای مختلف ولتاژ و پروتکلهای ارتباطی مانند LVTTL، LVCMOS و غیره پیکربندی شوند.
برخی از FPGAها شامل بلوکهای حافظه داخلی (مانند RAM) هستند که میتوانند برای ذخیره دادهها یا پیادهسازی بافرها استفاده شوند. علاوه بر این، برخی از FPGAهای پیشرفته دارای بلوکهای خاص مانند ضربکنندههای سختافزاری DSP blocks))، پردازندههای داخلی (مانند ARM cores)، یا حتی سیستمهای مدیریت کلاک هستند که قابلیتهای پیشرفتهای به طراح ارائه میدهند.
زبانهای برنامهنویسی FPGA مخفف (Field-Programmable Gate Array) نقش بسیار مهمی در طراحی و پیادهسازی سیستمهای دیجیتال دارند. FPGAها تراشههایی قابلبرنامهریزی هستند که میتوان آنها را برای انجام وظایف خاصی در سطح سختافزار تنظیم کرد. برخلاف پردازندههای سنتی که برنامهها را به صورت ترتیبی اجرا میکنند، FPGAها از ساختار موازی بهره میبرند، به همین دلیل برای کاربردهای با نیاز به سرعت بالا و تأخیر پایین، مانند پردازش تصویر، شبکه و صنایع هوافضا بسیار محبوباند.
برای برنامهنویسی FPGA، معمولاً از زبانهای توصیف سختافزار (HDL: Hardware Descr iption Language) استفاده میشود. دو زبان اصلی در این حوزه VHDL و Verilog هستند.
VHDL، مخفف VHSIC Hardware Description Language، زبانی ساختیافته و شبیه به Ada است که بیشتر در اروپا و در پروژههای نظامی و صنعتی استفاده میشود. این زبان امکان طراحی سیستمهای پیچیده با سطح بالای انتزاع را فراهم میکند.
Verilog نیز یک HDL است که نحوی شبیه به زبان C دارد و بیشتر در آمریکا و در صنعت نیمههادیها رایج است. هر دو زبان قابلیت شبیهسازی، سنتز، و پیادهسازی سیستمهای دیجیتال را دارند.
علاوه بر این زبانهای سطح پایین، اخیراً زبانها و ابزارهای سطح بالاتر نیز برای برنامهنویسی FPGA توسعه یافتهاند. بهعنوانمثال، زبانهایی مانند SystemVerilog (نسخهی گسترشیافتهVerilog ) یا ابزارهایی مثل Xilinx Vivado HLS به برنامهنویسان اجازه میدهند که با استفاده از زبانC/C++ توصیف سختافزاری بنویسند. این تکنولوژی که تحت عنوان High-Level Synthesis (HLS) شناخته میشود، روند طراحی را سادهتر کرده و دسترسی به FPGAها را برای توسعهدهندگان نرمافزار آسانتر کرده است.
بهطورکلی، انتخاب زبان مناسب برای برنامهنویسی FPGA به نوع پروژه، تجربهی تیم طراحی، و نیازهای عملکردی بستگی دارد. زبانهای سطح پایینتر کنترل دقیقتری روی سختافزار فراهم میکنند، درحالیکه زبانهای سطح بالاتر توسعه سریعتر و نگهداری سادهتری دارند.
برخلاف پردازندهها یا میکروکنترلرها که ساختار ثابتی دارند، FPGA قابلبرنامهریزی مجدد است و کاربر میتواند معماری سختافزاری دلخواه خود را روی آن پیادهسازی کند. این ویژگی باعث میشود FPGA در پروژههایی که به سرعت پردازش بالا و انعطاف در طراحی نیاز دارند، بسیار پرکاربرد باشد.
یکی از مهمترین کاربردهای FPGA در حوزه پردازش سیگنال دیجیتال (DSP) است. در سیستمهایی مثل رادار، پردازش صوت و تصویر یا سیستمهای مخابراتی پیشرفته، حجم بالای داده باید با سرعت زیاد پردازش شود.
FPGA این امکان را فراهم میکند که با طراحی موازی و همزمان چندین ماژول پردازشی، سرعت پردازش بسیار بیشتری نسبت به CPU یا GPU حاصل شود.
در صنعت نیز FPGA در اتوماسیون صنعتی، کنترل موتور و سامانههای ایمنی کاربرد دارد. به دلیل توانایی اجرای همزمان چندین وظیفه با تأخیر کم، FPGA برای سیستمهای بلادرنگ (Real-time Systems) گزینهای عالی محسوب میشود. همچنین در تجهیزات پزشکی و فضایی، به دلیل قابلیت اطمینان بالا و امکان بهروزرسانی ساختار سختافزاری بدون تعویض قطعه، از FPGA بهره گرفته میشود.
در زمینه هوش مصنوعی و یادگیری ماشین نیز استفاده از FPGA در حال افزایش است. شرکتهایی مانند Intel و Xilinx حالا بخشی ازAMD ماژولهای 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 میپردازیم. با سیسوگ همراه باشید.
FPGA (Field Programmable Gate Array) یک تراشه دیجیتال قابل برنامهریزیه که کاربر میتونه منطق دلخواه خودش رو داخلش پیادهسازی کنه، مثل طراحی یک پردازنده، کنترلر، فیلتر دیجیتال و غیره.
بر اساس مقاله، پردازندهها دارای CPU، حافظههای دائمی و موقت و ورودی-خروجیها هستند، درحالیکه FPGA فاقد CPU و حافظههای داخلی است و تنها شامل ورودی – خروجیها و منابع دیگر میباشد. این تفاوتها باعث میشود FPGA برای کاربردهایی با نیاز به سرعت بالا مناسبتر باشد.
مقاله اشاره میکند که دلیل اصلی استفاده از FPGA، سرعت بسیار بالای آنها است. به دلیل ساختار خاص FPGA که فاقد CPU است و امکان پردازش موازی را فراهم میکند، این تراشهها برای کاربردهایی که نیاز به سرعت بالا دارند، مناسب هستند.
مقاله توضیح میدهد که در گذشته، طراحان الکترونیک برای پیادهسازی توابع منطقی از آیسیها استفاده میکردند. با پیچیدهتر شدن سیستمها، نیاز به تراشههایی با قابلیت برنامهریزی مجدد به وجود آمد. این مسیر با تراشههایی که با اشعه ماورایبنفش پاک میشدند آغاز شد و در نهایت به تولید FPGA منجر شد.
چرا و چگونه FPGA را...
سلام و عرض ادب
خستم بدونم مثلا میشه پروتکل usb رو با fpga راه اندازی کنیم ، اصلا عقلانی هستش
بله، میتوان USB را با 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 میلیارد دلار خریداری کرد.
سیسوگ جان دیگه داری خیلی خیلی حرفه ایی میشیااا
دمت گرم همینطور ادامه بده
سپاس از توجه شما
نویسنده شو !
سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.