Wie kann ich in VHDL einen Teiler erstellen, der einen Takt von 20Mhz auf 16Mhz runterteilt ? Ich hab nicht mal ansatzweise ne Idee wie ich das umsetzen könnte. Vielen Dank !
Per PLL mal 4, und dann durch 5 teilen.
@ Ralph H. (guru) >Wie kann ich in VHDL einen Teiler erstellen, der einen Takt von 20Mhz >auf 16Mhz runterteilt ? So, wie du es haben willst, also einen schönen 16 MHz Takt mit 50% Tastverhältnis, geht nicht. Kauf dir einen passenden Quarzoszillator. >Ich hab nicht mal ansatzweise ne Idee wie ich >das umsetzen könnte. Vielen Dank ! Man kann mit dem 20 MHz per State Machine ein Clock enable erzeugen, das nach 4 Takten einmal aussetzt, macht 4/5 * 20 MHz = 16 MHz ;-) Nennt der Angelsache gapped clock (enable). MfG Falk
@ Falk... na das klingt doch gut :-) Ich brauch zum Testen nicht zwingend ein Tastverhältnis von 50% beim Takt. Wie könnte sowas aussehen ?
@Ralph H. (guru) >@ Falk... na das klingt doch gut :-) Ich brauch zum Testen nicht >zwingend ein Tastverhältnis von 50% beim Takt. Wie könnte sowas aussehen >? Dass sowas jemand wie du mit den Nickname fragen muss . . .?
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
MfG Falk
Dankeschön.. hätte nicht gedacht das es so einfach ist :-)
> Dass sowas jemand wie du mit den Nickname fragen muss . . .?
Du für den Nick hab ich mich hier bei meinen ganzen Fragen ehrlich schon
geschämt ;-).. grins aber das ist nun mal mein Cosename :D
> Wie könnte sowas aussehen
Aber jetzt bitte nicht den ce als Takt nehmen, sondern wie der Name
nahelegt: als Clock Enable.
Jo Lothar.. wenigstens das hab ich so erkannt. :-) Manchmal aber ist wirklich ne ganz einfache Lösung so nah, dass man sie vor lauter Grübeln gar nicht sieht. Und dafür gibt es zum Glück solche hilfreichen Menschen wie Euch !! :-) Danke dafür !!
@ Ralph H. (guru) >Du für den Nick hab ich mich hier bei meinen ganzen Fragen ehrlich schon >geschämt ;-).. grins aber das ist nun mal mein Cosename :D http://de.wikipedia.org/wiki/Selbstironie#Selbstironie ;-)
Falk Brunner schrieb: > http://de.wikipedia.org/wiki/Selbstironie#Selbstironie was ihr so alles nebenbei lest :D
Ralph H. schrieb: > Und dafür gibt es zum Glück solche > hilfreichen Menschen wie Euch !! :-) Danke dafür !! Also ich finde Deine Fragen gar nicht so schlecht :) Ich denke die sind auch für andere hilfreich. Danke dafür ;)
Gast
#2026053
Der Trick, jeden n-ten Clock auszulassen (dabei müsste n nicht einmal
ganzzahlig sein), ist sicher sehr einfach zu realisieren und wenn es zum
Ziel führt, spricht nichts dagegen (Variante a).
Die "Aussetzer" sind allerdings schon 2 Taktperioden lang (1
Extrapause). Man könnte das - leider nur mit deutlichem Aufwand -
doppelt so gut realisieren mit 1,5 Taktperioden, bzw. 0,5 Takten
Extrapause (Variante b):
_ _ _ _ _ _ _ _ _
_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_ 20 MHz
_ _ _ _ _ _ _
_/ \_/ \_/ \_/ \_____/ \_/ \_/ \_/ \_____/ \_ 16 MHz a)
_ _ _ _ _ _ _
_/ \_/ \___/ \_/ \___/ \_/ \___/ \_/ \___/ \_ 16 MHz b)
Man muss dazu voraussetzen, dass der 20-MHz-Clock annähernd mit 50% Duty
anliegt. Außerdem müsste dieser neue Clock kombinatorisch erzeugt
werden. Das ergibt eine neue Clock-Domäne mit ihren Problemen.
Ist also keine Empfehlung, weil zu kompliziert - wäre aber eine mögliche
Verbesserung des Timings.
Gast
#2026062
Die Grafik wird hier nicht richtig wiedergegeben. Im Editorfenster sah es noch ok aus. Aus einem Underline-Zeichen wird eine Underline-Anweisung. Zweiter Versuch als "Code":
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
Gast
#2026064
Na ja ...
df1as schrieb: > Zweiter Versuch als "Code": Probiers mal mit [ pre ] und [ /pre ]...
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
Die eigentliche Idee ist aber, diesen neuen "Takt" nicht tatsächlich als Takt, sondern als Clock-Enable zu nutzen, und da sieht das dann eher so aus:
1 | |
2 | |
3 | |
4 | |
5 | |
df1as schrieb: > Na ja ... ist ja nicht so, als gäbs hier einen vorschau-button... oder einen link mitten im augenschein, der auf Formatierung zeigt...
Gast
#2026712
Ja klar. Aber wie soll ich ahnen, dass ein Undescore-Zeichen etwas anrichtet? Ist für mich bis hierher immer ein Zeichen gewesen, dass man ohne Seiteneffekte in den Text werfen durfte. Zum Unterstreichen hätte ich
1 | |
oder ähnlich vermutet. An eine Vorschau habe ich daher nicht ansatzweise gedacht. Mein Fehler - man muss einfach mit allem rechnen! Zum Thema: Das mit dem Clock-Enable ist ja bereits ganz gut. Nur wenn es um minimalen Jitter geht, ist man um den Faktor 2 besser, wenn man beide Flanken ausnutzt und einen neuen Clock generiert. Solange der ursprüngliche Clock für nichts anderes benutzt wird, hätte es auch keine weiteren Seiteneffekte, wie erforderliche Synchronisierungsstufen etc. Auf einen Clock-Netztreiber kommt man von der nötigen Kombinatorik auch wieder bei den meisten FPGA - und alles unter der Prämisse 'keine PLL'. Die hat auch ihre Nachteile.
df1as schrieb: > Aber wie soll ich ahnen, dass ein Undescore-Zeichen etwas > anrichtet? Wenn du sowas schreibst:
1 | |
2 | |
3 | |
4 | |
Kommt sowas raus: ein Stern schreibt hier im Forum FETT ein Slash schreibt kursiv ein Underline schreibt unterstrichen ein Underline_ schreibt _unterstrichen Und wie man sieht, geht es am ehesten beim Underline schief. Da wird der Anfang und das Ende der Formatierung nicht so ohne weiteres erkannt... :-o df1as schrieb: > Nur wenn es um minimalen Jitter geht, ist man um den Faktor 2 besser, > wenn man beide Flanken ausnutzt und einen neuen Clock generiert. Richtig, aber es gibt keine FFs, die auf beide Flanken triggern können, und so wird das eine üble kombinatorische Bastelei. Das ist in programmierbaren Bausteinen nach Möglichkeit zu vermeiden...
Gast
#2026736
Was ist an der Kombinatorik für ein neues Clock-Signal so 'übel'? Immerhin braucht es damit in allen angeschlossenen Funkhäusern kein Clock-Enable mehr. Das Clock-Enable zieht sich ja durch alle angeschlossenen Prozesse hindurch. Müsste man also immer wieder hinschreiben ...
Gast
#2026746
Das Clock-Enable wird meist nicht über ein Clock-Netz verteilt. Ist zwar auch unkritisch, weil es fast eine ganze Clock-Periode Skew haben darf, verbraucht aber ggf. auch mehr Ressourcen (je nach Fan-out) als eine kleine, nur einmal vorhandene Kombinatorik für ein neues Clock-Signal (wenn es dann das einzige ist).
Gast
#2027123
df1as schrieb: > Was ist an der Kombinatorik für ein neues Clock-Signal so 'übel'? Es gibt 2 Gründe: - Clock Skew. In Clock-Netzwerken sind die Leitungen schön ausbalanciert und mit starken Treibern versehen, so dass das Clocksignal überall gleichzeitig ankommt und eine Steile Flanke aufweist. - Hazards: Logikschaltungen können bei einer Änderung am Eingang mehrere Flanken am Ausgang erzeugen. Dadurch hast du also mehrere Taktsignale. (Genaueres findest du sicher in der Wikipedia.) df1as schrieb: > Das Clock-Enable wird meist nicht über ein Clock-Netz verteilt. Ist zwar > auch unkritisch, weil es fast eine ganze Clock-Periode Skew haben darf, Warnung: Das spielt überhaupt keine Rolle bzw. hilft hier gar nicht! Beispiel Schieberegister: --- FF(1) --- FF(2) --- FF(3) Bei der Taktflanke übernimmt also jedes Flipflop die Daten, die am Ausgang seines Vorgängers anliegen. Wenn der Clock Skew zu gross ist, und somit Flipflop(2) seinen Takt deutlich nach Flipflop(1) bekommt, dann ist es gut möglich, dass Flipflop(1) seinen Eingang bereits übernommen und an den Ausgang weitergeleitet hat. Flipflop(2) übernimmt dann also sogar schon Daten, die am Anfang der Taktperiode noch am Eingang von Flipflop(1) lagen. (Stichwort: Contamination Delay)
Gast
#2027129
modem schrieb: > df1as schrieb: >> Das Clock-Enable wird meist nicht über ein Clock-Netz verteilt. Ist zwar >> auch unkritisch, weil es fast eine ganze Clock-Periode Skew haben darf, Moment...da habe ich ungenau gelesen. Meine Antwort bezieht sich auf 'Clock' und nicht 'Clock-Enable', sorry ;-)
df1as schrieb: > Das Clock-Enable wird meist nicht über ein Clock-Netz verteilt. Kein Clock-Enable wird über Taktnetze verteilt. Denn Taktnetze sind für Takte da... > verbraucht aber ggf. auch mehr Ressourcen (je nach Fan-out) Davon hat das FPGA genug... ;-) > als eine kleine, nur einmal vorhandene Kombinatorik für > ein neues Clock-Signal (wenn es dann das einzige ist). Die allerdings dann garantiert nicht mehr protabel ist, und mit üblen Effekten von Glitches bis Spikes daherkommt, und daher auch von der Toolchain nicht mehr sauber verwaltet werden kann... Sowas mache ich nur, wenn mir das Wasser bis Unterkante Oberlippe steht. Und das war bisher genau 1 mal... ;-)
Gast
#2027206
Üble Effekte, Glitches, Spikes? Keiner sagt, dass man es falsch machen soll! Und was soll dabei nicht "portabel" sein? Kann man doch relativ übersichtlich und geschwind in VHDL dahinschreiben. Mit VHDL wären das ein paar übersichtliche Zeilen, als Schematic zusammen eine Handvoll FF und Gatter. Kaum aufwändiger als der Bis-fünf-Zähler, der ein CKE generiert, das mit kaum Hold-Time daherkommt und an sämtliche (!) angeschlossenen Speicherelemente mit verteilt werden muss. Den Bis-fünf-Zähler braucht man in ähnlicher Form natürlich sonst auch, das muss aber auch kein Binärzähler sein. Besser wäre hier z. B. ein Johnson-Counter, dessen Ausgänge direkt kombinatorisch beliebig (und immer glitchfrei!) verküpft werden können. Man kann immer ein von einem Speicherelement erzeugtes Signal auf der richtigen Seite und mit der passenden Logik mit dem Ursprungs-Clock vergattern, ohne dass es Glitch gibt. Wenn das nicht ginge, könnte man gar keine Speicherelemente bauen. Die Wirkung kommt zum Glück nie vor der Ursache. Synchron tut ja ganz gut, aber man kann es auch mal schnell falsch verstehen. Ich sehe in einem generierten Clock nur den einen Nachteil, wenn nämlich BEIDE Clocks (hier 20 MHz UND 16 MHz) verwendet werden müssen. Ansonsten vereinfachte sich die ganze Geschichte sogar.
Gast
#2028160
df1as schrieb: > Ich sehe in einem generierten Clock nur den einen Nachteil, Also wie gesagt: Clock muss über ein Clock-Netz verteilt werden, ansonsten handelt man sich die von mir oben genannten Probleme mit Skew und verletztem Contamination Delay ein. Wenn man sehr genau weiss, was man tut, dann kann man Clock kombinatorisch verschalten bzw. erzeugen. "Gated Clock" kennen wir ja beispielsweise auch von Prozessoren, die einen Teil ihrer Logik bei Nichtbenutzung auschalten können. Aber man sollte sich dann im Minimum vergewissern, dass keine Spikes, Glitches etc. auftreten können, und zwar bis hinunter zu den Details der Synthese.
Gast
#2028811
Ja wie? Generierte Clocks können etwa NICHT in ein Clock-Netz eingespeist werden? Merkwürdig, sehr merkwürdig ...
Gast
#2028817
DCM und fertig! Ein Takt ist ein Takt und kein Enable wie oben diskutiert wird.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.