generando reloj de 40 mhz desde 50 MHz

En VHDL, ¿cómo puedo obtener una frecuencia de reloj de 40 MHz si mi reloj integrado es de 50 MHz? Sé cómo dividir la frecuencia por números enteros, pero este caso es dividir por 1,25. Estoy usando esto para VGA, así que creo que es importante que sea preciso. ¡gracias!

Dependiendo de la plataforma, es posible que tenga algunos PLL integrados que deberían funcionar.
Use un PLL para dividir por 5 y luego multiplique por 4.
De todos modos, debería ser un poco más específico acerca de sus objetivos de diseño: ¿los dos dominios de reloj deben estar sincronizados? ¿De qué señal VGA estamos hablando? ¿Por qué 40MHz?
Este es un duplicado de generar un reloj de 40 MHz desde 50 MHz en VHDL en stackoverflow.
sí, es la misma persona porque alguien escribió aquí, puede que haya más respuestas
Para VGA, usaría un PLL externo: en mi experiencia (ciertamente hace algunos años), la fluctuación introducida por un FPGA PLL/DCM puede ser demasiado para algunos monitores.
¿Cuál es la fuente de la información a mostrar? Si un monitor VGA mostrara una cierta cantidad de píxeles por línea a 40 MHz, aumentar la frecuencia del reloj a 50 MHz pero aumentar la cantidad de relojes por línea en un 20 % aumentaría la cantidad de píxeles por línea. Si, por ejemplo, fuera a mostrar ochenta caracteres de 9 píxeles de ancho, tal vez podría mostrar 86 caracteres de 10 píxeles de ancho en su lugar, o tal vez 82 caracteres de 10,5 píxeles de ancho (caiga medio reloj por carácter).

Respuestas (1)

Necesitas algo como esto . Sin embargo, el dispositivo debe tener un VCO para que esto funcione.

El circuito funciona cambiando la frecuencia de un oscilador controlado por voltaje (VCO) basado en la diferencia de fase de dos señales de reloj. La primera señal de los dos, F I en el diagrama, es la señal de referencia y en el caso de un PLL se genera dividiendo la salida del oscilador principal por un valor entero. Si la ganancia del bucle de realimentación norte fuera a ser la unidad, el voltaje de control del VCO cambiaría apropiadamente hasta que la salida del VCO coincidiera exactamente con la entrada de referencia. Para obtener un múltiplo entero de la señal del reloj de referencia como salida, todo lo que se necesita hacer es dividir la señal retroalimentada por ese número entero exacto.

PLL

Entonces, para obtener 40 MHz de un oscilador de 50 MHz, la señal de 50 MHz primero debe dividirse por 5. Esta señal de 10 MHz será la señal de referencia PLL ( F I = 10 METRO H z ). Esto ahora debe multiplicarse por 4 y, por lo tanto, seleccionando norte = 4 , la salida del PLL será F O = 40 METRO H z .

Si el dispositivo FPGA que está usando no tiene PLL integrados, puede usar un ADPLL (todo PLL digital).

Aquí hay algunas notas de aplicación:

Introducción de Silicon Labs a ADPLL

Diseño de referencia Xilinx DPLL

@thebok: mencionas que esto es para generar una señal VGA. Acabo de echar un vistazo a un código que tenía que hacía exactamente eso desde hace 5 años, y logré generar una señal VGA (640x480) con un reloj de 25MHz.
sí, pero para diferentes resoluciones necesitas diferentes velocidades de reloj, mi caso está aquí tinyvga.com/vga-timing/800x600@60Hz