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
Danke für die schnelle Antwort. Aber: Geht das wirklich nicht? (Also, ich krieg's jedenfall's nicht hin.)
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.
oder wie hier: http://www.fpga4fun.com/SerialInterface2.html habe mal code angehängt mfg Mockup ps sollte so gehen
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
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.
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
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.
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
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.
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.