چهموقع سراغ FPGA برویم؟
همانطورکه در قسمت اول از آموزش FPGA گفتیم ما زمانی سراغ FPGA میرویم که میکروکنترلرها نتوانند سرعت موردنیاز پروژهی ما را برآورده کنند، حال باید به یکسری پارامترها بپردازیم که تعیینکننده سرعت موردنیاز ما میباشد.
به زبانساده میتوان گفت که سرعت رابطهای بین حجم الگوریتم و زمانلازم برای بهپایانرساندن این الگوریتم است.
یعنی اگر ما بتوانیم این الگوریتم را در زمانخاصی به پایان برسانیم، توانستهایم که خواسته مسئله را برآوردهکنیم. برای روشنشدن بیشتر مسئله اجازهبدهید یک تعریف برای الگوریتم موردنظری که در اینجا به آن اشاره میکنیم ارائهبدهیم، الگوریتم موردنظرما معمولا شامل مجموعهای از جمعها یا ضربها میباشد.
این الگوریتم یا توسط خود ما طراحی میشود یا از قبل بهما دادهشدهاست؛ ولی نکتهاصلی در اینجا این است که ما چقدر وقت داریم تا این الگوریتم را به پایان برسانیم که خواسته مسئله برآورده شود.
ما در اینجا سعی میکنیم با یک مثال به توضیح این مسئله بپردازیم.
فرضکنید ما یک رادار داریم که قرار است پساز مشاهده جسم متخاصم به یک سیستم دیگر خبر دهد، حتما حدسخواهید زد که قرار است با چه تاخیری به سیستم دیگر خبر دهد؟ در پاسخ باید گفت تنها عاملی که بعدا ما بااستفادهاز آن سرعت را مشخصخواهیمکرد همینمقدار تاخیر میباشد. پس تااینجا ما علاوهبر الگوریتم موردنظر، زمان تاخیر را نیز در دسترس داریم، حال باید باتوجهبه دادههایی که داریم سرعتی که خواسته مسئله را برآورده میکند پیدا کنیم و ببینیم که با چه ابزاری قابل پیادهسازی میباشد.
فرضکنید که الگوریتم ما دارای ۱۰میلیون دستور میباشد که هر دستور در یک کلاک به اتمام میرسد و زمانیکه جسم متخاصم برای اولینبار ظاهر شد، رادار حداکثر ۱۰میلیثانیه وقت دارد تا سیستمدیگر را خبر کند.
باتوجهبه شکلبالا فرضکنید ما زمانلازم برای اجرای الگوریتم را ۱۰میلیثانیه درنظر گرفتیم، در زمان ۰میلیثانیه رادار هیچ جسم متخاصمی را مشاهده نمیکند، در زمان ۴میلیثانیه جسم متخاصم برای اولینبار ظاهر میشود، اما چون رادار از زمان ۰میلیثانیه تا زمان ۱۰میلیثانیه مشغول اجرای الگوریتم میباشد، نمیتواند جسم متخاصم را تشخیصدهد. تا زمان ۱۰میلیثانیه که اجرای الگوریتم به پایان میرسد، بافرضاینکه جسم متخاصم در دید رادار میباشد، رادار میتواند آنرا تشخیصدهد و در زمان ۲۰میلیثانیه به سیستم دیگر گزارشدهد. اما باتوجهبه شکل مشاهده میشود از زمانیکه جسم موردنظر ظاهرشد تازمانیکه گزارش به سیستم دیگر رسید، ۱۶میلیثانیه طول کشید که این خواسته مسئله ما یعنی حداکثر تاخیر ۱۰میلیثانیه را برآورده نمیکند.
پس راهحل چیست؟ راهحل این است که زمان اجرای الگوریتم را باید کمتر کنیم و دوباره همین سناریو را تکرار کنیم. اینبار زمان اجرای الگوریتم را ۵میلیثانیه درنظر میگیریم و سناریو را تکرار میکنیم.
باتوجهبه شکلبالا در زمان ۰میلیثانیه رادار هیچ جسم متخاصمی را مشاهده نمیکند و در زمان ۲میلیثانیه جسم متخاصم برای اولینبار ظاهر میشود، اما چون رادار از زمان ۰میلیثانیه تا زمان ۵میلیثانیه مشغول اجرای الگوریتم میباشد، نمیتواند جسم متخاصم را تشخیصدهد. تا زمان ۵میلیثانیه که اجرای الگوریتم به پایان میرسد، بافرضاینکه جسم متخاصم در دید رادار میباشد، رادار میتواند آن را تشخیصدهد و در زمان ۱۰میلیثانیه به سیستم دیگر گزارشدهد. باتوجهبه شکلبالا مشاهده میشود از زمانیکه جسم موردنظر ظاهر شد تازمانیکه گزارش به سیستم دیگر رسید، ۸میلیثانیه طول کشید که این زمان خواسته مسئله ما را برآورده کند.
حال که به خواسته مسئله رسیدیم باید تعیینکنیم که این مسئله با چه ابزاری قابل پیادهسازی میباشد.
ما باید ۱۰میلیون دستور را در زمان ۵میلیثانیه اجراکنیم، یعنی باید سرعت موردنظر ۲GHZ باشد. فرضکنید ما دو نوع میکروکنترلر AVR و ARM در دسترس داریم که حداکثر سرعت معمول نوع اول ۲۰MHZ و حداکثر سرعت نوع دوم ۵۰۰MHZ میباشد اما سرعت موردنیاز ما را هیچکدام از این دو نوع میکروکنترلر برآورده نخواهد کرد، پس ما نمیتوانیم از این میکروکنترلرها استفادهکنیم و بهناچار باید سراغ FPGA برویم.
نکتهای که اینجا باید ذکر شود این است که درمورد FPGA هزینه و زمان طراحی نیز باید درنظرگرفته شود، چونکه این نوع از تراشهها قیمتشان نسبتبه سایر تراشهها بسیار بالاتر است و زمانیکه صرف طراحی میشود نیز بسیار بیشتر از زمان طراحی با میکروکنترلرها میباشد، پس عاقلانه میباشد که بدون بررسی تخصصی سراغ FPGA نیاییم.
در این قسمت قصد داریم درمورد منابع داخلی FPGA نیز صحبت کنیم و بحث ماهیت و ساختار را به پایان برسانیم.
منابع داخلی FPGA بهصورتکلی به دو دسته کلی زیر تقسیم میشوند:
- منابع عمومی
- منابع اختصاصی
منابع اختصاصی منابعی هستند که فقط برای یک هدف یا کار خاص درون FPGA درنظرگرفتهشدهاند، اما درمقابل منابع عمومی غالبا شامل حافظههایی هستند که میتوان برای انجام کارهای مختلف از آنها بهره جست.
منابع عمومی شامل فلیپفلاپها یا همان حافظهها و یکسری Logic Block یا (Logic Cell (LC میباشد.
شکلبالا نمایی از یک LC میباشد، همانطورکه مشاهده میکنید LUT بخشی از LC میباشد و با تقریب میتوان گفت که LC و LUT معادلهمدیگر هستند.
منابع اختصاصی شامل هر منبعی بهجز فلیپفلاپ و LUT میباشد، از این نوع منابع میتوان به ضربکنندهها، منابع کلاک، ورودی_خروجیها و شیفت رجیسترها اشارهکرد.
درنهایت این منابع توسط سیمها و اتصالات قابل برنامهریزی بههم متصل میشوند که البته این اتصالات خود نیز از منابع داخلی FPGA میباشند.
در شکلزیر می توانید منابع داخلی و نحوه قرارگیری آنها در کنار همدیگر را مشاهدهکنید.
در قسمت سوم آموزش FPGA سراغ نرمافزار و زبان توصیف سختافزار یعنی نرمافزار ISE و زبان VHDL خواهیمرفت. با ما همراه باشید.
منبع: سیسوگ