mikrocontroller.net

Forum: FPGA, VHDL & Co. Frequenzverdopplung in FPGA


Autor: Wolfgang Kopp (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: EB (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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".

Autor: Klaus Falser (kfalser)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: EB (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es ist vor allem stark temperaturabhängig ;)

Autor: Wolfgang Kopp (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Fpga Kuechle (fpgakuechle) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Thomas Reinemann (Firma: abaxor engineering) (abaxor)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Wolfgang Kopp (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Oberpauker (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Oberpauker (Gast)

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

Murks^3

Autor: Jürgen S. (engineer) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Gast (Gast)
Datum:

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

Gruss

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.