Forum: FPGA, VHDL & Co. Phasenverschiebung um viertel Takt


von Andreas (Gast)


Angehängte Dateien:

Lesenswert?

Hallo!

Ich möchte mit einem Virtex-2 von Xilinx auf mehreren Ausgängen Impulse 
erzeugen, deren Startzeit mit einer Auflösung von einem viertel Takt 
angegeben werden soll.
Beispiel: Bei einem Systemtakt von 100 MHz (Periode 10 ns) möchte ich 
auf dem ersten Kanal einen Impuls nach 20 ns und auf einem zweiten Kanal 
nach 22.5 ns erzeugen. (die Zeiten sind wählbar)

Meine Lösung sieht bisher so aus:
Ein DCM erzeugt aus den 100 MHz vier Takte (0°, 90°, 180° und 270° 
Phasenverschiebung).

Pro Ausgangskanal habe ich eine Schaltung aus vier FlipFlops (siehe 
Anhang). Wobei jedes FlipFlop einen anderen Takt bekommt. Die 
Dateneingänge bekommen alle das gleiche Signal.

Per Multiplexer (der Rest im Bild im Anhang) wähle ich ganz zu Beginn 
ein bestimmtes FlipFlop aus. Also z.B. bei 22.5 ns das FlipFlop, das den 
90°-Takt bekommt.

Wenn der Impuls dann schließlich kommen soll (ein Counter zählt nebenbei 
mit) gehen die Dateneingänge der FlipFlops auf High. Jedes der vier 
FlipFlops übernimmt zu seinem Takt und nur das gewünschte Signal kommt 
durch den Multiplexer.

In der Theorie funktioniert das auch soweit :)
In der Praxis reicht je nach Synthese-Ergebnis die Setup-Time von 2.5 ns 
nicht aus. Also bei steigender Flanke des Systemtakts (0°) setze ich die 
Dateneingänge und das FlipFlop übernimmt nach 2.5 ns (90°) nicht.

Meine Fragen sind nun: Kann man da mit Timing-Constraints was machen? 
Und wenn ja, wie würde das konkret aussehen? Oder hat jemand vielleicht 
eine völlig andere Idee?

Entschuldigt diese ewig lange Ausführung. Ich wollte möglichst 
detailiert beschreiben, um was es geht.

Viele Grüße,
Andreas

von FPGA-Guru (Gast)


Lesenswert?

DDR-Zelle, die mit dem verzögerten Takt läuft.

von Falk B. (falk)


Lesenswert?

@ Andreas (Gast)

>In der Theorie funktioniert das auch soweit :)
>In der Praxis reicht je nach Synthese-Ergebnis die Setup-Time von 2.5 ns
>nicht aus. Also bei steigender Flanke des Systemtakts (0°) setze ich die
>Dateneingänge und das FlipFlop übernimmt nach 2.5 ns (90°) nicht.

Dann musst du nochmal ein FlipFlop zwischenschalten, welches mit dem 180 
Grad phasenverschobenen Takt läuft. Dann hast du bis zu nächsten 90 Grad 
Flanke 3x2.5ns. Die Mustergenerierung muss dann halt einen Takt eher 
erfolgen.

>Meine Fragen sind nun: Kann man da mit Timing-Constraints was machen?

Wenig. Zaubern können die auch nicht. Die Software kann nur prüfen, ob 
sie eingehalten werden oder nicht.

MFG
Falk

von Andreas (Gast)


Lesenswert?

@ FPGA-Guru

>DDR-Zelle, die mit dem verzögerten Takt läuft.

DDR-Zelle, heißt doch, dass der Wert bei steigender und fallender Flanke 
übernommen wird. Ich versteh noch nicht ganz, wie mir das in diesem Fall 
weiterhelfen soll. Könntest Du das bitte etwas näher erklären?

@ Falk Brunner

>Dann musst du nochmal ein FlipFlop zwischenschalten, welches mit dem 180
>Grad phasenverschobenen Takt läuft. Dann hast du bis zu nächsten 90 Grad
>Flanke 3x2.5ns. Die Mustergenerierung muss dann halt einen Takt eher
>erfolgen.

Diese Idee hatte ich auch, aber dadurch wird das Problem nur ein 
FlipFlop zurückverlegt. Schließlich muss ich dann die Setup-Time des 
ersten FlipFlops einhalten.

Und wegen den Timing-Constraints: Ich dachte, dass man bestimmte Pfade 
dadurch als "kritisch" einstufen könnte, damit sie möglichst kurz 
geroutet werden.

Andreas

von Falk B. (falk)


Lesenswert?

@ Andreas (Gast)

>>DDR-Zelle, die mit dem verzögerten Takt läuft.

>DDR-Zelle, heißt doch, dass der Wert bei steigender und fallender Flanke
>übernommen wird.

Ja.

> Ich versteh noch nicht ganz, wie mir das in diesem Fall
>weiterhelfen soll. Könntest Du das bitte etwas näher erklären?

Takt verdoppeln und DDR-FlipFlop Nutzen. Das ist das geliche wie mit 
vier phasenverschobenen Takten zu arbeiten. Der Vorteil liegt darin, 
dass der MUX schon im DDR-FlipFlop steckt, und demzufolge wesentlich 
schneller ist. Ausserdem hast du direkt am Ausgang ein FlipFlop, was das 
Timing straff festnagelt.


>Diese Idee hatte ich auch, aber dadurch wird das Problem nur ein
>FlipFlop zurückverlegt.

Nöö. In deinem direkten Ansatz hast du von der steigenden Flanke des 0 
Grad Taktes nur 1/4 Takt bis zur steigenden Flanke vom 90 Grad Takt. So 
hast du die DOPPELTE Zeit, nämlich 1/2 Takt. vond iesem 
Zwischen-FlipFlop hast du dann 3/4 Takte Zeit bis zur nächsten 
steigenden Flanke des 90 Grad Taktes.

>Und wegen den Timing-Constraints: Ich dachte, dass man bestimmte Pfade
>dadurch als "kritisch" einstufen könnte, damit sie möglichst kurz
>geroutet werden.

Das ist richtig. Aber das löst das Problem allein nicht. Brain 2.0 ist 
duch nichts zu toppen.

MfG
Falk

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.