Pobre salida de reloj de Spartan6 FPGA

Estoy usando la Microplaca LX9 de AVNET con el Spartan 6 PFPGA. Implemento SPI para leer desde un ADC (ADS7822). Estaba obteniendo valores muestreados incorrectos. Cuando revisé las señales con un osciloscopio, no fue como esperaba.

Reloj FPGA (sistema): 100 MHz Divisor: 32 Reloj SPI (salida): 3,125 MHz

Así que espero un ciclo de 320 ns con un tiempo ALTO de 160 ns y un tiempo BAJO de 160 ns. De la simulación obtengo exactamente lo que espero. Pero usando un osciloscopio en la salida PMOD, obtengo una señal de reloj que no es demasiado satisfactoria. También de la hoja de datos de ADC (Pág. 10) el tiempo mínimo alto o bajo debe ser de 125 ns cuando se trabaja por encima de 4,74 Vcc. Vcc en mi caso es 5V.

El tiempo alto es de 132 ns a un nivel de 3 V (ALTO) y de 144 ns a un nivel de 0,8 V (BAJO). La duración del reloj converge a un nivel de 3,2 V. El tiempo esperado es de 160 ns y no encuentro ninguna razón para la mala salida del reloj.

El siguiente diagrama es una impresión de pantalla del osciloscopio.

ingrese la descripción de la imagen aquí

Línea azul: CLK Línea roja: CS

La razón por la que marco los valores en 3 V y 0,8 V es según la hoja de datos de ADC (Pág. 4) el Vih es de 3 a 5,5 V y Vil es de -0,3 a 0,8 V.

Sugiera una posible razón de la mala salida de la FPGA y cómo mejoro la salida del reloj.

¿Qué es específicamente lo que parece estar mal? ¿La frecuencia es incorrecta? Además, ¿qué osciloscopio estás usando?
La salida no parece mala. Probablemente sea mejor en realidad de lo que muestra su alcance, ya que la sonda está cargando la línea. Lo que debe verificar es el período: mida la distancia entre dos flancos ascendentes consecutivos.
Estoy usando la serie PicoScope 3000.
@avakar lo entiendo. Pero en qué punto (nivel de voltaje) debo medir la distancia. Elija 3 V y 0,8 V para ALTO y BAJO. El tiempo bajo y alto también importa.
Su medida no es correcta. El ciclo de trabajo se mide al 50% (=Vdd/2). Así que mida nuevamente a 1,65 voltios, si Vdd es 3,3 V.
@Paebbels A 1.65VI obtenga los valores adecuados (320ns, es decir, 3.125MHz). ¿Pero el tiempo para ALTO y BAJO no es asunto del ADC?
@dDebug, no importa, los bordes ascendentes deben tener la misma distancia en todos los niveles.
@dDebug, los tiempos de subida/bajada a veces son importantes, pero en este caso probablemente no lo sean. Y también, las sondas de su oscopia están sesgando los resultados.
Ok, gracias por la sugerencia, me despejaron mis dudas. Creo que Avakar y Paebbels respondieron, pero es un comentario y no hay respuesta para marcar como aceptada. ¿Les gusta ponerlo en una respuesta. Entonces tenemos una duda resuelta.
@dDebug No, el tiempo alto y bajo 'real' (por encima del 90 % de Vdd es alto / por debajo del 10 % es bajo) no importa. Si un circuito tiene requisitos especiales para el reloj o la señal de datos, define el tiempo de subida y bajada. P.ej t L H de bajo (10%) a alto (90%) debe ser inferior a 5 ns. Entonces, el circuito puede estar seguro de que la señal sube o baja después de un tiempo predefinido y la señal puede ser muestreada por la lógica de entrada.
@Paebbels Esa fue una respuesta muy detallada. Muchas gracias por aclarar la duda.

Respuestas (1)

Su medida no es correcta.

El ciclo de trabajo se mide al 50% ( 1 2 V d d ). Así que mida de nuevo a 1,65 voltios, si V d d es 3.3V.

Los tiempos altos y bajos 'reales':
- por encima del 90% de V d d es alto
- por debajo del 10 % de V d d es bajo
no importa. Si un circuito tiene requisitos especiales para el reloj o la señal de datos, define el tiempo de subida y bajada.

Ejemplo: t L H 5 norte s
El tiempo de subida de menor a mayor (10 % a 90 %) debe ser inferior a 5 ns.

Entonces, el circuito puede estar seguro de que la señal sube o baja después de un tiempo predefinido y la señal puede ser muestreada por la lógica de entrada.