Dividir un reloj en Verilog, ¿está bien?

Dividir un reloj en Verilog es un ejercicio básico y hay muchas respuestas en línea sobre cómo hacerlo. Lo que quiero saber es si está bien usar un reloj que se ha dividido usando verilog en un FPGA real para sincronizar flip flops.

Lo pregunto porque el conocimiento común dicta que nunca debemos poner lógica combinacional en una línea de reloj y luego usar la señal resultante para impulsar el reloj de un flip-flop.

Claro, un divisor de reloj no es lo que llamaríamos lógica combinacional, pero al final del día, todavía estaría poniendo puertas lógicas entre una red de reloj (presumiblemente) compleja y la señal de reloj de un flip-flop.

Vale la pena señalar que ciertamente hice esto en algunos proyectos de hardware y funcionó, pero fue en un FPGA de bajo rendimiento. Me pregunto si esto funcionaría de manera consistente y confiable en la mayoría de los FPGA, o si tuve suerte con el chip que estaba usando.

Use su contador divisor como una habilitación de reloj para los registros controlados por el reloj no dividido.
¿Como podría hacerlo? ¿ Debo tener una lista de sensibilidad como @(enable and posedge clk)?
always @ (posedge clock) begin if (enable) begin ... end end
Dios. No puedo creer que no pensé en eso. Gracias por la sugerencia.
Generalmente funciona en FPGA, pero a menudo incluyen divisores de reloj dedicados y recursos PLL que se pueden usar para esto.
Esta pregunta , aunque no es un duplicado, puede serle útil.
@ pjc50 desafortunadamente, el divisor de reloj horneado en mi chip es bastante deficiente... solo hace div1 o div2.
@TomCarpenter Gracias por llevarme a esa pregunta. Definitivamente mejorará mi conocimiento general sobre este tema. He hecho un montón de Verilog en simulación, pero muy poco en la implementación real, por lo que me falta mucho en el departamento de conocimiento general de FPGA.

Respuestas (1)

Hay algunas cosas a considerar

  1. El chip debe tener el enrutamiento para llevar una señal de reloj desde una salida de registro a una red de reloj. La mayoría de los FPGA con los que he trabajado pueden comprobarlo.

  2. Las redes de reloj son un recurso limitado, mientras que algunos chips pueden sincronizar flip-flops fuera de las redes normales, al hacerlo, es probable que tengan un peor comportamiento de sincronización.

  3. Es probable que necesite decirle manualmente al analizador de tiempo lo que está haciendo para obtener un comportamiento/análisis de tiempo adecuado, es probable que los detalles de esto sean específicos del chip.

  4. Es probable que haya un desfase de fase sustancial entre el reloj original y el reloj generado.

  5. Para garantizar que el reloj esté limpio, debe provenir directamente de una salida de registro, no de la lógica combinatoria.

En general, puedes hacerlo, pero lo consideraría un último recurso. La mayoría de las veces puede obtener resultados similares con muchos menos dolores de cabeza al usar señales de habilitación y/o al usar múltiples salidas del pll del chip.