Story Transcript
1
SelectRAM+memory Bloques de memoria RAM En las FPGAs Spartan IIE tiempo de acceso RAM, algunas veces se usa cerrojo en el
Juan Manuel Narváez Sánchez, Carlos Andrés Moreno Tenjica, Estudent Member IEEE
Resumen: Las FPGAs Proveen bloques de memoria RAM conocidos como SelectRAM estos bloques buscan proveer recursos al diseño sin tener que sacrificar RAM distribuida o recurso lógicos, esta memoria es totalmente sincronía con el objetivo de facilitar el análisis de tiempos y una fácil inicialización de la configuración que se va a trabajar, de esta manera poder permitir el diseño de sistema mas complejos y robustos.
puerto de salida con el propósito de hacer más rápida la respuesta en la
Salida, esto es una solución asincroná inferior al resultado que puede entregar una operación de lectura en un sistema sincronó 2.2 READ PIPELINED (Dos flancos de reloj)
I. INTRODUCCIÓN
L
a familia de FPGAs proveen bloques de memoria RAM configurables de, 4K bits de manera que pueden ser configurados como memorias de 4096x1 hasta 256x16, es decir tanto el tamaño de la palabra que va ser guardada , como el número de posiciones que tiene la memoria puede ser configurado, esta configuración de puertos es hecha totalmente independiente y de manera sincrona, esta característica permite gran variedad en cuanto el diseño de estructuras RAM se refiere, por ejemplo en el diseño de arreglos de datos como pilas puede ser de gran utilidad el uso de la memoria RAM brindando una gran capacidad en el diseño y también una gran velocidad de respuesta debido a su funcionamiento sincronó. Cada FPGA de la línea Spartan provee un determinado número de bloques RAM en nuestro caso, la FPGA a usar es la XC2S200, Esta FPGA tiene 14 bloques de memoria RAM de 4k cada uno para un total de 56K disponibles para diseño.
2. PRINCIPIOS DE LAS MEMORIAS SINCRONAS Las memorias sincronás tienen distintos modos de operación, los mas utilizados estas son cuatro 2.1 Read Through(Un flanco de reloj) La lectura de la dirección es registrada el un flanco de reloj en el puerto de lectura, y el dato aparece en la salida en un
La dirección de lectura es registrada en un flanco de reloj y el dato aparece en la salida en siguiente flanco de reloj 2.3 WRITE BACK (un flanco de reloj) la dirección de escritura es registrad en flanco de reloj y el dato que esta en el puerto de entrad es escrito en la memoria como reflejo del puerto de entrada 2.4 WRITE THROUGH( Un flanco de reloj) La dirección de escritura es registrada en un flanco de reloj, Y es escrito en la memoria, bien como el dato es leído también en un flanco de reloj, entonces la lectura y la escritura son hechas en el mismo ciclo 3 CARACTERÍSTICAS DE LOS BLOQUES RAM 3.1 Todas las entradas son registradas por el reloj y disponibles según la especificación de tiempo 3.2 Todas las salidas tienen funciones read through y write back dependientes del pin WE, y disponibles según las especificaciones de tiempo. 3.3 Los bloques RAM son bloques reales de memorias SRAM y no tienen parte combinatorial entre la dirección y la salida 3.4 Los puertos son independientes uno del otro 3.5 Las operaciones de lectura y escritura solo necesitan un ciclo de reloj 3.6 Los puertos de salida tienen cerrojo y no cambian su configuración dependiendo de escritura o lectura 4 INCLUSIÓN DE LAS MEMORIAS RAM
2 En un diseño se pueden incluir memorias RAM llamando las librerías primitivas especiales o usando el sistema generador CORE para crear una memoria, estas están disponibles en distintas configuraciones de tamaño Los diseños de las memorias son muy flexibles en cuanto a la utilización de los pines que forman la memoria RAM, por ejemplo una memoria ROM puede ser construida simplemente no usando el WE ni los datos de entrada
cada bloque de estos formado por memorias de 4096 bits 5. PUERTOS DE ENTRADA Y SALIDA: Toda memoria RAM tiene las siguientes entradas
Las anteriores figuras muestran dos ejemplos de las librerías primitivas de bloques RAM. , estos bloques son disponibles en los siguientes tamaños de memoria
CLOCK CLK: Cada puerto es totalmente sincronó con entradas independientes de reloj, el puerto de salida esta referenciado a un tiempo de salida que esta referenciado a CLK ENABLE EN Este pin afecta la funcionalidad de la lectura, la escritura y el reset, cuando el pin EN esta inactivo a la memoria no se le puede escribir ningún tipo de dato WRITE ENABLE WE Activando el pin WE este le permite al puerto escribir en las celdas de memoria, el contenido del dato es escrito en la celda de memoria apuntada por el bus memoria, y el nuevo dato también es reflejado en el bus de salida, cuando el dato es inactivo simplemente se ve el dato reflejado en el bus de salida. RESET RST El pin reset obliga a los cerrojos de salida a ceros sincrónicamente, esto no afecta a las celdas de memoria ni a la operación de escritura en otro puerto BUS ADDRESS ADDR[# downto 0] Selecciona la celda de memoria que va a ser leída o escrita, el ancho del puerto es determinado por el tipo de memoria que esta siendo utilizada
3 BUS DATA IN DI [# downto 0] Provee el nuevo dato que va a ser escrito en la celda de la memoria apuntada por la dirección BUS DATA OUT DO[# downto 0] El bus de datos de salida refleja el contenido de la celda de memoria, referenciada a la dirección de memoria apuntada por ADDR , el ancho de bus esta dado por el tipo de memoria que es utilizada PINES DE INVERSIÓN DE CONTROL Los cuatro pines CLK, RESET, WE, y EN tienen independiente inversión de control, según la opción de configuración, los inversores son automáticamente absorbidos por el bloque RAM MAPEO DE DIRECCIÓN Cada puerto accede a las 4096 celdas de memoria seleccionadas usando un esquema distinto de direccionamiento dependiente del ancho del puerto, la ubicación física de cada memoria esta dada por la siguiente formula INICIO = ((ADDR+1)*ANCHO)-1 FIN= ADDR*ANCHO Esto puede ser observado en la siguiente tabla
6.
SISTEMA GENERDOR CORE DE XILINX
El sistema generador CORE provee un bloque de memoria sencillo o un bloque de memoria dual, ambos soportado por al funciones de memoria RAM, ROM y funciones de solo escritura acorde a las señales de escritura que son seleccionadas, cualquier tamaño de memoria puede ser creado en la arquitectura soportada Ambos módulos son parametrizados con el modulo de generación CORE, El usuario puede seleccionar el nombre del componente y que tipo de pines quiere utilizar, además escoger que funciones se hacen activo a bajo o activo a alto. El usuario puede especificar los contenidos de la memoria, por defecto se inicializan en ceros, los valores de inicialización son descritos en el archivo de inicialización que consiste en una línea de valores binarios por cada posición de memoria.
la salida del CORE incluye un reporte de las opciones seleccionadas y los recursos de dispositivo que son requeridos. El número de bloques RAM que son requeridos son mostrados, y una memoria muy baja es seleccionada, algunas multiplexaciones externas pueden ser requeridas y este reporte esta en términos del número de deslizamientos que fueron necesarios. 7 RESOLUCIÓN DE CONFLICTOS Los bloques RAM de la FPGA son bloque reales de memoria dual escritura / lectura, que permite acceso simultaneo a la misma celda de memoria por los dos puertos, Cuando un puerto escribe en una posición de memoria dada el otro puerto no puede direccionar la misma posición de memoria. La siguiente lista permite la resolución de este tipo de conflictos • Si ambos puertos escriben la misma posición de memoria simultáneamente, considere ese dato como invalido • Si uno de los puertos intenta una lectura de una celda que simultáneamente esta siendo escrita, ocurre lo siguiente: o Sucede la escritura o El dato de salida en puerto de escritura refleja el dato escrito exactamente o El dato de salida en el puerto de entrada es invalido Los conflictos no causan ningún daño físico 8 OPERACIONES DE ESCRITURA Y LECTURA En la figura es mostrado en diagrama de tiempos de un bloque sencillo RAM
4
En el primer flanco de CLK, ADDR, DI, EN, WE y RST son hechos un muestreo, EN en alto y WE en bajo indican una operación de lectura, el bus DO tiene el contenido de la posición de memoria 0x00 como es indicado por el pin ADDR En el segundo flanco de CLK, WE, ADDR, RST, EN y DI son hechos un muestreo de nuevo. El pin EN y WE están en alto lo que indican una operación de escritura. El bus DO refleja lo que tiene el bus DI y este dato es escrito en la posición de memoria 0x00 como indica ADDR
El reloj del puerto A tiene un periodo mas largo que el que esta en el puerto B. Los parámetros TBCCS (clock to clock setup) Es mostrado en el diagrama. Todos los otros parámetros son idénticos que en el ejemplo de puerto sencillo, con la única diferencia que el TBCCS es violado en el diagrama
TBCCS es de importancia cuando las direcciones de ambos En el tercer flanco de CLK, las entradas son muestreadas EN esta en alto y WE en bajo, lo que indica una operación de lectura. El bus DO tiene el contenido de la posición de memoria 0x7E como lo indica ADDR El cuarto flanco de CLK, las entradas son muestreadas de nuevo, El pin EN es bajo por lo tanto la memoria esta inhabilitada y en DO mantiene el último dato que recibió
9 TIEMPOS DEL PUERTO DUAL La figura muestra un diagrama de tiempo necesario en las operaciones de lectura y escritura
puertos son las mismas y al menos un puerto esta funcionando con operación de escritura cuando el parámetro clock to clock setup es violado por una condición WRITEWRITE El contenido de la memoria en la posición de memoria será invalido, cuando es una condición WRITEREAD el contenido de la memoria será correcto pero el dato en puerto de lectura será invalido, como el primer flanco de CLKA, La dirección de memoria 0x00 será escrita con el valor 0xAAAA y esta reflejado en el bus DOA , La última operación del puerto B fue leída de la misma posición de memoria, El bus DOB del puerto B no cambia con el nuevo valor del puerto A, y retiene el último valor leído, A corta tiempo después, puerto B ejecuta otra lectura de la posición de memoria 0x00 y ahora el puerto B refleja el nuevo valor del puerto A En el segundo flanco de CLKA, la posición de memoria 0x7E es escrita con el valor 0x9999 y es reflejada en el bus DOA, el puerto B ejecuta una operación de lectura violando el parámetro TBCCS y el puerto B refleja el nuevo valor escrito por el puerto A En el tercer flanco de CLKA, el parámetro TBCCS es violado con dos escrituras en la posición de memoria 0x0F, DOA y DOB reflejan los contenidos de DIA y DIB pero el valor guardado en 0x0F es invalido En el cuarto flanco de CLKA se ejecuta una operación de lectura de la posición de memoria 0x0F pero un dato invalido
5 se presenta en DOA, el puerto B también ejecuta una operación de lectura de la posición de memoria 0x0F obteniendo el mismo resultado errado
La memoria RAM puede ser simulada con la inicialización de valores utilizando genéricos en cualquier simulador de VHDL O Verilog
En el quinto flanco de CLKA es una operación de lectura que no viola el parámetro TBCCS previa escritura del puerto B en la posición de memoria 0x0F por lo tanto en DOA se encuéntrale valor anteriormente escrito correctamente por el puerto B. 10. INICIALIZACIÓN El bloque RAM puede ser inicializado durante la secuencia de configuración del dispositivo,, las 16 propiedades de inicialización de 64 valores hexadecimales cada una para un total de 4096 bits seleccionan la inicialización de cada memoria RAM. Esas propiedades aparecen en la tabla, Cualquier inicialización no selecciona explícitamente como ceros. La inicialización parcial son cadenas llenas de ceros, la Inicialización de cantidades mas grandes que 64 valores hexadecimales generan un error Inicialización en VHDL
6