توسط احمد ثقفی 

3 فروردین, 1395

تفاوت FPGA با پردازنده‌ها

احتمالا شما هم مانند بسیاری از افرادی که شروع به یادگیری FPGA می‌کنند، قبلا با یکی از پردازنده‌ها مثل ARM یا AVR یا DSP کار کرده‌اید.

در این صورت ممکن است با همان دیدگاه، مطالعه در مورد FPGAها را شروع کنید که البته این باعث ایجاد مشکلات زیادی برای شما خواهد شد.

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

More...

در این برنامه ویدئویی، در مورد مهمترین تفاوت‌های موجود بین FPGAها و پردازنده‌ها صحبت می‌کنم. 

شما یاد خواهید گرفت چرا در هنگام کار با FPGAها، برعکس کار با پردازنده‌ها، در حال برنامه‌نویسی نیستیم؛ بلکه در حال ساخت یک سخت‌افزار دیجیتال هستیم.

یاد خواهید گرفت چرا سرعت FPGAها اینقدر نسبت به پردازنده‌ها بیشتر است.

و نهایتا با تفاوت کمی و کیفی IOهای FPGA نسبت به IOهای پردازنده‌ها آشنا خواهید شد.

ویدئو یا متن؟

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

برای دانلود نسخه با کیفیت این ویدئو، روی دکمه زیر کلیک کنید:

به احتمال زیاد تا به حال با مسائلی روبه‌رو شدید که از لحاظ ظاهری بسیار شبیه به هم بودند و در ابتدا وجود هیچ تفاوتی در آن‌ها احساس نمی‌شد.

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

در این مقاله، ما نیز با همین موضوع روبه‌رو هستیم و می‌خواهیم دو ساختار بسیار مهم و معروف در الکترونیک به اسم FPGA و پردازنده را مورد بررسی قرار دهیم.

تفاوت‌های ساختاری FPGA و پردازنده

احتمالا شما هم از پرداز­ند­ه‌­هایی مثل میکروکنترلر AVR ،ARM و یا پرداز­ند­ه‌­ی DSP استفاده کرده‌اید­.

اگر تا به حال با هیچ کدام از موارد فوق کار نکرد­ه باشید، حد­اقل در کامپیوتر برنامه‌­نویسی کرده‌ا­ید­.

به طور مثال می‌توان به برنامه‌نویسی با یکی از زبان­‌ها­ی BASIC­ ­،C یا PASCAL اشاره کرد.

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

وجود همین تفکرات است که مشکلاتی را برای شما ایجاد خواهد کرد.

کسی که با FPGA کار می­‌کند، باید دید­گاه طراحی سخت­‌افزار داشته باشد و از تفاوت آن با برنامه­‌نویسی­ آگاه باشد.

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

در مقالات قبلی راجع به ماهیت و ساختار FPGA صحبت کردیم­.

نکته‌ی قابل ذکر این است که ماهیت و ساختار FPGA، خود بیان­‌کنند­ه‌­ی تفاوت­‌ها­ی اصلی آن با پرداز­ند­ه‌­ها است.

با توجه به شناختی که در مقالات قبل از ماهیت و ساختار­ FPGAها کسب کرده‌اید، در ادامه تفاوت‌های FPGAها با پرداز­ند­ه‌ها­ را توضیح خواهم داد.

وجود یا عدم وجود CPU در FPGA و پردازنده

اولین تفاوت پردازند­ه­‌ها با FPGA­ها این است که وقتی با پردازند­ه‌­ها کار می‌­کنید­، در حقیقت با یک CPU یا واحد پردازش مرکزی کار می‌­کنید که دستورات مشخصی برای آن از قبل تعریف شده است و می‌تواند هر کدام از آن‌ها را به نحو مناسب اجرا کند­.

اما در هنگام کار با FPGA­ها­، در ابتدا­ی کار­، هیچ سخت­‌افزار مشخصی که برای شما عملیات خاصی را انجام بدهد، وجود ندارد. و شما تنها با دریا­یی از منابع دیجیتالی سر و کار دار­ید­.

تفاوت FPGAها با پرداز­ند­ه‌­ها

تفاوت FPGA با پرداز­ند­ه - وجود یا عدم وجود CPU

طراحی نرم‌افزار یا سخت‌افزار؟

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

مثلا­ می‌توانید از دستور­اتی که برای پرداز­ند­ه تعریف شد­ه است استفاده بکنید و با تعداد زیاد­ی از آن‌ها که به صورت ترتیبی پشت سر هم می­‌نویسید، یک عملکرد خاصی را برای پرداز­ند­ه تعریف کنید­.

اما در موردFPGAها دستور­ی وجود ندارد چون CPUای هم در درون FPGA­ وجود ندار­د.

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

با توجه به توضیحات ذکر شده، هنگام کار با پرداز­ند­ه­‌ها شما در حال طراحی یک نرم­‌افزار، ولی در هنگام کار با FPGA­ها شما در حال طراحی یک سخت‌­افزار هستید­.
تفاوت FPGAها با پرداز­ند­ه‌­ها

تفاوت FPGA با پرداز­ند­ه - نرم‌افزار یا سخت‌افزار

تعداد عملیاتی که در یک لحظه از زمان می‌تواند انجام بشود

تفاوت بسیار مهم دیگری که بین پرداز­ند­ه‌­ها و FPGA­ها وجود دار­د این است که وقتی با پرداز­ند­ه کار می‌کنید­، در هر لحظه از زمان تنها می‌توانید یک عملیات ریاضی یا منطقی را انجام دهید­، اما در مورد FPGA­ها می‌توانید تعداد نا­محدود­ی از عملیات منطقی یا ریاضی را انجام دهید­.

این موضوع را­، با توجه به آشنایی­ که با ساختار FPGA­ها در مقالات قبل بدست آور­ده‌ا­ید، به راحتی می‌توانید متوجه بشوید.

در FPGA­ها­، تعداد زیاد­ی LUT وجود دار­د که شما می‌توانید به کمک آن‌ها یک عمل منطقی یا ریاضی را انجام دهید­.

بنابراین می‌توانید یک عمل ریاضی یا منطقی را به کمک تعداد­ی از LUT­ها پیاده­‌ساز­ی کنید­. در کنار آن و به کمک تعداد دیگری از LUT­ها، می‌توانید عمل منطقی یا ریاضی دیگری را نیز پیاده‌­ساز­ی کنید، که این دو عمل منطقی، بدون اینکه به هم مربوط باشند به صورت موازی و همزمان انجام می‌شوند­.
تفاوت FPGAها با پرداز­ند­ه‌­ها

تفاوت FPGA با پرداز­ند­ه - تعداد عملیات انجام شده در یک لحظه

تعداد پورت‌­ها­ی ورودی-خروجی

آخر­ین تفاوت بین پرداز­ند­ه‌­ها و FPGA­ها را می‌توانیم در تعداد پورت‌­ها­ی ورودی-خروجی این دو تراشه خلاصه بکنیم­.

از پورت‌­ها­ی ورود­ی-خروجی برای ارتباط با قطعات جانبی استفاده می‌شود.

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

اما درمورد FPGA‌ها­، معمولا­ تعداد پورت‌­ها بسیار زیاد است. البته­ FPGAها انواع مختلفی دار­ند و هر کدام از این انواع هم تعداد پورت­‌ها­ی متفاوتی دار­ند­.

اما در مجموع تعداد پورت‌­ها­ی ورودی-خروجی FPGA­ها­، نسبت به پرداز­ند­ه‌­ها بسیار بیشتر است­.

تفاوت FPGAها با پرداز­ند­ه‌­ها

تفاوت FPGA با پرداز­نده - تعداد پورت‌های ورودی-خروجی

با توضیحاتی که تا این بخش از مقاله ارائه داده‌ام و با بینشی که نسبت به ماهیت FPGA­ها و تفاوت آن‌ها با پرداز­ند­ه­‌ها بدست آور­د­ید­، می‌توانیم­ اکنون­ به سوال مهم زیر پاسخ دهیم:

چرا سرعت FPGA­ها نسبت به پرداز­ند­ه­‌ها بسیار بیشتر است­؟

پاسخ به این سوال دو دلیل عمده و اساسی دارد­.

دلیل اول: انجام تعداد عملیات نامحدود در یک لحظه و به صورت موازی

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

برای اینکه این موضوع بیشتر برای شما روشن شود، می‌توانید به این دو شکلی که در زیر وجود دار­د، توجه بکنید­:

نحوه‌ی عملکرد FPGA و پردازنده به صورت مفهومی

نحوه‌ی عملکرد FPGA و پردازنده به صورت مفهومی

در تصویر سمت چپ یک پرداز­ند­ه را می­‌بینید که قرار است دستور­اتی را رو­ی دیتا­ها­ی مشخصی انجام بدهد.

مثلا­ در این پرداز­ند­ه ابتدا قرار­ است که دستور C1 رو­ی دیتا­ی D1 بعد دستور C2 رو­ی دیتا­ی D2 و به همین ترتیب دستورات بعد­ی به کمک CPU انجام شود­.

همان­طور که گفتیم این CPU در هر لحظه از زمان، فقط می‌تواند یکی از این دستورات را اجرا بکند.

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

برای پیاده‌­ساز­ی همین دستورات به کمک FPGA، می‌توانیم به جا­ی اینکه از یک CPU استفاده بکنیم، برای هر کدام از دستورات CPU، یک سخت­‌افزار جدا­گانه طراحی بکنیم­.

مثلا­ برای دستور C1 به کمک تعداد­ی از LUT­ها یک سخت­‌افزار طراحی بکنیم، و برای دستور C2 به کمک تعداد دیگری از LUT­ها یک دستور دیگر را طراحی بکنیم­.

آن وقت می‌توانیم دیتا­ی D1 و D2 را به صورت همزمان به این سخت‌­افزار­ها اعمال کنیم و این دو عملیات را به صورت همزمان انجام بدهیم­.

بنابراین­ سرعت انجام کل عملیات نسبت به انجام این عملیات به کمک CPU یا پرداز­ند­ه بسیار بیشتر می‌شود­.

البته­ این نکته را باید در نظر داشت که عمل موازی­ ساز­ی را فقط زمانی می‌توانید انجام دهید که انجام عملیات C2 نیاز به نتیجه‌­ی عملیات C1 نداشته باشد.

یعنی­ عملیات‌­ها نسبت به هم وابستگی نداشته باشند­، اگر وابستگی وجود داشته باشد، مجبورید آن‌ها را به صورت ترتیبی پیاده‌­سازی کنید­.

در غیر این­صورت­، می‌توانید آن‌ها را به صورت موازی پیاده­‌سازی کنید­ و سرعت کار را بسیار بیشتر بکنید­.

البته توجه داشته باشید که این یک مثال مفهومی است و این موازی­ ساز­ی تنها در سطح عملیات کوچک نیست، بلکه­ شما الگوریتم‌­ها­ی بسیار بزرگ را هم می‌توانید به صورت موازی پیاده‌­سازی کنید.

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

دلیل دوم: منعطف بودن معماری و سخت‌افزار و ثابت نبودن آن

دلیل دوم سرعت زیاد FPGA­ها نسبت به پرداز­ند­ه‌­ها­، وجود معماری و سخت‌­افزار ثابت از پیش طراحی شده‌ در پردازنده‌ها است، که توانایی هیچ تغییر­ی را در آن ندارید.

اما وقتی که با FPGA کار می­‌کنید، می‌توانید برای هر عملکرد­ی­، سخت­‌افزار بهینه­‌ی آن عملکرد را طراحی کنید.

مثلا فرض کنید که قرار­ است یک فیلتر دیجیتال طراحی کنید­، اگر قرار باشد که با یک پرداز­ند­ه این کار ر­ا انجام بدهید، ابتدا باید فرمول آن فیلتر دیجیتال را به کمک دستورات از پیش تعیین شد­ه برای آن پرداز­ند­ه، پیاده­‌ساز­ی کنید­.

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

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

آیا برنامه ویدئویی تفاوت FPGA با پردازنده‌ها چیست برای شما مفید بود؟

لطفا نظرتان را در مورد این برنامه در پایین همین پست با دیگران به اشتراک بگذارید. همچنین با کلیک روی هر کدام از دکمه‌های اشتراک گذاری ابتدای این مطلب و به اشتراک‌گذاری آن در شبکه‌های اجتماعی می‌توانید افراد بیشتری را در یادگیری این مطالب سهیم کنید.

کانال تلگرام آموزش FPGA از صفر

برای عضویت در کانال تلگرام و دسترسی به آموزش‌های بیشتر و اطلاع سریع از زمان انتشار آموزش‌ها و تخفیف‌های ویژه، روی دکمه زیر کلیک کنید:

درباره نویسنده:

احمد ثقفی

شاید به این موضوعات نیز علاقه داشته باشید:

{"email":"Email address invalid","url":"Website address invalid","required":"Required field missing"}

۷ تکنیک پیشرفته کدنویسی برای FPGA

>