radastan escribió:Lo que no acabo de entender es lo de poner el Z80 a 14 MHz, una pasada si, pero eso significaría que hay que poner la memoria a 28 MHz. ¿No?
La memoria es asíncrona. No se pone a ninguna velocidad en concreto. Lo único que tienes que preocuparte de que su tiempo de acceso sea menor de 70ns (para una CPU a 14MHz). En la FPGA, cuya memoria sí es síncrona, sí que está puseta para que funcione a 28MHz. En tu diseño no habrá ninguna señal más rápida que 14MHz.
radastan escribió:Por mi encantado de poner la CPU a 14 MHz, pero se nos olvida que alcanzar esa velocidad supone también limitaciones varias de diseño:
El clon Harlequin usa un reloj de 14MHz y funciona. Además, las limitaciones de diseño son las mismas que usarías para 7MHz. 14MHz es una frecuencia moderadamente baja. De hecho, esos 14MHz sólo irían a la CPU. La sección de video seguiría usando 7MHz.
radastan escribió:- Efecto de las pistas a un determinado tamaño (a más MHz las impedancias son fundamentales)
Usa una impedancia característica de 50 ohmios para la pista de 14MHz, y evita usar muchas vías en esa pista. Para calcular la impedancia característica necesitas saber:
- La anchura de la pista
- El grosor de la pista (el fabricante lo suele medir en onzas: una onza son 35 micrómetros)
- El grosor del dieléctrico (la placa). Lo habitual son 1.6mm
- La constante dieléctrica de la placa. Lo habitual (y lo más barato que te ofrecen) es FR-4, que tiene una constante dieléctrica de 4.7 (para una frecuencia de unos 20MHz)
Pues con esos datos, resulta que necesitas que tu pista tenga un grosor de 2.8mm para que su impedancia característica sea de 50 ohmios. Coge cualquier equipo en el que se usen relojes de 20MHz o más (algún Amiga, por ejemplo, o placas madre de PC's) y mide a ver si la pista que lleva la señal de reloj cumple eso. Lo más probable es que no.
Más info aquí. Lo que te interesa está a partir de la página 12 del documento (página 3 según el índice):
http://es.scribd.com/doc/12867771/Tesis ... enez-LopezPor ejemplo, puede leerse:
Rodrigo Jiménez López escribió: Los circuitos de sincronía o de reloj, tienen una alta razón de repetición y son generalmente la primera fuente de ruido, ya que su señal se radia en todas direcciones. Una de las recomendaciones para evitar este ruido, es colocar el generador de reloj en el centro del sistema y hacer una distribución radial de la señal, con el fin de cancelar corrientes y reducir losretardos de propagación.
Así que ya sabes

radastan escribió:- Tiempos de acceso de los componentes discretos
A esa velocidad no tendrás problemas con los chips HCT o HC.
radastan escribió:- Ruido que se meta al bus por cada componente
Esto también lo tienes a frecuencias menores. El ruido no es por la frecuencia, es por la velocidad de conmutación, que depende a su vez de la velocidad del propio circuito. Por ejemplo, un chip 74F producirá más ruido que se equivalente 74HC. Nada que no puedan solucionar condensadores cerámicos para desacoplar la línea de alimentación.
radastan escribió:14 MHz son palabras mayores.
Para nada

La interfaz QLSD que hice usa un reloj, creo recordar de 40MHz, y no se me ocurrió hacer ninguna medida de impedancia ni rutado especial. La ULAplus que estoy haciendo usa un reloj de 50MHz y otro programable para la configuración. Xilinx establece que la pista que lleva la señal del reloj de configuración debe ser de 50 ohmios, pero no eché cuenta de eso, y cuando ya con la placa fabricada se me ocurrió calcular la impedancia característica que tenía, me salían más de 100 ohmios. Aun así, el chisme funciona

Lo único que has de tener en cuenta son las precauciones típicas de cuando se diseña una PCB para un circuito con lógica digital, esto es:
- Para hacer cambiar una pista de dirección, hazlo siempre en intervalos de 45 grados. Nunca directamente a 90 grados.
- Si una pista continúa en la otra cara mediante una vía, la continuación debe formar un ángulo igual o menor de 45 grados con la pista precedente.
- Para diseños con placa a doble cara, poner siempre un plano de masa. Asegurarse de que las pistas que llevan señales rápidas tengan "por debajo" el plano de masa. Esto hará que la impedancia característica de esa pista sea menor.
- No generar bucles de corriente: llevar la alimentación a los integrados usando dos pistas (alimentación y masa) que vayan paralelas. Un ejemplo de mal diseño es aquel en el que se alimentan integrados usando una pista de potencia en el lado de arriba de la placa, la pista de masa en el lado opuesto, y tirando pistas en vertical hacia los pines 7 y 14 desde cada punto. Esto crea un bucle de corriente por cada integrado que alimentes así.
Por experiencia propia, incluso aunque no tengas en cuenta estas cosas, es muy probable que tu circuito funcione. De hecho, los únicos circuitos puñeteros en los que hemos tenido problemas de ruidos son aquellos en los que hemos mezclado componentes que van a una frecuencia media (menos de 100MHz) con módulos que van a frecuencias que superan el gigaherzio. En esos casos, el ruido generado por los componentes "lentos" han hecho que los componentes "rápidos" no funcionen bien (el módulo en cuestión es un receptor GPS, que no cogía señal por culpa del ruido que generaba el resto del circuito. Ruido que no pudimos comprobar hasta que nos hicimos con un osciloscopio de 10GHz con medida de FFT en tiempo real)
Por otra parte, llevar la CPU a 7MHz o 14MHz no cambia el diseño. La única diferencia entre el clon funcionando a 7 y a 14, es que el Z80 toma la señal de reloj de 7 o 14MHz. El resto (circuitería de video) sigue funcionando a 7MHz. Vamos, que puedes hacer un diseño pensando en poner a la CPU a 7MHz, y una vez que veas que funciona, coges el pin 6 de entrada de reloj de la CPU y lo llevas a la señal de 14MHz en lugar de a la de 7MHz, y ya lo tienes (eso es ni más ni menos que lo que he hecho yo). Claro que dependerá de cómo diseñes la parte de video. He seguido un esquema simplificado del algoritmo que te puse hace unos posts. La diferencia de la versión sin contienda respecto a la que tiene contienda es que la primera usa un latch octal más, que guarda los siguientes 8 píxeles a pintar. Por otra parte, un contador de 13 bits va llevando la cuenta de la próxima dirección de memoria de video que se ha de leer. El sistema de video aprovecha los "huecos" de tiempo que la CPU deja en los que no accede a memoria, y lee con antelación el próximo grupo de 8 píxeles a pintar.
He probado incluso a poner a la CPU a 28MHz (esto con un Z80 CMOS no podrías hacerlo) y sigue funcionando, pero ya el sistema de video no tiene tiempo de cargar píxeles en el hueco temporal que le deja la CPU (que ahora es la mitad de tiempo), así que se ve un scroll la leche de rápido, pero con un montón de nieve en la pantalla (un efecto parecido a la "ULA snow" del Spectrum)