ROM de Doble Puerto: Acceso Simultáneo para Sistemas de Alto Rendimiento

Una ROM de doble puerto (Read-Only Memory) es un dispositivo de memoria con dos puertos de dirección/datos independientes que pueden leer el mismo arreglo de memoria de forma concurrente. Elimina el cuello de botella de la memoria de puerto único en sistemas donde múltiples agentes (CPUs, DMA, DSP, GPU) necesitan acceso de lectura simultáneo.

Arquitectura

  • Arreglo de memoria compartido: Almacenamiento físico único (ROM enmascarada, OTP, o Flash embebido).
  • Puerto A y Puerto B: Cada uno tiene Bus de Dirección, Bus de Datos, Habilitación de chip, Habilitación de salida, Reloj (si es síncrono) independientes.
  • Lógica de arbitraje: Maneja solicitudes de acceso simultáneas. Políticas: prioridad fija, round-robin, o «última escritura gana» (para RAM). Para ROM, las lecturas simultáneas no entran en conflicto — ambos puertos muestran datos en el mismo ciclo.

¿Por qué ROM de doble puerto? (Beneficios)

  • Lecturas concurrentes sin contención: La CPU busca instrucción mientras la DMA carga una textura — sin estados de espera.
  • Latencia determinista: Sin retraso de arbitraje para lecturas (a diferencia de la RAM de doble puerto donde existen conflictos de escritura/lectura).
  • Diseño de sistema simplificado: No necesidad de multiplexores de bus externos, cachés o RAM en sombra para compartir una sola ROM.
  • Seguridad: Un puerto para arranque seguro (inmutable), otro para la aplicación — separación impuesta por hardware.

Aplicaciones Típicas

AplicaciónPuerto APuerto B
Controlador de gráficos/pantallaGPU: Obtención de textura/geometríaControlador de pantalla: Escaneo del framebuffer
DSP / AudioNúcleo: Búsqueda de coeficientes/tablasDMA: Transmisión de muestras
SoC embebido / IoTMCU: Código de arranque + FirmwareDepuración / Rastreo / Host externo
Redes / ASIC de conmutadorCanal de ingreso: Tablas de búsquedaCanal de egreso: Reglas de reescritura
ECU automotrizNúcleo 0 en paso a paso: CódigoNúcleo 1 en paso a paso: Código (comparar)
Configuración de FPGAControlador de configuración: BitstreamLógica de usuario: ROM constante (init de LUT)

Limitaciones

  • Área y costo: ~1.5–2× ROM de puerto único (decodificadores, amplificadores de sentido, multiplexores de salida, arbitraje duplicados).
  • Densidad: Menor capacidad máxima por área de matriz.
  • Potencia: Dos puertos activos → mayor corriente dinámica.
  • Disponibilidad: Menos común como componente discreto; mayormente embebido en ASICs/SoCs/FPGAs. La ROM/NOR Flash de doble puerto discreto existe (p. ej., Cypress/Infineon, Micron, Winbond) pero es de nicho.

ROM de Doble Puerto vs. RAM de Doble Puerto

  • ROM: Solo lectura. Las lecturas simultáneas siempre son seguras. Usada para constantes, firmware, LUTs, código de arranque.
  • RAM: Lectura/Escritura. Requiere arbitraje para acceso simultáneo (lectura/lectura OK, lectura/escritura o escritura/escritura en conflicto). Usada para buffers compartidos, FIFOs, frame stores, buzones entre núcleos.

Alternativas Modernas

  • Puerto único + Caché: Caché L1/L2 absorbe la mayoría de accesos; la ROM/Flash de puerto único principal es suficiente.
  • XIP (Execute-in-Place) Flash: Flash Quad/OctaSPI mapeado a memoria con caché — evita ROM separada.
  • Block RAM de FPGA (Verdadero Doble Puerto): Configurable como ROM (archivo de init). Gratis en la matriz.

Resumen

La ROM de doble puerto proporciona acceso de lectura simultáneo garantizado por hardware para dos maestros independientes. Intercambia área de silicio por rendimiento determinista y sin contención — crítico en gráficos, DSP, seguridad crítica en paso a paso y redes de alta velocidad. En SoCs modernos, a menudo se reemplaza por Flash de puerto único con caché o BRAM de FPGA.