حافظه دسترسی تصادفی تک پورتی (Single Port Random Access Memory یا SPRAM) یک جزء حیاتی و پرکاربرد در طراحی‌های سیستم‌های دیجیتال مبتنی بر FPGA است. همانطور که از نام آن پیداست، این نوع حافظه تنها یک رابط برای دسترسی به داده‌ها دارد، به این معنی که در هر سیکل ساعت می‌تواند فقط یک عملیات (یا خواندن یا نوشتن) را انجام دهد. این حافظه‌ها برای ذخیره‌سازی موقت داده‌ها با سرعت بالا طراحی شده‌اند و کاملاً همگام با کلاک سیستم (Synchronous) عمل می‌کنند.

در معماری‌های FPGA، Single Port RAM عمدتاً به دو شکل پیاده‌سازی می‌شود:

  1. حافظه بلوکی (Block RAM یا BRAM): این‌ها بلوک‌های سخت‌افزاری اختصاصی و از پیش ساخته شده‌ای هستند که ظرفیت ذخیره‌سازی بالایی دارند و سرعت دسترسی بسیار خوبی را ارائه می‌دهند. BRAMها به صورت سخت‌افزاری بهینه شده‌اند و معمولاً برای بافرها، کش‌ها و جداول lookup بزرگ مورد استفاده قرار می‌گیرند.
  2. حافظه توزیع‌شده (Distributed RAM): این نوع حافظه با استفاده از عناصر منطقی عمومی FPGA، به خصوص جداول جستجو (Look-Up Tables یا LUTs)، سنتز می‌شود. Distributed RAM انعطاف‌پذیری بالایی در مکان‌یابی دارد و برای ذخیره‌سازی‌های کوچک‌تر که نیاز به نزدیکی فیزیکی به منطق پردازشی دارند، مناسب است.

اهمیت SPRAM در FPGA

استفاده از Single Port RAM در FPGA برای طیف وسیعی از کاربردها ضروری است، از جمله:

  • بافرهای FIFO (First-In, First-Out): برای همگام‌سازی جریان داده بین ماژول‌هایی با نرخ‌های مختلف داده.
  • جداول Lookup (LUTs): برای پیاده‌سازی توابع سفارشی یا نگاشت‌های داده‌ای.
  • کش‌های داده (Data Caches): جهت افزایش سرعت دسترسی به داده‌های پرکاربرد.
  • ذخیره‌سازی موقت داده‌ها: در طول پردازش‌های پیچیده.

معماری و سیگنال‌های کنترلی SPRAM

تمامی عملیات خواندن و نوشتن در SPRAM به صورت همگام با لبه فعال سیگنال ساعت انجام می‌شوند. سیگنال‌های کنترلی کلیدی برای مدیریت این حافظه عبارتند از:

  • CLK (ساعت): سیگنال همگام‌سازی اصلی که تمام عملیات‌ها را با لبه فعال خود (معمولاً لبه بالارونده) هماهنگ می‌کند.
  • ADDR (آدرس): یک سیگنال چند بیتی که مکان خاصی از حافظه را برای عملیات (خواندن یا نوشتن) مشخص می‌کند.
  • WE (Write Enable): سیگنال فعال‌سازی نوشتن. وقتی WE فعال باشد (مثلاً ‘1’)، عملیات نوشتن انجام می‌شود؛ وقتی غیرفعال باشد (مثلاً ‘0’)، عملیات خواندن انجام می‌گیرد.
  • DIN (Data In): پورت ورودی برای داده‌ای که قرار است در حافظه نوشته شود.
  • DOUT (Data Out): پورت خروجی برای داده‌ای که از حافظه خوانده شده است.

عملیات نوشتن (Write Operation) در SPRAM

فرآیند نوشتن داده در Single Port RAM معمولاً ساده و تک مرحله‌ای است. برای ذخیره یک داده جدید در یک آدرس مشخص:

  1. اعمال آدرس (ADDR): آدرس مکانی که قرار است داده در آن نوشته شود، روی خطوط ADDR اعمال می‌شود.
  2. اعمال داده ورودی (DIN): داده‌ای که باید ذخیره شود، روی خطوط DIN اعمال می‌گردد.
  3. فعال‌سازی WE: سیگنال WE باید فعال شود (مثلاً به ‘1’ تغییر یابد) تا ماژول حافظه فرمان نوشتن را دریافت کند.

همگام‌سازی با ساعت:

در لحظه رسیدن لبه فعال ساعت، داده اعمال شده روی DIN به صورت همگام در آدرس مشخص شده توسط ADDR در داخل حافظه ذخیره می‌شود.

نکته مهم: در طول عملیات نوشتن، خروجی DOUT معمولاً منعکس‌کننده داده نوشته شده در همان سیکل نیست. DOUT ممکن است داده قبلی را حفظ کند یا به حالت نامشخصی برود، زیرا SPRAM فقط یک پورت برای عملیات دارد و نمی‌تواند همزمان بنویسد و همان داده را از خروجی نشان دهد.

عملیات خواندن (Read Operation) در SPRAM

عملیات خواندن از Single Port RAM، به خصوص در BRAMهای FPGA، یک ویژگی کلیدی دارد که آن را از نوشتن متمایز می‌کند: تأخیر یک سیکل ساعت (One-Cycle Latency). این تأخیر به دلیل ساختار رجیستری (Registered) خروجی است که برای دستیابی به بالاترین فرکانس کاری و رعایت محدودیت‌های زمان‌بندی در FPGA ضروری است.

برای خواندن داده از یک آدرس مشخص:

  1. غیرفعال‌سازی WE: سیگنال WE باید غیرفعال باشد (مثلاً ‘0’) تا عملیات خواندن انجام شود.
  2. اعمال آدرس (ADDR): آدرس مکانی که قرار است از آن خوانده شود، روی خطوط ADDR اعمال می‌گردد.

همگام‌سازی و تأخیر:

  • لبه ساعت اول: در این لبه، آدرس اعمال شده (ADDR) به صورت همگام وارد ماژول حافظه شده و فرآیند بازیابی داده از آن آدرس آغاز می‌شود. در این لحظه، DOUT هنوز داده‌ای را نمایش می‌دهد که مربوط به سیکل ساعت قبلی است.
  • لبه ساعت دوم: داده‌ای که در سیکل ساعت قبلی از آدرس درخواست شده بازیابی شده بود، از طریق رجیستر خروجی عبور کرده و روی خطوط DOUT در دسترس قرار می‌گیرد.

توضیح تأخیر:

این تأخیر یک سیکلی به این معنی است که طراح باید توجه داشته باشد که داده‌ای که از DOUT خوانده می‌شود، همیشه مربوط به آدرسی است که در سیکل ساعت قبل درخواست شده بود. این یک ملاحظه طراحی بسیار مهم است و باید در منطق کنترلی (مانند ماشین‌های حالت) برای پردازش صحیح داده‌های خوانده شده از SPRAM در نظر گرفته شود.

کلیدواژه ها : خواندن و نوشتن-حافظه FPGA-Single Port RAM-SPRAM-Block RAM-BRAM-Distributed RAM-Write Operation-Read Operation-One-Cycle Latency-Clocked Memory-Synchronous Memory-WE Signal-ADDR Signal-DIN-DOUT-FPGA Memory Access-تأخیر خواندن-عملیات نوشتن حافظه-حافظه تک پورتی-طراحی FPGA