Altera Cyclone IV PLL: Qué limita los valores de factor de multiplicación/división disponibles

Altera Cyclone IV EP4CE6E22 con un reloj de entrada de 50 MHz.
Quiero sacar 24 MHz de la megafunción ALTPLL.
La configuración de multiplicación/división solicitada es 12/25, pero la configuración real resulta ser 47/98, que no obtiene una salida exacta de 24 MHz.

¿A qué se debe esta limitación?

¿Tiene que ver con representaciones binarias alcanzables de fracciones?
Supongo que no puede generar 50 * 12 MHz internamente, por lo que debería generar una frecuencia más baja usando un multiplexor no entero y de alguna manera dividir por este multiplexor no entero para bloquear la frecuencia de entrada.

(Encontré un PDF de Altera sobre el cálculo de factores de división/multiplicación alcanzables, pero no explica cuál es el motivo de esta limitación).

Respuestas (1)

Hay varios límites en los PLL. El principal es el rango de frecuencia de salida del VCO. Debe elegir valores divisores que darán como resultado una frecuencia de salida dentro del rango. El segundo es el rango de frecuencia de PFD. Este es el rango de frecuencia admitido por el detector de fase y frecuencia que impulsa el voltaje de control del VCO. Por lo general, es el extremo de baja frecuencia del rango de PFD del que debe preocuparse, no puede dividir la referencia por debajo de esta frecuencia.

En el caso del Cyclone IV, el rango de frecuencia del reloj de entrada (compatible con el pin de entrada y el enrutamiento interno) es de 5 MHz a 265-472,5 MHz, según el grado de velocidad, el rango de PFD es de 5 MHz a 325 MHz y el El rango de VCO es de 600 MHz a 1300 MHz (consulte el manual del dispositivo, volumen 3, página 1-24, tabla 1-25). Por lo tanto, debe elegir valores de divisor que funcionen con estos rangos.

De acuerdo con el diagrama de bloques de PLL, hay cuatro divisores diferentes, n, M, K y Cn, donde n, M y Cn varían de 1 a 512 y K es 1 o 2. Debe elegir estos valores de manera que Fout = (Fin/n*M)/K/Cn y Fin/n está en el rango PFD y Fin/n*M está en el rango VCO.

Curiosamente, parece que 50*12/25 debería funcionar si n=1, M=12, K=1 y Cn=25, ya que tiene una frecuencia de PFD de 50 MHz y una frecuencia de VCO de 600 MHz. No funcionará si n=25, M=12, K=1 y Cn=1, ya que tiene una frecuencia de PFD de 2 MHz y una frecuencia de VCO de 24 MHz.

¡Gracias por la gran respuesta detallada! Tiene razón, esta frecuencia de salida es compatible, mi error fue que usé un solo bloque ALTPLL para 2 frecuencias de salida diferentes y aparentemente esto implica compartir recursos entre los 2 y esto limitó el rango disponible de frecuencias de salida.
Sí, si desea generar dos frecuencias a partir de un PLL, debe encontrar una frecuencia de VCO que pueda dividir en ambas frecuencias de salida. Dependiendo de las frecuencias que necesite, es posible que deba usar dos PLL.
Usé esta información para escribir un programa Java que encontrará prácticamente cualquier velocidad de reloj, incluso si necesita usar PLL encadenados para obtenerla. Sin embargo, lo que me ha costado es que no veo una manera de establecer los valores CN o K a los que hacen referencia los documentos. Quartus no parece ponerlos a disposición. ¿Qué me estoy perdiendo?