Interfaz SRAM de 64Kx16 bits con Qsys

1

Tengo dos chips de memoria de 64Kx8 que me he conectado a un FPGA configurado usando Qsys como un solo bloque de 64Kx16. He utilizado un controlador genérico de tres estados como interfaz, con el ancho de la dirección y el ancho de datos establecido en 16 :

Desafortunadamente,estonoproduceelresultadoquequiero(queestenerunsolobloquedeRAMde128KBconaccesode16bits).Micontroladorocupasolo64KBdeespaciodedirecciones.ParecequeQsystratamiSRAMcomounbloquede32Kx16conunbusdedireccionesde16bitsquepermitedireccionarbytesindividuales.

¿Hayalgunaformadeconfigurarmicontroladordemaneraquesepuedaaccederatodalamemoriade128KB?Aquíhayundiagramadeconexionesentreloschips:

simular este circuito : esquema creado usando CircuitLab

    
pregunta Dmitry Grigoryev

2 respuestas

2

El problema es uno de cómo Qsys trata las direcciones. Hay dos formas en que una interfaz Avalon-MM puede representar su dirección: como una "dirección de símbolo" y como una "dirección de palabra".

Para los esclavos que se definen con una unidad de dirección de SÍMBOLOS , el LSB representa un símbolo (también conocido como el ancho de una unidad en el bus de datos, por ejemplo, un byte). Para una dirección definida en unidades de PALABRAS , el LSB representa una palabra (también conocido como el ancho del bus de datos). En el caso del Generic Tristate Controller, su interfaz Avalon-MM se define en términos de símbolos como se indica en la siguiente captura de pantalla:

LoqueestosignificaesqueelLSBrepresentaunúnicosímbolode8bits.Tiene128ksímbolosdememoria,loquesignificaquenecesitaespecificarunadirecciónde17bitsnounadirecciónde16bits.Elbitadicionalsedebealhechodequetienedossímbolosporpalabra.

Parainteractuarconsumemoria,simplementeignoraelLSB.Loúnicodeloquesedebeaseguraralhacerestoesquesiempretieneaccesoaladireccióncorrecta(conLSBvinculadoacero)ysiemprerealizaaccesosdedatosde16bitsasegurándosedequelosbitsdehabilitacióndeambosbytesseanaltos.

SideseaconvertirlasunidadesdedirecciónaPALABRAS,laformamássencillaesinsertarunpuentedetuberíaAvalon-MM.Establezcalossiguientesparámetros:

  • Anchodedatosa16
  • Anchodelsímboloa8
  • unidadesdedirecciónaPALABRAS
  • Marquelacasillaquedice"Usar ancho de dirección determinado automáticamente"
  • Desmarque "Señales de comando de tuberías" y "Señales de respuesta de tuberías".

Debes encontrar que calcula un ancho de dirección de palabra de 16 bits. Todos los accesos en el esclavo del puente de tubería ahora serán en términos de direcciones de palabras, lo que significa que tendrá un bus de direcciones de 16 bits. Al desmarcar las casillas "Pipeline", el núcleo IP resultante no tendrá ninguna lógica, simplemente pasará a través de todas las señales directamente.

Qsys insertará automáticamente los componentes de la estructura de Avalon-MM para asignar el maestro dirigido por palabra del puente de tubería al esclavo direccionado por símbolo del Controlador Tristate Genérico, cuidando de traducir la dirección de palabra de 16 bits a una dirección de símbolo de 17 bits para usted. / p>

En caso de que se esté preguntando, sé que esto funciona porque encontré el mismo problema con un dispositivo CFI en uno de los kits de desarrollo que estoy usando, por lo que fueron dos circuitos integrados conectados entre sí en paralelo, aunque en ese caso fue dos circuitos integrados de 16 bits que forman un bus de 32 bits, y necesitaba acceso a nivel de bytes, por lo que las conexiones se volvieron un poco más difíciles.

    
respondido por el Tom Carpenter
2

No usé esta IP, pero lo que veo en la imagen:

  • ancho de dirección: 16 bits, esto significa que habrá 65536 palabras de ancho de datos ;
  • ancho de datos: 16 bits, esto significa 2 bytes;
  • bytes por palabras: 2, que es 16/2 = 8 parece ser el valor correcto;
  • ancho de habilitación de byte: 2, lo que significa 2 cables que activan / desactivan la acción en bytes de alto-bajo del ancho de datos de 16 bits (sin embargo, la habilitación de bytes está deshabilitada = el controlador leerá / escribirá el bus de datos completo de 16 bits, no parcial acceso).

El controlador ve 65536 palabras por 16 bytes, por lo tanto 128 kilobytes, y asume que puede acceder a 16 bits a la vez no pudiendo enmascarar el byte respectivo en la palabra.

¿Cómo conectaste los chips SRAM? ¿Acaba de conectar dos chips en paralelo con las líneas de dirección y CE / OE?

Entonces:

  

Mi controlador ocupa solo 64KB de espacio de direcciones

Correcto.

  

y el acceso no alineado a esta RAM falla

El controlador ve datos de 16 bits y puede leer / escribir solo en palabras de 16 bits. Para obtener un byte, debe verificar el bit más bajo de dirección de 17 bits (con la dirección más alta de 16 bits en las líneas A0-A15), y activar el chip respectivo (usando su CE) para la operación , luego multiplexar datos desde / hasta el grupo de datos respectivo (A0-A7 o A8-A15). Pero si conectó las CE juntas, no podrá acceder a los chips por separado.

Las CE deben actuar como el bit 17 de la dirección. Lo que expliqué anteriormente es solo una de las opciones de cómo se puede implementar. Necesita revisar su circuito, y como dije en el comentario a su pregunta, sería mucho más simple y efectivo diseñar su propio controlador (y este controlador puede ser más predecible).

Actualizar después de la adición del diagrama del circuito:

En esta configuración, se pueden direccionar 128 kilobytes completos, pero solo en palabras de 16 bits. No podrá direccionar la RAM en palabras de 8 bits individuales (bytes).

Sin embargo, lo que puede hacer con esto: puede considerar habilitar la habilitación de bytes, y adjuntar la selección de chip a las señales de habilitación de bytes. Sin embargo, de todos modos, tendrá que multiplexar los datos de D7-D0 o D15-D8 en un registro de 8 bits en FPGA.

    
respondido por el Anonymous

Lea otras preguntas en las etiquetas