تصور خیلی از افراد هنگام کار با 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ها دارای یک بخش حافظه هستند. مقادیری که در 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ها قرار دارند
در جاهایی که سیمها از روی هم عبور کردهاند، شبکهای از سوئیچها وجود دارد که با پیکرهبندی آنها میتوانیم سیمها را به هم متصل کنیم.
و در جایی که سیمها به کنار LUT ها میرسند، سوئیچهایی وجود دارد که با برنامهریزی آنها میتوانیم این سیمها را به نحو مناسب به LUT ها متصل کنیم.
بنابراین، هر کدام از این LUT ها را به نحو دلخواه به یکدیگر متصل میکنیم تا مدار نهایی را پیادهسازی بکنیم.
بنابراین در نهایت میتوان گفت که FPGA در ابتدا و به خودی خود، هیچ سختافزار دیجیتالی را برای ما ارائه نمیدهد، بلکه در ابتدا شامل دریایی از منابع دیجیتالی است.
این منابع دیجیتالی تا مقداری که الان یاد گرفتهایم، همان LUT ها و سیمهایی هستند که ما با پر کردن مناسب LUT ها و سپس اتصال مناسب LUT ها به یکدیگر میتوانیم هر مدار دیجیتالی را، هر چقدر هم که بزرگ باشد، پیادهسازی کنیم.
اگر این مقاله را به خوبی مطالعه کرده باشید، اکنون به خوبی با نحوهی پیادهسازی توابع منطقی در درون FPGA آشنا هستید.همچنین یک سری منابع دیجیتالی را نیز شناختید. البته در FPGA منابع دیجیتالی مهم دیگری هم وجود دارند که در برنامهی بعدی راجع به آن صحبت خواهیم کرد تا شما هرچه بیشتر با ذات و ماهیت FPGA آشنا شوید.
آیا برنامه ویدئویی FPGA چیست؟ - ماهیت و ساختار FPGA برای شما مفید بود؟
لطفا نظرتان را در مورد این برنامه در پایین همین پست با دیگران به اشتراک بگذارید. همچنین با کلیک روی هر کدام از دکمههای اشتراک گذاری ابتدای این مطلب و به اشتراکگذاری آن در شبکههای اجتماعی میتوانید افراد بیشتری را در یادگیری این مطالب سهیم کنید.
مفید بود.
سلام.مثل همیشه عااااااااااالی….خداخیرتون بده
سپاس از توضیحات خوب شما
مفید و مختصر
ممنون از توضیحتون، فقط اینکه در شکل LUT in FPGA ، فک کنم سلکتور A و C را جابجا گذاشتید، بیت اول جدول درستی C هست پس سلکتور ستون MUX اول باید C باشه.
البته چون حالت ۱۰۱ را بررسی کردید مشکلی پیش نیومده.
خواهش میکنم. ممنون از دقت شما. بله جای این دو باید عوض شوند.
موفق باشید.
یه سوال هم داشتم که معماری و طرز کار clb های mux-based چگونه هست؟
با سلام و تشکر بابت توضیحات دقیق، مختصر و شیوای شما. درباره آدرس کنترل مالتیپلکسرها به نظرم باید A و C جابجا شوند. یعنی کنترل ۴ مالتیپلکسر اول از سمت چپ که زیر هم قرار گرفتهاند به c و کنترل مالتیلکسر سمت راستی به A وصل شود.
سلام، خواهش میکنم.
ممنون از دقت شما. بله جای این دو باید عوض شوند.
موفق باشید.