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?
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... ;-)
@ 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]].
@ 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
@ 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.