Forum: FPGA, VHDL & Co. Spartan6 PLL


von T. F. (sar)


Lesenswert?

Hallo,

Ich habe einen Referenz-Takt von ca. 80MHz. Von diesem Takt leite ich 
dann im FPGA Design mehrere Signale ab (einen haufen Zähler und andere 
Sachen).

Jetzt kann es allerdings passieren, dass der Referenz-Takt auf einmal 
verschwindet. Ist das FPGA Design gerade dabei einen Satz von Signalen 
zu erzeugen würde, da der Takt fehlt, alles hängen bleiben, was dann zu 
Problemen in der Elektronik führt, welche die erzeugten Signale 
verarbeitet. Ein Teil der Informationen steckt in der Verzögerung welche 
die erzeugten Signale zueinander haben.

Ist es möglich mit der internen PLL im Spartan6 das Referenz-Signal per 
PLL zu "buffern". Die PLL wird ja hoffentlich ohne Referenz-Input noch 
eine Zeitlang weiter laufen, bis der Takt zuweit davon driftet und die 
PLL nicht mehr gelockt ist. Lässt sich abschätzen wie schnell das 
passiert? Wenn genügen Zeit da ist, kann der Signal-Erzeugungzyklus 
sicher abgebrochen werden und gewartet werden, bis lock detect wieder 
sicher anliegt.

Habe derzeit nicht die Möglichkeit dies zu Testen. Deshalb die Frage. 
Wäre vielleicht ein externen PLL Baustein alla ADFxxxx besser dafür 
geeignet?

Danke,
Stefan

von Jan R. (Gast)


Lesenswert?

In Festplatten z.b. gibt es ja PLL Schaltungen mit einer Sample and hold 
Schaltung sozusagen, die die Referenzspannung hält, sobald sie 
eingerastet ist, guck mal vielleicht kann diese PLL das auch.

von Christian R. (supachris)


Lesenswert?

Nee, sobald kein Input mehr da ist, rsstet die PLL im S6 nach 1...2 
Takten aus und setzt das Lock bit zurück und außerdem das entsprechende 
Bit am Status Ausgang für fehlenden Eingangstakt. Dann muss die PLL im 
S6 auch per RST zurück gesetzt werden.

von Jürgen S. (engineer) Benutzerseite


Lesenswert?

Man braucht entweder einen externen Takt, der stabil ist, der auf die 
80MHz umgesetzt wird um ihn dann auf den Ref-Takt zu synchen, oder man 
muss sich mit einem freilaufenden Oszillator, den man auf z.B. 80x4 MHz 
steuert (nicht regelt!) manuell niederfrequent auf die Taktquelle 
synchen. Den selbstlaufenden OSC muss man über variabel einstellbare 
LUTs-Ketten einmal auf die benötigte Frequenz bringen und ihn dann 
langsam im ms-Takt nachregeln, bzw das Nachregeln unterlassen, wenn der 
REF-Takt ausfällt. Mit einem Spartan 6 bekommt man die 320MHz sicher 
hin, vielleicht auch 400 MHz. Allerdings ist das stark mit jitter 
behaftet.

Genutzt habe ich das aber bisher nur mit dem S3 und dem V4, mit denen 
bis zu 900MHz/3 bzw. 1050MHz/3 zu erzielen waren. Der Dritteltakt aus 
den rückgekoppelten LUTs war dann stabil genug, um einen Buffer zu 
treiben und als Takt zu arbeiten, z.B. für ChipScope. Beim V4 ging das 
sogar mit anschließender PLL - allerdings über einen externen Loop auf 
einen ccIO.

Wenn Du es richtig und stabil machen willst, brauchst Du eine externe 
programmierbare PLL, die einen Synch-Eingang hat. Solche Sachen sind 
eigentlich nur sinnvoll, um irgendwelche Überwachungsschaltungen im FPGA 
laufen zu lassen, die selbsttätig Resetten können und den Totalausfall 
des Mastertaktes vermelden können.

Xilinx hat selber solche Spielchen drin, um z.B. JTAG zu bedienen. DAzu 
gibt es im Userforum einen thread. Man kann sich sogar an den 
dranhängen, indem man den JTAG Core / BSCAN ausdrücklich instanziiert.

: Bearbeitet durch User
von T. F. (sar)


Lesenswert?

Hallo,

Danke für die Vorschläge. Habe mich heute wieder ein bisschen mit dem 
Thema beschäftigt und festgestellt, dass die DCMs das können. Die haben 
einen freeze Eingang den man die DCO in den freerunning mode bringt. Das 
reicht mir (theoretisch). Muss mir jetzt noch das passende Equipment 
besorgen um dies zu testen.

lg

von T.U.Darmstadt (Gast)


Lesenswert?

Stefan S. schrieb:
> Danke für die Vorschläge. Habe mich heute wieder ein bisschen mit dem
> Thema beschäftigt und festgestellt, dass die DCMs das können. Die haben
> einen freeze Eingang den man die DCO in den freerunning mode bringt. Das
> reicht mir (theoretisch). Muss mir jetzt noch das passende Equipment
> besorgen um dies zu testen.
Dann brauchst Du aber dennoch eine Takterkennung, um später wieder auf 
das Original umschalten zu können. Wie ist das gedacht? Wie wird das 
Glitchfrei?

Jürgen Schuhmacher schrieb:
> Xilinx hat selber solche Spielchen drin, um z.B. JTAG zu bedienen. DAzu
> gibt es im Userforum einen thread. Man kann sich sogar an den
> dranhängen, indem man den JTAG Core / BSCAN ausdrücklich instanziiert.
Davon sollte man lieber die Finger lassen. Im Spartan6 mag es gehen, 
beim Artix fällt man da auf die Nase. In den Thema im xilinx forum steht 
auch was von der Frequenz: 25MHz --- 75MHz na danke.

von Christian R. (supachris)


Lesenswert?

Thomas Ulrich schrieb:
> Davon sollte man lieber die Finger lassen. Im Spartan6 mag es gehen,
> beim Artix fällt man da auf die Nase. In den Thema im xilinx forum steht
> auch was von der Frequenz: 25MHz --- 75MHz na danke.

Naja, ist halt ein RC Oszillator. Kritisch ist das bei Flash booten, 
wenn man die CCLK Frequenz zu nah an die Grenze des Flash Chips stellt. 
Aberzum Beispiel zum Starten des MGT im Artix 7 reichts aus. Da braucht 
man ja dummerweise einen Hilfstakt.

von T. F. (sar)


Lesenswert?

Thomas Ulrich schrieb:
> Dann brauchst Du aber dennoch eine Takterkennung, um später wieder auf
> das Original umschalten zu können. Wie ist das gedacht? Wie wird das
> Glitchfrei?

Nachdem ich alle Signale zum sauberen Abschalten erzeugt habe ist 
erstmals dieses Clock-Signal egal. Ich kann also getrost das DCM 
resetten und warten bis LOCK wieder da ist. Muss aber wie gesagt das 
ganze erstmal in der Praxis probieren.

von T.U.Darmstadt (Gast)


Lesenswert?

Stefan S. schrieb:
> Nachdem ich alle Signale zum sauberen Abschalten erzeugt habe ist
> erstmals dieses Clock-Signal egal. Ich kann also getrost das DCM
> resetten und warten bis LOCK wieder da ist.
Diesen Moment meinte ich. Wie schaltest Du dann ohne glitch auf den 
neuen Takte um? Per BUFGMUX(_1) im SYNCH-MODE, nehme ich an?

Ich bräuchte nämlich eine Lösung, die DCM so hinzuziehen, dass es ohne 
wesentlichen Jitter funktioniert. Und zwar unabhängig vom FPGA Type.

von Duke Scarring (Gast)


Lesenswert?

Thomas Ulrich schrieb:
> Ich bräuchte nämlich eine Lösung, die DCM so hinzuziehen, dass es ohne
> wesentlichen Jitter funktioniert. Und zwar unabhängig vom FPGA Type.
Wenn es wirklich unabhängig sein soll, würde ich mir eine externe Lösung 
(a lá PLL) überlegen.

Duke

von K. L. (Gast)


Lesenswert?

Stefan S. schrieb:
> dass die DCMs das können. Die haben
> einen freeze Eingang den man die DCO in den freerunning mode bringt.
Hast Du einen Tipp wo man den findet? Im CoreGen ist da nichts von zu 
sehen.

von Duke Scarring (Gast)


Angehängte Dateien:

Lesenswert?

Klaus L. schrieb:
> Hast Du einen Tipp wo man den findet? Im CoreGen ist da nichts von zu
> sehen.
CoreGen ist für Weicheier. Schau mal im UG615, dem Libraries Guide.
Auch den UG382 (Clocking Resources) sollte man sich genauer anschauen.

Duke

von Jürgen S. (engineer) Benutzerseite


Lesenswert?

Der CoreGen ist in der letzten ISE ohnehin nicht zu empfehlen, wenn es 
um PLLs geht, weil er Unfug zusammenbaut. Einmal gebaut und geändert 
fehlen Leitungen wie Res und die Benamungen stimmen nicht mehr. Ich habe 
die auch per Hand drin.

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.