miércoles, 5 de agosto de 2015

Arquitectura de una FPGA: Bloque de Memoria RAM (BRAM)


3. Bloques de Memoria RAM (BRAM) 

    Para aplicaciones que requieren acceso a memoria, ya sea para escritura y lectura (tipo RAM) o sólo lectura (tipo ROM), los FPGAs tienen bloques de memoria RAM (BRAM) disponibles para usarlos de acuerdo a la necesidad. Aún cuando no se usen estos bloques, siguen estando dentro del FPGA. La cantidad de bloques disponibles depende del tamaño del FPGA. En la familia Spartan, por ejemplo, el rango de bloques de RAM disponibles va desde 4 hasta 100 bloques. Cada bloque de RAM contiene 18.432 bits de RAM estática rápida, de los cuales 16K son dedicados para datos, y los otros 2K para bits de paridad o para algunos bits extras de los datos almacenados. 

Se pueden conectar diferentes BRAMs en cascada, ya sea para tener un mayor ancho de la palabra de datos, para tener un mayor tamaño de la memoria o bien para ambas cosas (ancho + tamaño). En este caso el retardo es mínimo gracias a las conexione, ya que se usan recursos dedicados de ruteo. La Figura 1 muestra ejemplos de distintos tamaños de bloques de memoria que se pueden implementar usando un simple BRAM.

Figura 1. Diferentes configuraciones de relación datos/direcciones que se pueden implementar en los BRAMs

    Los BRAM son bloques configurables de acuerdo a las necesidades del diseño, es decir el mismo bloque puede ser configurado para que funciones como RAM, ROM, FIFO (First Input First Output), convertidor de ancho de palabra, buffers circulares y registros de desplazamientos. A su vez, cada una de estas configuraciones soporta diferentes anchos de la palabra de datos y diferentes tamaños del bus de direcciones.

Figura 2. BRAM de 18Kb como a) dual port y b) single port

    Tal como muestra la Figura 2, físicamente el bloque RAM (BRAM), tiene dos puertos de acceso completamente independientes, llamados Puerto A y Puerto B. La estructura es totalmente simétrica. Cada puerto de memoria tiene su propia señal de reloj, habilitación de reloj y habilitación de escritura. Por ello, cada puerto de memoria es sincrónico con su propio reloj, habilitación de reloj y habilitación de escritura. La lectura de la memoria es sincrónica y requiere un reloj y una habilitación de reloj.

Entre las principales aplicaciones de los BRAM se pueden destacar las siguientes:
  1. Almacenamiento de programas para procesadores embebidos en el FPGA.
  2. Rd/Wr variables durante cálculos matemáticos, por ej. Coeficientes para filtros FIR.
  3. Buffers circulares.
  4. Registros de desplazamiento o muy largos o muy anchos.
  5. Líneas de retardo.
  6. Realización de MEF usando técnicas de microprogramación.
  7. Contadores muy largos.
  8. Memorias Direccionables por Contenido (CAM) de alto rendimiento de Rd/Wr
  9. Almacenamiento de formas de onda o tablas de funciones trigonométricas para generar salidas tipo Direct Digital Synthesis (DDS) (Síntesis Digital Directa).
    Cabe aclarar que lo detallado con respecto al tamaño y cantidad de los BRAMs corresponde a la familia Spartan-3. Por otro lado, el Virtex-5 tiene algunas diferencias al respecto. Por ejemplo, cada bloque BRAM es de 36Kb, se puede configurar para disponer de código corrector de error tipo Hamming (usando 8 bits), las FIFOs tienen construidas la lógica de banderas dentro del BRAM, y así, otras características que por algo hacen a la V-5 más cara, pero de mayor rendimiento.

    Finalmente es necesario recordar algo ya analizado en el post anterior: Rebanadas (SLICE) de un CLB, para implementar pequeñas memorias se hace uso de los SLICEM, que tienen la opción de ser configurados como bloques de memoria de 16x1. Concatenando varios SLICEM se pueden tener memorias de tamaño pequeño y de rápido acceso.

No hay comentarios:

Publicar un comentario