RAM multipuerto (1 puerto de escritura, muchos puertos de lectura)

Tengo un proyecto en el que puedo necesitar una RAM de búsqueda de 128 KB. Tengo 1 puerto de escritura que escribe los valores de búsqueda al inicio de la aplicación. Tendré más de 2 puertos de lectura (supongo que 4). No quiero replicar la RAM de 128 KB 4 veces por motivos de espacio.

Quería saber si es posible construir una RAM multipuerto usando Xilinx BRAM simplemente agregando npuertos RdAddr/RdDataOut. Es posible. ¿De qué debo ocuparme cuando intento hacer esto?

¿Hay algún proyecto de código abierto que haya hecho esto, así que no tengo que reinventar la rueda?

Gracias por tu información.

PVP

No es una respuesta, pero sé que XESS Corp. tiene publicado un componente SDRAM de dos puertos. Podría ser una referencia útil.
Esa es una memoria RAM bastante grande para tener interna en el FPGA. Es posible que tenga problemas de rendimiento al intentar enviar el bus de direcciones a todos esos BRAM. ¿Qué tan rápido esperas cronometrar esto? ¿A qué dispositivo te diriges?

Respuestas (1)

Suponiendo que necesita un ciclo de lectura en cada puerto en cada ciclo de reloj, cada BRAM le dará dos puertos de lectura. Más allá de eso, tienes que replicar el contenido de la memoria.

¿El ancho de banda requerido en cada puerto es menor que el ancho de banda bruto de la BRAM? En ese caso, podría considerar multiplexar los puertos. Utilice un contador que funcione a la máxima velocidad de la BRAM para impulsar un multiplexor que escanee el bus de direcciones de cada puerto, envíe estas direcciones a la BRAM y luego entregue los datos (generalmente 2 relojes más tarde) al bus de datos correspondiente para cada puerto. puerto.

La desventaja de este enfoque es que la latencia de acceso para cada puerto ahora es N relojes más larga que en el caso no multiplexado. Hay varias formas de lidiar con esta latencia, incluida la adición de etapas de canalización adicionales a las otras rutas de datos.

Tenga en cuenta que con una BRAM de 2 puertos dentro del módulo, puede escanear dos de los puertos externos a la vez.