¿Qué tipos de RAM paralela hay?

1

Básicamente no tengo experiencia en ingeniería eléctrica o diseño de hardware, pero como ingeniero de software experimentado, recientemente me interesé en diseñar mi propia CPU. Seguí las instrucciones / ejercicios presentados en el libro "The Elements of Computing Systems / Nisan & Schocken", que sugiere un diseño de RAM similar a este:

CHIP RAM8 {
    IN in[16], load, address[3];
    OUT out[16];

    PARTS:
    DMux8Way(in=load,sel=address,a=a1,b=b1,c=c1,d=d1,e=e1,f=f1,g=g1,h=h1);
    Register(in=in,load=a1,out=aout);
    Register(in=in,load=b1,out=bout);
    Register(in=in,load=c1,out=cout);
    Register(in=in,load=d1,out=dout);
    Register(in=in,load=e1,out=eout);
    Register(in=in,load=f1,out=fout);
    Register(in=in,load=g1,out=gout);
    Register(in=in,load=h1,out=hout);
    Mux8Way16(a=aout,b=bout,c=cout,d=dout,e=eout,f=fout,g=gout,h=hout,sel=address,out=out);
}

Así que hay un bus de "dirección", que determina de qué dirección leer. Opcionalmente, en el mismo ciclo, el valor del bus "in" se escribe en esa dirección de memoria si se establece el bit de "carga".

Ahora intenté dar un giro a la arquitectura sugerida por el libro, donde me gustaría leer las instrucciones y los datos de la RAM en un solo ciclo (el libro propone un ROM separado para las instrucciones). Se me ocurrió este diseño de RAM:

CHIP RAM8 {
    IN in[16], load, address1[3],address2[3];
    OUT out1[16], out2[16];

    PARTS:
    DMux8Way(in=load,sel=address1,a=a1,b=b1,c=c1,d=d1,e=e1,f=f1,g=g1,h=h1);
    Register(in=in,load=a1,out=aout);
    Register(in=in,load=b1,out=bout);
    Register(in=in,load=c1,out=cout);
    Register(in=in,load=d1,out=dout);
    Register(in=in,load=e1,out=eout);
    Register(in=in,load=f1,out=fout);
    Register(in=in,load=g1,out=gout);
    Register(in=in,load=h1,out=hout);
    Mux8Way16(a=aout,b=bout,c=cout,d=dout,e=eout,f=fout,g=gout,h=hout,sel=address1,out=out1);
    Mux8Way16(a=aout,b=bout,c=cout,d=dout,e=eout,f=fout,g=gout,h=hout,sel=address2,out=out2);
}

Básicamente, la única diferencia es que introduje un segundo bus de direcciones, por lo que puedo leer dos direcciones en paralelo al mismo tiempo introduciendo también un segundo mux en el diseño del chip.

Ahora tengo varias preguntas relacionadas con este diseño:

  • A mi parecer, la introducción de otro mux parece bastante barato para leer dos elementos de datos de la RAM en un solo ciclo. Además, el diseño de hardware me parece totalmente sólido (como un noob de diseño de hardware total) y la simulación del chip parece probar el diseño. ¿Me falta un gran error / desventaja del diseño? ¿Existen contraints eléctricos en el diseño?
  • ¿Este tipo de diseño es relevante cuando las lecturas de una memoria de jerarquía inferior toman varios ciclos de todos modos?
  • ¿Este tipo de diseño (leer múltiples elementos de datos en paralelo desde la RAM) se utiliza en cualquier tipo de chips existentes listos para la producción?
  • Si es así ... ¿qué tipo de chips?
  • Si no ... ¿por qué?

Al buscar en Google, lo único que se me ocurrió fue el tema "PRAM", que se refiere a "máquinas paralelas", no a "memoria paralela". También parece que hay "DDR / QDR RAM" que no entiendo, ya que todavía están usando un solo bus para leer datos (¿están leyendo diferentes elementos de datos en los flancos de reloj ascendente / descendente?). ¡Pero supongo que este tipo de RAM no son realmente relevantes en lo que respecta a mi pregunta de diseño de todos modos, ya que necesitan múltiples ciclos para leer datos de todos modos, mientras que mi diseño está basado en el registro y puede leer la memoria de acceso aleatorio en un solo ciclo! / p>

Apreciaría cualquier tipo de información / aclaración sobre este tema :)

    
pregunta Wolf

1 respuesta

2

El término que desea es "puerto dual RAM", y sí, existen como componentes discretos y como componentes dentro de chips como los FPGA. Se usan con frecuencia cuando es necesario pasar datos de un dominio de reloj a otro, y algo menos frecuentemente como almacenamiento de caché, que es lo que parece estar intentando hacer.

DDR / QDR (velocidad de datos doble y velocidad de datos cuádruples, respectivamente) son otra cosa: son técnicas para mejorar el ancho de banda de las conexiones individuales a un chip RAM.

Puede crear efectivamente una memoria con dos puertos de lectura simplemente conectando dos memorias normales de un solo puerto. Conecte sus puertos de escritura a la misma fuente y use sus puertos de lectura de forma independiente. Los contenidos siempre serán copias idénticas.

    
respondido por el Dave Tweed

Lea otras preguntas en las etiquetas