mikrocontroller.net

Forum: FPGA, VHDL & Co. 2 Takte miteinander syncronisieren


Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich benutze wie so viele hier einen Spartan 3. Ich habe heute schon den 
ganzen tag über mein Problem nachgedacht und inzwischen ein Knoten im 
Kopf.

Ich habe einen Counter den mit dem CLK 1 erhöhe. Die Geschwindkeit von 
CLK 1 hängt steht noch nicht 100% fest. Kann also zwischen 1MHz und 
20MHz liegen. Dies ist der Takt von meinem externen ADC-Wandler.

Nun habe ich einen weiteren Clock. Nennen wir diesen doch einfach CLK_2. 
Dieser arbeitet mit einer 2. Frequenz. Mit dem Clock 2 wird ebenfalls 
ein Counter um 1 erhöht. Da die beiden Clocks von externen Quellen 
kommen ist die Phasenlage nicht bekannt.

Nun möchte ich einen Programmcode ausführen wenn die beiden Counter 
ungleich sind. Jedoch habe ich da so einige Bendenken (leider bringt 
hiert kein DCM etwas nur wenn ich die Platine neue ROuten lasse, dies 
ist momentan aber nicht möglich)

Meine Bendenken äußern sich wie folgt.

Wenn mit CLK 1_ Counter 1 erhöht wird dann wird mit der ansteigenden 
Flanke von CLK_2 der COUNTER 1 mit COUNTER 2 verglichen. Wenn die beiden 
Counter ungleich sind dann führe eine Funktion aus und erhöhe den 
anschließend den COUNTER_2.

Nun kann es sein das die Phasenlage der beiden Counter so bescheiden 
zueinander liegt das ich den Vergleich gerade während des Schalten 
ausführe und somit einen undefinierten Zustand erwische.

Gibt es eine Möglichkeit dies zu verschalten?

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Martin schrieb:
> Gibt es eine Möglichkeit dies zu verschalten?
Vergleiche die beiden Zähler kombinatorisch und synchronisiere das 
Vergleichsergenbis über die obligatorischen 2 FF auf den Arbeitstakt 
ein.

Bei relativ niedrigen Frequenzen (<<300MHz) reicht hier auch 1 FF... ;-)

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Martin (Gast)

>CLK 1 hängt steht noch nicht 100% fest. Kann also zwischen 1MHz und
>20MHz liegen. Dies ist der Takt von meinem externen ADC-Wandler.

Also eher langsam.

>Nun habe ich einen weiteren Clock. Nennen wir diesen doch einfach CLK_2.
>Dieser arbeitet mit einer 2. Frequenz. Mit dem Clock 2 wird ebenfalls
>ein Counter um 1 erhöht. Da die beiden Clocks von externen Quellen
>kommen ist die Phasenlage nicht bekannt.

Also klassich asynchron.

>Wenn mit CLK 1_ Counter 1 erhöht wird dann wird mit der ansteigenden
>Flanke von CLK_2 der COUNTER 1 mit COUNTER 2 verglichen. Wenn die beiden
>Counter ungleich sind dann führe eine Funktion aus und erhöhe den
>anschließend den COUNTER_2.

Das solltest du mal ganz schnell vergessen.

>Nun kann es sein das die Phasenlage der beiden Counter so bescheiden
>zueinander liegt das ich den Vergleich gerade während des Schalten
>ausführe und somit einen undefinierten Zustand erwische.

Eben.

>Gibt es eine Möglichkeit dies zu verschalten?

Ja. Das ist ein klassisches Problem, wie es in asynchronen FIFOs 
auftaucht. Du musst einen Zähler von binär in Gray umwandlen, das geht 
recht einfach. Diesen musst du dann mit dem anderen Takt abtasten. Dabei 
machst du maximal einen Fehler von +/-1 Schritt.

@  Lothar Miller (lkmiller) Benutzerseite

>Vergleiche die beiden Zähler kombinatorisch und synchronisiere das
>Vergleichsergenbis über die obligatorischen 2 FF auf den Arbeitstakt
>ein.

>Bei relativ niedrigen Frequenzen (<<300MHz) reicht hier auch 1 FF... ;-)

Wenn das mal kein Irrtum ist! Das geht bestenfalls für ein ECHTES 1 Bit 
Signal, aber nie und nimmer für ein mehrbittiges Signal. Und der 
Vergleicher verarbeitet solche mehrbittigen Signale. Siehe meine 
Kommentare oben.

MFG
Falk

P S Wenn das 2. Taktsignal deutlich langsamer als dein ADC-Takt ist, 
sprich Faktor 4 und mehr, kann man es einfach abtasten und in ein Clock 
Enable überführen. Damit kann man dann vollkommen sauber einen zweiten 
Zähler takten und den Vergleich einfach so machen. Siehe auch [[Taktung 
FPGA/CPLD]].

Autor: Segor (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wieso Faktor 4?

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Segor (Gast)

>Wieso Faktor 4?

Der Sicherheit wegen. Rein theoretisch reicht es, ein Taktsignal mit 50% 
Tastverhältnis mit der doppelten Frequenz abzutasten, da erwischt man 
THEORETISCH immer abwechselnd ein HIGH und ein LOW. Praktisch ist das 
aber zu unsicher, deshalb besser 4x pro Periode abtasten.

MFG
Falk

Autor: Segor (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Meines Erachtens reicht 2,1.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Segor (Gast)

>Meines Erachtens reicht 2,1.

Schon mal was von einer Schwebung gehört? Und davon, dass viele Takte 
keine 50% Tastverhältnisse haben?

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.