احتمالا شما هم مانند بسیاری از افرادی که شروع به یادگیری 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ها دستوری وجود ندارد چون CPUای هم در درون FPGA وجود ندارد.
بنابراین شما با اتصال مناسب منابع سختافزاری موجود در FPGAها میتوانید یک عملکرد خاص را برای FPGA ایجاد بکنید.
با توجه به توضیحات ذکر شده، هنگام کار با پردازندهها شما در حال طراحی یک نرمافزار، ولی در هنگام کار با FPGAها شما در حال طراحی یک سختافزار هستید.تعداد عملیاتی که در یک لحظه از زمان میتواند انجام بشود
تفاوت بسیار مهم دیگری که بین پردازندهها و FPGAها وجود دارد این است که وقتی با پردازنده کار میکنید، در هر لحظه از زمان تنها میتوانید یک عملیات ریاضی یا منطقی را انجام دهید، اما در مورد FPGAها میتوانید تعداد نامحدودی از عملیات منطقی یا ریاضی را انجام دهید.
این موضوع را، با توجه به آشنایی که با ساختار FPGAها در مقالات قبل بدست آوردهاید، به راحتی میتوانید متوجه بشوید.
در FPGAها، تعداد زیادی LUT وجود دارد که شما میتوانید به کمک آنها یک عمل منطقی یا ریاضی را انجام دهید.
بنابراین میتوانید یک عمل ریاضی یا منطقی را به کمک تعدادی از LUTها پیادهسازی کنید. در کنار آن و به کمک تعداد دیگری از LUTها، میتوانید عمل منطقی یا ریاضی دیگری را نیز پیادهسازی کنید، که این دو عمل منطقی، بدون اینکه به هم مربوط باشند به صورت موازی و همزمان انجام میشوند.تعداد پورتهای ورودی-خروجی
آخرین تفاوت بین پردازندهها و 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 با پردازندهها چیست برای شما مفید بود؟
لطفا نظرتان را در مورد این برنامه در پایین همین پست با دیگران به اشتراک بگذارید. همچنین با کلیک روی هر کدام از دکمههای اشتراک گذاری ابتدای این مطلب و به اشتراکگذاری آن در شبکههای اجتماعی میتوانید افراد بیشتری را در یادگیری این مطالب سهیم کنید.