چیست ؟ FPGA یک آرایه گیت قابل برنامه ریزی (Field-Programmable Gate Array) یک تراشه سیلیکونی مدار مجتمع است که دارای آرایه ای از گیت های منطقی است و این آرایه را می توان در این زمینه برنامه ریزی کرد، یعنی کاربر می تواند پیکربندی های موجود را با تنظیمات جدید تعریف شده خود بازنویسی کند و مدار دیجیتال خود را در این زمینه بسازد. FPGA ها را می توان به عنوان صفحه خالی در نظر گرفت.
ها به خودی خود کاری انجام نمی دهند، در حالی که ساختن یک فایل پیکربندی که معمولاً یک bit file برای FPGA نامیده می شود، به عهده طراحان است. FPGA پس از بارگذاری در یک فایل بیتی مانند مدار دیجیتال عمل خواهد کرد. یک FPGA دارای ساختار منظمی از سلولهای منطقی یا ماژولها و پیوندها است که تحت کنترل کامل توسعه دهندگان و طراحان است. FPGA عمدتا با سه بلوک اصلی مانند بلوک منطقی قابل تنظیم (CLB)، بلوک های ورودی خروجی یا پد و سیم های اتصال / سوئیچ ماتریس ساخته شده است.
بلوک منطقی قابل تنظیم (CLB) : اینها سلولهای اساسی FPGA هستند. شامل یک ژنراتور عملکرد 8 بیتی، دو ژنراتور عملکرد 16 بیتی، دو رجیستر (فلیپ فلاپ یا قفل) و کنترل های مسیریابی قابل برنامه ریزی مجدد )مالتی پلکسر) هستند. CLB ها برای اجرای سایر عملکردها و ماکروهای طراحی شده اعمال می شوند. هر CLB ورودی هایی در هر طرف دارد که باعث انعطاف پذیری برای نقشه برداری و تقسیم بندی منطق می شود.
پد های I/O یا بلوک ها : پد های ورودی / خروجی برای وسایل جانبی بیرون برای دسترسی به عملکردهای FPGA استفاده می شود و همچنین با استفاده از آن، پد های ورودی / خروجی، می تواند برای برنامه های مختلف با استفاده از وسایل جانبی مختلف با FPGA ارتباط برقرار کند.
سیم های اتصال / سوئیچ ماتریس : سوئیچ ماتریکس در FPGA برای متصل کردن سیمهای اتصال بلند و کوتاه به یکدیگر، در ترکیب منعطف استفاده می شود. همچنین شامل ترانزیستورهایی برای روشن یا خاموش کردن اتصالات بین خطوط مختلف است.
FPGA در مقابل میکروکنترلر (یا چرا وقتی یک میکروکنترلر از FPGA استفاده می کند؟)
با محبوبیت روزافزون میکروکنترلرها، مهندسان از میکروکنترلرها بیشتر از FPGA استفاده می کنند. میکروکنترلرها به دلیل هزینه ارزان، پشتیبانی خوب، در دسترس بودن آسان، جامعه بزرگ، تطبیق پذیری، برنامه نویسی و غیره بر FPGA غالب شده اند. عدم انعطاف پذیری و قابلیت استفاده مجدد و غیره من فکر می کنم همه ما می توانیم قبول کنیم که میکروکنترلرها به یک جزء غالب در طراحی الکترونیکی مدرن تبدیل شده اند.
آنها ارزان و بسیار همه کاره هستند و امروزه اغلب به عنوان اولین معرفی یک شخص به دنیای الکترونیک عمل می کنند. برای ما طبیعی است که به استفاده از اجزایی که با آنها آشنا هستیم ادامه دهیم - و با قدرتمندتر شدن میکروکنترلرها، نیاز به در نظر گرفتن راه حل های جایگزین برای چالش های طراحی ما کمتر و کمتر می شود.
با این وجود، یک میکروکنترلر حول یک پردازنده ساخته شده است و پردازنده ها دارای محدودیت های اساسی هستند که باید شناسایی شوند و در برخی موارد برطرف شوند. FPGA می تواند بر این محدودیت ها غلبه کند زیرا FPGA ها برنامه ها را به صورت موازی اجرا می کنند و انعطاف پذیر و قابل استفاده مجدد است به این معنی که می تواند بارها و بارها برای کارهای مختلف دوباره برنامه ریزی شود. پس چه زمانی یک مهندس میتواند از طریق میکروکنترلر به FPGA دست پیدا کند؟ پاسخ به نرم افزار در مقابل سخت افزار مرتبط است.
یک پردازنده وظایف خود را با اجرای دستورات به صورت متوالی انجام می دهد. این بدان معناست که عملیات پردازنده ذاتاً محدود است: عملکرد مورد نظر باید با دستورالعملهای موجود تطبیق داده شود و در بیشتر موارد، انجام چندین کار پردازشی به طور همزمان امکانپذیر نیست.
یک میکروکنترلر حول یک پردازنده ساخته شده است و یک پردازنده حول یک CPU ساخته شده است و یک CPU یک عملیات را در یک زمان انجام می دهد. مجموعه دستورالعمل به گونه ای طراحی شده است که بسیار متنوع باشد و امروزه دستورالعمل ها را می توان در فرکانس های بسیار بالا اجرا کرد. با این حال، این ویژگی ها، معایب یک رویکرد مبتنی بر نرم افزار برای طراحی دیجیتال را از بین نمی برد.
جایگزین یک رویکرد مبتنی بر سخت افزار است. بسیار راحت خواهد بود اگر هر طرح جدید حول یک آی سی دیجیتال ساخته شود که عملکرد دقیق مورد نیاز سیستم را اجرا کند: بدون نیاز به نوشتن نرم افزار، بدون محدودیت مجموعه دستورالعمل، بدون تاخیر در پردازش، فقط یک آی سی واحد که دارای پایه های ورودی است. ، پین های خروجی و مدارهای دیجیتال دقیقاً مربوط به عملیات لازم است.
این متدولوژی فراتر از توصیف غیر عملی است زیرا شامل طراحی یک ASIC (مدار مجتمع ویژه برنامه) برای هر برد می شود. با این حال، میتوانیم این روش را با استفاده از FPGA تقریبی کنیم. یک آرایه گیت قابل برنامهریزی، یک تراشه سیلیکونی مدار مجتمع است که دارای آرایهای از گیتهای منطقی است و این آرایه را میتوان برنامهریزی کرد، یعنی کاربر میتواند پیکربندیهای موجود را با پیکربندیهای تعریفشده جدید خود بازنویسی کند و بتواند مدار دیجیتالی خود را در میدان ایجاد کند.
FPGA ها را می توان به عنوان لوح خالی در نظر گرفت. FPGA ها به خودی خود هیچ کاری انجام نمی دهند، در حالی که این به طراحان بستگی دارد که یک فایل پیکربندی که اغلب به نام فایل بیت برای FPGA نامیده می شود، به عهده طراحان است. هنگامی که FPGA با یک فایل بیت بارگذاری می شود مانند مدار دیجیتال رفتار می کند.
در حالی که در میکروکنترلرها اینطور نیست زیرا میکروکنترلرها را نمی توان برنامه ریزی یا بازسازی کرد. کاربر نه مجاز است تنظیمات موجود خود را بازنویسی کند و نه می تواند مدار دیجیتالی را ایجاد کند. برنامه ریزی میکروکنترلرها آسان است و جامعه نیز گسترده است. میکروکنترلرها مینی کامپیوترهای سفارشی هستند که به شکل IC عرضه می شوند، در حالی که FPGA ها فقط شامل بلوک های منطقی هستند که می توانند دوباره به صورت الکتریکی سیم کشی شوند.
همچنین از نظر میکروکنترلرها نسبت به FPGA برق کمتری مصرف می کند. FPGA ها پرهزینه هستند و برای ساخت هر دستگاهی به هزینه بیشتری نسبت به میکروکنترلر نیاز دارند. در حالی که میکروکنترلرها به آسانی برای کاربردهای خاص ساخته شده اند، زمان زیادی برای راه اندازی FPGA ها نیاز دارد.
آرایه گیت قابل برنامه ریزی چیست؟
یک نام خوب می تواند کاملاً آموزنده باشد، و من "آرایه گیت قابل برنامه ریزی" را نام نسبتا خوبی می دانم. یک FPGA آرایهای از گیتهای منطقی است و این آرایه را می توان برنامه ریزی کرد (در واقع، "پیکربندی" احتمالاً کلمه بهتری است) در فیلد، یعنی توسط کاربر دستگاه در مقابل افرادی که آن را طراحی کرده اند. بیایید نگاهی دقیق تر به این ویژگی های اساسی بیندازیم.
گیت های منطقی (AND، OR، XOR، و غیره) بلوک های ساختمانی اصلی مدارهای دیجیتال هستند. بنابراین تعجب آور نیست که یک دستگاه دیجیتالی که در نظر گرفته شده است بسیار قابل تنظیم باشد (یعنی "قابل برنامه ریزی") از گیت های متعددی تشکیل شده باشد که می توانند به روشی قابل تنظیم به یکدیگر متصل شوند.
با این حال، یک FPGA مجموعه وسیعی از گیت های بولی منفرد نیست. این یک روش بسیار نابهینه برای ارائه عملکردهای منطقی قابل تنظیم خواهد بود، زیرا از این واقعیت که عملیات رایج را می توان بسیار کارآمدتر به عنوان ماژول های ثابت پیاده سازی کرد، بهره نمی برد.
همین اصل در دنیای آی سی های دیجیتال گسسته نیز مشهود است. میتوانید آیسیهایی را بخرید که از گیتهای AND، دروازههای OR و غیره تشکیل شدهاند، اما نمیخواهید یک شیفت رجیستر از گیتهای جداگانه بسازید. در عوض، شما باید یک آی سی شیفت رجیستر بخرید.
بیشتر بخوانید: باز طراحی برد های الکترونیکی. کدام برد ها قابلیت طراحی دارند.
بنابراین، یک FPGA بسیار بیشتر از مجموعه ای از گیت ها است. این مجموعه ای از زیرمدارهای دیجیتالی با دقت طراحی شده و به هم پیوسته است که به طور موثر عملکردهای رایج را اجرا می کند و در عین حال سطوح بسیار بالایی از انعطاف پذیری را نیز ارائه می دهد. زیرمدارهای دیجیتال بلوک های منطقی قابل تنظیم (CLB) نامیده می شوند و هسته اصلی قابلیت های منطقی قابل برنامه ریزی FPGA را تشکیل می دهند:
CLB ها باید با یکدیگر و با مدارهای خارجی تعامل داشته باشند. برای این منظور، FPGA از ماتریسی از اتصالات قابل برنامه ریزی و بلوک های ورودی/خروجی (I/O) استفاده می کند. "برنامه" FPGA در سلول های SRAM ذخیره می شود که بر عملکرد CLB ها تأثیر می گذارد و سوئیچ هایی را که مسیرهای اتصال را ایجاد می کنند کنترل می کند.
توضیح دقیق ساختار داخلی و عملکرد یک CLB به یک مقاله کامل (اگر نه چندین مقاله) نیاز دارد. ایده کلی این است که CLB ها شامل جداول جستجو، عناصر ذخیره سازی (فلیپ فلاپ یا ثبات) و مالتی پلکسرهایی هستند که به CLB اجازه می دهند عملیات بولی، ذخیره سازی داده ها و عملیات حسابی را انجام دهد.
یک بلوک ورودی/خروجی از اجزای مختلفی تشکیل شده است که ارتباط بین CLB ها و سایر اجزای برد را تسهیل می کند. از جمله این مقاومت ها می توان به مقاومت های pull-up/pull-down، بافرها و اینورترها اشاره کرد.
چه زمانی FPGA مورد نیاز است؟
همانطور که در بالا ذکر شد که میکروکنترلرها محدودیت هایی دارند و نمی توان از آنها برای انجام کار به صورت موازی استفاده کرد زیرا میکروکنترلر و ریزپردازنده بر روی اجرای متوالی برنامه ها اجرا می شوند که در برخی از برنامه ها کمی کند می شود، در این سناریو FPGA ها دارای یک مزیت هستند و می توان از آنها به طور موثر استفاده کرد.
همچنین میکروکنترلر می تواند وظایف محدودی را انجام دهد زیرا با دستورالعمل ها و مدارهای آنها همراه است. یک برنامه نویس باید در هنگام توسعه کد از محدودیت ها تبعیت کند. بنابراین در این سناریو نیز، FPGA ها مزیت دارند. با این حال، در مورد میکروکنترلرها، پردازنده از یک کد به کد دیگر سوئیچ می کند تا به سطحی از موازی دست یابد.
بیشتر بخوانید: استاندارد ipc چیست؟
نوشتن کد روی میکروکنترلرها آسان تر از FPGA ها خواهید بود. قابلیت پردازش موازی FPGA ها شما را قادر می سازد تا با استفاده از ماشین های حالت محدود (FSM) وقفه ها را به طور موثر کنترل کنید.
در مورد میکروکنترلرها، شما باید زمان صرف شده توسط ISR را برای رفع یک وقفه در نظر بگیرید. فقط با برنامه ریزی مجدد می توانید یک FPGA را به راحتی سیم کشی کنید. پیکربندی در یک FPGA روی سلول های منطقی قابل تنظیم زمانی که برق روشن است بارگذاری می شود.
برای برنامه ریزی مجدد FPGA نیازی به تغییر در سخت افزار ندارید. FPGA ها برای پردازش با سرعت بالا داده های موازی مناسب هستند و دارای درجه بالایی از قابلیت شخصی سازی هستند. با این حال، آنها همچنین دارای معایب عملیات نمونه اولیه و پیچیدگی پیکربندی هستند. بنابراین، FPGA ها را می توان با این مزایا نسبت به میکروکنترلرها انتخاب کرد. بیایید برنامه نویسی FPGA را شروع کنیم و بیشتر بر برنامه نویسی FPGA تاکید کنیم.
منطق قابل برنامه ریزی فیلد (یا چگونه یک FPGA را برنامه ریزی می کنید؟)
چگونه میتوانیم آرایهای از CLB را به یک مدار دیجیتال تبدیل کنیم که دقیقاً همان کاری را که ما میخواهیم انجام دهد؟ در نگاه اول، کار نسبتاً پیچیده ای به نظر می رسد. در واقع، اجرای FPGA به طور کلی دشوارتر از برنامه ریزی یک میکروکنترلر در نظر گرفته می شود. با این حال، توسعه FPGA به دانش کامل از عملکرد CLB یا ترتیب پر زحمت اتصالات داخلی نیاز ندارد، همانطور که توسعه میکروکنترلر به دانش کامل دستورالعمل های زبان اسمبلی پردازنده یا سیگنال های کنترل داخلی نیاز ندارد.
در واقع، ارائه یک FPGA به عنوان یک جزء مستقل تا حدودی گمراه کننده است. FPGA ها همیشه توسط نرم افزار توسعه پشتیبانی می شوند که فرآیند پیچیده تبدیل یک طراحی سخت افزاری به بیت های برنامه نویسی را انجام می دهد که رفتار اتصالات و CLB ها را تعیین می کند.
با این حال، این ما را با یک سوال مهم روبرو میکند: چگونه به نرمافزار توضیح دهیم که سختافزار FPGA چه کاری باید انجام دهد؟ شما میتوانید برای آشنایی با نرم افزار آردوینو مقاله مرتبط با آن را در همین سایت بخونید.
به نظر می رسد که مردم زبان هایی ایجاد کرده اند که به ما امکان می دهد سخت افزار را "توصیف" کنیم. آنها (بسیار مناسب) زبان های توصیف سخت افزار (HDL) نامیده می شوند و دو رایج ترین آنها VHDL و Verilog هستند. با وجود شباهت ظاهری بین کد HDL و کد نوشته شده در یک زبان برنامه نویسی نرم افزار سطح بالا، این دو اساساً متفاوت هستند. کد نرم افزار دنباله ای از عملیات را مشخص می کند، در حالی که کد HDL بیشتر شبیه یک شماتیک است که از متن برای معرفی اجزا و ایجاد اتصالات استفاده می کند.
یک مدار دیجیتال و کد VHDL مربوطه در بالا نشان داده شده است.
نتیجه
امیدوارم که اکنون ویژگی های اساسی دستگاه های منطقی قابل برنامه ریزی و مزایای بالقوه آنها را با توجه به سیستم های مبتنی بر پردازنده درک کنید. FPGA های مدرن دستگاه های پیچیده و با کارایی بالایی هستند که می تواند برای کسانی که عادت به استفاده از میکروکنترلرها برای جمع آوری داده ها، کنترل ASIC و انجام عملیات ریاضی دارند تا حدودی ترسناک باشد.
با این حال، ممکن است متوجه شوید که در برخی از برنامهها، بهبود عملکرد و تطبیقپذیری ارزش تلاش بیشتر طراحی را دارد. بدون شک FPGA ها در نوع خود بسیار خوب هستند. از پردازش موازی گرفته تا بارگذاری یک فایل بیت، FPGA ها دارای چندین مزیت از جمله سرعت، قابل برنامه ریزی در میدان هستند، اما همچنین دارای معایبی مانند نوردهی کمتر، پشتیبانی کمتر جامعه، محبوبیت کمتر برای HPC هستند.
تجربه اولیه با FPGA ها نمی تواند آنطور که انتظار می رود باشد، اما پس از چندین بار تمرین، برنامه ریزی FPGA می تواند مفید باشد. همچنین FPGA های مدرن دستگاه هایی با کارایی بالا هستند و می توان این FPGA ها را با مزایای بالقوه در برخی از برنامه هایی که نیاز به تطبیق پذیری دارند پیدا کرد.