Hallo, ich würde gerne wissen, wie sich aus einem am FPGA angeschlossenen Oszillator eine höhere Frequenz gewinnen lässt (PLL)! Sind dann beide Frequenzen taktsynchron, oder hinkt der neue erzeugte Takt dem alten hinterher? Wenn ich aus 10 Mhz die doppelte Frequenz 20Mhz generiert haben will, gehen die steigenden Flanken des 10Mhz mit der 20Mhz gleichzeitig hoch?
Hm klar das ist doch das Prinzip der PLL (Phase Locked Loop). Auf deutsch: Phasengekoppelter Regelkreis Also ein Regler der Ist auf Soll so reglet, das die Phase (zeitliche Abstand gemessen zw. Flanke Frequenz1 und Frequenz2) konstant ist. Übrigens, viele FPGA's haben so was on-chip, da brauchts nix externes PLL
Danke. das mit der internen PLL wusste ich zwar, aber die Funktionsweise war mir unklar. Gut zu wissen :) Ne andere Frage: Wenn ich mit einem Zähler eine externe Frequenz herunterteile, mir eine andere Frequenz halber Periode erzeuge, wie sieht es hier mit den Flanken aus? Sind diese nahezu taktsynchron, oder kommt es aufgrund der Gatterlaufzeiten zu großen Abweichungen.
Hm ich nehme an du meinst doppelte Periode , der Zähler wird also zum Toggle-FF. Da geht man von unbekannter Phase aus. Mit Timingconstraints kann etwas drehen und eine obere Grenze für die Phase festhalten. Aber hinsichtlich Temperatur- und Spannungsänderungen ist die Phase variabel, da nicht geregelt. Und FF-Ausgänge können nicht in allen FPGA als Treiber für (low Skew) Taktnetzwerke genutzt werden.
"Übrigens, viele FPGA's haben so was on-chip, da brauchts nix externes PLL" Das ist richtig! Aber bitte beachten, daß die PLL's in den FPGA's eine Mindestfrequenz verlangen. Die Cyclones von ALTERA brauchen mindestens 14MHz. Mit den angesprochenen 10MHz wird das dann wohl nicht gehen. Wie es bei den anderen FPGA-Familien aussieht weiß ich nicht - aber das jeweilige Datenblatt gibt da sicher Auskunft. Viele Grüße TobiFlex
Zur "Gleichzeitigkeit" der Flanken : Dies gilt nur im eingeschwungenen Zustand und auch nur dann wenn die Eingangsfrequenz komplett stabil ist. Die PLL kann leichte Schwankungen der Eingangsfrequenz wegfiltern. Wenn man einfache und doppelte Frequenz gleichzeitig braucht, ist es besser die Eingangsfrequenz nicht direkt zu verwenden, sondern eine PLL, welche beide Frequenzen generiert, also eine Kopie der Eingangsfrequenz und die doppelte. An den Ausgängen der PLL sind die Flanken dann garantiert gleichzeitig (genug). Dies gilt auch für die internen PLL's der FPGA's , z.B. der DCM von Xilinx. Dieser hat mehrere Ausgänge mit den generierten Frequenzen. Zum Zähler : Wenn Du mit einem Zähler eine niederere Frequenz erzeugst, dann sollte man das Ausgangs-signal nicht als Takt verwenden, sondern nur als Freigabe (Enable)-Signal. Der langsamere Teil bekommt dann ebenfalls den schnellen Takt, aber arbeitet nur alle x Takte. Auf diese Weise vermeidet man das Problem der Gatter-Laufzeiten. Nur wenn man wirklich Strom sparen muß, macht es Sinn Teile des Designs mit einem langsameren Takt zu versorgen. Grüße Klaus
ich arbeite gerade an einem Projekt, in dem Messdaten ausgewertet werden sollen. Die Daten erhalte ich aus einem AD-Wandler. Der AD-Wandler leifert mir alle 40Mhz neue Daten, die ich für die Auswertung zwischenspeichere. Mein FPGA wird mit dem selben Takt des AD-Wandlers versorgt. Wie ist es am einfachsten, die Daten ohne Datenverlust komplett abzuspeichern? Bisher kann ich nur die Hälfte der Daten speichern und auswerten. Kann man dies auch ohne PLL hinbekommen?
Das hängt von der Datenmenge ab. Wenn die Daten blockweise kommen, dann könntest Du die Daten mit dem 40 MHZ Eingangstakt in ein FIFO speichern und langsamer auslesen.
Die Daten kommen Blockweise alle 25 ns. Mit nem Fifo kann ich hier leider nichts anfangen, da die Datenmenge sehr groß ist, Da hilft nur ein schneller SRAM.
Was für ein FPGA verwendest Du? Hat es eine interne PLL? Wie groß sind Deine Datenblöcke? Vielleicht kannst Du einen 80 MHz Oszillator verwenden und den 40 MHz Takt für den A/D Wandler im FPGA erzeugen.
Die Datenblöcke sind 8 bit groß (parallel). Es ist ein kleiner FPGA von Altera ohne PLL. Die 40Mhz extern kann ich auch aus externen 80Mhz gewinnen. Dies ist aber eine Hardware-Lösung! Schade, wird mir wohl vorerst nichts anderes übrigbleiben. Wie ist es aber mit PLL? Ist die intern generierte Frequenz(80Mhz) dazu geeignet (taktsynchron) um die Aufgabe zu lösen (Timings des RAM beachtend)?
Welche PLL? Dein FPGA hat ja keine. Ob man das Timing hinbekommt, hängt von der Geschwindigkeit des SRAM's ab. Bei 80 MHz kann man alle 12.5 ns ein Signal umschalten, das heisst daß der WE-Puls im schnellsten Fall 12.5 ns (1 Taktzyklus) anliegt. Da die Adressen länger anliegen sollen, müssen diese mindestens 2 Taktzyklen (= 25 ns) anliegen. Ob das mit Deinem SRAM zusammenpasst, kannst nur Du wissen. Mein Vorschlag wäre den 40 MHz Oszillator durch einen 80 MHz zu ersetzen. Diese 80 MHz gehen in das FPGA und das FPGA erzeugt 40 MHz, welche auch nach außen geführt werden, zum A/D Wandler als Takt. Dann läuft dein A/D Wandler synchron mit dem FPGA, das FPGA aber doppelt so schnell.
>Welche PLL? Dein FPGA hat ja keine stimmt! aber dies war ne Frage für den Fall, wenn ich ein anderes FPGA benütze! Danke für all die Antworten.
Hi, wenn das asynchrone SRAM zulangsam ist koennte man auch ein synchrones SRAM mit Burst Mode benutzen. Gruß, Dirk
Einen von einer PLL erzeugten Takt sollte man eigentlich nicht für einen ADC verwenden, wenn man sich nicht Rauschen durch den Jitter einhandeln will. Besser einen externen Quarzoszillator für den ADC und daraus den Takt fürs FPGA ableiten. Bei nem 8 Bit ADC mags noch gehn...da geht eventuell das Rauschem im LSB unter...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.