#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
🔖 در این مقاله نحوه پیاده سازی یک جمع کننده را با استفاده از 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
#Configuration
#JTAG
✅ تراشه های FPGA قبل از اینکه مورد استفاده قرار بگیرند، باید پیکره بندی شوند. این کار می تواند به صورت اتوماتیک و یا توسط کاربر انجام شود. 👇
@Hexalinx
#JTAG
✅ تراشه های FPGA قبل از اینکه مورد استفاده قرار بگیرند، باید پیکره بندی شوند. این کار می تواند به صورت اتوماتیک و یا توسط کاربر انجام شود. 👇
@Hexalinx
#Basic
✳️ در حالت اول کاربر با اتصال یک پروگرامر بین کامپیوتر و تراشه FPGA با استفاده از پورت JTAG ، تراشه FPGA را پیکره بندی می کند. برای این کار تنها نیاز است طراح فایل bit خروجی را توسط ابزارهای طراحی تولید کند و باقی کارها تنها با چند کلیک انجام می شود. این روش پیرکره بندی در پروسه طراحی و زمانی که هنوز پروژه نهایی نشده است انجام می شود.
✳️ در حالت دوم نیاز به استفاده از پروگرامر برای پیکره بندی FPGA نیست و از پروگرامر برای پیکره بندی حافظه فلش استفاده می شود و ممکن است یکی از دو اتفاق زیر بیافتد.
1️⃣ در روش اول، تراشه FPGA با توجه به قابلیت هایی که شرکت سازنده آن فراهم می کند، به صورت اتوماتیک برنامه مورد نیاز برای پیکره بندی را از یک حافظه فلش non-volatile می خواند، و خودش را پیکره بندی می کند.
2️⃣ در روش دوم یک پردازنده دیگر همچون میکروکنترلر با خواندن اطلاعات از روی حافظه فلش non-volatile تراشه FPGA را پیکره بندی می کند.
در روش اول تراشه FPGA در اصطلاح master است و مسئولیت صفر تا صد کار را برعهده می گیرد. در این روش طراح نیاز دارد علاوه بر ساخت فایل bit خروجی، فایل مناسب برای پیکره بندی حافظه فلش را نیز تولید کند. با توجه به نوع حافظه این فایل ممکن است پسوند mcs یا bin یا داشته باشد. در روش دوم که در آن FPGA در اصطلاح slave است. طراح علاوه بر ساخت فایل مورد نیاز حافظه فلش باید پروتکل مورد نیاز برای برنامه ریزی تراشه FPGA را نیز برای پردازنده کمکی پیاده سازی کند.
@Hexalinx
✳️ در حالت اول کاربر با اتصال یک پروگرامر بین کامپیوتر و تراشه FPGA با استفاده از پورت JTAG ، تراشه FPGA را پیکره بندی می کند. برای این کار تنها نیاز است طراح فایل bit خروجی را توسط ابزارهای طراحی تولید کند و باقی کارها تنها با چند کلیک انجام می شود. این روش پیرکره بندی در پروسه طراحی و زمانی که هنوز پروژه نهایی نشده است انجام می شود.
✳️ در حالت دوم نیاز به استفاده از پروگرامر برای پیکره بندی FPGA نیست و از پروگرامر برای پیکره بندی حافظه فلش استفاده می شود و ممکن است یکی از دو اتفاق زیر بیافتد.
1️⃣ در روش اول، تراشه FPGA با توجه به قابلیت هایی که شرکت سازنده آن فراهم می کند، به صورت اتوماتیک برنامه مورد نیاز برای پیکره بندی را از یک حافظه فلش non-volatile می خواند، و خودش را پیکره بندی می کند.
2️⃣ در روش دوم یک پردازنده دیگر همچون میکروکنترلر با خواندن اطلاعات از روی حافظه فلش non-volatile تراشه FPGA را پیکره بندی می کند.
در روش اول تراشه FPGA در اصطلاح master است و مسئولیت صفر تا صد کار را برعهده می گیرد. در این روش طراح نیاز دارد علاوه بر ساخت فایل bit خروجی، فایل مناسب برای پیکره بندی حافظه فلش را نیز تولید کند. با توجه به نوع حافظه این فایل ممکن است پسوند mcs یا bin یا داشته باشد. در روش دوم که در آن FPGA در اصطلاح slave است. طراح علاوه بر ساخت فایل مورد نیاز حافظه فلش باید پروتکل مورد نیاز برای برنامه ریزی تراشه FPGA را نیز برای پردازنده کمکی پیاده سازی کند.
@Hexalinx
#BLOCK_RAM
#DISTRIBUTED_RAM
✅ در مورد مفهوم حافظه ها در FPGA قبلا مقاله ای خدمتتان ارائه شده که در آن یک مقایسه کوچک بین قابلیت ها و محدودیت های انواع حافظه های قابل استفاده درون تراشه مورد بررسی قرار گرفت. اگر هنوز موفق به مطالعه این مقاله نشدید، پیشنهاد می کنم وقت را از دست ندهید و همین الان شروع کنید.
✅ امروز دومین قسمت از این مقاله برای علاقه مندان به یادگیری مفاهیم بنیادی پیاده سازی در FPGA ارائه می شود. بدون شک بیان تمام جزئیات در این مجال کوتاه امکان پذیر نیست، از این رو درصورتی که نیاز به اطلاعات تکمیلی داشتید، حتما سوال خود را با @aks_linx در میان بگذارید.
@Hexalinx
#DISTRIBUTED_RAM
✅ در مورد مفهوم حافظه ها در FPGA قبلا مقاله ای خدمتتان ارائه شده که در آن یک مقایسه کوچک بین قابلیت ها و محدودیت های انواع حافظه های قابل استفاده درون تراشه مورد بررسی قرار گرفت. اگر هنوز موفق به مطالعه این مقاله نشدید، پیشنهاد می کنم وقت را از دست ندهید و همین الان شروع کنید.
✅ امروز دومین قسمت از این مقاله برای علاقه مندان به یادگیری مفاهیم بنیادی پیاده سازی در FPGA ارائه می شود. بدون شک بیان تمام جزئیات در این مجال کوتاه امکان پذیر نیست، از این رو درصورتی که نیاز به اطلاعات تکمیلی داشتید، حتما سوال خود را با @aks_linx در میان بگذارید.
@Hexalinx
#Essentials
🔖 به صورت پیش فرض حافظه های توزیع شده دارای ورودی سنکرون و خروجی آسنکرون هستند، اما با استفاده از رجیسترهای موجود در خروجی هر اسلایس می توان خروجی ها را نیز به صورت سنکرون مورد استفاده قرار داد، این کار باعث بالا رفتن کارایی حافظه ها در سرعت های کلاک بالا می شود، اگر چه یک کلاک تاخیر در خروجی ایجاد می کند.
با توجه به نیازهای هر سیستم، مهندس طراح می تواند حافظه های توزیع شده در تراشه های سری 7 را به چهار صورت پیکره بندی کند که به شرح زیر است.
1️⃣ تک پورت: در این پیکره بندی از یک پورت برای خواندن آسنکرون و نوشتن سنکرون استفاده می شود
2️⃣ دو پورت: در این پیکره بندی یک پورت برای خواندن / نوشتن و یک پورت خواندن آسنکرون در نظر گرفته می شود
3️⃣ دو پورت ساده: در این پیکره بندی یک پورت برای نوشتن و یک پورت نیز برای خواندن آسنکرون در نظر گرفته می شود
4️⃣ چهار پورت: در این پیکره بندی یک پورت برای خواندن / نوشتن و سه پورت نیز برای خواندن آسنکرون در نظر گرفته می شود
❗️نحوه به اشتراک گذاری پورت های کنترلی و محدودیت های بکاگیری هر کدام از پیکره بندی های فوق خارج از حوصله این مقاله است و اطلاع از آن ها جز مهارت های تکمیلی یک مهندس پیاده ساز می باشد.
همانطور که قسمت اول مقاله هم اشاره کردیم، همه خانواده های تراشه های سری 7 از یک ساختار یکسان در بلوک های حافظه استفاده می کنند بلوک های حافظه همگی عملکرد سنکرون دارند، یعنی یک رجیستر در روی پورت خروجی این بلوک ها قرار داده شده است و هر بار که فرمان خواندن از این حافظه ها صادر شود، خروجی با یک کلاک تاخیر و البته سنکرون آماده می شود. این رجیستر پایپلاین نیز مشابه رجیستر اضافی در خروجی حافظه های توزیع شده عمل می کند و باعث افزایش کارایی حافظه در کاربردهای فرکانس بالا می شود.
ساختار بلوک های حافظه به صورت پیش فرض از دو پورت پشتیبانی می کند و هر دو پورت به یک فضای یکسان از حافظه دسترسی دارند. هر پورت دارای کلاک، ورودی آدرس، ورودی فعال ساز کلاک و ورودی فرمان مستقل برای خواندن از حافظه است.
حداکثر عرض بیت قابل پشتیبانی در این حافظه ها 72 بیت است. هر پورت می تواند برای پشتیبانی از عرض بیت مستقل پیکره بندی شود، علاوه بر این امکان نوشتن در این حافظه ها به صورت بایت به بایت نیز وجود دارد، یعنی می توان در یک آدرس از حافظه که توانایی ذخیره سازی مثلا 16 بیت را دارد، دو بار در یک کلاک مقادیر 8 بیتی نوشت. این قابلیت، یک مزیت بسیار کلیدی در هنگام استفاده از پردازنده کمکی همچون #Micoblaze فراهم می آورد.
حافظه های بلوکی به صورت های زیر قابل پیکره بندی هستند:
1️⃣ تک پورت: در این پیکره بندی از یک پورت برای خواندن و نوشتن به صورت سنکرون استفاده می شود
2️⃣ دو پورت ساده: در این پیکره بندی از یک پورت برای خواندن و از یک پورت برای نوشتن استفاده می شود، هر کدام از پورت ها دارای کلاک و سیگنال های کنترلی مستقل هستند.
3️⃣ دو پورت کامل: در این پیکره بندی دو پورت کاملا مستقل برای خواندن و نوشتن وجود دارد، کلاک ها و سیگنال های کنترلی هر دو پورت مستقل از هم هستند و حداکثر انعطاف پذیری را برای کنترل فرایند خواندن و نوشتن در اختیار کاربر قرار می دهند.
نوشتن در حافظه های بلوکی نیز می تواند با سه اولویت بندی متفاوت صورت بگیرد، این سه مد اولویت بندی عبارتند از:
1️⃣ مد WRITE_FIRST : داده نوشته شده در DIA روی DOA قرار می گیرد (به شکل مراجعه شود)
2️⃣ مد READ_FIRST : مقدار قبلی نوشته شده در حافظه در ADDRA روی DOA قرار می گیرد
3️⃣ مد NO_CHANGE : برای کاهش توان مصرفی در زمان نوشتن DOA همواره مقدار قبلیش را حفظ می کند
توضیح بییشتر و مقایسه این سه مد که بسیار مهم نیز هستند، در آینده خدمتتان ارائه می گردد. در این مقاله صرفا به معرفی اجمالی آن ها اکتفا می کنیم. ممکن است در نگاه اول فراگیری مطالب فوق کمی سخت به نظر برسد، که البته اینطور نیست و با کمی تکرار کاملا قابل درک است. ضمنا بد نیست به این نکته توجه داشته باشیم که هم حافظه های توزیع شده و هم حافظه های بلوکی با استفاده از IP Core های شرکت Xilinx قابل فراخوانی و سفارشی سازی هستند و طراح به راحتی می تواند با انتخاب پیکره بندی مورد نیازش به سریع ترین و بهینه ترین شکل ممکن حافظه ها را به کار بگیرد، با استفاده از IP Croe ها امکان فراخوانی پیکره بندی های اضافی با ترکیب کردن بلوک های حافظه و منابع منطقی نیز وجود دارد، که بهترین مثال آن پیکره بندی FIFO پرسرعت است.
https://forums.xilinx.com/t5/Embedded-Development-Tools/difference-between-distributed-and-block-ram/td-p/81867
@Hexalinx
🔖 به صورت پیش فرض حافظه های توزیع شده دارای ورودی سنکرون و خروجی آسنکرون هستند، اما با استفاده از رجیسترهای موجود در خروجی هر اسلایس می توان خروجی ها را نیز به صورت سنکرون مورد استفاده قرار داد، این کار باعث بالا رفتن کارایی حافظه ها در سرعت های کلاک بالا می شود، اگر چه یک کلاک تاخیر در خروجی ایجاد می کند.
با توجه به نیازهای هر سیستم، مهندس طراح می تواند حافظه های توزیع شده در تراشه های سری 7 را به چهار صورت پیکره بندی کند که به شرح زیر است.
1️⃣ تک پورت: در این پیکره بندی از یک پورت برای خواندن آسنکرون و نوشتن سنکرون استفاده می شود
2️⃣ دو پورت: در این پیکره بندی یک پورت برای خواندن / نوشتن و یک پورت خواندن آسنکرون در نظر گرفته می شود
3️⃣ دو پورت ساده: در این پیکره بندی یک پورت برای نوشتن و یک پورت نیز برای خواندن آسنکرون در نظر گرفته می شود
4️⃣ چهار پورت: در این پیکره بندی یک پورت برای خواندن / نوشتن و سه پورت نیز برای خواندن آسنکرون در نظر گرفته می شود
❗️نحوه به اشتراک گذاری پورت های کنترلی و محدودیت های بکاگیری هر کدام از پیکره بندی های فوق خارج از حوصله این مقاله است و اطلاع از آن ها جز مهارت های تکمیلی یک مهندس پیاده ساز می باشد.
همانطور که قسمت اول مقاله هم اشاره کردیم، همه خانواده های تراشه های سری 7 از یک ساختار یکسان در بلوک های حافظه استفاده می کنند بلوک های حافظه همگی عملکرد سنکرون دارند، یعنی یک رجیستر در روی پورت خروجی این بلوک ها قرار داده شده است و هر بار که فرمان خواندن از این حافظه ها صادر شود، خروجی با یک کلاک تاخیر و البته سنکرون آماده می شود. این رجیستر پایپلاین نیز مشابه رجیستر اضافی در خروجی حافظه های توزیع شده عمل می کند و باعث افزایش کارایی حافظه در کاربردهای فرکانس بالا می شود.
ساختار بلوک های حافظه به صورت پیش فرض از دو پورت پشتیبانی می کند و هر دو پورت به یک فضای یکسان از حافظه دسترسی دارند. هر پورت دارای کلاک، ورودی آدرس، ورودی فعال ساز کلاک و ورودی فرمان مستقل برای خواندن از حافظه است.
حداکثر عرض بیت قابل پشتیبانی در این حافظه ها 72 بیت است. هر پورت می تواند برای پشتیبانی از عرض بیت مستقل پیکره بندی شود، علاوه بر این امکان نوشتن در این حافظه ها به صورت بایت به بایت نیز وجود دارد، یعنی می توان در یک آدرس از حافظه که توانایی ذخیره سازی مثلا 16 بیت را دارد، دو بار در یک کلاک مقادیر 8 بیتی نوشت. این قابلیت، یک مزیت بسیار کلیدی در هنگام استفاده از پردازنده کمکی همچون #Micoblaze فراهم می آورد.
حافظه های بلوکی به صورت های زیر قابل پیکره بندی هستند:
1️⃣ تک پورت: در این پیکره بندی از یک پورت برای خواندن و نوشتن به صورت سنکرون استفاده می شود
2️⃣ دو پورت ساده: در این پیکره بندی از یک پورت برای خواندن و از یک پورت برای نوشتن استفاده می شود، هر کدام از پورت ها دارای کلاک و سیگنال های کنترلی مستقل هستند.
3️⃣ دو پورت کامل: در این پیکره بندی دو پورت کاملا مستقل برای خواندن و نوشتن وجود دارد، کلاک ها و سیگنال های کنترلی هر دو پورت مستقل از هم هستند و حداکثر انعطاف پذیری را برای کنترل فرایند خواندن و نوشتن در اختیار کاربر قرار می دهند.
نوشتن در حافظه های بلوکی نیز می تواند با سه اولویت بندی متفاوت صورت بگیرد، این سه مد اولویت بندی عبارتند از:
1️⃣ مد WRITE_FIRST : داده نوشته شده در DIA روی DOA قرار می گیرد (به شکل مراجعه شود)
2️⃣ مد READ_FIRST : مقدار قبلی نوشته شده در حافظه در ADDRA روی DOA قرار می گیرد
3️⃣ مد NO_CHANGE : برای کاهش توان مصرفی در زمان نوشتن DOA همواره مقدار قبلیش را حفظ می کند
توضیح بییشتر و مقایسه این سه مد که بسیار مهم نیز هستند، در آینده خدمتتان ارائه می گردد. در این مقاله صرفا به معرفی اجمالی آن ها اکتفا می کنیم. ممکن است در نگاه اول فراگیری مطالب فوق کمی سخت به نظر برسد، که البته اینطور نیست و با کمی تکرار کاملا قابل درک است. ضمنا بد نیست به این نکته توجه داشته باشیم که هم حافظه های توزیع شده و هم حافظه های بلوکی با استفاده از IP Core های شرکت Xilinx قابل فراخوانی و سفارشی سازی هستند و طراح به راحتی می تواند با انتخاب پیکره بندی مورد نیازش به سریع ترین و بهینه ترین شکل ممکن حافظه ها را به کار بگیرد، با استفاده از IP Croe ها امکان فراخوانی پیکره بندی های اضافی با ترکیب کردن بلوک های حافظه و منابع منطقی نیز وجود دارد، که بهترین مثال آن پیکره بندی FIFO پرسرعت است.
https://forums.xilinx.com/t5/Embedded-Development-Tools/difference-between-distributed-and-block-ram/td-p/81867
@Hexalinx
Xilinx
difference between distributed and block ram
hi all.. what is the difference between distributed and block ram while using FPGA? thanks
#Routeing
#Interconnect
#Essentials
✅ منابع متصل کننده(Interconnect Resources)
✳️ علاوه بر بلوک های قابل برنامه ریزی، حافظه ها، بلوک های ضرب کننده و منابع ورودی و خروجی، تراشه های FPGA دارای منابع بسیار مهم دیگری به نام منابع متصل کننده یا Interconnect Resources هستند. این منابع به صورت یک شبکه قابل برنامه ریزی وظیفه برقراری ارتباط بین ورودی ها، خروجی ها، و به طور کلی تمامی عناصر موجود درون تراشه را بر عهده دارند. این منابع تحت عنوان مسیر یا #routing شناخته می شوند. گام جانمایی و مسیر یابی #Place_and_Route در فرایند پیاده سازی در واقع به برنامه ریزی و بهینه سازی این منابع اختصاص دارد. نکته جالب اینجاست که این منابع به طور متوسط بیش از 60 درصد منابع درون FPGA را اشغال کرده اند. کنترل جزئیات فرایند #routing به شکل کامل در اختیار ابزارهای پیاده سازی است و به نوعی جز پتنت های شرکت سازنده محسوب می شود.
@Hexalinx
#Interconnect
#Essentials
✅ منابع متصل کننده(Interconnect Resources)
✳️ علاوه بر بلوک های قابل برنامه ریزی، حافظه ها، بلوک های ضرب کننده و منابع ورودی و خروجی، تراشه های FPGA دارای منابع بسیار مهم دیگری به نام منابع متصل کننده یا Interconnect Resources هستند. این منابع به صورت یک شبکه قابل برنامه ریزی وظیفه برقراری ارتباط بین ورودی ها، خروجی ها، و به طور کلی تمامی عناصر موجود درون تراشه را بر عهده دارند. این منابع تحت عنوان مسیر یا #routing شناخته می شوند. گام جانمایی و مسیر یابی #Place_and_Route در فرایند پیاده سازی در واقع به برنامه ریزی و بهینه سازی این منابع اختصاص دارد. نکته جالب اینجاست که این منابع به طور متوسط بیش از 60 درصد منابع درون FPGA را اشغال کرده اند. کنترل جزئیات فرایند #routing به شکل کامل در اختیار ابزارهای پیاده سازی است و به نوعی جز پتنت های شرکت سازنده محسوب می شود.
@Hexalinx
#QEMU
#Advanced
✅ معرفی Xilinx QEMU
✳️ واژه #QEMU مخفف عبارت Quick Emulator است و یک امولاتور قدرتمند و متن باز برای مدل سازی رفتار یک ماشین و به طور خاص یک پردازنده است.
✳️ شرکت Xilinx با توجه به منبع باز بودن QEMU یک نسخه سفارشی از آن را به نام Xilinx QEMU توسعه داده است و به همراه پتالینوکس عرضه می کند. مهندسانی که از پلت فرم های هدف مبتنی بر Zynq 7000 و Zynq UltraScalePlus و یا MicroBlaze برای طراحی های خود استفاده می کنند، به راحتی می توانند از مزایای آن بهره مند شوند. این امولاتور قادر است با مدل سازی رفتار سیستم جایگزین سخت افزار شود و مدلی نرم افزاری از آن را برای طراح ایجاد کند. توجه شود که برای استفاده از این امولاتور طراح باید با مفاهیم زیر آشنایی کامل داشته باشد.
1️⃣ معماری پردازنده مورد نظر
2️⃣ گنو دیباگر برای دیباگ ریموت سیستم GDB
3️⃣ تولید اپلیکیشن نرم افزاری با استفاده از پتالینوکس و SDK
4️⃣ و دیوایس تیری Device Trees
https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842060/QEMU
@Hexalinx
#Advanced
✅ معرفی Xilinx QEMU
✳️ واژه #QEMU مخفف عبارت Quick Emulator است و یک امولاتور قدرتمند و متن باز برای مدل سازی رفتار یک ماشین و به طور خاص یک پردازنده است.
✳️ شرکت Xilinx با توجه به منبع باز بودن QEMU یک نسخه سفارشی از آن را به نام Xilinx QEMU توسعه داده است و به همراه پتالینوکس عرضه می کند. مهندسانی که از پلت فرم های هدف مبتنی بر Zynq 7000 و Zynq UltraScalePlus و یا MicroBlaze برای طراحی های خود استفاده می کنند، به راحتی می توانند از مزایای آن بهره مند شوند. این امولاتور قادر است با مدل سازی رفتار سیستم جایگزین سخت افزار شود و مدلی نرم افزاری از آن را برای طراح ایجاد کند. توجه شود که برای استفاده از این امولاتور طراح باید با مفاهیم زیر آشنایی کامل داشته باشد.
1️⃣ معماری پردازنده مورد نظر
2️⃣ گنو دیباگر برای دیباگ ریموت سیستم GDB
3️⃣ تولید اپلیکیشن نرم افزاری با استفاده از پتالینوکس و SDK
4️⃣ و دیوایس تیری Device Trees
https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842060/QEMU
@Hexalinx
#SDSoC
#Advanced
✅ معرفی محیط توسعه SDSoC
✳️ یکی از بزرگترین چالش های پیشروی مهندسان در زمان طراحی شتاب دهنده روی بخش PL در تراشه های Zynq نحوه تبادل ارتباط بین PS و PL است، انتخاب نوع اینترفیس و تنظیمات آن اغلب کابوس طراحان است. از سوی دیگر انتخاب گلوگاه های پردازشی و انتقال توابع نرم افزاری در PS به PL نیازمند صرف زمان و تجربه کافی از سوی مهندس طراح است. شرکت Xilinx برای پاسخ به این دو مشکل در سال 2015 محیط توسعه SDSoC را برای طراحان سیستم و مهندسان نرم افزار معرفی کرد. مجموعه نرم افزاریSDSoC چارچوبی برای توسعه و ساخت برنامه های سخت افزاری شتاب دهی شده با استفاده از زبانهای برنامه نویسی استاندارد C , C++ در محیط بسیار کاربرپسند و محبوب eclipse است.
کامپایلر SDSoC بسیاری از جزئیات طراحی را به صورت اتوماتیک آنالیز می کند و به طراح اجازه می دهد با چند کلیک توابع نرم افزاری PS را به ماژول ها سخت افزاری برای پیاده سازی در PL تبدیل کنند و ارتباطات مورد نیاز برای تبادل داده بین این دو بخش را برقرار کنند.
@Hexalinx
#Advanced
✅ معرفی محیط توسعه SDSoC
✳️ یکی از بزرگترین چالش های پیشروی مهندسان در زمان طراحی شتاب دهنده روی بخش PL در تراشه های Zynq نحوه تبادل ارتباط بین PS و PL است، انتخاب نوع اینترفیس و تنظیمات آن اغلب کابوس طراحان است. از سوی دیگر انتخاب گلوگاه های پردازشی و انتقال توابع نرم افزاری در PS به PL نیازمند صرف زمان و تجربه کافی از سوی مهندس طراح است. شرکت Xilinx برای پاسخ به این دو مشکل در سال 2015 محیط توسعه SDSoC را برای طراحان سیستم و مهندسان نرم افزار معرفی کرد. مجموعه نرم افزاریSDSoC چارچوبی برای توسعه و ساخت برنامه های سخت افزاری شتاب دهی شده با استفاده از زبانهای برنامه نویسی استاندارد C , C++ در محیط بسیار کاربرپسند و محبوب eclipse است.
کامپایلر SDSoC بسیاری از جزئیات طراحی را به صورت اتوماتیک آنالیز می کند و به طراح اجازه می دهد با چند کلیک توابع نرم افزاری PS را به ماژول ها سخت افزاری برای پیاده سازی در PL تبدیل کنند و ارتباطات مورد نیاز برای تبادل داده بین این دو بخش را برقرار کنند.
@Hexalinx
#SDSoC
✳️ آموزش مقدماتی مجموعه نرم افزاری SDSoC
1️⃣ قسمت اول - نصب SDSoC
🔖این مجموعه به صورت رایگان در Udemy تحت عنوان Zynq Development with Xilinx SDSoC ارائه شده است.
https://www.aparat.com/v/8vSdJ
@Hexalinx
✳️ آموزش مقدماتی مجموعه نرم افزاری SDSoC
1️⃣ قسمت اول - نصب SDSoC
🔖این مجموعه به صورت رایگان در Udemy تحت عنوان Zynq Development with Xilinx SDSoC ارائه شده است.
https://www.aparat.com/v/8vSdJ
@Hexalinx
آپارات - سرویس اشتراک ویدیو
1- نصب مجموعه نرم افزاری SDSoC
آموزش مقدماتی مجموعه نرم افزاری SDSoC .
قسمت اول - نصب SDSoC .
این مجموعه به صورت رایگان در Udemy تحت عنوان Zynq Development with Xilinx SDSoC ارائه شده است.
قسمت اول - نصب SDSoC .
این مجموعه به صورت رایگان در Udemy تحت عنوان Zynq Development with Xilinx SDSoC ارائه شده است.
#SDSoC
✳️ آموزش مقدماتی مجموعه نرم افزاری SDSoC
2️⃣ قسمت دوم - معرفی ابزار طراحی SDSoC
🔖این مجموعه به صورت رایگان در Udemy تحت عنوان Zynq Development with Xilinx SDSoC ارائه شده است.
https://www.aparat.com/v/Pb0Yi
@Hexalinx
✳️ آموزش مقدماتی مجموعه نرم افزاری SDSoC
2️⃣ قسمت دوم - معرفی ابزار طراحی SDSoC
🔖این مجموعه به صورت رایگان در Udemy تحت عنوان Zynq Development with Xilinx SDSoC ارائه شده است.
https://www.aparat.com/v/Pb0Yi
@Hexalinx
آپارات - سرویس اشتراک ویدیو
2- معرفی ابزار طراحی SDSoC
آموزش مقدماتی مجموعه نرم افزاری SDSoC.
قسمت دوم - معرفی ابزار طراحی SDSoC.
این مجموعه به صورت رایگان در Udemy تحت عنوان Zynq Development with Xilinx SDSoC ارائه شده است.
قسمت دوم - معرفی ابزار طراحی SDSoC.
این مجموعه به صورت رایگان در Udemy تحت عنوان Zynq Development with Xilinx SDSoC ارائه شده است.
#SDSoC
✳️ آموزش مقدماتی مجموعه نرم افزاری SDSoC
3️⃣ قسمت سوم - معرفی ابزار طراحی SDSoC بخش دوم
🔖این مجموعه به صورت رایگان در Udemy تحت عنوان Zynq Development with Xilinx SDSoC ارائه شده است.
https://www.aparat.com/v/e3onS
@Hexalinx
✳️ آموزش مقدماتی مجموعه نرم افزاری SDSoC
3️⃣ قسمت سوم - معرفی ابزار طراحی SDSoC بخش دوم
🔖این مجموعه به صورت رایگان در Udemy تحت عنوان Zynq Development with Xilinx SDSoC ارائه شده است.
https://www.aparat.com/v/e3onS
@Hexalinx
آپارات - سرویس اشتراک ویدیو
3- معرفی ابزار طراحی SDSoC بخش دوم
آموزش مقدماتی مجموعه نرم افزاری SDSoC. قسمت سوم- معرفی ابزار طراحی SDSoC بخش دوم. این مجموعه به صورت رایگان در Udemy تحت عنوان Zynq Development with Xilinx SDSoC ارائه شده است
#SDSoC
✳️ آموزش مقدماتی مجموعه نرم افزاری SDSoC
4️⃣ قسمت چهارم - ساخت یک پروژه جدید در ابزار طراحی SDSoC
🔖این مجموعه به صورت رایگان در Udemy تحت عنوان Zynq Development with Xilinx SDSoC ارائه شده است.
https://www.aparat.com/v/s5w87
@Hexalinx
✳️ آموزش مقدماتی مجموعه نرم افزاری SDSoC
4️⃣ قسمت چهارم - ساخت یک پروژه جدید در ابزار طراحی SDSoC
🔖این مجموعه به صورت رایگان در Udemy تحت عنوان Zynq Development with Xilinx SDSoC ارائه شده است.
https://www.aparat.com/v/s5w87
@Hexalinx
آپارات - سرویس اشتراک ویدیو
4- ساخت یک پروژه جدید در ابزار طراحی SDSoC
آموزش مقدماتی مجموعه نرم افزاری SDSoC. قسمت چهارم- ساخت یک پروژه جدید در ابزار طراحی SDSoC . این مجموعه به صورت رایگان در Udemy تحت عنوان Zynq Development with Xilinx SDSoC ارائه شده است
#SDSoC
✳️ آموزش مقدماتی مجموعه نرم افزاری SDSoC
5️⃣ قسمت آخر - روش های بهینه سازی طرح در SDSoC
🔖این مجموعه به صورت رایگان در Udemy تحت عنوان Zynq Development with Xilinx SDSoC ارائه شده است.
https://www.aparat.com/v/rNByu
@Hexalinx
✳️ آموزش مقدماتی مجموعه نرم افزاری SDSoC
5️⃣ قسمت آخر - روش های بهینه سازی طرح در SDSoC
🔖این مجموعه به صورت رایگان در Udemy تحت عنوان Zynq Development with Xilinx SDSoC ارائه شده است.
https://www.aparat.com/v/rNByu
@Hexalinx
آپارات - سرویس اشتراک ویدیو
5- روش های بهینه سازی طرح در SDSoC
آموزش مقدماتی مجموعه نرم افزاری SDSoC. قسمت پنجم- روش های بهینه سازی طرح در SDSoC . این مجموعه به صورت رایگان در Udemy تحت عنوان Zynq Development
برای اطلاعات بیشتر می توانید ما را در کانال تلگرام Hexalinx و سایت Hexalinx.com دنبال کنید.
برای اطلاعات بیشتر می توانید ما را در کانال تلگرام Hexalinx و سایت Hexalinx.com دنبال کنید.
#Digital_Clock_Manager, #DCM
#Clock_Managment_Tile, #CMT
#Essentials
✅ معرفی منابع کلاک روی تراشه Spartan 6
✳️ تراشه Spartan 6 دارای دو شبکه کلاک کاملا متفاوت است.
1️⃣ شبکه اول Global Clock Network نام دارد و برای تامین کلاک واحدهای مختلف درون تراشه نظیر CLB ها و بلوک های حافظه بکار گرفته می شود. این شبکه می تواند حداکثر 16 کلاک متفاوت را پشتیبانی کند. حداکثر کلاک قابل پذیرش در این شبکه حدود 400 مگاهرتز است.
2️⃣ شبکه دوم IO Clock Network نام دارد و وظیفه آن تامین کلاک مورد نیاز برای بلوک های ورودی خروجی تراشه است. این شبکه قادر به پشتیبانی از قابلیت SerDes با حداکثر فرکانس کلاک 1 گیگاهرتز است که در ارتباطات پرسرعت مورد استفاده قرار می گیرند. اگر FPGA را به 4 قسمت تقسیم کنیم هر بخش دارای 8 بلوک کلاک IO است که در مجموع 32 بلوک کلاک IO می شود.
تراشه های Spartan 6 درای دو بلوک مدیریت کلاک به نام DCM و یک بلوک حلقه قفل فاز PLL در هر CMT هستند. در هر تراشه Spartan 6 بین یک تا شش CMT وجود دارد
@Hexalinx
#Clock_Managment_Tile, #CMT
#Essentials
✅ معرفی منابع کلاک روی تراشه Spartan 6
✳️ تراشه Spartan 6 دارای دو شبکه کلاک کاملا متفاوت است.
1️⃣ شبکه اول Global Clock Network نام دارد و برای تامین کلاک واحدهای مختلف درون تراشه نظیر CLB ها و بلوک های حافظه بکار گرفته می شود. این شبکه می تواند حداکثر 16 کلاک متفاوت را پشتیبانی کند. حداکثر کلاک قابل پذیرش در این شبکه حدود 400 مگاهرتز است.
2️⃣ شبکه دوم IO Clock Network نام دارد و وظیفه آن تامین کلاک مورد نیاز برای بلوک های ورودی خروجی تراشه است. این شبکه قادر به پشتیبانی از قابلیت SerDes با حداکثر فرکانس کلاک 1 گیگاهرتز است که در ارتباطات پرسرعت مورد استفاده قرار می گیرند. اگر FPGA را به 4 قسمت تقسیم کنیم هر بخش دارای 8 بلوک کلاک IO است که در مجموع 32 بلوک کلاک IO می شود.
تراشه های Spartan 6 درای دو بلوک مدیریت کلاک به نام DCM و یک بلوک حلقه قفل فاز PLL در هر CMT هستند. در هر تراشه Spartan 6 بین یک تا شش CMT وجود دارد
@Hexalinx
#Codding_Guide
✅ تکنیک های کدنویسی در FPGA
✳️ چندین بار در این کانال به این مورد اشاره کردیم که آشنایی با منابع درون تراشه از اهمیت بالایی در طراحی برخوردار است و دستیابی به حداکثر کارایی تنها به وابسته شناخت دقیق این منابع امکان پذیر است، اما سوال اینجاست که آیا می توان همه این منابع را با کد نویسی HDL فراخوانی کرد یا خیر؟ آیا محدودیتی وجود دارد؟ 👇👇
@Hexalinx
✅ تکنیک های کدنویسی در FPGA
✳️ چندین بار در این کانال به این مورد اشاره کردیم که آشنایی با منابع درون تراشه از اهمیت بالایی در طراحی برخوردار است و دستیابی به حداکثر کارایی تنها به وابسته شناخت دقیق این منابع امکان پذیر است، اما سوال اینجاست که آیا می توان همه این منابع را با کد نویسی HDL فراخوانی کرد یا خیر؟ آیا محدودیتی وجود دارد؟ 👇👇
@Hexalinx
#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
#Jitter
#Essentials
✅ به طور کلی سیگنال کلاک غالبا با دو پارامتر فرکانس یا پریود و دوره تناوب (Duty Cycle) معرفی می شود. اما این دو پارامتر تنها مشخصه های کلاسیک یک سیگنال کلاک هستند. مفهوم کلاک جیتر #jitter یکی دیگر از مشخصه هایی است که در توصیف میزان دقت یک سیگنال کلاک یا منبع تولید کننده کلاک ارائه می شود. کلاک جیتر بیانگر میزان انحراف لبه های کلاک از موقعیت ایده آل خودشان است، به عبارت ساده تر کم یا زیاد شدن یک پریود کلاک به دلیل جابجایی مثبت یا منفی لبه های بالا و پایین رونده کلاک.
❗️این پدیده غالبا به دلیل نویز موجود در منبع تولید کننده کلاک، نویز مدارات تغذیه و یا اختلالات ناشی از مدارهای جانبی در یک سیستم رخ می دهد. در طراحی FPGA جیتر غالبا به صورت یک پارامتر و تحت عنوان جیتر ورودی برای ابزار پیاده سازی تعریف می شود، و تعیین دقیق آن نقش مهمی در دستیابی به زمانبندی مناسب در یک طراحی ایفا می کند.
@Hexalinx
#Essentials
✅ به طور کلی سیگنال کلاک غالبا با دو پارامتر فرکانس یا پریود و دوره تناوب (Duty Cycle) معرفی می شود. اما این دو پارامتر تنها مشخصه های کلاسیک یک سیگنال کلاک هستند. مفهوم کلاک جیتر #jitter یکی دیگر از مشخصه هایی است که در توصیف میزان دقت یک سیگنال کلاک یا منبع تولید کننده کلاک ارائه می شود. کلاک جیتر بیانگر میزان انحراف لبه های کلاک از موقعیت ایده آل خودشان است، به عبارت ساده تر کم یا زیاد شدن یک پریود کلاک به دلیل جابجایی مثبت یا منفی لبه های بالا و پایین رونده کلاک.
❗️این پدیده غالبا به دلیل نویز موجود در منبع تولید کننده کلاک، نویز مدارات تغذیه و یا اختلالات ناشی از مدارهای جانبی در یک سیستم رخ می دهد. در طراحی FPGA جیتر غالبا به صورت یک پارامتر و تحت عنوان جیتر ورودی برای ابزار پیاده سازی تعریف می شود، و تعیین دقیق آن نقش مهمی در دستیابی به زمانبندی مناسب در یک طراحی ایفا می کند.
@Hexalinx
#Basic
#2’s_Complement
✅ الفبای محاسبات علامت دار در FPGA
✳️ برای پیاده سازی الگوریتم های پردازش سیگنال و به طور کلی محاسبات ریاضی در FPGA اولین دانشی که لازم است فراگرفته شود، نحوه نمایش اعداد علامت دار درون کدهای HDL است.
در این مقاله کوتاه ابتدا انواع روش های نمایش اعداد علامت دار، و ویژگی های هر کدام معرفی می شود و سپس انواع داده ها و کتابخانه های مورد نیاز برای انجام محاسبات علامت دار معرفی می شود.
این مقاله به مرور به همراه ویدیو بروز رسانی می شود و در سایت منتشر می شود. 👇👇
@Hexalinx
#2’s_Complement
✅ الفبای محاسبات علامت دار در FPGA
✳️ برای پیاده سازی الگوریتم های پردازش سیگنال و به طور کلی محاسبات ریاضی در FPGA اولین دانشی که لازم است فراگرفته شود، نحوه نمایش اعداد علامت دار درون کدهای HDL است.
در این مقاله کوتاه ابتدا انواع روش های نمایش اعداد علامت دار، و ویژگی های هر کدام معرفی می شود و سپس انواع داده ها و کتابخانه های مورد نیاز برای انجام محاسبات علامت دار معرفی می شود.
این مقاله به مرور به همراه ویدیو بروز رسانی می شود و در سایت منتشر می شود. 👇👇
@Hexalinx