FPGA, آموزش, توصیه شده, مقاله

آموزش FPGA قسمت دوم: چرا و چگونه FPGA را انتخاب کنیم؟

آموزش FPGA

آموزش FPGA قسمت دوم: چرا و چگونه FPGA را انتخاب کنیم؟

چه موقع سراغ FPGA برویم؟

همانطور که در قسمت اول از آموزش FPGA گفتیم ما زمانی سراغ FPGA می‌رویم که میکروکنترلر‌ها نتوانند سرعت موردنیاز پروژه‌ی ما را برآورده کنند، حال باید به یک سری پارامترها بپردازیم که تعیین کننده سرعت موردنیاز ما می‌باشد.

به زبان ساده می‌توان گفت که سرعت رابطه‌ای بین حجم الگوریتم و زمان لازم برای به پایان رساندن این الگوریتم است.
یعنی اگر ما بتوانیم این الگوریتم را در زمان خاصی به پایان برسانیم، توانسته‌ایم که خواسته مسئله را برآورده کنیم. برای روشن شدن بیشتر مسئله اجازه بدهید یک تعریف برای الگوریتم مورد نظری که در اینجا به آن اشاره می‌کنیم ارائه بدهیم، الگوریتم مورد نظر ما معمولا شامل مجموعه‌ای از جمع‌ها یا ضرب‌ها می‌باشد.

این الگوریتم یا توسط خود ما طراحی می‌شود یا از قبل به ما داده شده است؛ ولی نکته اصلی در اینجا این است که ما چقدر وقت داریم تا این الگوریتم را به پایان برسانیم که خواسته مسئله برآورده شود.

ما در اینجا سعی می‌کنیم با یک مثال به توضیح این مسئله بپردازیم.

فرض کنید ما یک رادار داریم که قرار است پس از مشاهده جسم متخاصم به یک سیستم دیگر خبر دهد، حتما حدس خواهید زد که قرار است با چه تاخیری به سیستم دیگر خبر دهد؟ در پاسخ باید گفت تنها عاملی که بعدا ما با استفاده از آن سرعت را مشخص خواهیم کرد همین مقدار تاخیر می‌باشد. پس تا اینجا ما علاوه بر الگوریتم مورد نظر، زمان تاخیر را نیز در دسترس داریم، حال باید با توجه به داده‌هایی که داریم سرعتی که خواسته مسئله را برآورده می‌کند پیدا کنیم و ببینیم که با چه ابزاری قابل پیاده سازی می‌باشد.

فرض کنید که الگوریتم ما دارای 10 میلیون دستور می‌باشد که هر دستور در یک کلاک به اتمام می‌رسد و زمانی که جسم متخاصم برای اولین بار ظاهر شد، رادار حداکثر 10 میلی ثانیه وقت دارد تا سیستم دیگر را خبر کند.

سرعت، زمان و حجم اجرای الگوریتم در برنامه نویسی

با توجه به شکل بالا فرض کنید ما زمان لازم برای اجرای الگوریتم را 10 میلی‌ثانیه در نظر گرفتیم، در زمان 0 میلی ثانیه رادار هیچ جسم متخاصمی را مشاهده نمی‌کند، در زمان 4 میلی ثانیه جسم متخاصم برای اولین بار ظاهر می شود، اما چون رادار از زمان 0 میلی ثانیه تا زمان 10 میلی ثانیه مشغول اجرای الگوریتم می‌باشد، نمی‌تواند جسم متخاصم را تشخیص دهد. تا زمان 10 میلی ثانیه که اجرای الگوریتم به پایان می‌رسد، با فرض اینکه جسم متخاصم در دید رادار می‌باشد، رادار می‌تواند آن را تشخیص دهد و در زمان 20 میلی ثانیه به سیستم دیگر گزارش دهد. اما با توجه به شکل مشاهده می‌شود از زمانی که جسم مورد نظر ظاهر شد تا زمانی که گزارش به سیستم دیگر رسید، 16 میلی ثانیه طول کشید که این خواسته مسئله ما یعنی حداکثر تاخیر 10 میلی ثانیه را برآورده نمی‌کند.

پس راه حل چیست؟ راه حل این است که زمان اجرای الگوریتم را باید کمتر کنیم و دوباره همین سناریو را تکرار کنیم. این بار زمان اجرای الگوریتم را 5 میلی ثانیه در نظر می‌گیریم و سناریو را تکرار می‌کنیم.

سرعت، زمان و حجم اجرای الگوریتم در برنامه نویسی

با توجه به شکل بالا در زمان 0 میلی ثانیه رادار هیچ جسم متخاصمی را مشاهده نمی کند و در زمان 2 میلی ثانیه جسم متخاصم برای اولین بار ظاهر می‌شود، اما چون رادار از زمان 0 میلی ثانیه تا زمان 5 میلی ثانیه مشغول اجرای الگوریتم می‌باشد، نمی‌تواند جسم متخاصم را تشخیص دهد. تا زمان 5 میلی ثانیه که اجرای الگوریتم به پایان می‌رسد، با فرض اینکه جسم متخاصم در دید رادار می‌باشد، رادار می تواند آن را تشخیص دهد و در زمان 10 میلی ثانیه به سیستم دیگر گزارش دهد. با توجه به شکل بالا مشاهده می‌شود از زمانی که جسم مورد نظر ظاهر شد تا زمانی که گزارش به سیستم دیگر رسید، 8 میلی ثانیه طول کشید که این زمان خواسته مسئله ما را برآورده کند.

حال که به خواسته مسئله رسیدیم باید تعیین کنیم که این مسئله با چه ابزاری قابل پیاده سازی می‌باشد.

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

ما باید 10 میلیون دستور را در زمان 5 میلی ثانیه اجرا کنیم، یعنی باید سرعت مورد نظر 2GHZ باشد. فرض کنید ما دو نوع میکروکنترلر AVR و ARM در دسترس داریم که حداکثر سرعت معمول نوع اول 20MHZ و حداکثر سرعت نوع دوم 500MHZ می باشد اما سرعت مورد نیاز ما را هیچکدام از این دو نوع میکروکنترلر برآورده نخواهد کرد، پس ما نمی‌توانیم از این میکروکنترلر‌ها استفاده کنیم و به ناچار باید سراغ FPGA برویم.

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

در این قسمت قصد داریم در مورد منابع داخلی FPGA نیز صحبت کنیم و بحث ماهیت و ساختار را به پایان برسانیم.

منابع داخلی FPGA به صورت کلی به دو دسته کلی زیر تقسیم می شوند:

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

منابع عمومی شامل فلیپ فلاپ‌ها یا همان حافظه‌ها و یک سری Logic Block یا (Logic Cell (LC می‌باشد.

 Logic Block یا (Logic Cell (LC

شکل بالا نمایی از یک LC می‌باشد، همانطور که مشاهده می‌کنید LUT بخشی از LC می‌باشد و با تقریب می‌توان گفت که LC و LUT معادل همدیگر هستند.

منابع اختصاصی شامل هر منبعی به جز فلیپ فلاپ و LUT می‌باشد، از این نوع منابع می‌توان به ضرب کننده‌ها، منابع کلاک، ورودی_خروجی‌ها و شیفت رجیستر‌ها اشاره کرد.

در نهایت این منابع توسط سیم‌ها و اتصالات قابل برنامه‌ریزی به هم متصل می‌شوند که البته این اتصالات خود نیز از منابع داخلی FPGA می‌باشند.

در شکل زیر می توانید منابع داخلی و نحوه قرار گیری آن ها در کنار همدیگر را مشاهده کنید.

 

منابع داخلی در FPGA

در قسمت‌ سوم آموزش FPGA سراغ نرم‌افزار و زبان توصیف سخت افزار یعنی نرم‌افزار ISE و زبان VHDL خواهیم رفت. با سیسوگ همراه باشید.

 


انتشار مطالب با ذکر نام و آدرس وب سایت سیسوگ، بلامانع است.

شما نیز میتوانید یکی از نویسندگان سیسوگ باشید.  همکاری با سیسوگ

 

نوشته های مشابه

پاسخی بگذارید

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

4 دیدگاه

  1. Avatar مهدی گفت:

    مثل همیشه عالی و ناب ادامه بدین
    آرزوی موفقیت دارم براتون

    1. ممنون از توجه شما دوست عزیز. و همچنین تیم سیسوگ نیز امیدوار است که شما بهره کافی از این مجموعه آموزشی را ببرید.

  2. Avatar حمزه گفت:

    عالیه، باقدرت ادامه بدید.