Fuente de reloj controlada por la lógica que está siendo sincronizada por la fuente

0

¿Cuáles son las implicaciones cuando un bloque siempre controla el interruptor que cambiará la fuente del reloj (en realidad, más de una frecuencia que proviene de un divisor de reloj) que está sincronizando el bloque siempre? ¿Cómo manejará la herramienta de síntesis el tiempo? ¿Cómo deberían darse las restricciones en tal caso?

Ejemplo:

assign clk = (freq_val=='d0) ? clk_5M : (freq_val=='d1) ? clk_10M : clk_200M
always@(posedge clk) begin
   if(cond1) freq_val='d0;
   else if(cond2) freq_val<='d1;
   else freq_val<='d0;
end
    
pregunta Pramod

2 respuestas

1

Por lo general, deberá restringir la sincronización más rápida. Usted ha descrito un Mux, por lo que debería obtener un Mux en síntesis. Necesita más "protección" con respecto a lo que @Oldfart declaró en términos de "pulsos runt"

Google "Técnicas para hacer que el cambio de reloj no tenga problemas". Hay un artículo de IEEE con ese mosaico que debería ayudar.

Considere un "tiempo de cegamiento" cuando cambie la frecuencia del reloj ... cuando cambie su mux, demore la conmutación del reloj a la nueva frecuencia hasta que haya eliminado / bloqueado / bloqueado la salida del reloj. Una vez que se haya "instalado" en la nueva frecuencia, vuelva a aplicarla. Si no necesita los valores anteriores, también podría aplicar un restablecimiento a las partes afectadas del diseño cuando cambie.

    
respondido por el CapnJJ
3

Esto:
assign clk = (freq_val=='d0) ? clk_5M : (freq_val=='d1) ? clk_10M : clk_200M
es peligroso. Y mal, no puedes sacar clk_200M de eso, pero asumo que es solo un error tipográfico

Debe asegurarse de no generar pulsos de reloj "runt". (Pulsos de reloj que son demasiado cortos, altos o bajos).

Si todos esos relojes están sincronizados y tienen bordes ascendentes que coinciden, puede salirse con la suya. Si son a-sincrónicos no funcionará.

¡Tenga en cuenta que su código puede funcionar perfectamente en una simulación pero puede fallar en hardware real!

    
respondido por el Oldfart

Lea otras preguntas en las etiquetas