mikrocontroller.net

Forum: FPGA, VHDL & Co. 0-20kHz Takt verdoppeln bzw. vervierfachen


Autor: Bustle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe einen variablen Eingangstakt 0-20kHz an meinem FPGA (XC3S1000). 
Diesen Takt möchte ich gerne verdoppeln. Kann ich dies über ein DCM 
sinnvoll machen? Auch wenn ich kein konstanten Grundtakt habe?

Auch liegt das Taktsignal nicht an einem Clk-Eingang sondern "nur" an 
einem gewöhnlichen IO...

Gruß, Bustle

Autor: Bernd G. (Firma: LWL flex SSI) (berndg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein geht nicht, der DCM braucht min 1 MHz am Eingang (Referenzebene des 
Phasendetektors). Der VCO gibt min. 18 MHz raus. Siehe hierzu UG 331 und 
XAPP 462 von Xilinx.

Gruß, Bernd

Autor: Bustle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke für die schnelle Auskunft... muss ich es doch irgendwie in Logik 
schreiben.

Autor: Morin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
0-20 kHz ist normalerweise für einen FPGA Pillepalle, weil der 
Systemtakt viel höher liegt. Wenn du sagen wir 10 MHz Systemtakt hast, 
dann entspricht der ext. Takt mindestens 500 Clockzyklen je Periode.

Also kannst du folgenden Ablauf nehmen:

- ein genügend breiter Zähler wird bei jeder Flanke (pos oder neg) des 
ext. Takts auf 0 gesetzt und zählt ab da Systemtaktperioden. Außerdem 
wird vor dem Rücksetzen der halbe Zählerwert (alle Bits bis auf das 
unterste) in ein Register kopiert.
- beim Zähler-Reset wird ein Flag-Register "Halbzeit" genullt. Dieses 
Flag wird gesetzt, sobald der Zähler und der Registerinhalt gleich sind. 
Das Halbzeit-Flag wird als verdoppelter Takt ausgegeben.

Einziges Problem sind zu lange oder zu kurze Pegel wenn sich der ext. 
Takt ändert. Das kann z.B. zu einem zu kurzen 1-Peak des verdoppelten 
Takts führen. Das Problem überlasse ich mal deiner Kreativität :)

Autor: Bustle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auf diese Weise habe ich es bereits gelöst, aber wie du schon erkannt 
hast gibt es bei Probleme bei starken und schnellen Änderung des 
externen Taktes...

Autor: Morin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Idee: Bau eine Erkennung für zu schnelle Wechsel ein. Beim Reset des 
Zählers wird außerdem ein Flag resettet das "ausreichende Pulsbreite" 
bedeutet. Sobald der Zähler einen bestimmten Wert erreicht (*) wird 
dieses Flag auf 1 gesetzt. Die Schwelle für den Zähler wird so bestimmt, 
dass ein entsprechender 0- oder 1-Puls breit genug ist, um als Clockpuls 
zu dienen. Wenn bei der nächsten Flanke des ext. Takts das Flag noch 
nicht gesetzt ist, dann wird das Ausgabetakt für die nächste Periode 
angehalten, damit der Puls breit genug wird.

Das setzt immer noch voraus, dass sich die Häufigkeit der Änderungen ein 
gutes Stück unter der ext. Taktrate selbst bewegt. Ansonsten wird du 
kaum drumrum kommen die Erkennung der ext. Taktrate und die Erzeugung 
des doppelten Takts zu trennen; dazwischen liegt dann die ext. Taktrate 
als numerischer Wert vor, den du Tiefpassfiltern kannst um zu schnelle 
Änderungen in der Taktrate einfach abzufangen.

(*) wenn du die erwartete minimale Pulsbreite nach oben schiebst bist du 
auf der sicheren Seite und kannst die Schwellenerkennung auf die Abfrage 
von einem oder wenigen Zählerbits reduzieren -> weniger Logik.

Autor: Bustle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke Morin für die ausführliche Antwort. Bin nun aber doch dazu 
übergegangen die externe Hardware zu ändern, so dass ich einen doppelten 
Takt von vorneweg rein bekomme. War zwar auch kompliziert dies 
umzusetzen, ist aber wenigstens eine saubere Lösung.

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.