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.