TGViewer
مهندس مخابرات مهندس مخابرات @aitelecomeng · 268 subscribers
Post #75 612
📌 حافظه در 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
  • ❤ 5
More from @aitelecomeng
  1. Sep 7, 2026عنوان شغلی: کارشناس پایگاه داده Oracle / Oracle DBA ما در تیم سیستم و نرم‌افزار خود به دنب…
  2. Sep 7, 2026عنوان شغلی: کارشناس هوش تجاری / Analytics Engineer ما در تیم داده خود به دنبال یک همکار مت…
  3. Sep 7, 2026سلام به همگی دوتا موقعیت شغلی برام ارسال شده دوستان مستعد و علاقه مند میتونن اقدام کنن
  4. Sep 3, 2026سلام به همگی تو این عکس تفاوت یه سیستم SC یا تک حامل رو با سیستم OFDM بررسی شده وقتی اکولا…
  5. Sep 2, 2026جزوه درس فرآیند تصادفی دکتر ربیعی دانشگاه تهران @aitelecomeng
  6. Aug 30, 2026کد متلب ویدئو دوم
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →