Frecuencia máxima para una señal de onda cuadrada basada en FPGA

Tengo un problema de comprensión de cuál es la frecuencia máxima posible para una señal de onda cuadrada que se puede generar.

Actualmente estoy experimentando con una placa FPGA (Red Pitaya), que tiene una FPGA Xilinx Zynq de 125Mhz. Cuando estoy conectando la señal del reloj a través de un contador binario y corte (Xilinx IPs) para el bit #0 y un pin de salida, mido aproximadamente la mitad de la frecuencia (62,5Mhz).

Aquí está el diagrama de bloques de Xilinx Vivado
(contador binario de 32 bits en modo UP, 1 bit Slice Din From+ Din Down Toambos son 0):

ingrese la descripción de la imagen aquí

Hubiera esperado ver exactamente la frecuencia del reloj en el puerto de salida.

¿Puede alguien explicarme por qué la frecuencia se redujo a la mitad y cuál es la frecuencia de onda cuadrada máxima que puede crear un FPGA?

¿Qué generador de funciones?
Solo la señal del reloj (onda cuadrada con ciclo de trabajo del 50 %)
Ya he leído esto pero no me ayudó. Pensé que la razón de esto es algo relacionado con la frecuencia de muestreo / el teorema de muestreo de Nyquist-Shannon, pero como ingeniero de software no tengo tanto conocimiento previo en electrónica.
El paquete de software del Red Pitaya también tiene una aplicación que ofrece generar formas de onda personalizadas. Para eso especifican la frecuencia máxima que se puede generar con 50 MHz: redpitaya.com/f145/oscilloscope-signal-generator/specifications
¿Qué generador de funciones (estás usando)?
@Andy: solo uso la señal de reloj (125Mhz) del FPGA conectado directamente a un puerto de salida. Eso simplemente generará una onda cuadrada del ciclo de trabajo del 50%.
Entonces su pregunta es confusa porque la gente tomará el "generador de funciones" como un equipo comprado. Cambie su pregunta para que sea específica.
¿Podrías compartir algún código relevante?
Está preguntando sobre la frecuencia máxima que puede generar un FPGA y al mismo tiempo se queja de que solo sale la mitad de la frecuencia. Si esta última es su pregunta principal, ajuste el encabezado.
Actualicé mi pregunta y agregué más explicaciones sobre lo que hice.
Un contador binario cambia su LSB en cada ciclo de reloj. La señal del reloj cambia dos veces durante un ciclo de reloj (en flancos ascendentes y descendentes). Por lo tanto, no puede observar la misma frecuencia en la entrada CLK de un contador y su salida.
El bit 0 alterna (cambia de estado) una vez por ciclo de reloj completo; por lo tanto, para que el bit 0 suba y luego suba, se requieren dos ciclos de reloj de entrada, lo que produce el reloj / 2. Por lo tanto, este es el comportamiento esperado.
Nota: Un par de otros términos para un contador de un bit son T flip-flop y divisor de frecuencia .

Respuestas (3)

No puede generar una frecuencia más alta que el reloj interno. Si tiene acceso a un bucle de bloqueo de fase o PLL, es posible que pueda hacerlo.

Por lo general, el reloj externo se alimenta a un PLL y el reloj interno se genera a partir de eso.

Si su reloj interno es de 125Mhz y está usando un contador regular (contando solo con el flanco ascendente), el conteo más rápido que verá será a la mitad de 125Mhz o 62.5Mhz.

Se pueden construir contadores que funcionen en el borde ascendente y descendente para brindarle un conteo a 125Mhz

Para ampliar esto, Xilinx recomienda usar la primitiva ODDR para adelantar relojes. Da mejores resultados que jugar con declaraciones posedge y negedge.

Si no alimenta el reloj con un flip flop DDR, entonces la frecuencia máxima que esperaría ver es F C yo k / 2 . La razón de esto es que la salida solo puede cambiar una vez por cada ciclo de reloj completo (un flanco ascendente y un flanco descendente). Además, esto es lo que esperaría ver de un contador binario de ejecución libre... el bit 0 (el LSB) oscilará en F C yo k / 2 , el bit 1 en F C yo k / 4 , etc. Si desea una salida de mayor frecuencia, debe hacer dos cosas: usar un reloj más rápido y usar registros de salida DDR. He impulsado con éxito salidas a 250 MHz y 500 MHz usando registros de salida DDR.

Todos los FPGA de Xininx (de las series 3, 4, 5, 6, 7, etc.) ofrecen amplios bloques de gestión de reloj digital (DCM) que obviamente incluyen PLL/DPLL. En ofertas recientes, estos bloques se denominan MMCM - Administrador de reloj de modo mixto. Hay varios bloques en cada FPGA, lo que permite muchos dominios de reloj en un diseño. Los FPGA/SoC Zynq/Artix pueden tener relojes internos que funcionan hasta 800 MHz internamente, hasta 5 MHz, todos fácilmente derivados de casi cualquier reloj externo.

La capacidad de salida depende de la selección del tipo de búfer de salida, según el tipo de búfer y la selección de modo/intensidad. Creo que 200-300-400 MHz de onda cuadrada se pueden lograr fácilmente, al menos pueden hacerlo para las interfaces DDR.