آموزش الکترونیک

FPGA چیست؟ معرفی ابزار برنامه نویسی FPGA

با افزایش محبوبیت میکروکنترلر ها، مهندسان بیشتر از میکروکنترلرها استفاده می کنند تا FPGA . میکروکنترلر ها به دلیل ارزان بودن، پشتیبانی خوب، در دسترس بودن آسان، اجتماع بزرگ، تطبیق پذیری، برنامه نویسی و غیره بر FPGA مسلط شده اند. اما غیر از این ریزپردازنده ها دارای محدودیت هایی مانند دستورالعمل های تنظیم شده، اجرای پی در پی برنامه ها (پردازش متوالی)، عدم انعطاف پذیری و قابلیت استفاده مجدد و غیره هستند. با این وجود FPGA می تواند بر این محدودیت ها غلبه کند زیرا FPGA ها به صورت موازی برنامه ها را اجرا می کنند و قابل انعطاف و قابل استفاده مجدد هستند و می توانند برای کارهای مختلف بارها و بارها دوباره برنامه ریزی شوند.

FPGA چیست؟

یک آرایه گیت قابل برنامه ریزی (Field-Programmable Gate Array) یک تراشه سیلیکونی مدار مجتمع است که دارای آرایه ای از گیت های منطقی است و این آرایه را می توان در این زمینه برنامه ریزی کرد، یعنی کاربر می تواند پیکربندی های موجود را با تنظیمات جدید تعریف شده خود بازنویسی کند و مدار دیجیتال خود را در این زمینه بسازد. FPGA ها را می توان به عنوان صفحه خالی در نظر گرفت. FPGA ها به خودی خود کاری انجام نمی دهند، در حالی که ساختن یک فایل پیکربندی که معمولاً یک bit file برای FPGA نامیده می شود، به عهده طراحان است. FPGA پس از بارگذاری در یک فایل بیتی مانند مدار دیجیتال عمل خواهد کرد.

FPGA چیست؟

تفاوت FPGA با میکروکنترلر

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

معماری و ساختار FPGA

یک FPGA دارای ساختار منظمی از سلولهای منطقی یا ماژولها و پیوندها است که تحت کنترل کامل توسعه دهندگان و طراحان است. FPGA عمدتا با سه بلوک اصلی مانند بلوک منطقی قابل تنظیم (CLB)، بلوک های ورودی خروجی یا پد و سیم های اتصال / سوئیچ ماتریس ساخته شده است. در مورد هر بلوک به طور خلاصه در زیر بحث خواهد شد.

بلوک منطقی قابل تنظیم (CLB) : اینها سلولهای اساسی FPGA هستند. شامل یک ژنراتور عملکرد 8 بیتی، دو ژنراتور عملکرد 16 بیتی، دو رجیستر (فلیپ فلاپ یا قفل) و کنترل های مسیریابی قابل برنامه ریزی مجدد (مالتی پلکسر) هستند. CLB ها برای اجرای سایر عملکردها و ماکروهای طراحی شده اعمال می شوند. هر CLB ورودی هایی در هر طرف دارد که باعث انعطاف پذیری برای نقشه برداری و تقسیم بندی منطق می شود.

پد های I/O یا بلوک ها : پد های ورودی / خروجی برای وسایل جانبی بیرون برای دسترسی به عملکردهای FPGA استفاده می شود و همچنین با استفاده از آن، پد های ورودی / خروجی، می تواند برای برنامه های مختلف با استفاده از وسایل جانبی مختلف با FPGA ارتباط برقرار کند.

سیم های اتصال / سوئیچ ماتریس : سوئیچ ماتریکس در FPGA برای متصل کردن سیمهای اتصال بلند و کوتاه به یکدیگر، در ترکیب منعطف استفاده می شود. همچنین شامل ترانزیستورهایی برای روشن یا خاموش کردن اتصالات بین خطوط مختلف است.

معماری و ساختار FPGA

دلیل نیاز ما به FPGA

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

اگر میخواهید آردوینو را به صورت اصولی و پروژه محور (ساخت ربات، ارتباط با اندروید، اینترنت اشیا، برنامه نویسی حرفه ای) یاد بگیرید، حتما دوره آموزش آردوینو را مشاهده کنید.

با این حال، در مورد میکروکنترلرها، پردازنده از یک کد به کد دیگر تغییر می کند تا به سطحی از موازات برسد. نوشتن کدها در میکروکنترلرها نسبت به FPGA راحت تر است. قابلیت پردازش موازی FPGA ها؛ شما را قادر می سازد تا با استفاده از ماشین های حالت محدود (FSM) وقفه ها را به صورتی کارآمد کنترل کنید.

معرفی و آموزش FPGA

در مورد میکروکنترلرها، باید مدت زمان صرف شده توسط ISR را برای رفع وقفه در نظر بگیرید. فقط با برنامه ریزی مجدد FPGA می توانید آن را به راحتی سیم کشی کنید. با روشن شدن برق، پیکربندی موجود در FPGA روی سلولهای منطقی قابل تنظیم بارگذاری می شود.

برای برنامه ریزی مجدد FPGA نیازی به تغییر در سخت افزار نیست. FPGA ها برای پردازش سریع داده های موازی مناسب هستند و درجه بالایی از قابلیت تنظیم را دارند. با این حال، آنها همچنین  اشکالاتی در عملکرد نمونه اولیه و پیچیدگی پیکربندی دارند. بنابراین، FPGA ها را می توان با این مزایا نسبت به میکروکنترلرها انتخاب کرد. بیایید برنامه نویسی FPGA را شروع کنیم و بیشتر بر برنامه نویسی FPGA تأکید کنیم.

برنامه نویسی FPGA

برنامه نویسی FPGA توسط HDL ها (زبانهای توصیف سخت افزار) انجام می شود. در اینجا چندین HDL موجود است اما VHDL و Verilog به طور گسترده ای از HDL استفاده می کنند. حتی اگر شباهت زیادی بین کد HDL و زبان برنامه نویسی نرم افزار سطح بالا وجود دارد اما این دو تفاوت اساسی دارند. کدهای نرم افزار دنباله ای از عملیات هستند و پردازش را به ترتیب انجام می دهند در حالی که کد HDL قیاسی است که از متن برای معرفی اجزا و ایجاد اتصالات با پردازش موازی استفاده می کند.

همچنین اگر در مورد این مطلب سوالی داشتید در انتهای صفحه در قسمت نظرات بپرسید

برای درک بهتر آن، به تفاوت بین مراحل مربوط به سخت افزار و نرم افزار جریان طراحی به ترتیب در FPGA و میکروکنترلر توجه کنید.

جریان طراحی سخت افزار و جریان طراحی نرم افزار:

 

برنامه نویسی FPGA

جریان سخت افزار و نرم افزار معمولی در بالا نشان داده شده است. جریان طراحی سخت افزار برای برنامه ریزی FPGA استفاده می شود در حالی که جریان طراحی نرم افزار برای برنامه ریزی میکروکنترلرها و ریز پردازنده های معمولی استفاده می شود. مراحل مهم مربوط به برنامه نویسی FPGA به شرح زیر است.

  • سنتز (ترکیب) : اولین گام، ترکیبی است که کد HDL را می گیرد و به نت لیست ترجمه می کند که شرح متنی نمودار مدار یا شماتیک است.
  • شبیه سازی : پس از ترکیب، مرحله بعدی شامل شبیه سازی است که برای بررسی اینکه آیا طراحی مشخص شده در نت لیست به درستی کار می کند، استفاده می شود.
  • تبدیل نت لیست به قالب باینری : پس از تأیید طرح، مورد بعدی تبدیل نت لیست به قالب باینری است. مولفه ها و اتصالات به CLB نگاشته می شوند و طراحی ترسیم و مسیریابی شده می شود تا بر روی FPGA هدف قرار گیرد (یعنی مکان و مسیر).
  • اجرای شبیه سازی دوم : برای دیدن کیفیت طراحی، شبیه سازی دوم انجام می شود.
  • ایجاد فایل بیت : سرانجام یک فایل بیت برای بارگذاری طرح بر روی FPGA تولید می شود (فایل .bit یک فایل پیکربندی است که برای برنامه ریزی تمام منابع موجود در FPGA استفاده می شود).
  • تأیید و رفع اشکال : سرانجام،  درحالیکه طراحی درحال اجرا در FPGA است، با استفاده از ابزارهای مختلف ثبت و اشکال زدایی شده است. بر خلاف جریان طراحی سخت افزار، در مرحله طراحی نرم افزار نیازی به مرحله شبیه سازی قبل از اجرا نیست. همچنین، زمان کامپایل برای نرم افزار، بسیار کمتر از زمان پیاده سازی برای طراحی سخت افزار است، بنابراین کامپایل مجدد کد و انجام اشکال زدایی به عنوان یک فرایند تکراری است.

زبان ها و ابزار های برنامه نویسی FPGA

همانطور که در بالا ذکر شد، چندین زبان برنامه نویسی و ابزار برای برنامه نویسی و اشکال زدایی FPGA در دسترس است، اما بیشترین استفاده آنها از VHDL و Verilog است. VHDL و Verilog کاملاً تثبیت شده اند و از HDL های گسترده ای پشتیبانی می کنند. از نظر برنامه FPGA، لازم است عملکرد برنامه نویسی نرم افزار را فراموش کرده و در مورد گیت ها و مدارهای منطقی برای پیاده سازی عملکردی که شخص می خواهد روی FPGA ها اجرا کند، فکر کند.

ابزارهای توسعه دهنده FPGA زیادی وجود دارند مانند :

  • VHDL/Verilog : هر دو زبان، ساختارهایی را برای توصیف ماهیت ذاتی موازی توسعه FPGA / ASIC فراهم می کنند. به دلیل استفاده اولیه آنها برای توصیف رفتار مدارهای پیشین از تولید ابزار سنتز (ترکیب)، این زبان ها از نیمکت های تست برای آزمایش طرح در حال اجرا نیز پشتیبانی می کنند.
  • LabVIEW FPGA : لب ویو یک زبان گرافیکی است که یک روش کاملاً متفاوت برنامه نویسی FPGA را ارائه می دهد. LabVIEW FPGA مجموعه FPGA است که از یک گزینه مبتنی بر ابر استفاده می کند، که به طور قابل توجهی سرعت تدوین را افزایش می دهد.
  • MATLAB : متلب زبانی است که می تواند نقشی حیاتی داشته باشد و باید مورد مطالعه قرار گیرد. MATLAB به طور کلی برای تولید فیلترهایی برای پردازش سیگنال، توسعه الگوریتم های پردازش تصویر و تقریباً هر الگوریتم دیگری استفاده می شود. اما جدا از این، می توان با استفاده از رمزگذار HDL از مدل MATLAB به FPGA رسید. قابلیت ردیابی این امکان را دارد که برنامه هایی با یکپارچگی بالا را می توان با استفاده از این روش توسعه داد. رمزگذار HDL امکان انجام سخت افزار (FPGA) را در آزمایش حلقه و شبیه سازی مشترک برای دیدن تفاوت بین الگوریتم اصلی و الگوریتم سخت افزار پیاده سازی شده، که به کاوش فضای طراحی کمک می کند، انجام می دهد.

به غیر از این، ابزارهای دیگری مانند، MyHDL, JHDL, BSV, System Verilog, SPINAL HDL, CHISEL, C/C++/System و … مشابه این وجود دارد.

نتیجه گیری

ٰFPGA بدون شک در نوع خود بسیار خوب است. از پردازش موازی گرفته تا بارگذاری یک بیت فایل، FPGA دارای چندین مزیت مانند سرعت در زمینه قابل برنامه ریزی است اما دارای معایبی مانند نوردهی کمتر، پشتیبانی کمتر اجتماع، محبوبیت کمتر HPC است. تجربه اولیه با FPGA نمی تواند همانطور که انتظار می رود باشد اما پس از چندین بار تمرین می تواند برای برنامه ریزی FPGA مفید باشد. همچنین FPGA های مدرن دستگاه هایی با عملکرد بالا هستند و می توان این FPGA ها را با مزایای بالقوه در برخی از برنامه هایی که نیاز به تطبیق پذیری دارند پیدا کرد.

نظرتان را در مورد این مطلب با ستاره دادن اعلام کنید
امیدوارم این مطلب برای شما مفید بوده باشد. نظرات ، مشکلات و پیشنهادات خود را در پایین صفحه اعلام کنید
محمد رحیمی

محمد رحیمی

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

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *