Los diferentes valores de la frecuencia vertical que se pueden elegir y que nos permiten adecuar el funcionamiento del core de Spectrum para cualquier monitor VGA se calculan a partir de los valores que se usan en el fichero pll_drp.v . En él, y a partir de la línea 42, comienza un módulo con un montón de parámetros que comienzan por las letras S1, S2, S3, etc. Cada Sx describe una frecuencia diferente. S1 corresponde a la frecuencia de la opción F0, S2 a la frecuencia F1, y así sucesivamente.
De todos los parámetros Sx que hay, los dos importantes son: Sx_CLKFBOUT_MULT y Sx_CLKOUT0_DIVIDE .
Por ejemplo, para S1, que se corresponde a F0, tenemos S1_CLKFBOUT_MULT que vale 9, y S1_CLKOUT0_DIVIDE que vale 16.
De aquí se calcula la frecuencia base, que es 50 * S1_CLKFBOUT_MULT / S1_CLKOUT0_DIVIDE = 50 * 9 / 16 = 28.125
Estos 28.125 MHz son la frecuencia maestra de todo el tinglado (la llamaremos FmS1 para S1, FmS2 para S2, etc). De aquí salen todos los demás valores. Entre ellos, el valor de la frecuencia vertical se calcula como: FverS1 = FmS1 / 0.559104 = 50.303 Hz . El valor 0.559104 es una constante del diseño.
Pongo aquí en forma de tabla todos los valores, incluyendo los intermedios, para que si alguna vez cambio esas frecuencias, se sepa cómo se tiene que volver a calcularlas:
Código: Seleccionar todo
Opcion Sx Sx_CLKFBOUT_MULT Sx_CLKOUT0_DIVIDE FmSx FverSx
------------------------------------------------------------
0 S1 9 16 28.125 50.303
1 S2 8 14 28.571 51.102
2 S3 9 15 30 53.657
3 S4 10 16 31.25 55.893
4 S5 9 14 32.143 57.490
5 S6 8 12 33.333 59.619
6 S7 9 13 34.615 61.912
7 S8 10 14 35.714 63.878
Estos valores "mágicos" salen de multiplicar el tiempo en ciclos de reloj de un scanline por el número de scanlines en un frame, a eso se multiplica por 8, y luego se divide entre un millon.
Por ejemplo, para timings de 48K, el número de ciclos de reloj por scanline es de 224 y hay 312 scanlines en un frame.
Con timings de 128K tenemos 228 ciclos por scanline, y 311 scanlines en un frame.
Y por último, con timings Pentagon tenemos 224 ciclos por scanline y nada menos que 320 scanlines en un frame.