0-20kHz Takt verdoppeln bzw. vervierfachen

Gast #807218
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
Gast #807283
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 :)
Gast #807552
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.
Gast #807705
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren