Bitte beachten Sie den folgenden Code. (Aus Gründen der Übersichtlichkeit ist es ein YCbCr 4:2:2 bis 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
Der Eingangstakt beträgt 54 MHz. cntr
ist ein Zwei-Bit-Zähler. flag_in
ist ein Flag, das dem Zähler mitteilt, wann er beginnen soll. Es ist sehr deutlich, dass sich keines der drei Ausgangssignale , Y
, Cb
oder Cr
mit einer schnelleren Rate als 27 MHz (die Hälfte von 54) ändert. Wenn ja, kann ich die Signale sicher bei 27 MHz abtasten und mir keine Gedanken über Probleme beim Überqueren der Taktdomäne , Setup und Halten usw. machen?
Ich plane, mit Vivado zu synthetisieren und auf einem FPGA zu platzieren. Der 27-MHz-Takt wird mit dem Vivado-Taktassistenten aus den 54 MHz abgeleitet.
Dies sieht aus wie eine 54-MHz-Schaltung, da Sie keine offensichtliche Kontrolle über die Phasenlage der beiden Takte haben. Solange die beiden Takte synchron sind und alle Pfade von clk_27 bis clk_54 auf 54 MHz getaktet sind, sollte es keine Probleme mit Metastabilität oder Konvergenz geben.
Wenn eines der Signale von unterschiedlichen Taktquellen erzeugt wird (selbst wenn sie phasenstarr sind) oder außerhalb des Chips durch externe Verbindungen geleitet wird, müssen Sie auch dort die Worst-Case-Verzögerungsvariation berücksichtigen.
Toni M
David
Toni M
David
Toni M