در بخش قبل، ساختار و ماهیت FPGAها مورد بررسی قرار گرفت و همانطور که گفته شد، در طراحی با FPGAها میتوان به کمک منابع پایه دیجیتالی، انواع مدارات منطقی را طراحی کرد. اما این ساختار ویژه FPGAها باعث چه تفاوتهایی با پردازندهها میشود؟ در این بخش، به بیان تفاوت FPGA با پردازندهها پرداخته و در مورد نقاط قوت و ضعف هر کدام صحبت خواهم کرد.
More...
تفاوت FPGA با پردازندهها
اولین برتری FPGAها نسبت به پردازندهها سرعت بسیار بیشتر آنها در انجام روتینهای مختلف پردازشی و کنترلی است. به طور معمول، یک الگوریتم مشخص را میتوان با سرعتی بسیار فراتر از یک پردازنده در FPGA پیادهسازی کرد. دو دلیل اصلی برای قابلیت انجام عملیات منطقی و ریاضی با سرعت زیاد در FPGAها وجود دارد.
اول، FPGAها میتوانند تعداد نامحدودی از عملیات مختلف را به صورت موازی و مستقل از یکدیگر انجام دهند. در صورتی که انجام الگوریتمهای مختلف یا حتی بخشهای مختلف یک الگوریتم مشخص به نتیجه بخشهای دیگر الگوریتم بستگی نداشته باشد، میتوان آنها را به صورت موازی انجام داد. این موضوع در پردازندهها قابل انجام نیست.
در پردازندهها یک هسته پردازشی (CPU) با دستورات مشخص وجود دارد و در هر لحظه تنها یک دستور قابل اجرا است. بنابراین برای اجرای یک الگوریتم باید آن را به کمک دستورات از پیش تعیین شده پردازنده بازتعریف نمود و پردازنده یک به یک آنها را اجرا میکند.
شکل زیر این موضوع را به طور مفهومی نشان میدهد. در این شکل قرار است دستور C1 برای دیتای D1 و دستور C2 برای دیتای D2 اجرا شود. در پردازنده در هر لحظه یکی از این دستورات روی دیتای مورد نظر اجرا میشود. اما در FPGA میتوان مدار را به صورت موازی به گونهای طراحی کرد که هر دو دستور به طور همزمان روی دیتای مورد نظر اجرا شوند.

فابلیت موازیسازی در FPGAها
دلیل دوم که باعث افزایش سرعت پردازش در FPGAها میشود، امکان طراحی اختصاصی برای هر الگوریتم خاص است. همانطور که پیشتر گفته شد، برنامهنویس یک پردازنده مجبور است هر الگوریتمی را فقط به کمک تعداد محدودی دستورات از پیش تعیین شده برای پردازنده مورد استفاده پیادهسازی کند. بنابراین انعطافی در بهینه کردن زمان اجرای الگوریتم ندارد، به جز اینکه تا حد امکان بخشهای مختلف الگوریتم را با تعداد دستورات کمتری بازتعریف کند. اما طراح دیجیتال با FPGA میتواند برای هر الگوریتم از ابتدا مداری طراحی کند که برای آن بهینه باشد. به عبارت دیگر میتوان گفت که طراح دیجیتال برای اجرای هر بخش از یک الگوریتم، یک CPU مخصوص و بهینه شده طراحی و پیاده سازی میکند.
چند نقطه ضعف FPGAها
به عنوان یک نقطه ضعف FPGAها باید به این نکته توجه داشت که پیادهسازی اختصاصی الگوریتمهای پیچیده ریاضی به کمک FPGAها، ممکن است منابع بسیار زیادی از FPGA را اشغال کند و در عمل نتوان تمام بخشهای پردازشی یک سیستم را به کمک آن پیادهسازی کرد. بنابراین معمولاً، الگوریتمهایی که پیچیدگی کم و یا متوسط دارند ولی نیاز به سرعت اجرای زیاد دارند به کمک FPGAها پیادهسازی میشوند و الگوریتمهای پیچیدهتر به کمک پردازندههای DSP که برای انجام الگوریتمهای پردازشی سیگنال دیجیتال اختصاصی شدهاند پیادهسازی میشوند.
از دیگر نقاط ضعف بکارگیری FPGAها در مقایسه با پردازندهها میتوان به طولانی بودن زمان پیادهسازی و عیبیابی آن اشاره کرد. اصولاً عیبیابی در طراحی دیجیتال با FPGAها فرآیندی زمانبر است و این در نهایت منجر به افزایش زمان انجام پروژهها و در نتیجه هزینه میشود. بنابراین در تقسیم وظایف پردازشی و کنترلی باید از ابتدا دقت لازم به عمل آید تا زمان و هزینه اضافی به پروژه تحمیل نشود.
برای آشنایی با مراحل تست و عیبیابی مدارات دیجیتال، این مقاله را بخوانید…
چه موقع از FPGAها استفاده کنیم؟
یک طراح دیجیتال قبل از پیادهسازی هر سیستمی باید تصمیم بگیرد که هر بخش از سیستم را چگونه و به کمک چه تکنولوژی پیادهسازی کند. از آنجاییکه قیمت FPGAها معمولاً نسبت به انواع مختلف پردازندهها بسیار گرانتر است، به صرفه نیست در جایی که میتوان مثلاً از یک پردازنده AVR یا DSP استفاده کرد، هزینه اضافی برای بکارگیری FPGAها پرداخت شود. ضمن اینکه همانطور که در بخش قبل گفته شد، طراحی و عیبیابی با FPGA خود زمان بیشتری نسبت به پردازندهها لازم دارد و این نیز به نوبه خود باعث افزایش هزینهها میشود. در نتیجه باید معیاری مناسب برای انتخاب تکنولوژی پیادهسازی داشته باشیم تا هم در زمان و هم در هزینه صرفهجویی شود.
برای آشنایی با نحوه انتخاب تکنولوژی مناسب پیادهسازی یک پروژ، این برنامه ویدئویی را ببینید…
بررسی زمان لازم برای انجام پردازشها
برای پاسخ به این پرسش، نیاز به بررسی دقیق مشخصات مورد انتظار هر سیستم است. FPGAها را معمولاً در سیستمهای بلادرنگ (real time) استفاده مینماییم. سیستمهای بلادرنگ باید قادر باشند اعمال پردازشی و کنترلی را با سرعت زیاد و در حد پدیدههای طبیعی انجام دهند. مثلاً یک سیستم رادار اکتیو، برای شناسایی اهداف، سیگنالهایی را ارسال کرده و به کمک انعکاسی که دریافت میکند به آشکارسازی اهداف میپردازد. چنین سیستمی باید قادر باشد سیگنالهای بازگشتی را با سرعت بسیار زیادی پردازش کند.
برای پیادهسازی این سیستم، طراح دیجیتال باید این پرسش را مطرح کند که برای انجام پردازشهای مرتبط با آشکارسازی اهداف چه حجمی از الگوریتمهای پردازشی را باید در چه مدت زمان انجام دهد. پاسخ به این پرسش حتی در سیستمهای مشابه میتواند جوابهای متفاوتی داشته باشد.
در مثال رادار اکتیو، اگر فرض کنیم که سیگنالها از سمت رادار هر یک میلیثانیه یک بار ارسال میشوند، به این معنی است که رادار بعد از دریافت انعکاسهای یک ارسال مدت یک میلیثانیه فرصت دارد تا الگوریتمهای پردازشی و کنترلی مورد نظر برای آشکارسازی را انجام دهد. حال باید بررسی نمود که آیا میتوان به کمک یک پردازنده مثل AVR یا DSP، این حجم از پردازش را در مدت یک میلیثانیه انجام داد یا خیر. در صورتی که پاسخ به پرسش اخیر منفی باشد، احتمالاً مجبور هستیم به سراغ استفاده از FPGA برویم.
در عمل برای تحلیل سیستمهای پردازشی بزرگتر، از یک واحد استاندارد برای بیان حجم پردازش مورد نیاز به نام FLOP استفاده میشود. FLOP یا عملیات ممیز شناور (Floating-Point Operation) مشخص میکند که یک الگوریتم پردازشی برای محاسبه یک مجموعه از ورودیها نیاز به انجام چند عمل ممیز شناور استاندارد دارد. مثلاً محاسبه یک الگوریتم FFTی N نقطهای نیاز به Nlog2N عملیات ممیز شناور دارد. بنابراین برای محاسبه یک FFTی ۱۲۸ نقطهای تعداد ۸۹۶ عمل ممیز شناور باید انجام شود.
طراح دیجیتال با محاسبه FLOP برای بخشهای مختلف الگوریتم پردازشی یک سیستم بزرگ، تعداد مجموع FLOP مورد نیاز را محاسبه میکند. در نهایت با توجه به نیازمندیهای یک پروژه خاص باید مشخص شود که این حجم از پردازش باید در چه مدت زمان انجام شود. از تقسیم حجم عملیات پردازشی لازم به مدت زمان لازم برای اجرای آن، کمیت مهم دیگری به نام FLOPS یا عملیات ممیز شناور در ثانیه (Floating-Point Operation per Second) به دست میآید که مستقیماً میتواند مشخص کند که چه پردازندهای برای پیادهسازی لازم است.
در مثال فوق، اگر لازم باشد که الگوریتم FFTی ۱۲۸ نقطهای در مدت زمان ۱۰۰ میکروثانیه انجام شود، مقدار FLOPS مورد نیاز برابر با ۹۶/۸ میلیون خواهد شد. در بعضی از کاربردها برای ایجاد FLOPS مورد نیاز ممکن است نیاز به استفاده همزمان از چندین پردازنده DSP و چند تراشه FPGA باشد.
آیا مقاله آشنایی با FPGA – تفاوت FPGA با پردازندهها برای شما مفید بود؟
لطفا نظرتان را در مورد این برنامه در پایین همین پست با دیگران به اشتراک بگذارید. همچنین با کلیک روی هر کدام از دکمههای اشتراک گذاری ابتدای این مطلب و به اشتراکگذاری آن در شبکههای اجتماعی میتوانید افراد بیشتری را در یادگیری این مطالب سهیم کنید.
با عرض سلام. مطالبتان بسیار عالی است. لطفا راجع به عملیات های floating poiit و fix point توضیحات بیشتری لطفا ارایه کنید. تشکر
سلام،
ممنون از شما. حتما در مقالهای جداگانه به این موضوع خواهم پرداخت.
سلام،
برای اطلاع در مورد نحوه پیادهسازی محاسبات اعشاری به کمک سیستم نمایش fixed-point میتوانید برنامه ویدئویی زیر را که اخیرا در سایت منتشر کردم مشاهده کنید:
برنامه ویدئویی پیادهسازی محاسبات اعشاری در FPGA
با تشکر مفید بود
سلام
تشکر از مطلبتون
سلام میشه بگید کلا این موارد که گفتید در مورد cpu core i7 هم صادق هستن در برابر fpgaها؟
سلام،
این موضوعات در مورد هر پردازندهای صادق است.
موفق باشید.
سلام بسیار روان و عالی توضیح دادید نظر بنده هم این است که در مورد floating point بیشتر توضیح دهید
موضوعی که همیشه برای تازه کارها یا حتی تحصیل کرده های رشته الکترونیک یک سوال می باشد .