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


von Martin (Gast)


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?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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... ;-)

von Falk B. (falk)


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]].

von Segor (Gast)


Lesenswert?

Wieso Faktor 4?

von Falk B. (falk)


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

von Segor (Gast)


Lesenswert?

Meines Erachtens reicht 2,1.

von Falk B. (falk)


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?

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
Noch kein Account? Hier anmelden.