Hallo also erstmal hab ich keine Ahnung ob es überhaupt geht, aber ich suche eine Lösung. Ich generieren einen Takt mit DDFS. Und zwar keinen Sinus sondern ein Rechteck. Das klappt auch prima aber beim DDFS ist ist das ja so, dass manchmal Werte übersprungen werden oder auch zweimal ausgegeben werden. Also habe ich bei dem neuen Takt der rauskommt, also dem Rechteck mal eine Periodendauer die einen Takt der schnellen DDFS Clock länger oder kürzer ist. Je schneller diese Clock desto geringer ist die Schwankung zwischen den Periodendauer. Raus kommt also ein Rechteck das im Mittel die gewünschte Periodendauer hat, aber eben schwankt. Gibt es im FPGA eine Möglichkeit die Schwankung wegzubekommen? Also eine Art Schwingkreis der dann angeregt wird und schwingt und auch etwas träge ist auf Veränderungen? Wenn ich das nur durch eine PLL gebe dann ist der Ausgang leider nicht besser. Vielen Dank! Und ja ich könnte den Takt auch direkt generieren aber ich will den eben frei einstellbar zur Laufzeit.
@Gustl Buheitel (-gb-) >Ich generieren einen Takt mit DDFS. Du meinst eine DDS ohne Sinustabelle, richtig? > Und zwar keinen Sinus sondern ein >Rechteck. Das klappt auch prima aber beim DDFS ist ist das ja so, dass >manchmal Werte übersprungen werden oder auch zweimal ausgegeben werden. Ja. >Also habe ich bei dem neuen Takt der rauskommt, also dem Rechteck mal >eine Periodendauer die einen Takt der schnellen DDFS Clock länger oder >kürzer ist. Je schneller diese Clock desto geringer ist die Schwankung >zwischen den Periodendauer. Nennt sich Jitter. >Gibt es im FPGA eine Möglichkeit die Schwankung wegzubekommen? Nicht wirklich, ausser einen höheren Takt zu nutzen. >Also eine >Art Schwingkreis der dann angeregt wird und schwingt und auch etwas >träge ist auf Veränderungen? Wenn ich das nur durch eine PLL gebe dann >ist der Ausgang leider nicht besser. Weil der Schleifenfilter des PLL zu breitbandig ist, um den Jitter zu dämpfen. >Und ja ich könnte den Takt auch direkt generieren aber ich will den eben >frei einstellbar zur Laufzeit. Höheren Takt nutzen. Da aber die Akkumulatoren auf grund der Logik nicht extrem hoch getaktet werden können, kann/muss man 2/4/8 Stück parallel betreiben und versetzt arbeiten lassen. Die MSBs der Akkus kommen in einen parallel-seriell Wandler, der mit 2/4/8 fachem Takt arbeitet. Diese einfache Logik kann man mit mehreren hundert MHz Takten. Als "Endstufe" kann man in modernen FPGAs noch mit einem DDR FlipFlop den Ausgabetakt verdoppeln. Been there, done that.
Gustl B. schrieb: > > Gibt es im FPGA eine Möglichkeit die Schwankung wegzubekommen? Wegbekommen ist unmöglich, aber reduzieren um den Faktor 5-10 ist eventuell machbar. Hat aber ein paar Vorbedingungen: 1.) Der FPGA hat eine PLL 2.) Der Takt hat eine Frequenz die grösser als die minimale PFD Frequenz der PLL ist. Deine DDFS sprongt ja ständig zwischen 2 Frequenzen hin und her. Wenn die Sollfrequenz nahe bei eine dieser Grenzen ist, reicht in der Tat der Schleifenfilter der PLL nicht mehr aus. Aber da kann man mit Noiseshaping nachhelfen.
Je nachdem, welche Frequenzen da erzeugt werden, muss das zunächst gefiltert werden. Der gängige Weg ist der, dass man per DDS einen verrauschten Sinus erzeugt, diesen filtert und dann auf eine DDS-Tabelle mit dem Zielsignal gibt. Um ein Rechteck zu produzieren, wäre es dann ein Schmitt-Trigger.
Ich frage mich, um welche Frequenzen und welchen Jitter es sich absolut handelt...
Falk B. schrieb: > Höheren Takt nutzen. Da aber die Akkumulatoren auf grund der Logik nicht > extrem hoch getaktet werden können, kann/muss man 2/4/8 Stück parallel > betreiben und versetzt arbeiten lassen. Die MSBs der Akkus kommen in > einen parallel-seriell Wandler, der mit 2/4/8 fachem Takt arbeitet. > Diese einfache Logik kann man mit mehreren hundert MHz Takten. Als > "Endstufe" kann man in modernen FPGAs noch mit einem DDR FlipFlop den > Ausgabetakt verdoppeln. Been there, done that. Das verstehe ich nicht ganz. Wenn ich da mehrere phasenverschobene DDFS-Ausgänge nehme und da jeweils das höchste Bit des Akkus in den Serialisierer packe, dann ist das doch nurnoch "irgendwas" aber eben nichts "schönes"? Ich meine der Serialisierer gibt die Bits doch nur nacheinander aber schneller auf den Ausgang. Klar schnellerer Takt würde helfen, ich verwende derzeit nur zu Testzwecken 320 MHz und erzeuge mir etws um die 40 MHz. Nicht genau 40 MHz aber in der Ecke. Soll ja eben nicht genau sein sondern etwas danaben weil sonst könnte man das auch intern aus dem Clockmanager fallen lassen. Ich fände es halt ganz fein wenn man mit DDFS und dann Jitter wegbekommen irgendwie einen sehr genau einstellbaren Takt bekäme. Aber wie groß ist der Jitter? Nun, 320/40=8 also werden grob immer 8 Additionen auf den Akku durchgeführt (es wird also bei jedem Takt vom schnellen Takt ca. 1/8tel des maximalen Akkuwertes addiert) bis eine Periode voll ist. Aber vor allem mal eine mehr, mal eine weniger. Dadurch habe ich einen ganz ordentlichen Jitterm, wenn ich keinen Denkfehler habe müsste das dann ein Takt des schnellen Taktes sein, also 3,125 ns.
@ Gustl Buheitel (-gb-) >Das verstehe ich nicht ganz. Sieht so aus. > Wenn ich da mehrere phasenverschobene >DDFS-Ausgänge nehme und da jeweils das höchste Bit des Akkus in den >Serialisierer packe, dann ist das doch nurnoch "irgendwas" Nö. Die phasenverschobenen DDFS erzeugen dir PARALLEL die MSBs, wie es EIN DDFS allein in mehreren Takten erzeugen würde. Da man diese Informationen aber parallel erzeugt, kann man sie, natürlich in der richtigen Reihenfolge, seriell Nfach schneller ausgeben. Vor Jahren hat mal jemand vorgeschlagen, die Gigabittranceiver der neueren FPGAs dafür zu nutzen, denn die können je nach Typ 1-11 Gbit/s ausgeben. Dazu muss man aber sämtliche Encoder etc. abschalten und diese als reines Schieberegister nutzen. >aber eben nichts "schönes"? Doch. > Ich meine der Serialisierer gibt die Bits doch nur > nacheinander aber schneller auf den Ausgang. Darum geht es doch. Mit einem höheren Ausgabetakt wird der Jitter absolut kleiner. >Klar schnellerer Takt würde helfen, ich verwende derzeit nur zu >Testzwecken 320 MHz und erzeuge mir etws um die 40 MHz. Naja, da ist nur Faktor 8 dazwischen, das ist nicht sehr viel. Aber man könnte wahrscheinlich den Faktor 4 noch rausholen, wenn man die 320 MHz per PLL verdoppelt und dann per DDR FlipFlop ausgibt. >Ich fände es halt ganz fein wenn man mit DDFS und dann Jitter >wegbekommen irgendwie einen sehr genau einstellbaren Takt bekäme. Wenn es ganz schön werden soll, muss man den klassischen Weg über Sinus, analogen Filter und Komparator gehen, optimalerweise sogar noch mit Dithering im Digitalteil. >Aber wie groß ist der Jitter? Nun, 320/40=8 also werden grob immer 8 >Additionen auf den Akku durchgeführt (es wird also bei jedem Takt vom >schnellen Takt ca. 1/8tel des maximalen Akkuwertes addiert) bis eine >Periode voll ist. Aber vor allem mal eine mehr, mal eine weniger. >Dadurch habe ich einen ganz ordentlichen Jitterm, wenn ich keinen >Denkfehler habe müsste das dann ein Takt des schnellen Taktes sein, also >3,125 ns. Logisch, denn dein DDFs kann nur im Taktraster deiner 320 MHz ein Signal erzeugen.
Also ich versuche mir das mal vorzustellen, ich habe also die 8 DDFS die mir da einen Rechteck erzeugen: 00001111 00011110 00111100 01111000 11110000 11100001 11000011 10000111 Ok, wenn man dann jeweils eine Spalte ausgibt wird das tatsächlich besser, sehr cool! Jetzt noch eine Anschlussfrage: Ich hätte diesen Takt gerne im FPGA und nicht extern, kann ich also einen SerDes auch komplett intern betreben oder muss ich über ein Pad rausgehen und dann wieder reinkommen? Habe noch nie was mit SerDes gemacht ... Falk B. schrieb: > Wenn es ganz schön werden soll, muss man den klassischen Weg über Sinus, > analogen Filter und Komparator gehen, optimalerweise sogar noch mit > Dithering im Digitalteil. Ist das denn schaltungstechnisch sehr schwierig? Wenn das nur ein kleiner einfach zu verwendender Baustein ist, also Clock mit Jitter rein, Clock ohne Jitter raus, dann ist das fast generell einfacher. Danke!
@ Gustl Buheitel (-gb-) >Ich hätte diesen Takt gerne im FPGA und nicht extern, kann ich also >einen SerDes auch komplett intern betreben Das geht AFAIK nur mit der normalen Logik, die GigabitSerDes können das nicht. >> Wenn es ganz schön werden soll, muss man den klassischen Weg über Sinus, >> analogen Filter und Komparator gehen, optimalerweise sogar noch mit >> Dithering im Digitalteil. >Ist das denn schaltungstechnisch sehr schwierig? Man braucht einen DDS mit allem drum und dran. > Wenn das nur ein >kleiner einfach zu verwendender Baustein ist, also Clock mit Jitter >rein, Clock ohne Jitter raus, dann ist das fast generell einfacher. Du resdest von was anderem, einer PLL zur Reduktion von Jitter.
Ja eine PLL die das kann wäre auch cool, aber hier die im Spartan 6 schafft das nicht. Vielleicht ist der Jitter einfach zu groß.
So ist es, daher analog Filtern. Die Analogtechnik kommt immer mit. Eine Option diesbezüglich besteht darin, mit verstimmbaren Schwingkreisen zu filtern, die man digital steuert. Auch was die Rekonstruktion des Digitaltaktes aus dem Sinus angeht, kann man mit einer entsprechenden Offsetvorverarbeitung des Komparators einiges machen. Wenn es "volldigital" sein soll, kann man mit einer Zeiten komplementären DDS arbeiten, die um 180 Grad verschoben ist und die Phasensprünge an anderen Stellen hat. Die lässt man auf einen differenziellen Ausgang laufen.
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.