Por favor vea el siguiente código. (En aras de la claridad, es un YCbCr 4:2:2 a 4:4:4 SerDes).
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 le dice al contador cuándo comenzar. Está 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 con seguridad las señales a 27 MHz y no preocuparme por los problemas de cruce del dominio del reloj , configuración y espera, etc.?
Planeo sintetizar con Vivado y colocarlo en un FPGA. El reloj de 27 MHz se derivará del asistente de sincronización de 54 MHz con Vivado.
Esto parece un circuito de 54 MHz, ya que no tiene un control obvio de la fase de los dos relojes. Siempre que los dos relojes estén sincronizados y todas las rutas clk_27 a clk_54 estén cronometradas para 54 MHz, entonces no debería haber problemas con la metaestabilidad o la convergencia.
Si alguna de las señales es generada por diferentes fuentes de reloj (incluso si están bloqueadas en fase), o pasan fuera del chip a través de conexiones externas, también deberá permitir la variación de retraso en el peor de los casos.
TonyM
David
TonyM
David
TonyM