Forum: FPGA, VHDL & Co. clock genauigkeit von fpgas


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Detlef (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,

ich habe mir vor einiger Zeit ein Mojo V3 Board zugelegt, welches ein 
Spartan 6 Fpga drauf hat. Bisher bin ich sehr zufrieden mit dem FPGA 
Board und komme auch ganz gut zu recht. Nur frage ich mich seit geraumer 
Zeit, wie der Spartan 6 das Clocksignal erzeugt ganz ohne Quarz und wo 
ich die Genauigkeit des Clocksignals ablesen kann, gemessen in PPM.

von Lothar M. (lkmiller) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Detlef schrieb:
> Nur frage ich mich seit geraumer Zeit, wie der Spartan 6 das Clocksignal
> erzeugt ganz ohne Quarz und wo ich die Genauigkeit des Clocksignals
> ablesen kann, gemessen in PPM.
Meinst du den internen RC-Oszillator, der zum Landen des Bitstroms 
verwendet wird und über undokumentierte Tricks auch in "eignen" Designs 
als Taktquelle verwendet werden kann?
Dann etwa plusminus 500000PPM (also ca. +-50%):
http://forum.gadgetfactory.net/topic/2034-hidden-clock-in-the-spartan-6/

Dieser Takt ist also bestenfalls für etwas geeignet, das "einfach 
irgendeinen Takt" braucht...

Oder meinst du sowas:
https://www.xilinx.com/support/documentation/application_notes/xapp872.pdf

Aber ich denke, du solltest da eher mal den Xilinx FAE fragen...

: Bearbeitet durch Moderator
von C. A. Rotwang (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Detlef schrieb:
> Hallo Leute,
>
> ich habe mir vor einiger Zeit ein Mojo V3 Board zugelegt, welches ein
> Spartan 6 Fpga drauf hat. Bisher bin ich sehr zufrieden mit dem FPGA
> Board und komme auch ganz gut zu recht. Nur frage ich mich seit geraumer
> Zeit, wie der Spartan 6 das Clocksignal erzeugt ganz ohne Quarz und wo
> ich die Genauigkeit des Clocksignals ablesen kann, gemessen in PPM.

Da ist ein 50 MHz 50 ppm Oszillator auf dem Board, damit wird das 
gemacht.

von Detlef (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Woran erkenne ich das? Bzw. wo kann ich das nachlesen?

von C. A. Rotwang (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Detlef schrieb:
> Woran erkenne ich das? Bzw. wo kann ich das nachlesen?

Schaltplan, Datenblatt Oszillator

https://cdn.sparkfun.com/datasheets/Dev/FPGA/mojov3-sch.pdf
https://www.mouser.de/ds/2/3/ASFLMB-24525.pdf

von Detlef (Gast)


Bewertung
0 lesenswert
nicht lesenswert
C. A. Rotwang schrieb:
> Schaltplan, Datenblatt Oszillator

Ok vielen Dank! Warst mir eine riesen Hilfe :)

von Weltbester FPGA-Pongo (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Detlef schrieb:
> Nur frage ich mich seit geraumer
> Zeit, wie der Spartan 6 das Clocksignal erzeugt ganz ohne Quarz

Ich denke, es geht um den Fall "ohne" Quarz? Dann laufen die PLLs frei 
und so ungefähr. Genauigkeit liegt bei etwa 0,1% gefühlt.

von C. A. Rotwang (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Weltbester FPGA-Pongo schrieb im Beitrag #5346670:
> Detlef schrieb:
>> Nur frage ich mich seit geraumer
>> Zeit, wie der Spartan 6 das Clocksignal erzeugt ganz ohne Quarz
>
> Ich denke, es geht um den Fall "ohne" Quarz? Dann laufen die PLLs frei
> und so ungefähr. Genauigkeit liegt bei etwa 0,1% gefühlt.

Ich denke, es gibt diesen Fall "ohne" Quarz bei FPGA' nicht. Das 
erwähnte board hat einen Oszillator drauf, der geht auch an einen 
speziellen Takt-Eingangspin, hier P56.

Man könnte die Frage stellen, was die Maximal tolerierbare 
Taktabweichung ist, wenn man einen nicht quartzstabilisierten 
Taktgenerator verwendet.

Das ist aber IMHO nicht nach Datenblatt entscheidbar, sondern abhängig 
von den constraints und der Synthese. Das passende Stichwort für ne 
Suche in den Xilinx-Docs wäre dann "clock uncertainty" und die wird dann 
eher in einer Zeit bspw picoseconds angegeben und nicht als relative 
Größe wie parts per million.
--
Falls man ohne externe generator auskommen will (wovon ich absolut 
abrate), müsste man sich etwas in der Art rückgekoppelten Inverter bauen 
und dann alle Laufzeitvariationen im Generator aus den Propagation 
delays ermitteln, bspw durch eine post-P&R-Simulation und dann auch noch 
die Toleranz durch Tempeartur-einfluße und Corespannungsschwankungen 
raussuchen. Ich schätze beim spartan6 kommt da was im Bereich von 1..2 
nanosecond raus.

Den internen Generator (der rückgekoppelte Inverter) muss man jetzt aber 
so "basteln" das er nie schneller toggelt als der Rest des FPGA-design 
schalten kann. Das ist aber m.E. bei der aktuellen FPGA-Entwurfsmethode 
unmöglich, man kann nur eine "Minimalgeschwindigkeit" (maximale 
Laufzeit) vorgebenaber keine "Höchstgeschwindigkeit) (minimale 
Laufzeit).

Womöglich gibt es zwischen dem TE und mir unterschiedliche Ansichten was 
man mit den "clocking resourcen" im FPGA erreichen kann. Nach meinem 
Verständnis beziehen sich alle Angaben bzgl Taktgenauigkeit und 
maximaler Takt bei den DLL (Spartan6 hat nach meiner EWrinnerung keine 
PLL sondern eine DLL) auf die Nutzung zur Aufbereitung eines FPGA-extern 
erzeugten Taktes, bspw (Frequenzsynthese nach definierten Teilerfaktor 
aus einem ReferenzTakt), aber nicht auf die Verwendung als interner und 
unabhängiger Taktgenerator.

Das einzige was ich mir an interner Generierung halbwegs verlässlich 
vorstellen kann ist wie die in der XAPP 872 beschriebene (Löthar verwies 
bereits darauf: 
https://www.xilinx.com/support/documentation/application_notes/xapp872.pdf). 
Wobei dieses Design auch nicht ohne externen Clock läuft, da taucht 
immer ein Reference Clock "Refclk" auf. Also wieder nichts mit Verzicht 
auf einen "Quarz". Die XAPP872 scheint einen Weg aufzuzeigen, wie man 
bei der Frequenzsynthese aus den starren Korsett der Teiler der DLL's 
ausbrechen kann, aber nicht wie man komplett ohne externen 
Referenz-clock auskommt.

von Lothar M. (lkmiller) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
C. A. Rotwang schrieb:
> Ich denke, es gibt diesen Fall "ohne" Quarz bei FPGA' nicht.
Doch, durchaus.
Ich habe Designs mit dem Lattice MachXO2, da wird der interne 
RC-Oszillator verwendet, weil er ausreicht und mit dem FPGA ein 
Protokoll ausgewertet und verarbeitet wird, das "sein" Timing mit sich 
bringt. Weil laufend die "Baudrate" nachgeregelt bzw. neu ermittelt 
wird, läuft das auch bei Versorgungsspannungs- und 
Temperaturschwankungen absolut zuverlässig ohne jeglichen Fehler.

In früheren Fällen hatte ich für solche "taktlosen" Designs auch schon 
Ringoszillatoren eingesetzt:
http://www.lothar-miller.de/s9y/categories/29-Ringoszillator
Die sind aber wesentlich kritischer in der Handhabung und idR. finden 
sich die 3x5mm für den Oszillator immer.

Detlef schrieb:
>>> Bzw. wo kann ich das nachlesen?
>> Schaltplan, Datenblatt Oszillator
> Ok vielen Dank! Warst mir eine riesen Hilfe :)
Das war jetzt hoffentlich nicht ernst gemeint? Natürlich ist bei der 
Frage nach Komponenten bzw. Funktion eines Board immer der Schaltplan 
die allererste Anlaufstelle, die dann zur BOM (Stückliste) und von 
dort zum Datenblatt der Bauteile führt. Da kann man aber leicht selber 
drauf kommen...

: Bearbeitet durch Moderator
von C. A. Rotwang (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Lothar M. schrieb:
> C. A. Rotwang schrieb:
>> Ich denke, es gibt diesen Fall "ohne" Quarz bei FPGA' nicht.
> Doch, durchaus.
> Ich habe Designs mit dem Lattice MachXO2, da wird der interne
> RC-Oszillator verwendet, weil er ausreicht und mit dem FPGA ein
> Protokoll ausgewertet und verarbeitet wird, das "sein" Timing mit sich
> bringt. Weil laufend die "Baudrate" nachgeregelt bzw. neu ermittelt
> wird, läuft das auch bei Versorgungsspannungs- und
> Temperaturschwankungen absolut zuverlässig ohne jeglichen Fehler.


"Sag niemals Nie" - hät ich bloß .

Also das Thema nachregeln der Baudrate könnte man auch als externer 
Referenztakt bezeichnen. Bei serieller Datenübertragung ist 
"Taktrückgewinnung" ein Standardverfahren und beim Sender werden dann 
gern Quarze so wie die guten alten "Baudratenquartze" eingesetzt. Also 
wieder eine externe Takterzeugung und interne Taktaufbereitung. Den 
Lattice RC-Generator muss ich mir aber mal genauer anschauen, ich bin 
gespannt "wie RC der tatsächlich ist" also ob der Vergleich mit einem 
Atmel-RC-interner Takt hier sinnvoll ist. Aber da der TE explizit sein 
Spartan-6 erwähnte scheint ein Lattice Vergleich nicht unbedingt 
angebracht. Für das TE-Board sehe ich keine reele Chance auf den Quartz 
zu verzichten. Und der beschriebenen Regelung würd ich die selbe 
Obergrenze bei der Taktrate zugestehen wie der AVR-µC-internen 
RC-Taktung -> ca. 8 MHz bei +/- 10% -> nicht wirklich eine Anwendung in 
der man "teure" 100 MHz-fähige FPGA's einsetzt. Aber vielleicht hat ja 
der technische Fortschritt inzwischen diese Erfahrungswerte überholt.


> In früheren Fällen hatte ich für solche "taktlosen" Designs auch schon
> Ringoszillatoren eingesetzt:
> http://www.lothar-miller.de/s9y/categories/29-Ringoszillator
> Die sind aber wesentlich kritischer in der Handhabung

Wie kritisch? Also ich seh hier das Problem das man ohne Messung am 
rausgeführten Taktpin nicht sagen kann, auf welcher Frequenz der Oszi 
wirklich schwingt. Auf die Angabe des Speedgrades bei FPGA's kann man 
sich ja auch nicht unbedingt verlassen, da kann einer der als langsam 
verkauft wird, tatsächlich ein schneller sein -> und schon läuft der 
interne Oszillator schneller. Oder beim P&R landet der Oszillator in 
einen "schnellen Bereich" des FPGA, so richtig homogen geht es bei den 
Nanometerstrukturen wohl nicht zu. Deshalb braucht man ja den Mastertakt 
um dann die unterschiedlichen Laufzeiten wieder gleich zu plätten.

von C. A. Rotwang (Gast)


Bewertung
0 lesenswert
nicht lesenswert
C. A. Rotwang schrieb:
> Den
> Lattice RC-Generator muss ich mir aber mal genauer anschauen, ich bin
> gespannt "wie RC der tatsächlich ist" also ob der Vergleich mit einem
> Atmel-RC-interner Takt hier sinnvoll ist.

So hab mal kurz nachgeschlagen:
"The internal oscillator
accuracy is +/- 5% (nominal). This oscillator is intended as a clock 
source for applications that do not require a higher degree of accuracy 
in the clock."
aus TN1199 "MACHXO2 Sysclk .. usage Guide".

Also ähnlich mies wie man es aus Mikrocontrollern kennt, beispielsweise 
http://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-2486-8-bit-AVR-microcontroller-ATmega8_L_datasheet.pdf 
S.270 .

von Lothar M. (lkmiller) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
C. A. Rotwang schrieb:
> Also ähnlich mies wie man es aus Mikrocontrollern kennt
Klar, ist ja auch die selbe Technik.

C. A. Rotwang schrieb:
> nicht wirklich eine Anwendung in der man "teure" 100 MHz-fähige FPGA's
> einsetzt.
Teuer ist relativ, wenn ich so einen MachXO2 in Kleinststückzahlen für 
4€ kaufen kann und so parallele Hardware ohne jegliche Interrupt- und 
Ausführungslatenzen bekomme, dann löse ich damit schon mal Aufgaben, die 
mit etwas Hirnschmalz und durchdachter Programmierung sicher auch mit 
einem uC lösbar wären.

>> http://www.lothar-miller.de/s9y/categories/29-Ringoszillator
>> Die sind aber wesentlich kritischer in der Handhabung
> Wie kritisch?
So kritisch, dass ich sie eigentlich nur noch zur Zufallszahlerzeugung 
nehme und ein LFSR damit asynchron zum "Mastertakt" takten.
Damit habe ich eine Zufallskomponente, die bei jedem FPGA anders 
reagiert.

: Bearbeitet durch Moderator
von C. A. Rotwang (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Lothar M. schrieb:
> C. A. Rotwang schrieb:
>>> http://www.lothar-miller.de/s9y/categories/29-Ringoszillator
>>> Die sind aber wesentlich kritischer in der Handhabung
>> Wie kritisch?
> So kritisch, dass ich sie eigentlich nur noch zur Zufallszahlerzeugung
> nehme und ein LFSR damit asynchron zum "Mastertakt" takten.
> Damit habe ich eine Zufallskomponente, die bei jedem FPGA anders
> reagiert.

Also Takt dessen genauigkeit noch dazu taugt um "asynchron" zu takten - 
das ist wohl der schlechtmöglichste aller Takte und nicht das was der TE 
beabsichtigte.
Der könnte jetzt wirklich mal genauer beschreiben was er mit "wie der 
Spartan 6 das Clocksignal erzeugt ganz ohne Quarz" ... " weil der 
Spartan6 eben auf seinem Board genau das nicht tut. Und auf lale anderen 
Boards könnte ich Lothbeschreibung bzgl der Quali eines "ungwquarzten" 
Taktes wie: "Dieser Takt ist also bestenfalls für etwas geeignet, das 
"einfach irgendeinen Takt" braucht". anschliessen. Also etwas mit 
Genauigkeit im einstelligen Prozentbereich und weit weg von 
ppm-Genauigkeiten die der TE vermutlich erwartet.

von Weltbester FPGA-Pongo (Gast)


Bewertung
0 lesenswert
nicht lesenswert
C. A. Rotwang schrieb:
> Ich denke, es gibt diesen Fall "ohne" Quarz bei FPGA' nicht.
Aber sicher gibt es solche Fälle. Z.B. kann man sich die Frage stellen, 
was passiert, wenn der Takt ausfällt. Antwort: Die PLL läuft weiter. 
Probiere es aus.

Zudem war seine Frage genau so gestellt.

Allerdings kann man vermuten, warum er seine Frage so stellt. Nämlich: 
Weil er gar nicht weiß, was er fragen will.

Zu Lothars Ausführungen noch:

Das sind eigentlich keine Programmiertricks, sondern waren früher der 
Standard. Wer platziert ohne Grund einen Oszillator, wenn er keinen 
braucht? Damals hatten wir ein GAL oder PAL, das sich seinen Takt 
gemacht hat, um externe Signale zu sampeln und zu verarbeiten. War 
völlig normal.

Dass heute jeder Bautstein eine PLL drin hat, ist ja eine Neuerung 
jüngeren Datums.

von Christian R. (supachris)


Bewertung
0 lesenswert
nicht lesenswert
Wie irgendwo ganz oben schon mal geschrieben kann der Spartan 6 auch 
seinen Config Clock (der ja für alle Master config modes da sein muss) 
verwenden, das geht mit der STARTUP Primitive. Aber der ist eben mit 
+-50% spezifiziert. Das kann man für einfaches Blinken schon nehmen aber 
für Baudrate schon nicht mehr.

von C. A. Rotwang (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Weltbester FPGA-Pongo schrieb im Beitrag #5347352:
> C. A. Rotwang schrieb:
>> Ich denke, es gibt diesen Fall "ohne" Quarz bei FPGA' nicht.
> Aber sicher gibt es solche Fälle. Z.B. kann man sich die Frage stellen,
> was passiert, wenn der Takt ausfällt. Antwort: Die PLL läuft weiter.
> Probiere es aus.

Nee, bei meinen designs tut sie das nicht. Schonmal weil meine Spartans 
eine DLL und keine PLL haben und dann haben manche Designs einen 
DLL-Resetgenerator eingebaut, der losschlägt wenn das LOCK-Signal 
entsprechend steht.

> Zudem war seine Frage genau so gestellt.
Ich lese die Frage des TE nicht so, ob er wüsste das in seinem Spartan6 
eine PLL im clock Pfad sein könnte.

> Allerdings kann man vermuten, warum er seine Frage so stellt. Nämlich:
> Weil er gar nicht weiß, was er fragen will.

Ja, schaut nach Lernphase aus, erst mal nach jeder Dummheit fragen die 
einem in den Sinn kommt.

> Das sind eigentlich keine Programmiertricks, sondern waren früher der
> Standard. Wer platziert ohne Grund einen Oszillator, wenn er keinen
> braucht?

Also ich kann mir kaum Fälle vorstellen, wo es keine stabile Frequenz 
braucht, muss also schon sehr lange zurück sein.

Schon der C64 hat einen Oscillator von  17,734475 MHz um die 
Videotimings der Monitore zu treffen. Die Baudratenquarze wurden ja 
schon erwähnt, die Uhrenwecker liefen mit Uhrenquarze, oder waren auf 
netzgeregelte 50Hz von der Primärseite abhängig. Im (digitalen) 
Audiobereich/Kommunicationsbereich gibt es auch einige "Grundfrequenzen 
die es zu treffen gilt, die WP nennt dort einige: 
https://en.wikipedia.org/wiki/Crystal_oscillator_frequencies Einzig 
Taschenrechner brauchten auf keine Standards Rücksichtnehmen und takten 
irgendwie. Oder Kaffeekocher, Waschmaschinen und der ganze 
Hausfrauenkram den man auch mit mechanischen Uhrwerk und Codierwalze 
aufbauen kann: https://youtu.be/IvUU8joBb1Q?t=175


Und mit einem RC-Oscillator spart man aus meiner Sicht nicht wirklich, 
sondern handelt sich eher "alte" Probleme wie bspw. Langzeitstabilität 
ein.

Was man an bspw im Job als Tools für die Produktion/Endprüfung gebaut 
hat und in der Betriebnahme wunderbar funktionierte, liegt nach ein paar 
Jahren ein paar Prozent daneben (Kondensatoralterung X7R 1% pro Dekade) 
und Quality läuft Amok warum das hausgebaute Tool in seinen 
Kernparameter "Lichtjahre" daneben liegt.
Also mir ist seit Jahrzehnten kein RC-Design mehr unterkommen, höchstens 
im Bastelbereich oder im Bereich (nicht nachahmenswertes) Retro. So ein 
Oszillator kostet bei reichelt unter einem Euro, ... eingebaut und nie 
den Kopf über Anschwingverhalten bei Kälte/Hitze machen oder 
Flankensteilheit oder oder oder.

von Lothar M. (lkmiller) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
C. A. Rotwang schrieb:
> was der TE beabsichtigte. Der könnte jetzt wirklich mal genauer
> beschreiben was er mit "wie der Spartan 6 das Clocksignal erzeugt ganz
> ohne Quarz"
Na er hatte offenbar ein Bild von einem Quarz im bekannten HC Gehäuse im 
Kopf, den er natürlich deshalb nicht gefunden hat, weil ja ein 
Quarzoszillator die Takterzeugung erledigt.
Und dass diese Information im Schaltplan am offensichtlichsten 
dargestellt ist, diese Idee ist ihm nicht gekommen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.