#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
🔖پاسخ سوال فوق بله است. تمامی منابع و عناصر اصلی درون 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
#ODDR
#IOB
✅ تولید یک کپی از کلاک درون سیستم به روی پین های تراشه FPGA
✳️ مواردی فراوانی وجود دارد که در آن طراح نیاز دارد با استفاده از FPGA کلاک مورد نیاز برای یکی از قطعات روی بورد را تولید کند، این کلاک ممکن است کلاک اصلی FPGA و یا یک کلاک تولید شده درون FPGA با استفاده از بلوکهای MMCM یا DCM باشد.
@Hexalinx
#IOB
✅ تولید یک کپی از کلاک درون سیستم به روی پین های تراشه FPGA
✳️ مواردی فراوانی وجود دارد که در آن طراح نیاز دارد با استفاده از FPGA کلاک مورد نیاز برای یکی از قطعات روی بورد را تولید کند، این کلاک ممکن است کلاک اصلی FPGA و یا یک کلاک تولید شده درون FPGA با استفاده از بلوکهای MMCM یا DCM باشد.
@Hexalinx