¿Es posible la RAM con lectura anticipada (mirar hacia adelante)?

1

¿Es posible inferir de manera eficiente una RAM con puertos "peek" aparte de los puertos estándar habituales?

Una memoria RAM de 32 bits x 4 puede tener un puerto para mirar los datos justo antes de los datos actuales a los que accede la dirección de lectura. El código aproximado sería ...

assign peek = mem [ (rd_addr + 1) & 2'b11 ]; // RAM peek port (read).

aparte del código RAM de stock ...

reg [31:0] mem [3:0]; // 2D array.
always @ (posedge clk) if (wr ) mem [ wr_addr ] <= wr_data; // Write.
always @* rd_data = mem [ rd_addr ]; // Main Read.

Sería bueno inferir un bloque de RAM SINGLE con algunos circuitos de lectura adicionales (¿muy simples?) (ISE infiere 2 bloques de RAM). Supongo que esto no debería requerir una verdadera RAM de puerto de lectura dual (circuitos de lectura independiente) o duplicación de RAM, ya que las direcciones de lectura siempre están relacionadas (siempre 1 adelante). ¿Existe una manera eficiente de implementar lo anterior en un FPGA moderno típico?

EDITAR: Olvidé agregar habilitación de escritura!

EDITAR: Esta memoria RAM está destinada a la decodificación de video. Por ejemplo, un flujo de píxeles recibidos como 0x1234_5678 0x023_45678, 0xAAAA_AAAA se descodificaría como 0x1234 (16 bits superior), 0x5678_23 (inferior de 16 bits + 0x23 desde el siguiente, se omite 0x678A_AAAAAAa etc (. El algoritmo de decodificación se deriva de un LFSR que se asigna al transmisor y cambia para cada píxel.

    
pregunta Revanth Kamaraj

1 respuesta

0

Supongo que quiere preguntar si es posible con una RAM física, no con una RAM "virtual". En esencia, muchas unidades de gestión de memoria (MMU) de los procesadores modernos intentan hacer este tipo de búsqueda anticipada, obteniendo previamente el contenido de las siguientes ubicaciones de RAM durante los ciclos del bus RAM que de otra manera estarían inactivos.

Esta estrategia ha existido por algún tiempo y suena simple, pero cuando se implementa en un procesador, las complicaciones aumentan rápidamente. Los procesadores no siempre quieren ver la "siguiente" ubicación en la RAM, incluso cuando ejecutan las instrucciones del programa. Las ramas dependientes de los datos se producen (bucles condicionales, construcciones "FOR" y "WHILE" en lenguajes de alto nivel ...), y la MMU necesita "vaciar" el búfer de anticipación cuando esto sucede.

Para implementar una búsqueda de ubicación única en una RAM física, hay una serie de estrategias posibles: 1) una verdadera memoria RAM de doble puerto, como se señala. Esto requiere dos direcciones y dos buses de datos y puede mirar hacia adelante a cualquier ubicación arbitraria, no solo a la siguiente. 2) una RAM de "mirar hacia adelante por una ubicación", que requeriría solo un único bus de dirección, pero aún requiere dos buses de datos (uno para el contenido de la ubicación "actual" y otro para el contenido de la ubicación "siguiente") 3) una RAM "precargada", que lee en voz alta el contenido de la ubicación "siguiente", la almacena en un búfer externo de una palabra, al tiempo que presenta los resultados de búsqueda anteriores en la salida del búfer. Este tipo de acuerdo debe estar "preparado" con una operación de lectura para llenar el búfer de una palabra antes de ingresar al modo de captación previa "normal".

    
respondido por el AndyW

Lea otras preguntas en las etiquetas