clk prescaler con posibles fallos

0

Soy nuevo aquí y tengo el siguiente problema. He desarrollado un módulo en vhdl que escala la frecuencia de un clk de entrada por el valor de preescalado de entrada (0-255) s.t. la frecuencia de la señal de salida es f_out = f_in / (1 + preescala).

Mi diseño funciona bien en la simulación, pero de pasados cursos universitarios y experiencia, sé que esto aún está lejos de funcionar en hardware.

Lo que creo que podría causar un problema es lo siguiente: Tengo una señal interna que cambia de nivel cuando debería producirse un flanco ascendente para clk_out y una que cambia de nivel cuando se produce un límite descendente para clk_out. clk_out es simplemente un XOR de ambos ... así que detrás de estas dos señales internas con búfer tengo una pequeña parte combinatoria que genera clk_out. Mi diseño mantiene el ciclo de trabajo en un 50% para que se pueda generar un flanco descendente en un flanco descendente de clk_in, por lo que no puedo simplemente clop_out flop.

Así que mis preguntas son:

  • ¿La parte combinatoria causará problemas en un diseño de fpga? Después de todo ... clk_out se usará como una señal cloxk.
  • ¿Hay tal vez una mejor manera de abordar esto? Realmente solo necesito el borde ascendente de clk_out, por lo que el ciclo de trabajo no es demasiado crítico, sin embargo, ¿cómo me doy cuenta? ¿Me doy cuenta del caso clk_in = clk_out?
pregunta YeahShibby

1 respuesta

0

(De una experiencia Xilinx)

  • Puede colocar una restricción de tiempo para asegurarse de que el tiempo de propagación de las partes combinatorias (alrededor del XOR) se mantenga más corto que el estado alto y bajo del reloj. Idealmente, deberían estar equilibrados.

  • Los buffers de reloj se deducen automáticamente cuando se usa una señal comercial como entrada de reloj. Puede verificarlo leyendo el informe de síntesis.

  • Algunas familias de FPGA tienen multiplexores de reloj especiales para evitar fallas, que podrían usarse para seleccionar entre las rutas de 'reloj directo' y 'división de reloj': "BUFGMUX"

  • Puedes usar un PLL multiplicador de reloj para generar un reloj de 2X y lograr un ciclo de trabajo del 50%, independientemente de la forma del reloj de entrada.

Si solo necesita bajas frecuencias (quizás hasta 50 ... 100MHz, depende de la familia FPGA), el XOR combinatorio debería funcionar. Si necesita altas frecuencias, un PLL y / o multiplexores de reloj deberían ser mejores.

    
respondido por el TEMLIB

Lea otras preguntas en las etiquetas