¿Cómo medir la diferencia de fase de dos señales de la misma frecuencia en un FPGA?

7

¿Cómo medir la diferencia de fase de dos señales de la misma frecuencia en un FPGA?

Por ejemplo, digamos que tengo dos señales de 150 MHz (internas al FPGA) que son sincrónicas entre sí, pero están compensadas por alguna diferencia de fase constante, ¿cómo podría medir esto?

He investigado los métodos existentes de un convertidor de tiempo a digital en un FPGA, pero estos se refieren principalmente a dos señales de inicio y parada únicas y a la medición del tiempo entre esos dos eventos. Me pregunto si hay un método mejor si sabemos que las señales se repiten con una diferencia de fase constante.

    
pregunta cksa361

5 respuestas

5

Utilice uno de los bloques de reloj PLL del FPGA para generar una frecuencia ligeramente diferente, tal vez 140 MHz o lo que sea que pueda hacer. XOR esto con cada una de las señales de interés (prestando atención teórica a posibles problemas de metastabilidad, pero satisfaciéndolo funcionará lo suficiente del tiempo). Compara las fases de los dos resultados de menor frecuencia.

En efecto, esto es lo mismo que un receptor de radio hetrodyne: usted mezcla la señal entrante con un oscilador local y genera un resultado de menor frecuencia más conveniente para el procesamiento detallado.

Ya que básicamente tiene un sistema digital de un bit, su resultado estará en pasos discretos determinados por la diferencia de frecuencia: cuanto más cerca esté la frecuencia LO de la frecuencia de entrada, más fino será el resultado, pero con menor frecuencia producirá una respuesta. Valdría la pena investigar la estabilidad de la fase y el ciclo de trabajo del bloque PLL en varias proporciones. La promediación de mediciones múltiples probablemente le dará una mejor respuesta.

    
respondido por el Chris Stratton
4

Estás buscando un detector de fase. Casi todos los FPGA tienen un módulo PLL diseñado principalmente para generar señales de reloj. Algunos de ellos pueden ser conducidos con una señal interna. No estoy seguro de si puedes sacar la señal del detector de fase del PLL, pero lo dudo mucho.

Puede implementar un detector de fase en un FPGA de gama alta (consulte esta nota de la aplicación Vertex ), pero parece mucho trabajo, especialmente para algo que es una operación analógica relativamente fácil, para la cual existen circuitos integrados, como Analog Devices AD8302 . Pero conoce su plataforma mejor que yo, tal vez no tenga acceso a los cambios de hardware.

    
respondido por el Jay Carlson
4

Los Xilinx FPGA tienen una función en el bloque "Digital Clock Manager" que permite un sesgo de salida programable. Ese sesgo de salida se puede cambiar en tiempo de ejecución en pequeños incrementos (10 de pS si recuerdo correctamente).

Tienes 2 relojes, los llamaremos A y B. El Reloj A es tu reloj principal del que casi toda tu lógica se ejecuta. El reloj B se ejecuta a través de un DCM w / skew y luego a un T-Flip-Flop, creando una señal que alterna en cada borde de B. Esa salida de alternancia se ejecuta en un D-Flip-Flop que está sincronizado con A.

Lo que haces ahora es barrer el sesgo en B y mirar los resultados cuando se muestrea con A. Cuando se barre la configuración de sesgo del reloj, la salida de ese D-Flip-Flop comenzará en un valor y luego cambiar a otro.

De alguna manera, este método es similar a lo que propuso @JasonMorgan, pero no requiere muchos retrasos lógicos precisos para asegurarse de que esos búferes 360 tengan un retraso constante de compilación a compilación (no lo hará).

He hecho algo muy similar a esto en un Xilinx Spartan-3 y funcionó muy bien.

    
respondido por el user3624
1

No estoy seguro de si esto funcionaría, es solo una idea. Pero evita la necesidad de un reloj de muestreo de alta velocidad para medir la distancia en el tiempo entre las señales.

Puede utilizar los retrasos deterministas (bastante) dentro del dispositivo y la gran cantidad de compuertas, especialmente si se está ejecutando en un entorno de temperatura restringida o controlada. Necesitará un filtro de bucle externo, un circuito CR y quizás un búfer schmidt debería hacer el trabajo. Deberá decirle a su instalador que no optimice las puertas.

Tome su referencia y aplíquela a una puerta XOR. Tome la señal medida y retrasarla aunque, por ejemplo. 360 buffers en serie. Tome las salidas 360 de los búferes y (con las restricciones apropiadas) páselo a través de un mux de 360: 1 (360 y compuertas y un decodificador). Pase la salida del mux a la puerta XOR. Pase la salida de la compuerta XOR al filtro de bucle, luego tome la entrada y úsela para marcar un contador. Un bloque de control restablece el contador de forma ascinónica con cierta frecuencia, por ejemplo. 1ms. El circuito de control recorre el mux cada 1 ms, buscando el conteo más pequeño. El estado del mux en ese momento es el ángulo de fase en grados.

    
respondido por el Jason Morgan
0

Supongamos que tiene un reloj de 600 MHz y un contador. Comience a contar con el margen inicial de una señal, el contador de paradas [leer resultado] con el borde anterior de la segunda señal.
La resolución es una función de la diferencia entre las frecuencias de muestra y de reloj.
600/150 = 4 para que obtenga una resolución de fase de 4 pasos [o 90 grados].

¿Quieres una mejor resolución, mientras te quedas con un FPGA? OK, pero esto se pone un poco raro ...

Primero, necesitas 2 circuitos, "lead" y "lag". También necesitamos etiquetar nuestras señales "T" [Prueba] y "R" [Referencia]. El "plomo" es: T Y (NO R). "Lag" es: R AND (NO T)
Según el avance o el retraso, uno de estos producirá una señal con un ancho de pulso proporcional a la diferencia de fase. Coloque cada salida a través de filtros separados de paso bajo, probablemente de aproximadamente 1 MHz. Finalmente, lea: enlace
Esto detalla cómo implementar un ADC SAR dentro de un FPGA. Digitalice las señales de "derivación" y "demora" filtradas: la más grande le dará la magnitud y el signo de la fase.

EDITAR: La descripción de mi puerta lógica no es correcta. Busque un detector de fase para un esquema adecuado

    
respondido por el Alan Campbell

Lea otras preguntas en las etiquetas