Todo el bucle de bloqueo de fase digital

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:

  1. No configurable (establecido durante la síntesis).
  2. Nervioso.
  3. No es compatible con la frecuencia que necesito.

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

Por favor, haga un enlace al diseño de 'robo de pulso'; no hay razón para no hacerlo.

Respuestas (2)

¿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:

  • un contador (PFD) que cuenta el número de ciclos entre la referencia y la salida PLL (opcionalmente dividida),
  • un filtro digital: cualquier cosa servirá suponiendo que hace la integración (un acumulador) y tiene un cero (menos (¿o más?) una salida PFD escalada) para estabilizar el bucle, opcionalmente uno o más polos por encima del ancho de banda del bucle para reducir el valor de control "ondulación" en la frecuencia de referencia (solo importa si fref
  • los bits más significativos de la salida del filtro digital (valor de control DVCO) se dan como entrada al acumulador de desbordamiento (DVCO).

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.

  • Si el jitter proviene principalmente de la referencia o de PFD, use un ancho de banda más pequeño,
  • Si el ruido proviene del oscilador, auméntelo.

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 uno quiere, por ejemplo, multiplicar la frecuencia de una señal entrante estable por 16 y tiene un reloj que es más rápido en relación con eso, ¿qué ventaja tiene usar un filtro digital en lugar de medir la cantidad de relojes entre cada borde y el anterior? uno, y averiguar qué frecuencia debe emitir uno para que el pulso de salida que debe coincidir con el siguiente borde del reloj de entrada lo haga? Si la fluctuación del reloj de entrada no es más que un ciclo de reloj, la fluctuación de la salida debería ser igual de buena. Tal esquema podría comenzar a producir una salida limpia tan pronto como reciba el segundo pulso de entrada.

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.