9 votos

¿Cómo puedo implementar una muy simple asincrónica controlador DRAM?

Me gustaría saber cómo construir un bare bones asincrónica controlador DRAM. Tengo unos 30-pin 1 MB SIMM 70 ns DRAM (1Mx9 con paridad) de los módulos que me gustaría utilizar en un homebrew retro equipo de proyecto. Desafortunadamente no hay una hoja de datos para ellos así que me he ido de la Siemens HYM 91000S-70 y la "Comprensión de la DRAM de Operación" , por parte de IBM.

La interfaz básica de la que me gustaría terminar con es

  • /CS: en, chip select
  • R/W: en, de lectura y no de escritura
  • RDY: fuera, ALTO cuando los datos están listos
  • D:/salida de 8 bits de bus de datos
  • R: en, dirección de 20 bits de bus

Actualización parece bastante directa, con varias formas de hacer lo correcto. Yo debería ser capaz de hacer distribuido (interleaved) RAS-sólo refrescante (ROR) durante reloj de CPU BAJA (donde no hay acceso a la memoria que se hace en este chip en particular) el uso de cualquier contador de la dirección de fila de seguimiento. Creo que todas las filas que necesite actualizarse al menos cada 64 milisegundos según JEDEC (512 por 8ms de acuerdo a la Seimens datasheetm es decir, estándar actualización de ciclo/15.6 nosotros), así que esto debería funcionar bien y si me quedas atascado, sólo voy a publicar otra pregunta. Estoy más interesado en leer y escribir sencilla, correcta y determinar qué debo esperar en cuanto a velocidad.

Primera vez que voy a describir rápidamente cómo creo que funciona y las posibles soluciones que he llegado hasta ahora.

Básicamente, se divide una dirección de 20 bits en la mitad, utilizando la mitad de la columna y el otro de la fila. Usted estroboscópico de la dirección de fila, a continuación, la columna de dirección, si /W es ALTA cuando /CAS va de BAJA, entonces es una lectura, de lo contrario es una escritura. Si se trata de una escritura, los datos ya debe estar en el bus de datos en ese punto. Después de un período de tiempo, si se trata de una lectura de los datos está disponible o si se trata de una escritura, los datos se asegúrate de haber sido escrito. Entonces /RAS y /CAS deben ser de ALTA de nuevo en la contra-intuitivamente denominado "precarga" el período. Esto completa el ciclo.

Así que, básicamente, es una transición a través de varios estados de la falta de uniformidad de los retrasos específicos entre cada transición. He enumerado como una "tabla" indexados por la duración de cada fase de la transacción con el fin de:

  1. t(ASR) = 0ns
    • /RAS: H
    • /CAS: H
    • A0-9: RA
    • /W: H
  2. t(RAH) = 10ns
    • /RAS: L
    • /CAS: H
    • A0-9: RA
    • /W: H
  3. t(ASC) = 0ns
    • /RAS: L
    • /CAS: H
    • A0-9: CA
    • /W: H
  4. t(CAH) = 15ns
    • /RAS: L
    • /CAS: L
    • A0-9: CA
    • /W: H
  5. t(CAC) - t(CAH) = ?
    • /RAS: L
    • /CAS: L
    • A0-9: X
    • /W: H (datos disponibles)
  6. t(RP) = 40ns
    • /RAS: H
    • /CAS: L
    • A0-9: X
    • /W: X
  7. t(CP) = 10ns
    • /RAS: H
    • /CAS: H
    • A0-9: X
    • /W: X

La de veces que me refiero están en el siguiente diagrama.

timing diagram

(CA = columna de dirección, RA = dirección de fila, X = no importa)

Incluso si no es exactamente eso, es algo como eso y creo que el mismo tipo de solución de trabajo. Así que me he venido para arriba con un par de ideas hasta ahora, pero creo que sólo la última tiene potencial y estoy en busca de mejores ideas. Estoy ignorando refrescante, Rápido la Página y la Comprobación de la Paridad/Generación de aquí.

La solución más simple es usar un contador y una ROM donde el contador de salida es la ROM de entrada de la dirección y de cada byte tiene el estado apropiado de salida para el período de tiempo que la dirección corresponde. Esto no va a funcionar porque las ROMs son lentos. Incluso un pre-cargado SRAM parece que sería demasiado lento para ser digno de ella.

La segunda idea fue utilizar un GAL16V8 o algo así, pero no creo que entiendo bastante bien, los programadores son muy caros y la programación de software es de código cerrado y sólo para Windows por lo que yo sé.

Mi última idea es la única que creo que podría funcionar. El 74ACT la lógica de la familia ha bajos retardos de propagación y acepta altas frecuencias de reloj. Estoy pensando en leer y escribir podía ser hecho con algunos CD74ACT164E registro de desplazamiento y SN74ACT573N.

Básicamente, cada estado tiene su propia pestillo estáticamente programado con 5V y GND rieles. Cada registro de desplazamiento de salida va a un pestillo /OE pin. Si entiendo las hojas de datos de derecho, el retraso entre cada estado sólo podría ser 1/SCLK, pero que es mucho mejor que una fiesta de GRADUACIÓN o 74HC solución.

Así, es el último enfoque probable que funcione? Hay un más rápido, más pequeño o en general, la mejor manera de hacer esto? Creo que vi que el IBM PC/XT utiliza 7400 chips para algo relacionado con la DRAM pero yo sólo vi la parte superior de la placa de fotos, así que no estoy seguro de cómo funcionó.

p.s. Me gustaría que esto sea factible en la INMERSIÓN y no "engañar" el uso de una FPGA o moderno de la uC.

p.p.s tal vez el uso de la puerta de retraso directamente con el mismo pestillo de enfoque es una mejor idea. Me doy cuenta de que tanto el registro de desplazamiento y puerta directa/retardo de propagación de los métodos varían con la temperatura, pero acepto esto.

Para cualquier persona que encuentra esto en el futuro, este debate entre Bil de la Manada y André Fachat cubre varios de los diseños mencionados en este hilo y analiza otros problemas, incluyendo DRAM pruebas.

7voto

Cracker Forever Puntos 1

Hay completar esquemas para el IBM PC/XT en la Computadora Personal de IBM XT manual de referencia técnica (Anexo D), que puede ser capaz de encontrar en línea.

El problema aquí es que, dada una luz estroboscópica de la línea que se activan en la memoria de lectura o de escritura, que deseen generar RAS, CAS y una línea de control (MUX) para la dirección del multiplexor. Para simplificar, vamos a suponer poco realista que la luz estroboscópica, RAS y CAS son todos los activos-alta.

Buscando en los PC/XT esquemáticos y diagramas esquemáticos de algunos otros equipos alrededor de este tiempo, veo tres estrategias básicas, que son aproximadamente los siguientes:

  • Utilice el flash para RAS. El uso de una línea de retardo de (una parte cuya salida es una versión retardada de su entrada) en RAS para generar MUX, y el uso de otra línea de retardo para generar todavía una versión posterior de RAS, que se utiliza para el CAS. Esta estrategia es utilizada por los PC/XT y el TRS-80 Modelo II.

    Un ejemplo (moderno) de la línea de retardo parte es la Máxima DS1100.

  • Utilice el flash de RAS y la demora es para MUX y CAS, pero hacerlo con una alta velocidad del registro de desplazamiento en lugar de una línea de retardo. Esta estrategia es utilizada por el TRS-80 Modelo I y Apple II.

  • Use custom ICs. Esta es la estrategia de la Commodore 64.

5voto

pipe Puntos 314

Tu pregunta es bastante complicada que ni siquiera estoy seguro de cuál es su problema real es, pero voy a intentar!

El "más" 6502 basados en DRAM diseño que pude encontrar es de la Commodore PET 2001-N. Tiene un 6502 funcionando a 1 MHz, pero la DRAM lógica es la velocidad de reloj de 16 MHz, susceptibles de generar todos los tiempos.

No he analizado los detalles, pero la acción principal parece suceder con un 74191 de 4 bits contador conectado a un 74164 registro de desplazamiento. Este 8 salidas separadas las líneas que van en un 74157 MUX que es controlado por el R/W de la línea. La salida del MUX entra en un 7474 flip-flop y discretas lógica para generar el final de RAS/CAS señales. Aquí es un extracto que se vincula a la página correspondiente en la referencia esquemática.

PET 2001-N reference page 6

Actualizar es manejado con un contador independiente, y cada línea de dirección está conectado a un multiplexor que selecciona ya sea "real" de la dirección o la actualización de dirección.

Partes de esta lógica también parece generar tiempos para el subsistema de vídeo. Estoy seguro de que puede ser simplificado para sus necesidades particulares, pero creo que algo similar puede ser útil: Un gran contador de frecuencia, el registro de desplazamiento y multiplexores.

-2voto

Simen Puntos 191

p.s. Me gustaría que esto sea factible en la INMERSIÓN y no "engañar" el uso de una FPGA o moderno de la uC.

Aunque estoy totalmente de entender el espíritu de su proyecto y su deseo de utilizar la no-fancy partes, definitivamente, me gustaría ir a la FPGA manera si yo fuera usted.

Varias razones:

  1. Es una perfecta oportunidad de aprendizaje. El diseño de un controlador DRAM no es un "hola mundo" del proyecto y después de que usted puede decir con confianza que "puede hacer" FPGA;
  2. Usted podría exprimir cada bit de rendimiento de esta memoria, especialmente si es un chip DRAM. No sólo tendría un hogar construido 6502 basada en PC, es posible que usted tendría el más rápido 6502 basado en PC;
  3. Puede ser mucho más fácil depurar problemas o hacer estadísticas de las operaciones de memoria que la CPU emite. Puede utilizar la lógica de los analizadores en paralelo de los autobuses, pero no es divertido (un amigo mío hace algo a lo largo de estas líneas - que él quiere escribir un ciclo exacto de simulación del 8088 y por esa razón él tiene que recoger las estadísticas acerca de los accesos a la memoria y patrones de tiempo. Él usa el original conjunto de chips (8288, 8280, 8237) y utiliza un analizador lógico con un montón de canales, pero a partir de su experiencia puedo decir que es un arrastre).

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X