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

1 فروردین, 1395

ماهیت و ساختار FPGA

تصور خیلی از افراد هنگام کار با FPGAها این است که با تراشه‌ای مثل AVR یا ARM سروکار دارند؛ اما ماهیت و ساختار FPGA چیزی کاملا متفاوت با تمام پردازنده‌ها است.

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

More...

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

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

برای آشنایی با منابع دیجیتالی دیگری گه در FPGAها وجود دارند می‌توانید قسمت دوم این برنامه ویدئویی با نام FPGA چیست؟ منابع سخت‌افزاری درون FPGA را مشاهده کنید.

ویدئو یا متن؟

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

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

بسیار مهم است قبل از این­که شروع به کار با FPGA کنید، با ماهیت آن آشنا شوید.

بسیاری از افرادی که سال‌ها با FPGA کار کرده‌اند، هنوز درک صحیحی از ماهیت FPGA ندارند.

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

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

FPGA چیست؟

ظاهر FPGA مثل IC یا هر تراشه­‌ی دیگری است، اما چیزی که فرق دارد درون FPGA است.

در ادامه ماهیت و ذات FPGA، و همچنین نحوه‌ی عملکرد آن را به کمک یک مثال توضیح خواهم داد.

فرض کنید تابعی به صورت زیر داریم:

F = AB + AB̅C̅ + B̅C

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

روش اول: استفاده از گیت‌های منطقی

در تصویر زیر، شما جدول درستی یا صحت تابعی را می‌بینید که خروجی آن به ازای تمام ترکیب‌های ورودی نوشته شده است:

جدول درستی یا صحت تابع منطقی

جدول درستی یا صحت تابع منطقی

مثلأ اگر ورودی ۰۰۰ باشد، خروجی برابر با ۰ می‌شود.

ما می‌توانیم این تابع سه متغیره را به کمک گیت‌های منطقی پیاده‌سازی کنیم. در تصویر بالا مدار پیاده‌سازی شده این تابع را نیز مشاهده می‌کنید.

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

اگر روی این مدار کمی دقت کنید، مشاهده می‌کنید که اگر در ورودی آن ۱۰۱ قرار داده شود، در خروجی آن ۱ ظاهر خواهد شد.

روش دوم: استفاده از حافظه‌ها

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

چون خروجی این تابع، یک بیتی است، ما نیاز به حافظه‌ای داریم که خانه‌هایش یک بیتی باشد و چون سه متغیر می‌تواند هشت ترکیب ورودی برای ما ایجاد بکند، بنابراین به حافظه‌ای نیاز داریم که هشت خانه داشته باشد.

حافظه‌ای که هشت خانه داشته باشد، سه خط آدرس خواهد داشت.

برای پیاده‌سازی تابع موردنظر از طریق این حافظه، ورودی‌های A، B و C را به خطوط آدرس این حافظه متصل می‌کنیم.

خروجی دیتای این حافظه، همان خروجی F تابع خواهد بود.

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

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

پیاده‌سازی توابع منطقی با استفاده از حافظه

پیاده‌سازی توابع منطقی با استفاده از حافظه

اکنون اگر همان ترکیب ورودی مثال قبل، یعنی ۱۰۱ را به ورودی این حافظه اعمال کنیم، خانه‌ی شماره پنج که با رنگ خاکستری نشان داد شده است، انتخاب می‌شود و محتوای آن به خروجی ارسال می‌شود.
در جدول صحت انتظار داشتیم که خروجی در این لحظه یک باشد، در این حافظه هم وقتی که در ورودی‌اش ۱۰۱ را قرار دهیم، خروجی ۱ انتخاب می‌شود و به خروجی منتقل می‌شود.

Look-Up Table یا LUT

به این حافظه‌های کوچک که برای پیاده‌سازی توابع منطقی استفاده می‌شود، در اصطلاح Look-Up Table یا LUT گفته می‌شود.

در یک FPGA، هزاران Look-Up Table وجود دارد.

یک تابع بزرگ، تقسیم به توابع کوچک‌تری می‌شود و هر کدام از این توابع کوچک‌تر، درون یک Look-Up Table پیاده‌سازی می‌شود و نهایتأ این Look-Up Table ها به نحو مناسب به هم متصل می‌شوند تا مدار اصلی ما را ایجاد کنند.

مدار Look-Up Table ها در FPGA کمی متفاوت است.در شکل زیر می‌توانید نحوه‌ی پیاده‌سازی Look-Up Table ها را در FPGA مشاهده کنید:

پیاده‌سازی توابع منطقی با استفاده از LUTهای FPGA

پیاده‌سازی توابع منطقی با استفاده از LUTهای FPGA

همانطور که می‌بینید LUTها دارای یک بخش حافظه هستند. مقادیری که در Look-Up Table وجود داشت، در این حافظه‌ها هم قرار داده شده است.

در LUTها همچنین از تعدادی مالتی­‌پلکسرهای ۱*۲ استفاده شده است و خطوط کنترلی این مالتی­‌پلکسرها همان ورودی‌­های تابع هستند.

در مثال قبلی، ورودی ۱۰۱ را به حافظه اعمال کردیم، در نتیجه خانه‌ی پنجم انتخاب شد و محتوای خانه پنجم که ۱ بود به خروجی منتقل شد.

در مورد Look-Up Table که در FPGA پیاده­­‌سازی می‌شود هم می‌­توانیم ورودی ۱۰۱ را اعمال کنیم و  با توجه به اینکه به ورودی کنترلی هر کدام از مالتی‌­پلکسرها، کدام یک از مقادیر ۱ یا ۰ اعمال شود، یکی از دو ورودی آن‌ها به خروجی منتقل می‌شود.

مسیرهای نقطه­‌چین قرمز رنگی را که در شکل بالا می‌بینید، مسیر انتقال دیتا با توجه به ورودی‌ای است که در مثال مذکور می‌بینید.

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

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

و در مالتی­‌پلکسر مرحله‌ی سوم، چون ورودی کنترلی­ ۱ است، ورودی دوم به خروجی منتقل می‌شود.

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

سیم‌بندی بین Look-Up Tableها درون FPGA

برای اتصال این Look-Up Table ها به یکدیگر، نیاز به سیم داریم، اما ما با یک IC سروکار داریم و نمی‌توانیم این سیم‌­ها را از بیرون به داخل IC وارد کنیم.

 بنابراین همانطور که در شکل زیر می‌بینید از قبل، تعداد زیادی سیم به صورت منظم بین Look-Up Tableها تعبیه شده­‌اند که می­‌توانیم این سیم‌­ها را به نحو دلخواه به هم متصل کنیم.
شبکه‌ی منظمی از سیم‌های درون FPGA که در بین LUTها قرار دارند

شبکه‌ی منظمی از سیم‌های درون FPGA که در بین LUTها قرار دارند

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

و در جایی که سیم­‌ها به کنار LUT ها می‌­­رسند، سوئیچ­‌هایی وجود دارد که با برنامه­‌ریزی آنها می‌­توانیم این سیم‌­ها را به نحو مناسب به LUT ها متصل کنیم.

بنابراین، هر کدام از این LUT ها را به نحو دلخواه به یکدیگر متصل می‌کنیم تا مدار نهایی را پیاده‌­سازی بکنیم.

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

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

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

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

آیا برنامه ویدئویی FPGA چیست؟ - ماهیت و ساختار FPGA برای شما مفید بود؟

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

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

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

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

احمد ثقفی

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

  • ممنون از توضیحتون، فقط اینکه در شکل LUT in FPGA ، فک کنم سلکتور A و C را جابجا گذاشتید، بیت اول جدول درستی C هست پس سلکتور ستون MUX اول باید C باشه.
    البته چون حالت ۱۰۱ را بررسی کردید مشکلی پیش نیومده.

  • با سلام و تشکر بابت توضیحات دقیق، مختصر و شیوای شما. درباره آدرس کنترل مالتی‌پلکسرها به نظرم باید A و C جابجا شوند. یعنی کنترل ۴ مالتی‌پلکسر اول از سمت چپ که زیر هم قرار گرفته‌اند به c و کنترل مالتی‌لکسر سمت راستی به A وصل شود.

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

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

    >