آموزش 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 میلی ثانیه طول کشید که این زمان خواسته مسئله ما را برآورده کند.
حال که به خواسته مسئله رسیدیم باید تعیین کنیم که این مسئله با چه ابزاری قابل پیاده سازی میباشد.
ما باید 10 میلیون دستور را در زمان 5 میلی ثانیه اجرا کنیم، یعنی باید سرعت مورد نظر 2GHZ باشد. فرض کنید ما دو نوع میکروکنترلر AVR و ARM در دسترس داریم که حداکثر سرعت معمول نوع اول 20MHZ و حداکثر سرعت نوع دوم 500MHZ می باشد اما سرعت مورد نیاز ما را هیچکدام از این دو نوع میکروکنترلر برآورده نخواهد کرد، پس ما نمیتوانیم از این میکروکنترلرها استفاده کنیم و به ناچار باید سراغ FPGA برویم.
نکته ای که اینجا باید ذکر شود این است که در مورد FPGA هزینه و زمان طراحی نیز باید در نظر گرفته شود، چون که این نوع از تراشه ها قیمتشان نسبت به سایر تراشه ها بسیار بالاتر است و زمانی که صرف طراحی می شود نیز بسیار بیشتر از زمان طراحی با میکروکنترلرها می باشد، پس عاقلانه میباشد که بدون بررسی تخصصی سراغ FPGA نیاییم.
در این قسمت قصد داریم در مورد منابع داخلی FPGA نیز صحبت کنیم و بحث ماهیت و ساختار را به پایان برسانیم.
منابع داخلی FPGA به صورت کلی به دو دسته کلی زیر تقسیم می شوند:
- منابع عمومی
- منابع اختصاصی
منابع عمومی شامل فلیپ فلاپها یا همان حافظهها و یک سری Logic Block یا (Logic Cell (LC میباشد.
شکل بالا نمایی از یک LC میباشد، همانطور که مشاهده میکنید LUT بخشی از LC میباشد و با تقریب میتوان گفت که LC و LUT معادل همدیگر هستند.
منابع اختصاصی شامل هر منبعی به جز فلیپ فلاپ و LUT میباشد، از این نوع منابع میتوان به ضرب کنندهها، منابع کلاک، ورودی_خروجیها و شیفت رجیسترها اشاره کرد.
در نهایت این منابع توسط سیمها و اتصالات قابل برنامهریزی به هم متصل میشوند که البته این اتصالات خود نیز از منابع داخلی FPGA میباشند.
در شکل زیر می توانید منابع داخلی و نحوه قرار گیری آن ها در کنار همدیگر را مشاهده کنید.
در قسمت سوم آموزش FPGA سراغ نرمافزار و زبان توصیف سخت افزار یعنی نرمافزار ISE و زبان VHDL خواهیم رفت. با سیسوگ همراه باشید.
سلام دوستان
از مطلب و مثال ارائه شده تان خیلی ممنونم
در پناه امام زمان موفّق باشید
سلام. سپاس از شما.
ممنون خیلی عالی بود
خواهش میکنم امیرحسین جان.
مثل همیشه عالی و ناب ادامه بدین
آرزوی موفقیت دارم براتون
ممنون از توجه شما دوست عزیز. و همچنین تیم سیسوگ نیز امیدوار است که شما بهره کافی از این مجموعه آموزشی را ببرید.
عالیه، باقدرت ادامه بدید.
???