Forum: FPGA, VHDL & Co. Frequenzverdopplung in FPGA


von Wolfgang Kopp (Gast)


Lesenswert?

Hallo,

ich möchte in meinem FPGA (Spartan 3A) die Eingangsfrequenz (36Mhz) auf 
72Mhz verdoppeln OHNE eine DCM oder DLL zu verwenden, weil ich das 6x 
benötige und in meinem FPGA nur 4 DCMs vorhanden sind.

Mir schwebt da eine Schaltung mit 90° Phasenverschiebung und einem XOR 
im Kopf herum, wie hier besprochen:
Beitrag "Frequenz verdoppeln"

Wie ich allerdings die 90° Phasenverschiebung (wieder ohne DCM) 
zusammenbekomme, ist mir noch nicht klar. Ggf. könnte man den Takt mit 
300Mhz abtasten und so eine relativ konstante Verzögerung zustande 
bringen.

Hat jemand eine Idee, wie das am besten hinzubekommen ist, oder so etwas 
schon gemacht?

Schöne Grüße,
Wolfgang

von EB (Gast)


Lesenswert?

du könntest dir ein Delay-Element mittels Handinstanzierung von LUTs und 
XLOC bauen. Das hat ein relativ determinitisches Delay. Dann erzeugte 
Clock rausleiten und "abstimmen".

von Klaus F. (kfalser)


Lesenswert?

Du hast also 6 getrennte Eingangsignale mit je 36 MHz und willst jedes 
von diesen verdoppeln?
Du hast nicht geschrieben wozu Du das brauchst, aber ich könnte mir 
vorstellen, dass Dein Lösungsansatz nicht optimal ist.
Wenn der verdoppelte Takt nur intern verwendet wird, dann sollte man mit 
einem höheren Takt mit Clock Enable arbeiten, das dann eben pro Flanke 2 
x kommt.
Eine Taktverdopplung mit irgendwelchen Verzögerungselementen und XOR ist 
nicht so empfehlenswert.

von EB (Gast)


Lesenswert?

Es ist vor allem stark temperaturabhängig ;)

von Wolfgang Kopp (Gast)


Lesenswert?

Danke für die Antworten erstmal!
Ok, hier die Geschichte rundherum: ich habe 6 Kameraeingänge die mit 
unabhängigen, unzusammenhängenden Clocks daherkommen. Ich bekomme Daten 
an beiden Flanken des Clocks (DDR sozusagen), muss die Daten aber mit 
der steigenden Flanke weitergeben, oder ggf. intern in einem Blockram 
buffern, was ja auch nur mit der steigenden Flanke möglich ist.

Das mit dem Delay Element habe ich mir auch schon überlegt, aber da kenn 
ich mich nicht richtig aus. Wie groß sind denn da die Toleranzen? Wenn 
das Tastverhältnis nicht ganz 50/50 ist, ist das nicht so tragisch. 
Müsste ich das im "Floorplaner" machen?

Wolfgang

von Fpgakuechle K. (Gast)


Lesenswert?

An den Eingangpins sind programmierbare delayelemente,
 (Xilinx UG331, Kapitel: "Input Delay Functions"
wenn du also an zwei pins das selbe Signal einfädelst ...

MfG


Wolfgang Kopp schrieb:
> Danke für die Antworten erstmal!
> Ok, hier die Geschichte rundherum: ich habe 6 Kameraeingänge die mit
> unabhängigen, unzusammenhängenden Clocks daherkommen. Ich bekomme Daten
> an beiden Flanken des Clocks (DDR sozusagen), muss die Daten aber mit
> der steigenden Flanke weitergeben, oder ggf. intern in einem Blockram
> buffern, was ja auch nur mit der steigenden Flanke möglich ist.
>
> Das mit dem Delay Element habe ich mir auch schon überlegt, aber da kenn
> ich mich nicht richtig aus. Wie groß sind denn da die Toleranzen? Wenn
> das Tastverhältnis nicht ganz 50/50 ist, ist das nicht so tragisch.
> Müsste ich das im "Floorplaner" machen?
>
> Wolfgang

von Thomas R. (Firma: abaxor engineering) (abaxor)


Lesenswert?

Wolfgang Kopp schrieb:
> Danke für die Antworten erstmal!
> Ok, hier die Geschichte rundherum: ich habe 6 Kameraeingänge die mit
> unabhängigen, unzusammenhängenden Clocks daherkommen. Ich bekomme Daten
> an beiden Flanken des Clocks (DDR sozusagen),
Um DDR-Daten in SDR zu wandeln ist das IDDR2 Element da. Danach hast du 
deine Daten in doppelter Breite mit 36 MHz. Die kannst du mit dieser 
Frequnez einen BRAM schreiben. Auf der anderen Seite kannst du sie mit 
72MHz wieder auslesen.

Tom

von Wolfgang Kopp (Gast)


Lesenswert?

das mit dem Input Delay ist eine gute Idee, aber das mit dem IDDR2 
gefällt mir besser. Ich brauche dann zwar wieder einen 72Mhz Takt, aber 
der muss dann nicht mehr in Phase sein und würde nur eine DCM 
verschwenden. Klingt weniger nach Trickserei...
DANKE, Wolfgang

von Falk B. (falk)


Lesenswert?

@  Wolfgang Kopp (Gast)

>das mit dem Input Delay ist eine gute Idee, aber das mit dem IDDR2
>gefällt mir besser.

Das ist die professionelle Lösung.

> Ich brauche dann zwar wieder einen 72Mhz Takt, aber
>der muss dann nicht mehr in Phase sein und würde nur eine DCM
>verschwenden. Klingt weniger nach Trickserei...

Ganz einfach. Deine Daten werden mit den 6 Eingangstakten eingelesen und 
in kleine ASYNCHRONE FIFOs geschrieben. Ein 7. Takt (nicht Zwerg ;-) 
nahezu beliebiger Frequenz und Phasenlage liest die Daten aus den FIFOs 
und macht die gesamte Datenverarbeitung. Bleibt sogar noch ein Globals 
Taktnetz frei, welch eine Verschwendung ;-)

MfG
Falk

von Oberpauker (Gast)


Lesenswert?

Das Input Delay reicht aber doch nicht, oder? Man braucht für den 
EXOR-Konstrukt doch das originale und das verzögerte Signal.

Das Delay muss schon IM FPGA sitzen. Ein Verkettung aus n LUTS müsste 
eigentlich reichen.

von Falk B. (falk)


Lesenswert?

@  Oberpauker (Gast)

>Das Delay muss schon IM FPGA sitzen. Ein Verkettung aus n LUTS müsste
>eigentlich reichen.

Murks^3

von J. S. (engineer) Benutzerseite


Lesenswert?

Bei 36MHz Datenrate kann man es auch einfach einsynchronisieren, indem 
man 4x 36MHz nimmt und bei steigender Flanke eines jeden Taktes sowie 
jeweils 2 Takte später die Daten übernimmt.

Zur Not geht es sogar ganz ohne Takte. Mit z.B. dem 3fachen des 
DDR-Taktes (hier ca 200MHz) geht es recht bequemn.

von Gast (Gast)


Lesenswert?

Falls mal keine DCM/PLL zur verfuegung steht:
http://www.pldworld.com/_xilinx/html/tip/sixeasypieces.htm
Unterpunkt 4.

Gruss

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.