¿Por qué una SRL basada en LUT6 tiene solo 32 entradas pero no 64?

Los FPGA de Xilinx son capaces de usar LUT como elementos de memoria. Se puede utilizar como ROM, RAM y Shift Register (SRL).

Los nuevos dispositivos Xilinx usan LUT de 6 entradas, lo que proporciona 64x1 bits para RAM/ROM, pero solo 32 bits para SRL.

¿Por qué las SRL están restringidas a 2^5 bits?

No tengo conocimiento de ninguna explicación en los documentos oficiales.

Respuestas (2)

Creo que esto se debe al hecho de que las LUT del Spartan 6 están construidas internamente como una LUT de 5 entradas y 2 salidas seguidas de un mux evitable.

Ahora, por qué no puede hacer un registro de desplazamiento de 2 bits de ancho y 32 bits de largo en una sola LUT es una buena pregunta. Parece que eso debería ser posible, y luego debería ser posible hacer un bucle de la salida de un lado al otro lado para obtener un registro de desplazamiento de 64 bits en una sola LUT. Tendrías que preguntarle a Xilinx por qué no lo apoyan.

No tengo una respuesta, ya que no conozco los detalles internos de las rebanadas de Xilinx. Tengo algunos consejos.

Primero, no puede guardar datos en un LUT6. Solo puede guardar datos en registros (que están numerados 2/LUT6) y RAM distribuida/blockRAM. Lo que anula un poco su suposición LUT6 = 64 bits.

La RAM distribuida y los registros de desplazamiento no están relacionados con las primitivas LUT6. Si observa la Guía del usuario de bloques lógicos de configuración de Spartan-6 , verá que hay 3 tipos de segmentos en esa arquitectura:

  1. Segmento normal, con solo LUT6 ( tienen otras cosas, simplemente nada relevante para esta discusión).
  2. SLICEL, que tienen LUT6 y bloques lógicos de acarreo rápido.
  3. SLICEM, que tiene lo que tiene SLICEL, más RAM distribuida.

Los registros de desplazamiento (y la RAM distribuida) solo están disponibles en SLICEM CLB, lo que significa que necesitan el bloque de RAM distribuida, así como el LUT6. Xilinx no da detalles sobre el bloque de RAM, pero sabemos por la documentación que un LUT6+RAM puede implementar un puerto único distribuido de 64x1 bit RAM o un SRL32.

Un gurú de VLSI probablemente podría deducir cuáles son los detalles de la RAM interna, pero me parece razonable que:

  • 1 LUT6 + 1 bloque RAM = SRL32
  • 1 LUT6 + 1 bloque de RAM = 64x1b RAM de puerto único
  • 2 LUT6s + 2 bloques de RAM = 64x1b RAM de doble puerto simple

Como registros de desplazamiento, probablemente se implemente como RAM de doble puerto de 32 bits con controles específicos provistos por el LUT6.

Mi declaración LUT6 se usa como memoria es correcta :). Está indicado en el manual del CLB. Xilinx utiliza el puerto de configuración de una LUT para permitir el acceso del usuario al valor de LUT almacenado. Si usa una LUT como RAM, simplemente significa usar las entradas A0 a A5 como dirección. El therm SliceL/M significa que no todos los CLB ofrecen esta función (M -> está disponible). Si observa la guía CLB, verá que se puede sincronizar un LUT (reloj de turno).
Si escribe un registro de desplazamiento de 3 bits en VHDL, verá que ISE genera un SRL16 de 2 bits y un D-FF. Las entradas LUT se utilizan como dirección de derivación. Es posible implementar fifos basados ​​en LUT-RAM que usen solo 1 contador de lectura (puntero). La escritura fifo es solo un cambio de SRL en funcionamiento. Las primitivas LUT, RAMxxSy, SRL, ROMxxSy se asignan al mismo hardware, solo que con otra lógica de control habilitada.
Su documento Spartan6 CLB vinculado muestra estas características en la página 9. Los 4 bloques más a la izquierda son LUT que se pueden configurar de muchas maneras (viñetas cuadradas). También puede ver las entradas clk y we. A1 a A6 se usa como dirección de escritura para LUTs A..D. las entradas normales A1/B1/C1/D1..A6/../D6 se utilizan como dirección de lectura. Hay una ruta de cambio dedicada de LUT a LUT di1/di2 -> mc31. Página 17 -> Ejemplo de RAM.
Tienes razón. Solo puedo adivinar la limitación de 32 bits, pero aún así, la primitiva de Xilinx permite el uso de la ubicación de memoria 64 solo en la configuración de un solo puerto (el registro de desplazamiento es un puerto dual de caso especial). La memoria de 64 puertos duales requiere 2 LUTM.