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

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

با توجه به نیازهای هر سیستم، مهندس طراح می تواند حافظه های توزیع شده در تراشه های سری 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