¿Cómo crear un reloj de alta precisión en un FPGA?

1

Los FPGA pueden ejecutarse fácilmente de 100 a 500 MHz y crear resoluciones de tiempo de 10 a 2 ns. Esa frecuencia se puede utilizar para crear contadores de marca de tiempo, que a su vez se utilizan para crear mediciones de tiempo muy finas / marcas de tiempo para la creación de perfiles.

Sin embargo, estos contadores se basan en un oscilador externo y, a veces, también en bloques de modificación de reloj internos (CMB como PLL, MMCM, ...). Los osciladores externos tienen una precisión o fluctuación de fase de 50 (20) ppm a una frecuencia de referencia de 100 Mhz. Esto da un posible error de tiempo de 50 us por 1 segundo.

En el sistema de un cliente, varias placas FPGA se acoplan a través de Ethernet y PTP (Precision Time Protocol). Un tablero actúa como servidor, los otros como esclavos. PTP puede sincronizar 2 estaciones con una precisión de 10 ns, mientras que el maestro y los esclavos basados en FPGA no pueden mantener la precisión de tiempo entre las actualizaciones de PTP.

¿Hay alguna manera de aumentar la precisión del contador de marca de tiempo en un FPGA (Zynq UltraScale +) a menos de 10?

¿Es posible medir la desviación del tiempo (desplazamiento) y ajustar el contador de la marca de tiempo?

    
pregunta Paebbels

2 respuestas

3

Puede obtener mejores osciladores: los osciladores de cristal con compensación de temperatura razonablemente baratos (TCXO) pueden alcanzar 1 PPM.

Algunos TCXO se pueden controlar con un voltaje de control (un VCTCXO). Puede contar los ciclos de reloj de su TCXO con el FPGA y disciplinarlo a una señal de GPS 1PPS o PTP. Tendrá que encontrar una buena ley de realimentación entre el conteo menos el valor de PTP y el voltaje de control. El tiempo de respuesta del bucle debe elegirse con prudencia.

Hay un diseño de código abierto del CERN que utiliza ese método. Consulte la página 2 en esquemas

    
respondido por el pserra
3

Su pregunta es bastante vaga y ambigua, y contiene lo que parecen ser algunos conceptos erróneos, por lo que le ofrezco algunas ideas generales aquí, basadas en mi trabajo en la transferencia de tiempo y la sincronización a través de redes de telecomunicaciones.

Un reloj local tendrá algún error de frecuencia nominal en relación con algún estándar. Si la frecuencia se puede ajustar (por ejemplo, VCXO), el error de frecuencia se puede llevar a cero utilizando un PLL. Esto se puede hacer en hardware o software. Si no puede ajustar el oscilador directamente, puede usar técnicas de DDS para sintetizar un reloj corregido.

Sin embargo, eso lo deja con un error de fase residual, cuya magnitud depende de la naturaleza de su detector de fase. Un detector de fase de tiempo discreto no podrá resolver errores de fase que sean más pequeños que el período de las señales que lo impulsan. Un detector de fase de tiempo continuo podrá hacerlo mejor que esto, con el límite máximo impulsado por el ruido analógico en el sistema.

PTP utiliza marcas de tiempo de hardware en los paquetes que se intercambian entre los nodos para estimar los retrasos de red asociados con cada enlace. Esta información se usa para estimar tanto el desplazamiento de tiempo como el error de frecuencia del reloj local, que luego se usa para sintetizar una base de tiempo "virtual" que está bloqueada en el maestro de la red.

Los osciladores de cristal en realidad tienen muy buena estabilidad a corto plazo y baja fluctuación de fase, algunos de ellos incluso tienen mejores especificaciones que los estándares atómicos en esta área. Lo único que les falta es la precisión de frecuencia absoluta, lo que significa que no pueden servir como estándares "primarios".

Si puede ofrecer más detalles sobre lo que está tratando de lograr, así como la tecnología y las limitaciones con las que está trabajando, puedo responder con consejos más específicos.

    
respondido por el Dave Tweed

Lea otras preguntas en las etiquetas