Forum: FPGA, VHDL & Co. Taktschwankungen wegmitteln irgendwie.


von Gustl B. (-gb-)


Lesenswert?

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.

von Falk B. (falk)


Lesenswert?

@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.

von Lattice User (Gast)


Lesenswert?

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.

von J. S. (engineer) Benutzerseite


Lesenswert?

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.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Ich frage mich, um welche Frequenzen und welchen Jitter es sich absolut 
handelt...

von Gustl B. (-gb-)


Lesenswert?

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.

von Falk B. (falk)


Lesenswert?

@ 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.

von Gustl B. (-gb-)


Lesenswert?

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!

von Falk B. (falk)


Lesenswert?

@ 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.

von Gustl B. (-gb-)


Lesenswert?

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ß.

von J. S. (engineer) Benutzerseite


Lesenswert?

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
Noch kein Account? Hier anmelden.