A. SHERAR
|
RAM - TEST |
INICIO - ANTERIOR - SIGUIENTE
Sistema para gestión de memorias RAM estáticas de acceso paralelo.
Consiste en:
un generador de direcciones binarias de 16 bits,
zócalos para memorias RAM de 32 kB y 64 kB,
un programa de PC para lectura y grabación.
CARACTERISTICAS
El generador de direcciones es una cascada de 4 contadores de 4 bits 74XX163, que permite direccionar desde 0 hasta 65535.
Dispone de entradas de Reset (/RST) y Clock (CLK), y una señal de retorno para indicar el desborde de 32767 (OVR).
Dispone de entradas de control para habilitación del chip (/CS) y para selección de grabacion o lectura (/WR).
La placa admite memorias flash o CMOS en zócalos de 28 o de 32 pines, y con capacidades de hasta 64 kB.
Está pensado para experimentar con diferentes estrategias de direccionamiento y para extensión a varios módulos de 32kb cada uno.
CIRCUITO
El primer esquema está limitado a memorias de 32 kB.
El bit 15 del contador se usa como indicador de desborde (OVR = OVer Run). Este bit se debe cablear externamente a un circuito de habilitación del CLK, o bien tomar de referencia por el software para limitar el recorrido del contador a la condición OVR = 0. Cuando el contador llegue a 32768 pondrá OVR = 1, y entonces debe inhibirse la entrada del CLK.
Se ha cableado el bit 0 del contador sobre el bit 14 de la memoria, previendo modificaciones del uso de este bit en el futuro.
Para direccionar memorias de 64 kB se debe conectar el registro completo de salida del contador (16 bits) a los bits de dirección de la memoria. En este caso para generar una señal de OVR en la cuenta 65535 se deberá llevar la señal de la patilla 15 a la entrada de un flip-flop (divisor de frecuencias) o efectuar la operación por software. Nótese la necesidad de poder resetear este flip-flop adicional.
La asignación de patillas en el puerto paralelo es la siguiente:
Función Patilla (DB25) Registro /WR 1 Control /CS 14 Control CLK 16 Control /RST 17 Control OVR 15 Estado D0-D7 2 a 9 Datos GND 18 a 25 (común)
CONTADOR
Se analizaron los circuitos que se muestran en las figuras 1 y 2, los dos esquemas sugeridos en la hoja de datos del SN74XX163.
Se ha elegido implementar el segundo ya que con más de una etapa no se pierde performance a frecuencias altas (f ~ 30 MHz).
PROGRAMA
El sistema de comunicación se inicializa identificando el puerto paralelo.
Para inicializar la memoria se envian las señales:
/CS <- 1, /WR <- 1,
y se configura el puerto de tal modo que inicialmente el registro de datos sea una entrada. Esto se hace con la rutina ram_setup.
La patilla OVR es el bit 15 del contador, que se pone en 0 al efectuar un reset. Esto se logra con la secuencia:
CLK <- 0, RST <- 0, CLK <- 1, RST <- 1
Como los contadores 74XX163 son sincrónicos, en esta operación la cuenta va a h0000 durante la subida de CLK, y OVR queda en 0.
Durante el conteo normal la patilla RST debe mantenerse en 1. El contador solamente avanza una cuenta cuando recibe una subida de CLK, en la forma:
CLK <- 0, CLK <- 1
Al llegar al valor h8000 la patilla OVR se pone en 1 indicando que se ha alcanzado la cuenta 32768 (de aquí el nombre OVerRun).
Para las memorias de 32 KB, que no emplean el bit 15, esto es equivalente a volver a la dirección h0000, y el bit OVR en 1 sirve como señal de desborde de la memoria, y se debe efectuar un RST.
En algunos programadores de EEPROM se conecta este bit OVR con la patilla /WR de modo que luego del ciclo de escritura, cuando OVR = /WR <- 1, automáticamente la memoria quede bloqueada para escribir.
En las memorias de 64 KB, el bit 15 es parte de la dirección y para acceder a la memoria completa no se debe resetear el contador cuando OVR <- 1. En tal caso se debe detectar el fin de la memoria mediante un divisor luego del bit 15, sea con un chip adicional o mediante software.
Para comandar la memoria se ha fijado intenamente la patilla /OE (not output enable) en 0, lo que deja las salidas permanentemente accediendo al bus de datos. Para evitar colisiones con el registro de datos del puerto bidireccional de la PC, con quien debe compartir el bus, se gestionan las señales /CS y /WR como sigue:
Para lectura de la RAM (rutina ram_read):
/CS <- 0,
se lee el dato del puerto,
/CS <- 1
Para grabación en la RAM (rutina ram_write):
/WR <- 0,
se convierte el puerto en salida,
se escribe el dato en el puerto,
/CS <- 0, (clock de grabación)
retraso de tiempo de acceso (*),
/CS <- 1,
se convierte el puerto en entrada,
/WR <- 1
(*) como mínimo el tiempo de acceso para grabación.
Para abandonar el sistema se debe enviar las señales:
/CS <- 1, /WR <- 1,
y reconfigurar el puerto como salida mediante la rutina ram_exit.
CODIGO FUENTE
El código desarrollado para los experimentos se basa en las rutinas que se reproducen a continuación, codificadas en lenguaje C.