Por fin un pequeño éxito con los CPLDs

Éste es el segundo post que hago sobre este circuito, que es un interfaz para ZX Spectrum. La parte central del circuito es un microcontrolador Atmega 1284P, como ya expliqué en el tutorial de cómo hacer un circuito mínimo con un microcontrolador.


Hoy he conseguido que funcione la segunda fase del circuito, que es un chip CPLD que en este caso hace de puente entre el microcontrolador y el Spectrum (vía bus de expansión). En la foto, el chip cuadrado de la derecha es el CPLD y el rectangular, el microcontrolador. En el borde derecho queda el bus de expansión, y en la parte de abajo los conectores de programación y debugueo del microcontrolador y de programación del CPLD:


InterfazSpectrum2_1


Por ahora sólo he hecho la parte que une el microcontrolador al CPLD. En esta comunicación hay 8 líneas de datos y tres de control, las cuales son RD (read), WR (write) y REG (registro, que puede ser 0 o 1). Las tres son en dirección desde el microcontrolador hacia el CPLD. Las ocho líneas de datos son bidireccionales. Cuando se activa WR, el CPLD lee lo que hay en las 8 líneas de datos y lo guarda en uno de dos registros de 8 bits (según REG). Cuando se activa RD en cambio, es el CPLD el que vuelca el contenido del registro en las 8 líneas de datos.


En esta prueba el microcontrolador leía los mismos registros que él mismo escribía, para comprobar que estaban bien. En el circuito final, los dos registros que escribe el microcontrolador son leídos por el Spectrum y viceversa.


El Spectrum accederá a los registros haciendo operaciones de E/S en dos puertos. El motivo por el que hay dos registros es para que uno sea de datos, y el otro de control (para que el Spectrum pueda tener un sitio al que acceder para ver cuándo ha terminado una operación) La naturaleza concreta de esas operaciones es algo que comentaré en próximos posts…


Aquí tenéis el código VHDL de esta prueba: InterfazRobotSpectrum.vhd


Hasta la próxima!