1 votos

Condición de uso de un reloj con registros de otro, reloj sincronizado

¿Está permitido utilizar una condición generada por un reloj con otro reloj totalmente sincronizado (generado por un PLL con desplazamiento de fase 0) de diferente frecuencia?

Esto funciona como se espera en la simulación:

`default_nettype none

`timescale 1ns/1ps
module top;

   reg base_clk = 0;
   reg fst_clk = 0;

   reg cond = 1'b0;
   reg [2:0] ctr = 3'd0;
   reg some_reg = 1'b0;

   always #15 base_clk = !base_clk;
   always #5 fst_clk = !fst_clk;

   initial begin
      $dumpfile("top.vcd");
      $dumpvars(0, top);
      #10000 $finish;
   end

   always @(posedge base_clk) begin
      ctr  <= ctr + 1'b1;
      if (ctr == 3'd5)
        cond <= 1'b1;
      else
        cond <= 1'b0;
   end

   always @(posedge fst_clk) begin
      if (cond)
        some_reg <= 1'b1;
   end

endmodule

enter image description here

¿Puedo suponer que esto también funcionará cuando se sintetiza (en síntesis fst_clk sería generado por un PLL)? En mi opinión, no debería haber ningún problema, ya que los relojes están sincronizados y no estoy cruzando dominios de reloj. ¿Estoy en lo cierto al pensar esto? O, he pasado por alto algo y sólo debería utilizar una condición generada por el mismo reloj.

1voto

GRoNGoR Puntos 81

Dado que sus dos relojes son generados por el mismo PLL, están sincronizados con una relación de fase bien conocida. Por lo tanto, no hay cruce de dominio de reloj asíncrono entre las señales conducidas por base-clk y fast-clk .

Cuando se envían datos desde reloj lento a reloj rápido siempre y cuando el reloj rápido tiene un periodo de tiempo suficientemente pequeño, no debería haber riesgo de pérdida de datos. Sin embargo, estos trayectos entre relojes tienen que estar debidamente limitados por las trayectorias múltiples y garantizar el cumplimiento de la temporización.

Envío de datos desde reloj rápido a reloj lento es otra historia. Tendrás una buena visión aquí

0voto

bryan hunt Puntos 8

Si base_clk y fast_clk tienen una relación de fase constante, estarán operando en el mismo dominio de reloj. En ese caso, tu suposición es correcta y yo asumiría que tu diseño funcionará correctamente cuando se sintetice.

0voto

Caleb Reister Puntos 30

Tal vez. Puedes prescindir de realizar un cruce de dominio de reloj en este caso siempre que puedas garantía que la señal que está pasando mantendrá un estado para al menos tres bordes en el reloj receptor. Dicho esto, yo seguiría recomendando el uso de un sincronizador de dos flip-flop.

Echa un vistazo a este artículo de Sunburst design para más información.


Tenga en cuenta que la duración del cond El pulso también puede variar en el dominio del reloj de recepción. Si esto es un problema, se puede combinar fácilmente un sincronizador con un detector de bordes sincrónico.

schematic

simular este circuito - Esquema creado con CircuitLab

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X