www.mikrocontroller.net

Forum: FPGA, VHDL & Co. 1MHz => 64KHz


Autor: Matse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Freunde des VHDL

Wer kann mir ein synchrones Design in VHDL basteln,
welches mir aus einem 1.0 MHz Takt einen 64 KHz Takt generiert.

Geht das überhaupt?

DANKE !!!

Gruss,
Matse

Autor: Neutron (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Meiner Meinung nach geht das nicht.

Autor: Matse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die schnelle Antwort.
Aber:
Geht das wirklich nicht?
(Also, ich krieg's jedenfall's nicht hin.)

Autor: Jürgen Schuhmacher (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wieso denn nicht ?

Du baust Zähler unterschiedlicher Geschwindigkeiten, die nacheinander
hochzählen und verkettest sie. Dann addieren sich deren Laufzeiten. Die
Frequenz ist 1/(T1 + T2). Natürlich musst Du auf 128kHz bauen und dann
diesen Takt nochmal über ein FF symmetrieren.

1MHz / 128khz = 7,8125. oder in Perioden = 7,8125ms

Damit m uss der erste Zähler mit 7teln zählen.

Er zählt also mit 1MHz / 7 = 143kHz -> 7ms.

Nun braucht man noch einen Zähler für 0,8ms und soweiter.

Die einzelnen Zähler werden nacheinander angesprochen, d.h. ein
Schaltwerk wartet, bis der erste auf hi gehet, resettet den zweiten und
wartet, bis der gezählt hat. Ist man fertig, so hat man die 1/128kHz an
Zeit durchgezählt.

Autor: Matse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aha - muss ich mal probieren.
Danke!

Autor: Mockup (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
oder wie hier:
http://www.fpga4fun.com/SerialInterface2.html
habe mal code angehängt
mfg
Mockup

ps sollte so gehen

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn der Takt ein bischen jittern darf ist diese auch fractional-n
Teilerei wunderbar geeignet. Mit 2 Teilern n und n+1 gehts das ggf.
ebenfalls. Google mal nach swallow counter oder eben fractional-N

Gruß Thomas

Autor: Matse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke, Leute!

Autor: Jürgen Schuhmacher (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Effektiv mache ich ja nichts anderes als fraktale Frequenzen zu erzeugen
nur eben jitterfrei und exakt - leider eben nicht immer mit nur 2
Zähleren zu machen. Entscheidend ist, daß man auf die doppelte Freuqenz
designed und dann halbiert. Dann ist der CLK 50% und jitterfrei.

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Jürgen,

wenn ich dich richtig verstanden hab, dann willst du dabei die
Periodendauer hochzählen. Das ganze geht aber immer nur maximal mit der
Eingangsfrequenz (oder nach dem Verdoppeln eben mit der 2 fachen etc.).
Damit ist die Auflösung auf 1us bzw. 500ns festgelegt. 64kHz sind aber
15,625us.....Das wird so nicht gehen, glaube ich. Oder hab ich da was
übersehen bei der erzeugung der 0,0125ms ???
Klar läßt sich das ganze erzeigen bei  40 facher Eingangvervielfachung.
Das ist dann aber ein völlig anderer Ansatz.
Gruß Thomas

Autor: Jürgen Schuhmacher (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hate das so verstanden, daß er ein synchrones Schaltwerk will,
welches einen beliebigen Takt von hier 1MHz auf 64k herabsetzt. Ich
habe das so gelesen, dass die 1MHz die eine CLK-domain ist, während die
64kHz die davon abhängige ist, die beide nichts mit dem Systemclk zu tun
haben. Beim nochmaligen Durchlesen der Frage scheint es aber so zu sein,
daß die 1MHz die Masterclock ist. Falls man die nicht intern hochzieht,
wie von Dir angedeutet, dann kann man mit dem von mir beschriebenen
Verfahren natürlich NICHT feiner rastern - das ist klar. In diesem
Falle wäre meine Architektur ja ein ganz naiver Teiler, den mit mit
einem simplen Zähler und Ausgangslogik hinbekommt. Dies würde ich aber
dann aber auch kein Synchrones Schaltwerk nennen, denn dieser Teiler
liefe der Master-clock sozusagen asynchron hinterher.

Ich habe wohl (mal wieder) zu weit gedacht. Ich hatte mal so eine
solche Appikation, wo vorne eine beliebige Frequenz von 1-5MHz
reinkommt und hinten genau (z.B.) 10 ... 20kHz ruskommen sollen. Die
Dynamik wird also von 5 auf 2 herabgesetzt und das am Ausgang geteilte
Signal soll in der Fequenz der varierenden Eingang stetig folgen. Man
benötigt also ein sychrones, deterministisch arbeitendes Schaltwerk mit
variablen Eingangstakt, welches die Freuqenz obendrein nichtlinear
herabsetzt, also die hohe stärker, als die niedrige. Ich mache das mit
einem Zähler, der am Ausgang die Freuquenz bestimmt mittels
Komparatoren auf die Zwischenzähler von oben rückwirkt. Das Schaltwerk
koppelt also mit der Verzögerung von einer Periode zurück.

Autor: MockUp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mal so ne Frage er will von 1Mhz synchron 64Khz bekommen, oder nicht?
Habt ihr euch die Seite http://www.fpga4fun.com/SerialInterface2.html
überhaupt mal durchgelesen? Ist zwar in verilog aber das ist ja fast
das gleiche wie VHDL.
Da steht beschrieben wie man Aus irgendeiner Frequenz ein enable signal
zu der Frequenz macht die man haben will.
Das ist doch das was er will oder nicht?
Oder hab ich da was Falsch verstanden.
Ich hab ja oben den Code angehängt.
Habe das auch mit modelsim ausprobiert.
sollte also so laufen.
Mfg
MockUp

Autor: Jürgen Schuhmacher (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich zumindest hab es mir durchgelesen. Es ist ja nichts anderes als eine
wechselnde Periodendauer, wie man sie auch bei Timern nutzt. Im Beipiel
auf dieser Seite geht es ja um serielle COM und den Umstand, daß dort
eine grobe Genauigkeit des Taktes reicht. Dies stimmt auch, doch sollte
man die Gegenstelle nicht unnötig mit jitter versorgen und lieber eine
minimal statisch verstimmte Freqenz benutzen - das lässt sich einfacher
verarbeiten und genauso gut einstellen.

Ich fürchte aber, daß die obigen 64k genau sein müssen und keinen
wesentlichen jitter vertragen. Dann bliebe nur noch, meinen Ansatz zu
nutzen und den letzten Schnippsel der gewünschten Periodendauer mit
einem asynchronen Laufzeitglied in der clock-Leitung des letzten timers
zu realisieren.

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Jürgen,

wenn du natürlich ein schnelleren Systemtakt verwendest, dann wird mir
auch der Ansatz klarer. Eine wirklich schöne Idee... Allerdings hab ich
so die Vermutung, daß das ganze eben mit +-1 Systemclock jittern könnte,
was aber je nach Takt evtl. weniger stört als ein direkter
Swallow-Counter.

Vielleicht kann ja Matse noch ein bischen Licht ins Dunkel bringen.

Gruß Thomas

Autor: Jürgen Schuhmacher (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jittern in dem Sinne tut es nicht, nur wird das eingehende Signal eben
asynchron auf die andere Seite übertragen. Da diese aber meist
innerhalb der clock domain des Systemes liegt ist das jenseitig
konstant und es bleibt nur das ein-clocken. Das ist natürlich wie bei
jeder Registrierung von Eingangssignalen mit einer Rasterung belegt.
Wenn die Systemclock aber genügend über der Einspeisenden liegt, dann
macht es nichts. Im vorliegenden Beispiel genügt es ja, wennman die 64k
übertrifft. Damit reichen 64MHz. Am Besten lässt man FPGAs sowieso
einfach auf 200MHz rennen und ist alle Sorgen los.

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Jürgen,

das Jittern ist zwar sehr gering und stört für viele Anwendungen nicht,
aber z.B. beim Abtasten mit einem ADC kann das sehr leicht Probleme
bereiten.


noch viel Spaß und die besten Grüße
Thomas

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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [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.