HEXALINX
535 subscribers
147 photos
4 files
74 links
این آغاز ماجراجویی شماست...
آموزش رایگان برنامه نویسی FPGA و ZYNQ و ابزارهای طراحی XILINX

پرسش و پاسخ:
@ask_linx

آدرس سایت:
hexalinx.com

آدرس کانال آپارات:
aparat.com/hexalinx

آدرس اینستاگرام:
insatagram.com/hexalinx_go
Download Telegram
#Essentials

🔖 در این مقاله نحوه پیاده سازی یک جمع کننده را با استفاده از LUT ها بررسی می کنیم، توجه داشته باشید که عملیات جمع در کدنویسی Verilog و VHDL با عملگر + انجام می شود. اما مفهومی که در ادامه آموزش داده می شود نحوه نگاشت یک جمع کننده به CLB های درون تراشه FPGA است. آگاهی از این مساله باعث می شود، طراح کنترل بهتری روی منابع مصرفی روی تراشه داشته باشد.

از درس مدار منطقی بیاد داریم که یک جمع کننده n بیتی نیاز به n بلوک جکع کننده کامل دارد. یک جمع کننده کامل دو ورودی a و b را با ورودی نقلی cin جمع می کند و خروجی جمع sout و cout را تولید می کند. با فرض اینکه

P = a xor b
آنگاه برای sout و cout داریم:


Sout = (a xor b) xor cin = p xor cin

در شکل بالا نحوه پیاده سازی یک جمع کننده کامل با استفاده از یک LUT و زنجیره نقلی اطراف آن نشان داده شده است. واضح است که برای انجام یک جمع n بیتی، لازم است n بلوک کنار هم قرار بگیرند و خرجی نقلی i - ام به ورودی نقلی i+1 - ام متصل شود. ضمننا ورودی نقلی اولین جمع کننده کامل صفر است.

سوالی که مطرح می شود این است که علت قرار دادن زنجیره بیت نقلی در CLB ها (که هدف اصلی آن مشارکت در عملیات جمع است) بلافاصله بعد از LUT ها چیست؟ پیش تر اشاره کردیم که هر LUT دو خروجی مستقل O5 و O6 دارد که می توانند همزمان دو تابع 5 ورودی با ورودی های مشترک را پیاده سازی کنند. چرا مقدار cout با یکی از خروجی های این LUT ها تولید نمی شود؟

پاسخ به این سوال را باید در بحث مسیرهای بحرانی یا #CRITICAL_PATH جستجو کرد، اگر با مسیرهای بحرانی آشنا نیستید، لازم نیست نگران باشید، به زبان ساده مسیرهای بحرانی به طولانی ترین مسیرهای موجود روی تراشه اطلاق می شود. این مسیرهای طولانی باعث افزایش تاخیر انتشار و در نتیجه کاهش سرعت و کارایی مدار می شوند، کنترل این مسیرها یک تکنیک بسیار مهم در طراحی و از الزامات یک پیاده سازی خوب است، در آینده به شکل کاملتری این مساله توضیح داده می شود، پس اجازه بدهید به بحث اصلی برگردیم و پاسخمان را کمی بیشتر توضیح بدهیم. در عمل زنجیره بیت نقلی برای بالابردن سرعت محاسبات مورد استفاده قرار می گیرد، به لطف وجود زنجیره نقلی برای یک جمع کننده n بیتی، از n عدد LUT که به صورت ستونی زیر هم قرار گرفته اند استفاده می شود. مسیر بحرانی این مدار برابر با طول زنجیره نقلی می شود که خروجی cout را تولید می کند. واضح است که تاخیر جمع کننده در این حالت به شدت کاهش می یابد و مدار حاصل می تواند در فرکانس های بسیار بالا کار کند، حتی در مواردی که جمع کننده های بزرگ هم نیاز داشته باشیم بازهم کارایی مدار بسیار بالا خواهد بود.

در صورتی که زنجیره نقلی وجود نداشت و از LUT ها جهت تولید cout استفاده می شد، تاخیر نقلی خروجی ناشی از n عدد LUT بعلاوه مسیرهای routing مورد نیاز برای برقراری ارتباط بین آن ها بسیار زیاد می شد و با افزایش تعداد بیت ها فرکانس و کارایی مدار به شدت افت می کرد.


https://www.researchgate.net/profile/Raffaele_Giordano4/publication/291019054/figure/fig4/AS:536738776838151@1504979904869/The-CARRY4-primitive-available-in-7-Series-Xilinx-FPGAs.png

@Hexalinx