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


von Matse (Gast)


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

von Neutron (Gast)


Lesenswert?

Meiner Meinung nach geht das nicht.

von Matse (Gast)


Lesenswert?

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

von Jürgen Schuhmacher (Gast)


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.

von Matse (Gast)


Lesenswert?

Aha - muss ich mal probieren.
Danke!

von Mockup (Gast)


Angehängte Dateien:

Lesenswert?

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

ps sollte so gehen

von Thomas (Gast)


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

von Matse (Gast)


Lesenswert?

Danke, Leute!

von Jürgen Schuhmacher (Gast)


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.

von Thomas (Gast)


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

von Jürgen Schuhmacher (Gast)


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.

von MockUp (Gast)


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

von Jürgen Schuhmacher (Gast)


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.

von Thomas (Gast)


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

von Jürgen Schuhmacher (Gast)


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.

von Thomas (Gast)


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

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.