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

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

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

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

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

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

1️⃣ دسته اول منابعی هستند که توسط تمامی ابزارهای سنتز قابل استنتاج هستند. مثل شیفیت رجیسترها #SRLs ، مالتی پلکسرهای عریض #F7 و #F8 ، زنجیره بیت نقلی #Carry_Chain ، بلوک های ضرب کننده #DSP_Blocks ، بافرهای سرتاسری کلاک #BUFG ، بافرهای ورودی خروجی ساده #IOBUF و بافرهای ورودی DDR یا #IDDR .

2️⃣ دسته دوم منابعی هستند که تنها توسط برخی از ابزارهای سنتز قابل فراخوانی هستند. مهمترین عناصر در این دسته،
بلوک های حافظه #Block_RAMs ، بافرهای سرتاسری خاص منظوره کلاک
همچون #BUFGCE هستن. علاوه بر این برخی از فانکشنالیتی های خاص در بلوک های ضرب کننده نیز ممکن است توسط ابزارهای سنتز قابل استنتاج باشد.

3️⃣ دسته سوم منابعی هستند که به هیچ وجه به صورت اتوماتیک توسط ابزارهای سنتز قابل استنتاج نیستند و تنها راه استفاده از آن ها استفاده از primitive های آماده داخل کتابخانه های شرکت سازنده و یا استفاده از IP Core ها است. از آن جمله می توان به اینترفیس های تفاضلی روی IO ها ، بافرهای خروجی DDR یا #ODDR ، بلوک های مدیریت کلاک #DCM و #PLL و بافرهای محلی کلاک همچون #BUFR و #BUFIO اشاره کرد.

❗️استفاده از primitive ها در برنامه نویسی HDL یک تکنیک بسیار مناسب برای فراخوانی منابع است و به شدت توسط سازندگانی تراشه های قابل برنامه ریزی توصیه شده است. در واقع primitive ها به صورت قطعه کدهای آماده و در قالب یک کامپوننت توسط طراح بین سایر کدهای HDL قرار داده می شوند و یک بخش خاص از تراشه را فراخوانی می کنند. به طور کلی به عمل فراخوانی و قرار دادن کامپوننت ها درون کدها instantiation گفته می شود.

@Hexalinx
#Intermediate
#BUFGCE, #BUFHCE

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


🔖 اگر با منابع کلاک درون تراشه‌های سری ۷ آشنا باشید حتما بافرهای کلاک را می‌شناسید و نام‌هایی مثل BUFGCE و ‌BUFHCE را شنیده‌اید. تقریبا در تمامی طراحی‌ها تعداد زیادی بافر از نوع BUFGCE و ‌BUFHCE وجود دارد که بدون استفاده رها می‌شوند. در حالت کلی هر BUFGCE می‌تواند کلاک مورد نیاز برای چندین ناحیه کلاک مختلف در تراشه را تامین کند و در نقطه مقابل هر ‌BUFHCE تنها قادر به تامین کلاک برای یک ناحیه کلاک است.
برای درک بهتر مساله اجازه بدهید مثالی از نحوه فعال یا غیرفعال کردن کلاک بزنیم. توجه شود که در اینجا مفهوم غیرفعال کردن کلاک برای یک یا چند فلیپ‌فلاپ بکار نمی‌رود و مساله کنترل کلاک بخشی از مدار پیاده‌سازی شده است. اگر تمامی مداراتی که نیاز است به طور دائم فعال باشند به شکل مناسبی با تعریف قیود مکانی در یک یا چند ناحیه کلاک محصور شده باشند، آنگاه یک BUFGCE می‌تواند برای تامین کلاک این نواحی به کار گرفته بشود. از سوی دیگر اگر اینترفیس خاصی به صورت کامل درون یک ناحیه کلاک محصور شده باشد و تنها نیاز باشد در بازه‌های زمانی کوتاه فعال باشد، می‌توان با BUFHCE کلاک ورودی به این ناحیه را گیت کرد.


🔖 کنترل پایه‌های enable این دو بافر یک روش بسیار آسان برای کنترل دینامیک توان مصرفی روی نواحی مختلف کلاک است. در مورد روش مالتی پلکس کردن کلاک‌ها نیز در آینده مطلبی ارائه خواهیم داد.


❗️اما هنوز یک نکته باقی مانده است. اگر به دلایل مختلف مجبور هستیم clock gating انجام دهیم. چگونه اینکار را انجام دهیم تا کمترین تاثیر منفی را روی طرح بگذارد؟ بهترین نقطه برای آغاز یا پایان فرایند clock gaiting دقیقا وسط بخش میانی کلاک است. دقیقا زمانی که مقدار آن صفر است. این کار معمولا با گیت and انجام می‌شود و هدف ممانعت از ایجاد #glitch در خروجی است. با رعایت این مساله در زمان روشن شدن گیت یا خاموش شدن آن در کلاک تولیدی خروجی هیچ شرایط پیش بینی نشده‌ای به وجود نمی‌آید و همینطور عرض پالس نیز کوتاه نمی‌شود.

@Hexalinx
همراهان عزیز هگزالینکس:
برای جستجو در مطالب منتشر در کانال می‌توانید از کلید واژه‌ها یا هشتگ های زیر استفاده کنید. امیدوارم آموزش‌های تخصصی هگزالینکس در این مدت انتظارات شما را برآورده کرده باشد.
دسته بندی بر اساس سطح و پیچیدگی مطالب:
#Basic
#Essentials
#Intermediate
#Advanced

دسته بندی براساس ابزارهای طراحی
#VIVADO_HLS
#SYSGEN
#VITIS
#VIVADO
#ISE
#ISIM
#SDSoC

دسته بندی موضوعی
#FIR
#FILTER
#PETALINUX
#LINUX
#AXI
#AXIVIP
#AXI_Lite
#CDC
#Clock_Domain_Crossing
#FIXED_POINT
#CHIPSCOPE
#TCL
#DDR
#ZYNQ
#IOB
#Barrel_Shifter
#wire_bonding
#Pipelining
#device_tree
#Clock_Gating
#Clock
#Reset
#Fanout
#Digital_Filter
#Static_Timing_Paths
#Clock_skew
#U_BOOT
#SSBL
#BUFGCE
#BUFHCE
#MUX
#DCM
#CMT
#QEMU
#BARE_METAL
#CLB
#LUT
#DISTRIBUTED_RAM
#PYNQ
#HLS
#ILA
#VIO
#STA
@Hexalinx