ULA+, ZX-UNO y generación de señales CAS/RAS

Dudas, cuestiones, sugerencias y peticiones en general sobre el proyecto / Questions and requests about the project
Responder
wilco2009
Mensajes: 97
Registrado: 23 Ene 2016, 20:17

ULA+, ZX-UNO y generación de señales CAS/RAS

Mensaje por wilco2009 » 01 Abr 2016, 14:28

Pues ya que estoy aprendiendo Verilog gracias al ZX-UNO, pensé como método de aprendizaje de como funciona un Spectrum por dentro, el liarme la manta a la cabeza e intentar describir con una CPLD el hardware de una ULA.

Ya sé que existe la ULA+, pero como se trata de aprender prefiero coger el libro de Chris Smith por banda y hacer la descripción del hardware desde cero.

La verdad es que no he tenido muchos problemas en lo que es la generación de las señales de vídeo, pero me acabo de encontrar con el primer escollo, la generación de las señales CAS/RAS.
Realmente pensaba que iban a ser tan sencillas de generar como todo lo demás, pero resulta que tienen un pequeño problemilla relacionado con la temporización de la señal CAS.

En general, todas las señales de la ULA se basan en el reloj de 14MHz que viene con el Spectrum y en los derivados de este como el de 7MHz y el de 3,5MHZ. Estos son suficientes para todas las señales que he visto hasta ahora, pero para generar la señal CAS, la ULA real utiliza un pequeño artificio para generar una señal de RAS retrasada aprox. 58ns, a base de encadenar inversores uno detrás de otro.

El problema es que cualquier intento de hacer esto mismo con el entorno de Xlinx será infructuoso porque me reducirá las ecuaciones antes de implementarlas. Además, ese ajuste tan chapucero dependerá íntimamente de la velocidad del chip usado, con lo que no será independiente del hardware.

Visto lo visto, me pregunté como lo había implementado mcleod en la ULA+, ya que en el ZX-UNO se usa SRAM y por tanto no es necesario.
La sorpresa para mi ha sido que la ULA+ usa un reloj de 28MHz, que no sé de donde los sacará si el objetivo es pinchar este chip en un Spectrum real. ¿Acaso la idea era poner un cristal adicional?.

Por otro lado, ¿sería muy grave esperar 71ns en lugar de 58 y de esa manera usar el reloj de 14MHz?. He visto la implementación que ha hecho Victor Trucco de una ULA para un TK basándose en tu ULA+ y no lleva ningún cristal en la placa, tan solo un CPLD de Altera.

wilco2009
Mensajes: 97
Registrado: 23 Ene 2016, 20:17

Re: ULA+, ZX-UNO y generación de señales CAS/RAS

Mensaje por wilco2009 » 01 Abr 2016, 17:59

Creo que he encontrado la solución. Utilizando el flanco de bajada del reloj de 14MHz y teniendo en cuenta que la señal de CAS se genera con el flanco de subida, obtengo un retardo de medio ciclo, o sea 36ns que está entre el mínimo de 20 y el máximo de 50 que marca el libro de Chris Smith.

Supongo que sería correcto ¿no?

Avatar de Usuario
mcleod_ideafix
Mensajes: 831
Registrado: 27 Sep 2015, 00:14
Ubicación: Jerez de la Frontera
Contactar:

Re: ULA+, ZX-UNO y generación de señales CAS/RAS

Mensaje por mcleod_ideafix » 01 Abr 2016, 18:44

wilco2009 escribió:La sorpresa para mi ha sido que la ULA+ usa un reloj de 28MHz, que no sé de donde los sacará si el objetivo es pinchar este chip en un Spectrum real. ¿Acaso la idea era poner un cristal adicional?.
Exacto. Que la ULAplus se pinche en el zócalo de una ULA original no implica que tenga que usar todas las señales que allí hay, y en el caso del reloj, lo genero "on board" con un oscilador de 50MHz, igualito que el del ZX-UNO, y con el DCM lo reduzco a 28MHz.

Usar el flanco negativo del reloj te puede funcionar (o no), pero no es la solución más elegante. Una de las cosas que he ido aprendiendo con esto de las FPGAs es que están diseñadas para que tus diseños sean síncronos, con un único reloj, y de forma que todos los biestables se disparen con el mismo tipo de flanco (subida o bajada, pero no de ambos tipos en el mismo diseño). Esto a veces supone un problema cuando se trata de portar tecnología antigua, que tiene partes asíncronas (los retrasos con puertas lógicas que decías antes), biestables que funcionan con flancos opuestos, o peor aún, biestables cuyo deloj viene no de un reloj de verdad, sino de una señal generada por otra parte del circuito.
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA

Responder