¿posible cruce del dominio del reloj?

1

Por favor vea el siguiente código. (En aras de la claridad, es una SerDescripción YCbCr 4: 2: 2 a 4: 4: 4).

always @(posedge clk_54, posedge reset) begin
if (reset)
    cntr <= 0;
else if (flag_in) 
    cntr <= cntr+1; 
end

always @(posedge clk_54, posedge reset) begin
if (reset) begin
    Y  <= 0;
    Cb <= 0;
    Cr <= 0; end
if (cntr==0) 
    Cb <= YCbCr;
else if ((cntr==1)||(cntr==3)) 
    Y <= YCbCr; 
else if (cntr==2) 
    Cr <= YCbCr;
end

El reloj de entrada es de 54 MHz. cntr es un contador de dos bits. flag_in es una bandera que indica al contador cuándo comenzar. Es muy claro que ninguna de las tres señales de salida, Y, Cb o Cr, cambia a una velocidad superior a 27 MHz (la mitad de 54). Si es así, ¿puedo muestrear de forma segura las señales a 27 MHz y no preocuparme por los problemas de cruce del dominio del reloj, configuración y retención, etc.?

Planeo sintetizar con Vivado y colocarlo en un FPGA. El reloj de 27 MHz se derivará de los 54 Mhz con el asistente de temporización de Vivado.

    
pregunta David

1 respuesta

2

Esto parece un circuito de 54 MHz, ya que no tiene un control obvio de la fase de los dos relojes. Mientras los dos relojes estén sincronizados, y todas las rutas clk_27 a clk_54 estén cronometradas en 54 MHz, entonces no debería haber problemas con la metastabilidad o la convergencia.

Si cualquiera de las señales es generada por diferentes fuentes de reloj (incluso si están sincronizadas), o pasa un chip fuera de chip a través de conexiones externas, también deberá permitir la variación de retardo en el peor de los casos.

    
respondido por el Sean Houlihane

Lea otras preguntas en las etiquetas