Taktumschaltung für 6 Takte

Gast #3695040
Ich bekomme 6 verschiedene Datenströme, die statisch umgeschaltet werden 
sollen (und dürfen), womit Glitches erlaubt wären, weil sie nicht 
stören. Die Takte sind leider nicht gleichen Formats und müssen auf eine 
von 2 PLLs übersetzt werden. Dazu muss ich der einen PLL einen von 6 
Takten zuweisen und der anderen einen der ersten 3.

Wie mache ich das am Einfachsten? Bei 3 Takten hatte ich bisher 2 
BUFGMUX verwendet, die in Reihe liegen. (X,Y,Z) Für 6 Eingänge bräuchte 
ich aber 5 Stück!

X = A / B
Y = C / D
Z = E / F

U = X / Y
V = U / Z

Geht das einfacher?
Gast
Leider müssen die Takte so umgeschaltet werden, weil es im Betrieb zu 
erfolgen hat.
Das Einsynchronisieren der Daten wird ohnehin gemacht, aber das Ausgeben 
muss eben mit dem Takt laufen, der von aussen gewählt wird.
Daher klappt es auch nicht, eine Ausgangs-PLL zu nehmen und diese 
umzuprogrammieren.
Gast
Frank Petelka schrieb:
> aber das Ausgeben
> muss eben mit dem Takt laufen, der von aussen gewählt wird
Geht es, wenn Du für die Takte einen Multiplexer nimmst, dessen Ausgang 
auf einen BUFG und damit noch ein asynchronses FIFO für die 
Ausgangsdaten betreibst?

Duke
Gast
Duke Scarring schrieb:
> Frank Petelka schrieb:
>> aber das Ausgeben
>> muss eben mit dem Takt laufen, der von aussen gewählt wird
> Geht es, wenn Du für die Takte einen Multiplexer nimmst, dessen Ausgang
> auf einen BUFG und damit noch ein asynchronses FIFO für die
> Ausgangsdaten betreibst?
Sicher, das ginge von der Funktion her, warum? Wie sähe dann eine 
verbesserte Lösung aus?

Schlumpf schrieb:
> Von welchen Frequenzen reden wir denn da bei den Takten?
Bis 125 MHz, einmal auch 133MHz werden es wohl.
Gast
Frank Petelka schrieb:
> Sicher, das ginge von der Funktion her, warum?
Weil Du dann mit zwei Takten auskommst:
1. der interne Prozessingtakt
2. der extern Datentakt

Am Eingang und am Ausgang kommt ein asynchrones FIFO hin, welches 
zwischen den Takten wandelt. Deine verschiedenen externen Takte gehen 
auf einen einfachen Multiplexer und erst danach auf einen BUFG und damit 
in das globale Taktnetz.

Es entfällt der Aufwand die Taktumschaltung mit den Taktressourcen des 
FPGAs abzubilden.

Duke
Gast
So wie ich es jetzt verstanden habe, liegen alle diese Takte im Chip 
vor, richtig? Oder werden diese von außen angelegt?

Falls sie intern vorliegen, dann würde ich den internen Teil deines 
Designs, welches mit einem fixen Systemtakt läuft, über einen FIFO mit 
dem Ausgabeteil verbinden. Den Takt für diesen Ausgabeteil kannst du 
über Multiplexer umschalten. Natürlich geht dabei die Phasenlage 
"verloren", aber das stört nicht, da dieser Teil sowieso vom Rest des 
Designs über einen FIFO entkoppelt ist. Sprich: Der FIFO sorgt eh dafür, 
dass sowohl Takt als auch Phase zwischen Eingang und Ausgang des FIFOs 
unerheblich ist.
Der Synthesizer sollte damit auch kein Problem haben.
Du musst halt dafür sorgen, dass das FIFO samt Steuerung so ausgelgt 
ist, dass es bei allen Takten der Ausgabeeinheit zuverlässig 
funktioniert.
Also Steuersignale lange genug anliegen, dass sie auf jeden Fall von 
jedem gewählten Ausgangstakt sicher abgetastet werden können und den 
FIFO so groß wählen, dass selbst bei ungünstigsten Verhältnissen 
zwischen Quell- und Ziel-Takt kein Over- oder Underrun auftreten kann.
Aber dann sollte das meines Erachtens zuverlässig funktionieren.
Gast
Schlumpf schrieb:
> So wie ich es jetzt verstanden habe, liegen alle diese Takte im Chip
> vor, richtig? Oder werden diese von außen angelegt?
Nein, die kommen von aussen und ich kann / muss mich darauf 
synchronisieren.


> Falls sie intern vorliegen, dann würde ich den internen Teil deines
> Designs, welches mit einem fixen Systemtakt läuft, über einen FIFO mit
> dem Ausgabeteil verbinden.
Sowas habe ich schon. Ich kann eigentlich an jeder Stelle auf den 
Zielausgangstakt überwechseln. Meistens brauche ich ein paar Register.

Das Problem ist der Takt selber, mit dem dann die Geschichte läuft:

Der kommt aus einer der inputs und es muss schaltbar sein, von wem.

Wenn ich die Schaltung das nächste mal überarbeite, mache ich einen 
externen Clock-MUX dran.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 12 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.