Forum: FPGA, VHDL & Co. Clock generieren mit FPGA


von Dave (Gast)


Lesenswert?

Hallo,

ich hätte folgendes Problem: ich würde gerne mit einem FPGA ein 
Taktsignal von nominal 10 Mhz ausgeben. Mit diesem Taktsignal möchte ich 
eine Regelung machen, d.h. ich will den Takt um ca. +/- 10 % anpassen 
können. Um so feiner ich den Takt regulieren kann, umso besser.

Meine Frage ist: wie mache ich das am Elegantesten ? Ich könnte das in 
VHDL realisieren, bräuchte dann aber für eine möglichst feiner Regelung 
ein relativ hohes Eingangssignal. Andererseits könnte ich extern einen 
Voltage Controlled Oscillator verwenden, den ich mit dem FPGA regeln 
kann. Das ganze würde aber natürlich den Aufwand erhöhen.

Das Problem kann man schon lösen, aber mich würde interessieren wie man 
mit möglichst geringem Aufwand möglichst genau regelbar ein ca. 10 Mhz 
Taktsignal mit einem FPGA erzeugen kann. Gibt es noch andere Ideen ?

lg

Dave

von Le_Bassiste (Gast)


Lesenswert?

hallo dave,
schau dir mal DDS an (direct digital synthesis). ist im fpga recht 
einfach zum machen, kann aber eine menge jitter auf deinem ausgangstakt 
erzeugen.  ich bin mitarbeiter bei Analog Devices und habe auf "unserer" 
homepage fogendes gefunden:
http://www.analog.com/media/en/training-seminars/tutorials/MT-085.pdf

von Duke Scarring (Gast)


Lesenswert?

Dave schrieb:
> Andererseits könnte ich extern einen
> Voltage Controlled Oscillator verwenden, den ich mit dem FPGA regeln
> kann. Das ganze würde aber natürlich den Aufwand erhöhen.
Das klingt zwar erstmal nach mehr Aufwand in Hardware, ermöglicht aber 
m.E. die beste Anpassung an Deine Problemstellung.

Zum einen kannst Du einen passenden DAC für den VCO-Bereich wählen 
(Bandbreite, Auflösung), zum anderen auch den VCO flexibel wählen.

Wenn Dein FPGA mit 100 MHz rennt, hast Du bei einem digital erzeugten 
Takt
eine Granularität von 10 ns. Bei 10 MHz entspricht das genau Deinen +/- 
10%. Allerdings gibt es dann nichts dazwischen.

Alternativ könnte man mit den SerDes-Kanälen die Auflösung ca. um den 
Faktor zehn verbessern. Reicht Dir das?

Duke

von Dave (Gast)


Lesenswert?

danke für den hinweis. nur der vollständigkeithalber, es genügt ein 
rechtecksignal. mit dem AD9850 würde es schon gut funktionieren denk 
ich, ist aber noch etwas überdimensionert (somit leider zu teuer) für 
meine anwendung...

von Dave (Gast)


Lesenswert?

>Alternativ könnte man mit den SerDes-Kanälen die Auflösung ca. um den
>Faktor zehn verbessern. Reicht Dir das?

danke, für den hinweis, ich werde mir das mal ansehen mit den 
serializern/deserialiezern. die regelung in 1 % schritten klingt schon 
ganz gut, in der konkreten anwendung muss ich das noch evaluieren.

von Torben K. (tokuhila)


Lesenswert?

Dave schrieb:
> mit dem AD9850 würde es schon gut funktionieren denk
> ich

Na, ein NCO im FPGA sieht auch nicht anders aus

von Dave (Gast)


Lesenswert?

Duke Scarring schrieb:

>Alternativ könnte man mit den SerDes-Kanälen die Auflösung ca. um den
>Faktor zehn verbessern. Reicht Dir das?

kannst du noch ein bisschen genauer erläutern was du damit meinst ?

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


Lesenswert?

Dave schrieb:
> kannst du noch ein bisschen genauer erläutern was du damit meinst ?
Die Theorie:
Du nimmst z.B. einen 10Bit-SerDes-Serializer, lässt ihn z.B. mit 1GHz 
laufen und lädst ihn z.B. alle 10ns (=100MHz) mit einem Bitmuster, das 
fortlaufend neu geschrieben/geschoben wird. Der Serializer wird dann 
dieses Bitmuster mit 1GHz raustakten und du erreichst eine 
Auflösung/Jitter von 1 ns.

Zur Umsetzung in die Praxis ist dann aber das ausgiebige 
Datenblattstudium des bisher unbekannten FPGAs nötig...

: Bearbeitet durch Moderator
von Markus F. (Gast)


Lesenswert?

Duke Scarring schrieb:
> Wenn Dein FPGA mit 100 MHz rennt, hast Du bei einem digital erzeugten
> Takt
> eine Granularität von 10 ns. Bei 10 MHz entspricht das genau Deinen +/-
> 10%. Allerdings gibt es dann nichts dazwischen.

Mit einer DDS schon! Dazu nimmt man ja den FPGA und eine DDS (mit 
Filterung) sonst täte es auch ein einfacher digitaler (programmierbarer) 
OSC-Chip. Die kriegen übrigens 10MHz +/- auch schon sehr fein hin.

von Markus F. (Gast)


Lesenswert?

Lothar M. schrieb:
> Du nimmst z.B. einen 10Bit-SerDes-Serializer, lässt ihn z.B. mit 1GHz
> laufen

Was soll das an Vorteil bringen? Ein 1-Bit Signal als PWM?

von Dave (Gast)


Lesenswert?

Lothar Miller schrieb:
>Du nimmst z.B. einen 10Bit-SerDes-Serializer, lässt ihn z.B. mit 1GHz
>laufen und lädst ihn z.B. alle 10ns (=100MHz) mit einem Bitmuster, das
>fortlaufend neu geschrieben/geschoben wird. Der Serializer wird dann
>dieses Bitmuster mit 1GHz raustakten und du erreichst eine
>Auflösung/Jitter von 1 ns.


ah danke, das hört sich gut an ! ich werde mir das gleich am cyclone iv 
ansehen.

> Was soll das an Vorteil bringen? Ein 1-Bit Signal als PW

naja, ich brauch ein clocksignal, dass ich möglichst genau regeln kann. 
bei 1ghz bekomm ich eine granularität von 1 ns, das bekommt man mit vhdl 
höchstwahrscheinlich nicht hin

von J. S. (engineer) Benutzerseite


Lesenswert?

Dave schrieb:
> naja, ich brauch ein clocksignal, dass ich möglichst genau regeln kann.
> bei 1ghz bekomm ich eine granularität von 1 ns, das bekommt man mit vhdl
> höchstwahrscheinlich nicht hin

Man kann das mit umschaltbaren Elementen sogar auf einige 10ps genau 
machen - praktisch genauer, als es das Rauschen nachfolgender 
Schaltungen wiedergeben können.

Für Deinen Anwendungsfall braucht Du eine geregelte DDS mit starker 
Filterung. Mit einer konventionellen DDS erzeugt man aus dem FPGA z.B. 
einen hochstabilen und jitterarmen Sinus von 1MHz und locked die 
hochfrequente Sinusschwingungen über eine 10:1-Pll drauf. Das geht sehr 
gut, wenn man die Frequenz nicht allzuschnell verstellen muss.

Mit der Methode kann man die Frequenz sehr fein (theoretisch unendlich 
fein, praktisch bis zum jittern) einstellen und "hochtransformieren" um 
einen Takt für eine zweite DDS zu erhalten, die komplett ganzzahlig ohne 
Sprünge arbeitet und daher auch rechteckicke Signalformen sauber 
erzeugen kann.

Wenn Dir die Einstellbarkeit und Auflösung typischer Chips reicht (was 
ich eigentlich glaube) dann ist das mit einem DDS Chip besser gemacht, 
weil die auf höheren Frequenzen arbeiten. Da kann man die 10MHz auch 
direkt  einigermassen sauber herstellen. Intern arbeiten die mit 
Abtastfrequenzen über 2GHz.

Beitrag "Re: Universell programmierbarer DDS-Funktionsgenerator"
Beitrag "Re: DDFS 30 MHz mit 100 MHz FPGA clock"
Beitrag "Re: Sinus über DDS erzeugen"

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.