Estoy buscando implementar un bloqueo de fase en un FPGA sin usar ningún componente externo (aparte del ADC). Por simplicidad, es adecuado el bloqueo a un pulso binario simple. La frecuencia de las señales es ~0.1-1% del reloj. No puedo usar los PLL del reloj integrado porque normalmente son:
He estado revisando la literatura y encontré algunos bucles bloqueados de fase binaria. Lo más notable es un diseño de "robo de pulso" al que puedo publicar un enlace si lo deseo. Lo he implementado y sintetizado con cierto éxito, pero su rango de fluctuación y bloqueo no era tan bueno como se anuncia. También tuve éxito usando un DVCO externo, pero preferiría poder implementar todo en el chip.
Sería útil un diseño de circuito digital o incluso una pista en la dirección correcta (he estado golpeando mi cabeza contra esto por un tiempo), una implementación FPGA probada sería maravillosa pero no esperada.
AÑADIDO 27-10-2010
El diseño real de DPLL que utilicé tiene un "filtro de paseo aleatorio" como filtro de bucle (no el "robo de pulso" descrito anteriormente, revisando mis notas que no funcionaron muy bien), que luego conduce los pulsos del reloj al DCO . El rango de bloqueo se establece mediante un divisor en el DCO. La sensibilidad del bucle se establece variando la longitud de la caminata aleatoria.
El documento en el que se encuentra esto se cita al final de esta publicación. Después de implementar partes de él mismo, descubrí que en realidad ya estaba implementado en OpenCores, sin embargo, resulta que en los últimos meses el proyecto se eliminó, pero tengo los archivos de Verilog guardados si alguien los quiere.
Yamamoto, H.; Mori, S.; , "Performance of Binary Quantized All Digital Phase-Locked Loop with a New Class of Sequential Filter", Communications, IEEE Transactions on, vol.26, no.1, pp. 35-45, enero de 1978
doi: 10.1109/TCOM.1978.1093972
URL: http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=1093972&isnumber=23895
¿Puede publicar más detalles sobre la frecuencia objetivo, el jitter y el ancho de banda del bucle (tiempo de establecimiento requerido)? Además, ¿qué tipo de oscilador desea usar (externo con un DAC, con/sin interpolación?, un contador/acumulador digital en chip)?
Si está satisfecho con un "oscilador" digital (es decir, un acumulador desbordante) y su fluctuación, el resto del circuito puede ser bastante simple:
En cuanto al ancho de banda del bucle, si no se aplica mediante el tiempo de establecimiento, decídalo en función de las contribuciones de ruido de todos los componentes.
En caso de que la señal de referencia esté modulada en fase o frecuencia, utilice un ancho de banda de bucle inferior a la frecuencia más pequeña de la señal que modula la referencia.
Se utilizan técnicas más complicadas si la frecuencia de salida es cercana o igual a la frecuencia del reloj y/o si se requiere una fluctuación baja o un rango de bloqueo muy rápido. Tal vez en su caso no sean necesarios, además de que pueden no ser adecuados para una implementación de FPGA.
Si puede tolerar un poco de fluctuación, pero en su mayoría solo necesita un reloj preciso contra un reloj a la deriva para la recuperación de datos, es posible que desee implementar algo como CAN Standard PLL (comienza en la página 67 de ese PDF). Esto funciona en base a un contador de desbordamiento que debería estar sintonizado nominalmente correctamente, pero se sincroniza hasta los bordes en el flujo de pulso entrante.
kevin vermeer