📌 حافظه در FPGA
Block RAM vs Distributed RAM + Single/Dual-Port RAM
سلام
داشتم روی یه پروژه کار میکردم که توی اون نیاز به نعریف کردن حافظه تو FPGA داشتم واسه همین منابعی که داشتم رو دوباره مطالعه کردم و یه سری نکات بهشون رسیدم:
اگر دارید روی طراحی دیجیتال/پیادهسازی روی FPGA کار میکنید، یکی از تصمیمهای مهم اینه که «حافظه رو کجا و چطور بسازیم؟»
────────────────────────
1) مدل پورتها در RAM
✅ Single-Port RAM
• یک پورت برای دسترسی
• معمولاً در هر سیکل یا Read یا Write انجام میشود (بسته به معماری/تنظیمات)
• مناسب بافرهای ساده، رجیستر فایل کوچک، جدولهای کمحجم
✅ Dual-Port RAM
• دو پورت مستقل (گاهی True Dual Port یعنی هر پورت مستقل Read/Write)
• عالی برای سناریوهای همزمانی مثل:
– یک پورت نوشتن از سمت ADC/Stream
– یک پورت خواندن از سمت پردازشگر/فیلتر
• در FPGAها معمولاً با Block RAM خیلی بهینه پیاده میشود
📎 سیگنالهای رایج:
Data In, Data Out, Addr, WE (Write Enable), EN, CLK
────────────────────────
2) انواع حافظه داخل FPGA
✅ Block RAM (BRAM)
• حافظههای بلوکی اختصاصی داخل چیپ
• ظرفیت نسبتاً بالا و مصرف منابع منطقی کمتر
• مناسب برای:
– بافرهای بزرگ (FIFO)
– حافظهی فریم/سمپل
– جدولهای بزرگ مثل LUTهای DSP
• مزیت مهم: در زمانبندی (Timing) معمولاً قابلاعتمادتر از ساختن حافظه با LUT است
✅ Distributed RAM
• از LUTها (و گاهی SRLها) ساخته میشود
• مناسب برای حافظههای کوچک و پراکنده نزدیک منطق
• کاربردهای رایج:
– Lookup Tableهای کوچک
– صف/بافر کوچک
– رجیستر فایل کوچک با دسترسی نزدیک
💡 قاعدهی تجربی:
حافظههای کوچک → غالباً Distributed RAM
حافظههای بزرگ/پرفشار → غالباً BRAM
────────────────────────
3) نکات خیلی مهم در پیادهسازی روی FPGA
🔸 Read Latency:
بیشتر BRAMها «سینک» هستند؛ یعنی خروجی Data Out معمولاً با 1 سیکل تأخیر بعد از آدرس معتبر میآید.
🔸 حالت خروجی در نوشتن:
رفتار Read-During-Write میتواند یکی از اینها باشد:
Write-First / Read-First / No-Change
(در Xilinx/Intel قابل تنظیم است و روی شبیهسازی/دیباگ اثر جدی دارد.)
کد نویسی درست
اگر کد Verilog/VHDL استاندارد بنویسید، ابزار سنتز میتواند خودکار حافظه را infer کند و ببرد روی BRAM یا Distributed RAM.
(یعنی لازم نیست همیشه دستی IP بسازید.)
🔸 اولویت منابع:
اگر BRAM کم آوردید، ابزار ممکن است حافظه را روی LUTها پیاده کند و ناگهان:
• مصرف LUT بالا برود
• Timing سختتر شود
🔸 انتخاب صحیح عرض/عمق:
گاهی با تغییر «عرض دیتا» و «عمق حافظه»، تعداد BRAM مصرفی نصف میشود (Packing بهتر).
#FPGA
@aitelecomeng
Post #75
612
- ❤ 5