Estupendo! Gracias, Quest

En otro orden de cosas: hoy he tenido una larga charla con Goran Devic. Este señor es el autor del
core A-Z80, del que hemos hablado alguna vez. Es el core de Z80 que se supone que es exacto en los timings internos y externos.
El código original está en una mezcla de Verilog, System Verilog y código Verilog generado automáticamente mediante scripts de Python partiendo de la documentación original que se tiene tanto de la tabla de decodificación de la PLA interna de un Z80 real, como de la matriz de ejecución que genera las señales de control en base al estado actual de la salida de la PLA y el ciclo de máquina y T-estado actual.
He estado el fin de semana convirtiendo las partes que estaban en SVerilog a Verilog. El resultado preliminar es un core que en el simulador (iSim) muestra unas señales muy "bonitas", idénticas a las que veo de un Z80 con el analizado lógico.
Pero hay un "pero": la matriz de ejecución, no sé cómo está escrita, pero no hay "güevos" de que sintetice para la Spartan 6 que tenemos. El módulo execute.v , si se sintetiza él solito, tras un par de horas o así, muestra como resultado el que se necesita una FPGA como 15 veces más grande que la que tenemos ahora
Obviamente hay algo que no funciona. Aún no sé qué es: no es que la entrada sea un vector de 105 bits. Eso ya lo descarté. Aunque ese módulo tiene muchos IF's uno detrás de otro, no son una barbaridad de ellos. Lo hemos estado discutiendo Goran y yo: él no tiene problemas para sintetizar ese código en el sintetizador de Altera, pero en el de Xilinx, oye que no hay manera.
Algún flag u opción del XST se me escapa.
En el core actual del Spectrum, el T80 parece funcionar lo suficientemente bien como para que sea factible sacarlo así, pero para otros cores como el del Sam Coupé, el T80 falla por todas partes. Es por esto que voy a dedicar algo de tiempo a intentar que este core funcione. Quizás no haga falta usarlo para el core de Spectrum, pero desde luego, es lo más parecido que tendríamos a usar el core de Spectrum con un Z80 real externo, como teníamos con la plaquita addon.
Si alguien quiere hacer pruebas, en la sección "cores" hay un proyecto Xilinx con la versión 14.7 del ISE, que contiene únicamente el core A-Z80. Para sintetizar un módulo por separado, se hace clic derecho en él y se elige la opción "Set as Top Module". Entonces, las opciones de Sintetizar, Place and route, etc, funcionarán sobre ese módulo y aquellos de lo que dependa.
Si haceis esto sobre el módulo execute.v vereis qué pasa. Se puede llevar 2 y 3 horas sintetizando, incluso con una buena máquina (en mi despacho uso un Core i7 con 4 núcleos con HT cada uno y ni aún así)
¡Ah! Aprovecho también para comentar que
me he pasado a la versión 14.7 del ISE, la última que existe. Todos los cores, a partir de ahora, los sintetizaré con esta nueva versión, que desde luego da mejores tiempos en los cores actuales: en el de SAM Coupé paso de tener un core que funciona como máximo a 53MHz a poder hacerlo funcionar, en teoría, a unos 75MHz.
Cuando tengamos los nuevos prototipos con memorias de 10ns va a ser la repera
